module ActiveSupport::Autoload
Модуль Active Support Autoload
Autoload и удобства ленивой загрузки для вашей библиотеки.
Этот модуль позволяет определять ленивую загрузку, следуя соглашениям Rails (т.е. нет необходимости определять путь, он автоматически определяется на основе имени файла) и также определять набор констант, которые необходимо загрузить сразу:
module MyLib
extend ActiveSupport::Autoload
autoload :Model
eager_autoload do
autoload :Cache
end
end
Затем вашу библиотеку можно загрузить сразу, просто вызвав:
MyLib.eager_load!
Открытые методы экземпляров
# File activesupport/lib/active_support/dependencies/autoload.rb, line 42
def autoload(const_name, path = @_at_path)
unless path
full = [name, @_under_path, const_name.to_s].compact.join("::")
path = Inflector.underscore(full)
end
if @_eager_autoload
@_eagerloaded_constants ||= []
@_eagerloaded_constants << const_name
end
super const_name, path
end Вызывает метод суперкласса
# File activesupport/lib/active_support/dependencies/autoload.rb, line 63 def autoload_at(path) @_at_path, old_path = path, @_at_path yield ensure @_at_path = old_path end
# File activesupport/lib/active_support/dependencies/autoload.rb, line 56 def autoload_under(path) @_under_path, old_path = path, @_under_path yield ensure @_under_path = old_path end
# File activesupport/lib/active_support/dependencies/autoload.rb, line 70 def eager_autoload old_eager, @_eager_autoload = @_eager_autoload, true yield ensure @_eager_autoload = old_eager end
# File activesupport/lib/active_support/dependencies/autoload.rb, line 77
def eager_load!
if @_eagerloaded_constants
@_eagerloaded_constants.each { |const_name| const_get(const_name) }
@_eagerloaded_constants = nil
end
end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.