Sha256: fdac879dd6f9d43f6a514d27426211e8597778bf197c3618b04f3d8c3a2d7744

Contents?: true

Size: 1.67 KB

Versions: 2

Compression:

Stored size: 1.67 KB

Contents

module ActiveRecord
  module Extensions

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

    module ClassMethods
      # Assign a :currency (Money::Currency object) reader/writer for the given
      # field name.
      #
      # NOTES:
      # * Currency is identified by a 3-letter ISO code,
      # * Lookup is doen via Money::Currency.find(iso_code)
      def has_currency(*args)
        options = args.extract_options!
        attr_name = args.first || :currency

        field_name = "#{attr_name}_iso_code"

        composed_of attr_name, :class_name => "Money::Currency",
                    :mapping => [field_name, 'iso_code'],
                    :allow_nil => true,
                    :constructor => Proc.new{|value| Money::Currency.new(value) unless value.blank?}

        if Rails.version > '3'
          scope :for_currency, lambda{ |currency|
                               where(:currency_iso_code => currency.iso_code)
                             }
        else
          named_scope :for_currency, lambda{ |currency|
                                     {:conditions => {:currency_iso_code => currency.iso_code}}
                                   }
        end

        if options[:default]
          before_validation :set_default_currency
          class_eval <<-METHOD
          def set_default_currency
            self.currency ||= EnabledCurrency.base_currency
            true
          end
          METHOD
        end

        if options[:required]
          validates_presence_of :currency_iso_code
        end
      end

    end

  end
end

::ActiveRecord::Base.send(:include, MoneyField)
::ActiveRecord::Base.send(:include, ActiveRecord::Extensions)

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
money_extensions-0.1.0 lib/money_extensions/active_record/extensions.rb
money_extensions-0.0.2 lib/money_extensions/active_record/extensions.rb