class ActiveShipping::Correios::CorreiosRequest

Constants

RETURN_INFORMATION_TYPE
RETURN_TYPE
URL

Attributes

destination[R]
origin[R]
urls[R]

Public Class Methods

new(origin, destination, packages, options) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 64
def initialize(origin, destination, packages, options)
  @options = options
  @origin = origin
  @destination = destination

  packages = packages.map do |package|
    CorreiosPackage.new(package, 1)
  end

  @params = {
    company_id: options[:company_id],
    password: options[:password],
    service_type: service_type,
    origin_zip: origin.zip,
    destination_zip: destination.zip,
    mao_propria_extra: parse_boolean(options[:mao_propria_extra]),
    declared_value_extra: parse_currency(options[:declared_value_extra]),
    delivery_notice_extra: parse_boolean(options[:delivery_notice_extra]),
    return_type: RETURN_TYPE,
    return_information: RETURN_INFORMATION_TYPE[:prices]
  }
  @urls = packages.map { |package| create_url(package).to_s }
end

Public Instance Methods

create_response(raw_xmls) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 88
def create_response(raw_xmls)
  correios_response = CorreiosResponse.new(self, raw_xmls)
  correios_response.rate_response
end

Private Instance Methods

build_params(package) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 103
def build_params(package)
  @params.merge(package.params)
end
create_url(package) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 133
def create_url(package)
  scheme, userinfo, host, port, registry, path, opaque, query, fragment = URI::split(URL)

  query ||= ""
  query = CGI.parse(query)
            .merge(query_string(package))
            .to_query

  URI::HTTP.new(scheme, userinfo, host, port, registry, path, opaque, query, fragment)
end
hash_query_string(params) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 107
def hash_query_string(params)
  {
    'nCdEmpresa' => params[:company_id],
    'sDsSenha' => params[:password],
    'nCdServico' => params[:service_type],
    'sCepOrigem' => params[:origin_zip],
    'sCepDestino' => params[:destination_zip],
    'nVlPeso' => params[:weight],
    'nCdFormato' => params[:format],
    'nVlComprimento' => params[:length],
    'nVlAltura' => params[:height],
    'nVlLargura' => params[:width],
    'nVlDiametro' => params[:diameter],
    'sCdMaoPropria' => params[:mao_propria_extra],
    'nVlValorDeclarado' => params[:declared_value_extra],
    'sCdAvisoRecebimento' => params[:delivery_notice_extra],
    'nIndicaCalculo' => params[:return_information],
    'StrRetorno' => params[:return_type]
  }
end
parse_boolean(param) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 95
def parse_boolean(param)
  param ? 'S' : 'N'
end
parse_currency(param) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 99
def parse_currency(param)
  param.nil? ? '0' : param.to_s.gsub('.', ',')
end
query_string(package) click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 128
def query_string(package)
  params = build_params(package)
  hash_query_string(params)
end
service_type() click to toggle source
# File lib/active_shipping/carriers/correios.rb, line 144
def service_type
  @options[:services].nil? ? DEFAULT_SERVICES.join(',') : @options[:services].join(',')
end