Sha256: 023739bc562a9010696b77ddaab03c0690020d0c5a5e537437719c431a08c2fa

Contents?: true

Size: 1002 Bytes

Versions: 116

Compression:

Stored size: 1002 Bytes

Contents

require_dependency 'spree/calculator'

module Spree
  class Calculator::TieredFlatRate < Calculator
    preference :base_amount, :decimal, default: 0
    preference :tiers, :hash, default: {}

    before_validation do
      # Convert tier values to decimals. Strings don't do us much good.
      if preferred_tiers.is_a?(Hash)
        self.preferred_tiers = Hash[*preferred_tiers.flatten.map(&:to_f)]
      end
    end

    validate :preferred_tiers_content

    def self.description
      Spree.t(:tiered_flat_rate)
    end

    def compute(object)
      base, amount = preferred_tiers.sort.reverse.detect{ |b,_| object.amount >= b }
      amount || preferred_base_amount
    end

    private
    def preferred_tiers_content
      if preferred_tiers.is_a? Hash
        unless preferred_tiers.keys.all?{ |k| k.is_a?(Numeric) && k > 0 }
          errors.add(:base, :keys_should_be_positive_number)
        end
      else
        errors.add(:preferred_tiers, :should_be_hash)
      end
    end
  end
end

Version data entries

116 entries across 116 versions & 3 rubygems

Version Path
goca-spree-core-3.1.14.rails.5.0.1 app/models/spree/calculator/tiered_flat_rate.rb
goca-spree-core-3.1.14.rails.5.0 app/models/spree/calculator/tiered_flat_rate.rb
goca-spree-core-3.1.15.rails.5.0 app/models/spree/calculator/tiered_flat_rate.rb
goca-spree-core-3.1.15.pre.rails.pre.5.0 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.2.9 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.1.14 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.3.6 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.2.8 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.1.13 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.3.5 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.3.4 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.2.7 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.1.12 app/models/spree/calculator/tiered_flat_rate.rb
solidus_core-1.2.3 app/models/spree/calculator/tiered_flat_rate.rb
solidus_core-1.1.4 app/models/spree/calculator/tiered_flat_rate.rb
solidus_core-1.0.7 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.3.3 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.2.6 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.1.11 app/models/spree/calculator/tiered_flat_rate.rb
spree_core-3.1.10 app/models/spree/calculator/tiered_flat_rate.rb