class SolidusEasypost::Estimator

Public Instance Methods

shipping_rates(package, _frontend_only = true) click to toggle source
# File lib/solidus_easypost/estimator.rb, line 5
def shipping_rates(package, _frontend_only = true)
  easypost_rates = ShipmentBuilder.from_package(package).rates.sort_by(&:rate)

  shipping_rates = easypost_rates.map { |rate| build_shipping_rate(rate) }.compact
  shipping_rates.min_by(&:cost)&.selected = true

  shipping_rates
end

Private Instance Methods

build_shipping_rate(rate) click to toggle source
# File lib/solidus_easypost/estimator.rb, line 16
def build_shipping_rate(rate)
  shipping_method = shipping_method_selector.shipping_method_for(rate)
  return unless shipping_method.available_to_users?

  ::Spree::ShippingRate.new(
    name: "#{rate.carrier} #{rate.service}",
    cost: shipping_rate_calculator.compute(rate),
    easy_post_shipment_id: rate.shipment_id,
    easy_post_rate_id: rate.id,
    shipping_method: shipping_method,
  )
end
shipping_method_selector() click to toggle source
# File lib/solidus_easypost/estimator.rb, line 33
def shipping_method_selector
  @shipping_method_selector ||= SolidusEasypost.configuration.shipping_method_selector_class.new
end
shipping_rate_calculator() click to toggle source
# File lib/solidus_easypost/estimator.rb, line 29
def shipping_rate_calculator
  @shipping_rate_calculator ||= SolidusEasypost.configuration.shipping_rate_calculator_class.new
end