module ActiveSupport::Autoload
def self.extended(base) # :nodoc:
def self.extended(base) # :nodoc: if RUBY_VERSION < "3" base.class_eval do @_autoloads = nil @_under_path = nil @_at_path = nil @_eager_autoload = false @_eagerloaded_constants = nil end end end
def autoload(const_name, path = @_at_path)
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
def autoload_at(path)
def autoload_at(path) @_at_path, old_path = path, @_at_path yield ensure @_at_path = old_path end
def autoload_under(path)
def autoload_under(path) @_under_path, old_path = path, @_under_path yield ensure @_under_path = old_path end
def eager_autoload
def eager_autoload old_eager, @_eager_autoload = @_eager_autoload, true yield ensure @_eager_autoload = old_eager end
def eager_load!
def eager_load! if @_eagerloaded_constants @_eagerloaded_constants.each { |const_name| const_get(const_name) } @_eagerloaded_constants = nil end end