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