class Correios::Pricefier::ListServices

Public Class Methods

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

Public Instance Methods

request(method) click to toggle source
# File lib/pricefier/requests/list_services.rb, line 9
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/list_services.rb, line 39
def format_response(response)
  response = response["#{@method_snake}_response".to_sym]["#{@method_snake}_result".to_sym]

  services = response[:servicos_calculo][:c_servicos_calculo]
  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/list_services.rb, line 48
def format_service(service)
  if service[:erro].to_i.zero?
    {
      code: service[:codigo],
      description: service[:descricao].strip,
      calculate_price: string_to_bool(service[:calcula_preco]),
      calculate_deadline:
        if service[:calcula_prazo].present?
          string_to_bool(service[:calcula_prazo])
        else
          false
        end
    }
  else
    {
      code: service[:codigo],
      error: { code: service[:erro],
               description: service[:msg_erro] }
    }
  end
end
xml() click to toggle source
# File lib/pricefier/requests/list_services.rb, line 29
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)
      end
    end
  end.doc.root.to_xml
end