Module: ActiveRecord::AttributeMethods::ClassMethods

Defined in:
lib/active_record/attribute_methods.rb

Instance Method Summary collapse

Instance Method Details

#define_attribute_methodsObject

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



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

def define_attribute_methods
  super(columns_hash.keys)
end

#defined_activerecord_methodsObject



27
28
29
30
31
32
33
34
# File 'lib/active_record/attribute_methods.rb', line 27

def defined_activerecord_methods
  active_record = ActiveRecord::Base
  super_klass   = ActiveRecord::Base.superclass
  methods =  active_record.public_instance_methods - super_klass.public_instance_methods
  methods += active_record.private_instance_methods - super_klass.private_instance_methods
  methods += active_record.protected_instance_methods - super_klass.protected_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:



19
20
21
22
23
24
25
# File 'lib/active_record/attribute_methods.rb', line 19

def instance_method_already_implemented?(method_name)
  method_name = method_name.to_s
  @_defined_class_methods         ||= ancestors.first(ancestors.index(ActiveRecord::Base)).sum([]) { |m| m.public_instance_methods(false) | m.private_instance_methods(false) | m.protected_instance_methods(false) }.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