Sha256: 7df2131d5751906123c342404cf688136cf06468bba445f269cc3189039d050e
Contents?: true
Size: 1.86 KB
Versions: 2
Compression:
Stored size: 1.86 KB
Contents
module ActiveRecord module ActsAsRelation module AccessMethods def define_acts_as_accessors(model_name) # The weird order of the if-else branches is so that we query ourselves # before we query our superclass. class_eval <<-EndCode, __FILE__, __LINE__ + 1 def read_attribute(attr_name, *args, &proc) if attribute_method?(attr_name) super(attr_name, *args) else #{model_name}.read_attribute(attr_name, *args, &proc) end end def attributes if #{model_name}.changed? || changed? @attributes = #{model_name}.attributes.merge(super) else @attributes ||= #{model_name}.attributes.merge(super) end end def attributes=(new_attributes) sub = new_attributes.select { |k,v| attribute_method?(k) } sup = new_attributes.select { |k,v| !attribute_method?(k) } super(sub) #{model_name}.attributes = sup end def touch(name = nil, *args, &proc) if attribute_method?(name.to_s) super(name, *args, &proc) else super(nil, *args, &proc) #{model_name}.touch(name, *args, &proc) end end def save(*args) super(*args) && #{model_name}.save(*args) end def save!(*args) super(*args) && #{model_name}.save!(*args) end private def write_attribute(attr_name, *args, &proc) if attribute_method?(attr_name.to_s) super(attr_name, *args) else #{model_name}.send(:write_attribute, attr_name, *args, &proc) end end EndCode end protected :define_acts_as_accessors end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
acts_as_relation-1.1.3 | lib/active_record/acts_as_relation/access_methods.rb |
acts_as_relation-1.1.2 | lib/active_record/acts_as_relation/access_methods.rb |