class Correios::Pricefier::CalculateDeadline

Public Class Methods

new(data = {}) click to toggle source
Calls superclass method
# File lib/pricefier/requests/calculate_deadline.rb, line 4
def initialize(data = {})
  @show_request = data[:show_request]

  @service_codes = data[:service_codes]
  @source_zip_code = data[:source_zip_code]
  @target_zip_code = data[:target_zip_code]
  @reference_date = data[:reference_date]
  super()
end

Public Instance Methods

request(method) click to toggle source
# File lib/pricefier/requests/calculate_deadline.rb, line 14
def request(method)
  @method = method
  @method_snake = method.underscore

  puts xml if @show_request == true
  begin
    format_response(Pricefier.client.call(
      @method_snake.to_sym,
      soap_action: "http://tempuri.org/#{@method}",
      xml: xml
    ).to_hash)
  rescue Savon::SOAPFault => error
    generate_soap_fault_exception(error)
  rescue Savon::HTTPError => error
    generate_http_exception(error.http.code)
  end
end

Private Instance Methods

format_response(response) click to toggle source
# File lib/pricefier/requests/calculate_deadline.rb, line 51
def format_response(response)
  response = response["#{@method_snake}_response".to_sym]["#{@method_snake}_result".to_sym]

  services = response[:servicos][:c_servico]
  services = [services] if services.is_a?(Hash)

  { services: services.map { |s| format_service(s) } }
end
format_service(service) click to toggle source
# File lib/pricefier/requests/calculate_deadline.rb, line 60
def format_service(service)
  if [0, 10, 11].include?(service[:erro].to_i)
    {
      code: service[:codigo],
      delivery_at_home: string_to_bool(service[:entrega_domiciliar]),
      delivery_on_saturdays: string_to_bool(service[:entrega_sabado]),
      note: service[:obs_fim],
      deadline: {
        days: service[:prazo_entrega].to_i,
        date: string_to_date(service[:data_max_entrega])
      }
    }
  else
    {
      code: service[:codigo],
      error: { code: service[:erro],
               description: service[:msg_erro] }
    }
  end
end
xml() click to toggle source
# File lib/pricefier/requests/calculate_deadline.rb, line 34
def xml
  Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
    xml['soap'].Envelope(Pricefier.namespaces) do
      xml['soap'].Body do
        xml['ns1'].send(@method) do
          xml.nCdServico array_to_string_comma(@service_codes)
          xml.sCepOrigem @source_zip_code
          xml.sCepDestino @target_zip_code
          if @method != 'CalcPrazo'
            xml.sDtCalculo date_to_string(@reference_date)
          end
        end
      end
    end
  end.doc.root.to_xml
end