Sha256: 5bd13ffa9df7143dd9d0038dc679185b9c06e246312e28d8a2d32cca2ff3d7a8

Contents?: true

Size: 1.52 KB

Versions: 11

Compression:

Stored size: 1.52 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)
            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

11 entries across 11 versions & 1 rubygems

Version Path
property_sets-3.1.1 lib/property_sets/delegator.rb
property_sets-3.1.0 lib/property_sets/delegator.rb
property_sets-3.0.0 lib/property_sets/delegator.rb
property_sets-2.10.0 lib/property_sets/delegator.rb
property_sets-2.9.1 lib/property_sets/delegator.rb
property_sets-2.9.0 lib/property_sets/delegator.rb
property_sets-2.8.0 lib/property_sets/delegator.rb
property_sets-2.7.0 lib/property_sets/delegator.rb
property_sets-2.6.0 lib/property_sets/delegator.rb
property_sets-2.5.0 lib/property_sets/delegator.rb
property_sets-2.4.0 lib/property_sets/delegator.rb