Module: ActiveRecord::AttributeMethods::ClassMethods

Defined in:
activerecord/lib/active_record/attribute_methods.rb

Instance Method Summary collapse

Instance Method Details

#attribute_methods_generated?Boolean

Returns:

  • (Boolean)

18
19
20
# File 'activerecord/lib/active_record/attribute_methods.rb', line 18

def attribute_methods_generated?
  @attribute_methods_generated ||= false
end

#define_attribute_methodsObject

Generates all the attribute related methods for columns in the database accessors, mutators and query methods.


12
13
14
15
16
# File 'activerecord/lib/active_record/attribute_methods.rb', line 12

def define_attribute_methods
  return if attribute_methods_generated?
  super(column_names)
  @attribute_methods_generated = true
end

#defined_activerecord_methodsObject


42
43
44
45
46
47
48
# File 'activerecord/lib/active_record/attribute_methods.rb', line 42

def defined_activerecord_methods
  active_record = ActiveRecord::Base
  super_klass   = ActiveRecord::Base.superclass
  methods = (active_record.instance_methods - super_klass.instance_methods) +
            (active_record.private_instance_methods - super_klass.private_instance_methods)
  methods.map {|m| m.to_s }.to_set
end

#instance_method_already_implemented?(method_name) ⇒ Boolean

Checks whether the method is defined in the model or any of its subclasses that also derive from Active Record. Raises DangerousAttributeError if the method is defined by Active Record though.

Returns:

  • (Boolean)

Raises:


30
31
32
33
34
35
36
37
38
39
40
# File 'activerecord/lib/active_record/attribute_methods.rb', line 30

def instance_method_already_implemented?(method_name)
  method_name = method_name.to_s
  index = ancestors.index(ActiveRecord::Base) || ancestors.length
  @_defined_class_methods         ||= ancestors.first(index).map { |m|
    m.instance_methods(false) | m.private_instance_methods(false)
  }.flatten.map {|m| m.to_s }.to_set

  @@_defined_activerecord_methods ||= defined_activerecord_methods
  raise DangerousAttributeError, "#{method_name} is defined by ActiveRecord" if @@_defined_activerecord_methods.include?(method_name)
  @_defined_class_methods.include?(method_name)
end

#undefine_attribute_methods(*args) ⇒ Object


22
23
24
25
# File 'activerecord/lib/active_record/attribute_methods.rb', line 22

def undefine_attribute_methods(*args)
  super
  @attribute_methods_generated = false
end