Sha256: 04b47d7d0319b45f1bfc78a219ab87cf10f8e3ba3b6174630996ada242c6ac41

Contents?: true

Size: 1.15 KB

Versions: 3

Compression:

Stored size: 1.15 KB

Contents

require "wasabi"
require "httpi/request"

module Savon
  module Wasabi

    # = Savon::Wasabi::Document
    #
    # Extends the document handling of the <tt>Wasabi::Document</tt> by
    # adding support for remote and local WSDL documents.
    class Document < ::Wasabi::Document

      # Hooks into Wasabi and extends its document handling.
      def xml
        @xml ||= document.kind_of?(String) ? resolve_document : document
      end

      # Sets the <tt>HTTPI::Request</tt> for remote WSDL documents.
      attr_writer :request

    private

      # Sets up and returns the <tt>HTTPI::Request</tt>.
      def request
        @request ||= HTTPI::Request.new
        @request.url = document
        @request
      end

      # Resolves and returns the raw WSDL document.
      def resolve_document
        case document
          when /^http[s]?:/ then 
            response = HTTPI.get(request)
            if response.error?
              raise Savon::HTTP::Error.new(response)
            else
              response.body
            end
          when /^</         then document
          else                   File.read(document)
        end
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
savon-0.9.11 lib/savon/wasabi/document.rb
savon-0.9.10 lib/savon/wasabi/document.rb
savon-0.9.9 lib/savon/wasabi/document.rb