Module: ActiveSupport::Dependencies::Loadable

Defined in:
lib/active_support/dependencies.rb

Overview

Object includes this module.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.exclude_from(base) ⇒ Object


202
203
204
# File 'lib/active_support/dependencies.rb', line 202

def self.exclude_from(base)
  base.class_eval { define_method(:load, Kernel.instance_method(:load)) }
end

Instance Method Details

#load(file, wrap = false) ⇒ Object


239
240
241
242
243
# File 'lib/active_support/dependencies.rb', line 239

def load(file, wrap = false)
  result = false
  load_dependency(file) { result = super }
  result
end

#load_dependency(file) ⇒ Object


228
229
230
231
232
233
234
235
236
237
# File 'lib/active_support/dependencies.rb', line 228

def load_dependency(file)
  if Dependencies.load? && ActiveSupport::Dependencies.constant_watch_stack.watching?
    Dependencies.new_constants_in(Object) { yield }
  else
    yield
  end
rescue Exception => exception  # errors from loading file
  exception.blame_file! file if exception.respond_to? :blame_file!
  raise
end

#require(file) ⇒ Object


245
246
247
248
249
# File 'lib/active_support/dependencies.rb', line 245

def require(file)
  result = false
  load_dependency(file) { result = super }
  result
end

#require_dependency(file_name, message = "No such file to load -- %s") ⇒ Object

Interprets a file using mechanism and marks its defined constants as autoloaded. file_name can be either a string or respond to to_path.

Use this method in code that absolutely needs a certain constant to be defined at that point. A typical use case is to make constant name resolution deterministic for constants with the same relative name in different namespaces whose evaluation would depend on load order otherwise.


219
220
221
222
223
224
225
226
# File 'lib/active_support/dependencies.rb', line 219

def require_dependency(file_name, message = "No such file to load -- %s")
  file_name = file_name.to_path if file_name.respond_to?(:to_path)
  unless file_name.is_a?(String)
    raise ArgumentError, "the file name must either be a String or implement #to_path -- you passed #{file_name.inspect}"
  end

  Dependencies.depend_on(file_name, message)
end

#require_or_load(file_name) ⇒ Object


206
207
208
# File 'lib/active_support/dependencies.rb', line 206

def require_or_load(file_name)
  Dependencies.require_or_load(file_name)
end

#unloadable(const_desc) ⇒ Object

Mark the given constant as unloadable. Unloadable constants are removed each time dependencies are cleared.

Note that marking a constant for unloading need only be done once. Setup or init scripts may list each unloadable constant that may need unloading; each constant will be removed for every subsequent clear, as opposed to for the first clear.

The provided constant descriptor may be a (non-anonymous) module or class, or a qualified constant name as a string or symbol.

Returns true if the constant was not previously marked for unloading, false otherwise.


264
265
266
# File 'lib/active_support/dependencies.rb', line 264

def unloadable(const_desc)
  Dependencies.mark_for_unload const_desc
end