Sha256: cf7399d44925483fb30309e5f2d365a1b7f6833e2c343e0c438a017502302b33

Contents?: true

Size: 853 Bytes

Versions: 5

Compression:

Stored size: 853 Bytes

Contents

require "savon"

module Savon
  class SOAPFault < Error

    def self.present?(http)
      fault_node  = http.body.include?("Fault>")
      soap1_fault = http.body.include?("faultcode>") && http.body.include?("faultstring>")
      soap2_fault = http.body.include?("Code>") && http.body.include?("Reason>")

      fault_node && (soap1_fault || soap2_fault)
    end

    def initialize(http, nori)
      @http = http
      @nori = nori
    end

    attr_reader :http, :nori

    def to_s
      message_by_version to_hash[:fault]
    end

    def to_hash
      nori.parse(@http.body)[:envelope][:body]
    end

    private

    def message_by_version(fault)
      if fault[:faultcode]
        "(#{fault[:faultcode]}) #{fault[:faultstring]}"
      elsif fault[:code]
        "(#{fault[:code][:value]}) #{fault[:reason][:text]}"
      end
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
savon-2.1.0 lib/savon/soap_fault.rb
savon-2.0.3 lib/savon/soap_fault.rb
savon-2.0.2 lib/savon/soap_fault.rb
savon-2.0.1 lib/savon/soap_fault.rb
savon-2.0.0 lib/savon/soap_fault.rb