class Corraios::Calculator

Attributes

contract_number[RW]
contract_password[RW]

Public Class Methods

new(source, destination, packer) click to toggle source
# File lib/corraios/calculator.rb, line 9
def initialize(source, destination, packer)
  @source = source
  @destination = destination
  @packer = packer
end

Public Instance Methods

perform(*services) click to toggle source
# File lib/corraios/calculator.rb, line 15
def perform(*services)
  deliveries = calculate_services(*services)
  unify_deliveries(services, deliveries)
end

Private Instance Methods

calculate_container(query_string) click to toggle source
# File lib/corraios/calculator.rb, line 47
def calculate_container(query_string)
  self.class.get("/calculador/CalcPrecoPrazo.aspx?#{query_string}", timeout: 5)
end
calculate_delivery(service) click to toggle source
# File lib/corraios/calculator.rb, line 40
def calculate_delivery(service)
  @packer.containers.map do |container|
    query_string = "#{to_query_params(service)}&#{container.to_query_params}"
    parse_delivery(calculate_container(query_string), service)
  end
end
calculate_services(*services) click to toggle source
# File lib/corraios/calculator.rb, line 34
def calculate_services(*services)
  services.map do |service|
    calculate_delivery(service)
  end.flatten
end
code_for_service(service) click to toggle source
# File lib/corraios/calculator.rb, line 67
def code_for_service(service)
  Corraios::code_for(service)
end
default_query_params() click to toggle source
# File lib/corraios/calculator.rb, line 71
def default_query_params
  "sCdMaoPropria=N&nVlValorDeclarado=0&sCdAvisoRecebimento=N&nIndicaCalculo=3&StrRetorno=XML"
end
parse_delivery(response, service) click to toggle source
# File lib/corraios/calculator.rb, line 51
def parse_delivery(response, service)
  if response.code == 200
    Delivery.new(response.parsed_response, service, code_for_service(service))
  else
    raise ServiceUnreachable
  end
end
to_query_params(service) click to toggle source
# File lib/corraios/calculator.rb, line 59
def to_query_params(service)
  query_string = "#{default_query_params}&sCepOrigem=#{@source}&sCepDestino=#{@destination}"
  query_string << "&nCdServico=#{code_for_service(service)}"
  query_string << "&nCdEmpresa=#{contract_number}" if contract_number
  query_string << "&sDsSenha=#{contract_password}" if contract_password
  query_string
end
unify_deliveries(services, deliveries) click to toggle source
# File lib/corraios/calculator.rb, line 22
def unify_deliveries(services, deliveries)
  services.map do |service|
    service_deliveries = deliveries.select { |delivery| delivery.name == service }

    service_deliveries[1..-1].each do |service_delivery|
      service_deliveries.first.merge!(service_delivery)
    end if service_deliveries.size > 0

    service_deliveries.first
  end
end