Sha256: cda9fd7a17b752a04162b109b1b34b3ccdf6409cb1b5a99f9b955fda014b027c

Contents?: true

Size: 1.62 KB

Versions: 24

Compression:

Stored size: 1.62 KB

Contents

module Piggybak
  class ShippingMethod < ActiveRecord::Base
    has_many :shipping_method_values, :dependent => :destroy
    alias :metadata :shipping_method_values

    validates_presence_of :description
    validates_presence_of :klass

    accepts_nested_attributes_for :shipping_method_values, :allow_destroy => true

    validates_each :shipping_method_values do |record, attr, value|
      if record.klass.present?
        calculator = record.klass.constantize
        metadata_keys = value.collect { |v| v.key }.sort
        if calculator::KEYS.sort != metadata_keys
          if calculator::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 #{calculator::KEYS.join(', ')} for this shipping method."
          end
        end
      end
    end

    def klass_enum
      Piggybak.config.shipping_calculators
    end

    def self.available_methods(cart)
      active_methods = ShippingMethod.find_all_by_active(true)

      active_methods.select { |method| method.klass.constantize.available?(method, cart) }
    end

    def self.lookup_methods(cart)
      active_methods = ShippingMethod.find_all_by_active(true)

      active_methods.inject([]) do |arr, method|
        klass = method.klass.constantize
        if klass.available?(method, cart)
          rate = klass.rate(method, cart)
          arr << {
            :label => "#{method.description} $#{"%.2f" % rate}",
			:id => method.id,
            :rate => rate }
		end
        arr
      end
    end
    def admin_label
      self.description
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
piggybak-0.4.22 app/models/piggybak/shipping_method.rb
piggybak-0.4.21 app/models/piggybak/shipping_method.rb
piggybak-0.4.20 app/models/piggybak/shipping_method.rb
piggybak-0.4.19 app/models/piggybak/shipping_method.rb
piggybak-0.4.18 app/models/piggybak/shipping_method.rb
piggybak-0.4.17 app/models/piggybak/shipping_method.rb
piggybak-0.4.16 app/models/piggybak/shipping_method.rb
piggybak-0.4.15 app/models/piggybak/shipping_method.rb
piggybak-0.4.14 app/models/piggybak/shipping_method.rb
piggybak-0.4.13 app/models/piggybak/shipping_method.rb
piggybak-0.4.12 app/models/piggybak/shipping_method.rb
piggybak-0.4.11 app/models/piggybak/shipping_method.rb
piggybak-0.4.10 app/models/piggybak/shipping_method.rb
piggybak-0.4.9 app/models/piggybak/shipping_method.rb
piggybak-0.4.8 app/models/piggybak/shipping_method.rb
piggybak-0.4.7.1 app/models/piggybak/shipping_method.rb
piggybak-0.4.7 app/models/piggybak/shipping_method.rb
piggybak-0.4.6 app/models/piggybak/shipping_method.rb
piggybak-0.4.5 app/models/piggybak/shipping_method.rb
piggybak-0.4.4 app/models/piggybak/shipping_method.rb