42 lines
853 B
Ruby
42 lines
853 B
Ruby
module PlanetExpressExpress
|
|
class Rules
|
|
def initialize(prices)
|
|
@lowest_s_price = prices.select { |k, v| k[1] == :S }.values.min
|
|
end
|
|
|
|
def apply_rules(shipments)
|
|
s_rule(shipments[:S])
|
|
l_rule(shipments[:L])
|
|
|
|
shipments
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :lowest_s_price
|
|
|
|
def l_rule(monthly_shipments)
|
|
monthly_shipments.each do |month|
|
|
lp_count = 0
|
|
month.each do |shipment|
|
|
next if shipment[:provider] != :LP
|
|
|
|
lp_count += 1
|
|
if lp_count == 3
|
|
shipment.discount = shipment.price
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def s_rule(monthly_shipments)
|
|
monthly_shipments.each do |month|
|
|
month.each do |shipment|
|
|
shipment.discount += shipment.price - lowest_s_price
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|