Sha256: 99279d67bcdf5f079170372b7785cdbf9910ead88ab4004427bece568743e0d0

Contents?: true

Size: 897 Bytes

Versions: 16

Compression:

Stored size: 897 Bytes

Contents

module MoneyAccessor
  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods
    def money_accessor(*columns)
      variable_get = self <= Struct ? :[]  : :instance_variable_get
      variable_set = self <= Struct ? :[]= : :instance_variable_set

      Array(columns).flatten.each do |name|
        variable_name = self <= Struct ? name : "@#{name}"

        define_method(name) do
          value = public_send(variable_get, variable_name)
          value.blank? ? nil : Money.new(value)
        end

        define_method("#{name}=") do |value|
          if value.blank? || !value.respond_to?(:to_money)
            public_send(variable_set, variable_name, nil)
            nil
          else
            money = value.to_money
            public_send(variable_set, variable_name, money.value)
            money
          end
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
shopify-money-0.14.1 lib/money_accessor.rb
shopify-money-0.14.0 lib/money_accessor.rb
shopify-money-0.13.1 lib/money_accessor.rb
shopify-money-0.13.0 lib/money_accessor.rb
shopify-money-0.12.0 lib/money_accessor.rb
shopify-money-0.11.9 lib/money_accessor.rb
shopify-money-0.11.8 lib/money_accessor.rb
shopify-money-0.11.7 lib/money_accessor.rb
shopify-money-0.11.6 lib/money_accessor.rb
shopify-money-0.11.5 lib/money_accessor.rb
shopify-money-0.11.4 lib/money_accessor.rb
shopify-money-0.11.3 lib/money_accessor.rb
shopify-money-0.11.2 lib/money_accessor.rb
shopify-money-0.11.1 lib/money_accessor.rb
shopify-money-0.11.0 lib/money_accessor.rb
shopify-money-0.10.0 lib/money_accessor.rb