Module: ActiveSupport::Autoload

Included in:
ActiveSupport, NumberHelper
Defined in:
lib/active_support/dependencies/autoload.rb

Overview

Active Support Autoload

Autoload and eager load conveniences for your library.

This module allows you to define autoloads based on Rails conventions (i.e. no need to define the path it is automatically guessed based on the filename) and also define a set of constants that needs to be eager loaded:

module MyLib
  extend ActiveSupport::Autoload

  autoload :Model

  eager_autoload do
    autoload :Cache
  end
end

Then your library can be eager loaded by simply calling:

MyLib.eager_load!

Instance Method Summary collapse

Instance Method Details

#autoload(const_name, path = @_at_path) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/active_support/dependencies/autoload.rb', line 30

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

#autoload_at(path) ⇒ Object



51
52
53
54
55
56
# File 'lib/active_support/dependencies/autoload.rb', line 51

def autoload_at(path)
  @_at_path, old_path = path, @_at_path
  yield
ensure
  @_at_path = old_path
end

#autoload_under(path) ⇒ Object



44
45
46
47
48
49
# File 'lib/active_support/dependencies/autoload.rb', line 44

def autoload_under(path)
  @_under_path, old_path = path, @_under_path
  yield
ensure
  @_under_path = old_path
end

#eager_autoloadObject



58
59
60
61
62
63
# File 'lib/active_support/dependencies/autoload.rb', line 58

def eager_autoload
  old_eager, @_eager_autoload = @_eager_autoload, true
  yield
ensure
  @_eager_autoload = old_eager
end

#eager_load!Object



65
66
67
68
69
70
# File 'lib/active_support/dependencies/autoload.rb', line 65

def eager_load!
  if @_eagerloaded_constants
    @_eagerloaded_constants.each { |const_name| const_get(const_name) }
    @_eagerloaded_constants = nil
  end
end