Sha256: ae8f8f62305fb45a525a9e5564f6863983f0191c30c9bfe8f28c8a29e3a965a9

Contents?: true

Size: 1.43 KB

Versions: 25

Compression:

Stored size: 1.43 KB

Contents

module Piggybak 
  class PaymentMethod < ActiveRecord::Base
    has_many :payment_method_values, :dependent => :destroy
    alias :metadata :payment_method_values

    accepts_nested_attributes_for :payment_method_values, :allow_destroy => true

    validates_presence_of :klass
    validates_presence_of :description
    
    attr_accessible :active, :payment_method_values_attributes, :description,
                    :klass
    def klass_enum 
      Piggybak.config.payment_calculators
    end

    validates_each :payment_method_values do |record, attr, value|
      if record.klass
        payment_method = record.klass.constantize
        metadata_keys = value.collect { |v| v.key }.sort
        if payment_method::KEYS.sort != metadata_keys
          if payment_method::KEYS.empty?
            record.errors.add attr, "You don't need any metadata for this method."
          else
            record.errors.add attr, "You must define key values for #{payment_method::KEYS.join(', ')} for this payment method."
          end
        end
      end
    end
    validates_each :active do |record, attr, value|
      if value && PaymentMethod.find_all_by_active(true).select { |p| p != record }.size > 0
        record.errors.add attr, "You may only have one active payment method."
      end
    end

    def key_values
      self.metadata.inject({}) { |h, k| h[k.key.to_sym] = k.value; h }
    end

    def admin_label
      "#{self.description}"
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
piggybak-0.6.25 app/models/piggybak/payment_method.rb
piggybak-0.6.24 app/models/piggybak/payment_method.rb
piggybak-0.6.23 app/models/piggybak/payment_method.rb
piggybak-0.6.22 app/models/piggybak/payment_method.rb
piggybak-0.6.21 app/models/piggybak/payment_method.rb
piggybak-0.6.20 app/models/piggybak/payment_method.rb
piggybak-0.6.19 app/models/piggybak/payment_method.rb
piggybak-0.6.18 app/models/piggybak/payment_method.rb
piggybak-0.6.17 app/models/piggybak/payment_method.rb
piggybak-0.6.16 app/models/piggybak/payment_method.rb
piggybak-0.6.15 app/models/piggybak/payment_method.rb
piggybak-0.6.13 app/models/piggybak/payment_method.rb
piggybak-0.6.12 app/models/piggybak/payment_method.rb
piggybak-0.6.11 app/models/piggybak/payment_method.rb
piggybak-0.6.10 app/models/piggybak/payment_method.rb
piggybak-0.6.9 app/models/piggybak/payment_method.rb
piggybak-0.6.8 app/models/piggybak/payment_method.rb
piggybak-0.6.7 app/models/piggybak/payment_method.rb
piggybak-0.6.6 app/models/piggybak/payment_method.rb
piggybak-0.6.5 app/models/piggybak/payment_method.rb