class ReactiveShipping::AustraliaPost::CombinedResponse

Public Class Methods

new(origin, destination, packages, requests) click to toggle source
# File lib/reactive_shipping/carriers/australia_post.rb, line 74
def initialize(origin, destination, packages, requests)
  @requests    = requests
  @origin      = origin
  @destination = destination
  @packages    = packages
end

Public Instance Methods

options() click to toggle source
# File lib/reactive_shipping/carriers/australia_post.rb, line 81
def options
  {
    rates:         rates,
    raw_responses: @requests.map(&:raw_response),
    request:       @requests.map(&:url)
  }
end
params() click to toggle source
# File lib/reactive_shipping/carriers/australia_post.rb, line 89
def params
  {
    responses: @requests.map(&:response)
  }
end

Private Instance Methods

rate_options(rates) click to toggle source
# File lib/reactive_shipping/carriers/australia_post.rb, line 97
def rate_options(rates)
  {
    service_name:       rates.first[:service_name],
    service_code:       rates.first[:service_code],
    total_price:        rates.sum { |rate| rate[:total_price] },
    currency:           'AUD',
    delivery_time_text: rates.first[:delivery_time_text]
  }
end
rates() click to toggle source
# File lib/reactive_shipping/carriers/australia_post.rb, line 107
def rates
  rates = @requests.map(&:rates).flatten

  rates.group_by { |rate| rate[:service_name] }.map do |service_name, service_rates|
    next unless service_rates.size == @packages.size

    AustraliaPostRateEstimate.new(@origin, @destination, AustraliaPost.name, service_name, rate_options(service_rates))
  end.compact
end