Sha256: 72ab3be5d9fee741b1ad392ac7931ccb4449153d57367373fcd5d33e60567255

Contents?: true

Size: 1.98 KB

Versions: 4

Compression:

Stored size: 1.98 KB

Contents

module CorreiosSigep
  module LogisticReverse
    class RequestCollectNumber < BaseClient
      def initialize(logistic_reverse)
        @logistic_reverse = logistic_reverse
        super()
      end

      def process
        xml = Builders::XML::RequestCollectNumber.build_xml(@logistic_reverse)
        response = invoke(:solicitar_postagem_reversa, xml)
        process_response response
      end

      private

      def process_response response
        response_xml = response.to_xml.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
        response_doc = Nokogiri::XML.parse(response_xml)
        code = response_doc.search('//cod-erro | //cod_erro').text.to_i rescue nil
        handle_errors code, response_doc
      end

      def handle_errors code, response_doc
        result_string = '//resultado-solicitacao | //resultado_solicitacao'
        result_node = response_doc.search(result_string)

        case code
        when Models::CorreiosResponseCodes::SUCCESS
          result = result_node.search('//numero-coleta | //numero_coleta')
          result.first.text rescue nil

        when Models::CorreiosResponseCodes::TICKET_ALREADY_USED
          error_message = result_node.search('//msg_erro | //msg_erro').text
          raise Models::Errors::TicketAlreadyUsed.new error_message

        when Models::CorreiosResponseCodes::UNAVAILABLE_SERVICE
          raise Models::Errors::UnavailableService

        when Models::CorreiosResponseCodes::INEXISTENT_ZIPCODE
          raise Models::Errors::InexistentZipcode

        when Models::CorreiosResponseCodes::UNAVAILABLE_HOUSE_COLLECT
          raise Models::Errors::UnavailableHouseCollect

        when Models::CorreiosResponseCodes::COLLECT_NOT_ANSWERED_FOR_THE_ZIPCODE
          raise Models::Errors::CollectNotAnsweredForTheZipcode

        else
          error_message = result_node.search('//msg_erro | //msg_erro').text
          raise Models::Errors::UnknownError.new error_message
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
correios_sigep-0.1.0 lib/correios_sigep/logistic_reverse/request_collect_number.rb
correios_sigep-0.0.5 lib/correios_sigep/logistic_reverse/request_collect_number.rb
correios_sigep-0.0.4 lib/correios_sigep/logistic_reverse/request_collect_number.rb
correios_sigep-0.0.3 lib/correios_sigep/logistic_reverse/request_collect_number.rb