Sha256: 8cbb18561772eea24790d09d4f7e73434e7201dff07b4adce23cdf80d9d97f93

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

# encoding: UTF-8
require 'net/http'
require 'uri'

class Correios::Frete::WebService
  URL = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx"
  FORMATS = { :caixa_pacote => 1, :rolo_prisma => 2 }
  CONDITIONS = { true => "S", false => "N" }

  def request(frete, service_types)
    Net::HTTP.get(URI.parse("#{URL}?#{params_for(frete, service_types)}"))
  end

  private

  def params_for(frete, service_types)
    "sCepOrigem=#{frete.cep_origem}&" +
    "sCepDestino=#{frete.cep_destino}&" +
    "nVlPeso=#{frete.peso}&" +
    "nVlComprimento=#{frete.comprimento}&" +
    "nVlAltura=#{frete.altura}&" +
    "nVlLargura=#{frete.largura}&" +
    "nVlDiametro=#{frete.diametro}&" +
    "nCdFormato=#{FORMATS[frete.formato]}&" +
    "sCdMaoPropria=#{CONDITIONS[frete.mao_propria]}&" +
    "sCdAvisoRecebimento=#{CONDITIONS[frete.aviso_recebimento]}&" +
    "nVlValorDeclarado=#{frete.valor_declarado}&" +
    "nCdServico=#{service_codes_for(service_types)}&" +
    "nCdEmpresa=&" +
    "sDsSenha=&" +
    "StrRetorno=xml"
  end

  def service_codes_for(service_types)
    service_types.map { |type| Correios::Frete::Servico::TYPES[type] }.join(",")
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
correios-frete-0.1.0 lib/correios/frete/web_service.rb