class ActiveShipping::Correios::CorreiosResponse

Public Class Methods

new(request, raw_xmls) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 162
def initialize(request, raw_xmls)
  @request = request
  @raw_xmls = raw_xmls
  @documents = raw_xmls.map { |xml| Nokogiri::XML(xml) }
end

Public Instance Methods

rate_response() click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 168
def rate_response
  @rates = rates
  CorreiosRateResponse.new(true, nil, params_options, response_options)
rescue => error
  CorreiosRateResponse.new(false, error.message, {}, response_options)
end

Private Instance Methods

create_rate_estimate(rate_hash) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 208
def create_rate_estimate(rate_hash)
  RateEstimate.new(@request.origin, @request.destination, Correios.name, AVAILABLE_SERVICES[rate_hash[:service_code]], rate_hash)
end
error?(xml_item) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 212
def error?(xml_item)
  error_id = error_id(xml_item)
  !error_id.empty? && error_id != "0"
end
error_id(xml_item) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 217
def error_id(xml_item)
  xml_item.css('Erro').text
end
error_message(xml_item) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 221
def error_message(xml_item)
  xml_item.css('MsgErro').text
end
normalized_services() click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 189
def normalized_services
  services = @documents.map { |document| document.root.elements }.flatten
  services = services.group_by do |service_xml|
    raise(error_message(service_xml)) if error?(service_xml)
    service_code(service_xml)
  end
end
params_options() click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 185
def params_options
  { :responses => @documents }
end
price(xml_item) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 229
def price(xml_item)
  xml_item.css('Valor').text.gsub(',', '.').to_f
end
rates() click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 204
def rates
  rates_array.map { |rate_hash| create_rate_estimate(rate_hash) }
end
rates_array() click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 197
def rates_array
  services = normalized_services.map do |service_id, elements|
    total_price = elements.sum { |element| price(element) }
    { :service_code => service_id, :total_price => total_price, :currency => "BRL" }
  end
end
response_options() click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 177
def response_options
  {
    :rates => @rates,
    :raw_responses => @raw_xmls,
    :urls => @request.urls
  }
end
service_code(xml_item) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 225
def service_code(xml_item)
   xml_item.css('Codigo').text.to_i
end