class FriendlyShipping::Services::ShipEngine::ParseRateEstimateResponse
Public Class Methods
call(response:, request:, options:)
click to toggle source
# File lib/friendly_shipping/services/ship_engine/parse_rate_estimate_response.rb, line 12 def call(response:, request:, options:) parsed_json = JSON.parse(response.body) rates = parsed_json.map do |rate| carrier = options.carriers.detect { |c| c.id == rate['carrier_id'] } next unless carrier shipping_method = FriendlyShipping::ShippingMethod.new( carrier: carrier, service_code: rate['service_code'] ) amounts = get_amounts(rate) FriendlyShipping::Rate.new( shipping_method: shipping_method, amounts: amounts, remote_service_id: rate['rate_id'], delivery_date: Time.parse(rate['estimated_delivery_date']), warnings: rate['warning_messages'], errors: rate['error_messages'] ) end.compact Success( ApiResult.new( rates, original_request: request, original_response: response ) ) end
Private Class Methods
get_amounts(rate_hash)
click to toggle source
# File lib/friendly_shipping/services/ship_engine/parse_rate_estimate_response.rb, line 45 def get_amounts(rate_hash) [:shipping, :other, :insurance, :confirmation].map do |name| currency = Money::Currency.new(rate_hash["#{name}_amount"]["currency"]) amount = rate_hash["#{name}_amount"]["amount"] * currency.subunit_to_unit [ name, Money.new(amount, currency) ] end.to_h end