Module: ActiveSupport::Dependencies::ModuleConstMissing

Defined in:
lib/active_support/dependencies.rb

Overview

Module includes this module.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.append_features(base) ⇒ Object

:nodoc:



161
162
163
164
165
166
167
168
169
# File 'lib/active_support/dependencies.rb', line 161

def self.append_features(base)
  base.class_eval do
    # Emulate #exclude via an ivar
    return if defined?(@_const_missing) && @_const_missing
    @_const_missing = instance_method(:const_missing)
    remove_method(:const_missing)
  end
  super
end

.exclude_from(base) ⇒ Object



171
172
173
174
175
176
# File 'lib/active_support/dependencies.rb', line 171

def self.exclude_from(base)
  base.class_eval do
    define_method :const_missing, @_const_missing
    @_const_missing = nil
  end
end

Instance Method Details

#const_missing(const_name) ⇒ Object



178
179
180
181
# File 'lib/active_support/dependencies.rb', line 178

def const_missing(const_name)
  from_mod = anonymous? ? guess_for_anonymous(const_name) : self
  Dependencies.load_missing_constant(from_mod, const_name)
end

#guess_for_anonymous(const_name) ⇒ Object

Dependencies assumes the name of the module reflects the nesting (unless it can be proven that is not the case), and the path to the file that defines the constant. Anonymous modules cannot follow these conventions and we assume therefore the user wants to refer to a top-level constant.



187
188
189
190
191
192
193
# File 'lib/active_support/dependencies.rb', line 187

def guess_for_anonymous(const_name)
  if Object.const_defined?(const_name)
    raise NameError, "#{const_name} cannot be autoloaded from an anonymous class or module"
  else
    Object
  end
end

#unloadable(const_desc = self) ⇒ Object



195
196
197
# File 'lib/active_support/dependencies.rb', line 195

def unloadable(const_desc = self)
  super(const_desc)
end