Sha256: acfa2236a2ebdc2dda1b094e448b453c647aa89404337d4e5ef8312ecf7e3e42
Contents?: true
Size: 1.57 KB
Versions: 2
Compression:
Stored size: 1.57 KB
Contents
module PropertySets module Delegator # methods for moving what was once a literal column on # to a property_set table. # # delegates read, write and query methods to the property record or the property default # # Examples # # # Migrate :is_open to the :settings property set, and rename it :open, # # and migrate :same to property set :same # include PropertySets::Delegator # delegate_to_property_set :settings, :is_open => :open, :same => :same # def self.included(base) base.extend(ClassMethods) end module ClassMethods def delegate_to_property_set(setname, mappings) raise "Second argument must be a Hash" unless mappings.is_a?(Hash) mappings.each do |old_attr, new_attr| define_method(old_attr) { send(setname).send(new_attr) } alias_method "#{old_attr}_before_type_cast", old_attr define_method("#{old_attr}?") { send(setname).send("#{new_attr}?") } define_method("#{old_attr}=") { |value| send(setname).send("#{new_attr}=", value) } define_method("#{old_attr}_changed?") do assoc = send(setname) return false unless assoc.loaded? setting = assoc.lookup_without_default(new_attr) if !setting false # Nothing has been set which means that the attribute hasn't changed elsif setting.new_record? assoc.default(new_attr) != setting.value else setting.value_changed? end end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
property_sets-3.2.1 | lib/property_sets/delegator.rb |
property_sets-3.2.0 | lib/property_sets/delegator.rb |