Class: Dependencies::LoadingModule
- Defined in:
- lib/active_support/dependencies.rb
Overview
LoadingModules implement namespace-safe dynamic loading. They support automatic loading via const_missing, allowing contained items to be automatically loaded when required. No extra syntax is required, as expressions such as Controller::Admin::UserController load the relavent files automatically.
Ruby-style modules are supported, as a folder named ‘submodule’ will load ‘submodule.rb’ when available.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#path ⇒ Object
readonly
Returns the value of attribute path.
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Class Method Summary collapse
Instance Method Summary collapse
-
#const_available?(name) ⇒ Boolean
Is this name present or loadable? This method is used by Routes to find valid controllers.
-
#const_load!(name, file_name = nil) ⇒ Object
Load the controller class or a parent module.
-
#const_missing(name) ⇒ Object
Load missing constants if possible.
-
#initialize(root, path = []) ⇒ LoadingModule
constructor
A new instance of LoadingModule.
- #load_paths ⇒ Object
Methods inherited from Module
#mattr_accessor, #mattr_reader, #mattr_writer
Constructor Details
#initialize(root, path = []) ⇒ LoadingModule
Returns a new instance of LoadingModule.
60 61 62 63 |
# File 'lib/active_support/dependencies.rb', line 60 def initialize(root, path=[]) @path = path.clone.freeze @root = root end |
Instance Attribute Details
#path ⇒ Object (readonly)
Returns the value of attribute path.
53 54 55 |
# File 'lib/active_support/dependencies.rb', line 53 def path @path end |
Class Method Details
.root(*load_paths) ⇒ Object
56 57 58 |
# File 'lib/active_support/dependencies.rb', line 56 def self.root(*load_paths) RootLoadingModule.new(*load_paths) end |
Instance Method Details
#const_available?(name) ⇒ Boolean
Is this name present or loadable? This method is used by Routes to find valid controllers.
94 95 96 |
# File 'lib/active_support/dependencies.rb', line 94 def const_available?(name) self.const_defined?(name) || load_paths.any? {|lp| lp.filesystem_path(path + [name])} end |
#const_load!(name, file_name = nil) ⇒ Object
Load the controller class or a parent module.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/active_support/dependencies.rb', line 73 def const_load!(name, file_name = nil) path = self.path + [file_name || name] load_paths.each do |load_path| fs_path = load_path.filesystem_path(path) next unless fs_path if File.directory?(fs_path) self.const_set name, LoadingModule.new(self.root, self.path + [name]) break elsif File.file?(fs_path) self.root.load_file!(fs_path) break end end return self.const_defined?(name) end |
#const_missing(name) ⇒ Object
Load missing constants if possible.
68 69 70 |
# File 'lib/active_support/dependencies.rb', line 68 def const_missing(name) const_load!(name) ? const_get(name) : super(name) end |