Sha256: d5a6d2d3702fc88ccf96eeaecf528b8f782f91d6e1c5221b7d5be89e5b78fabd

Contents?: true

Size: 1.01 KB

Versions: 6

Compression:

Stored size: 1.01 KB

Contents

require "httpi"

module Wasabi

  # = Wasabi::Resolver
  #
  # Resolves local and remote WSDL documents.
  class Resolver

    class HTTPError < StandardError
      def initialize(message, response=nil)
        super(message)
        @response = response
      end
      attr_reader :response
    end

    URL = /^http[s]?:/
    XML = /^</

    def initialize(document, request = nil)
      @document = document
      @request  = request || HTTPI::Request.new
    end

    attr_reader :document, :request

    def resolve
      raise ArgumentError, "Unable to resolve: #{document.inspect}" unless document

      case document
        when URL then load_from_remote
        when XML then document
        else          load_from_disc
      end
    end

    private

    def load_from_remote
      request.url = document
      response = HTTPI.get(request)

      raise HTTPError.new("Error: #{response.code}", response) if response.error?

      response.body
    end

    def load_from_disc
      File.read(document)
    end

  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
wasabi-3.2.3 lib/wasabi/resolver.rb
wasabi-3.2.2 lib/wasabi/resolver.rb
wasabi-3.2.1 lib/wasabi/resolver.rb
wasabi-ng-1.6-3.3.0 lib/wasabi/resolver.rb
wasabi-3.2.0 lib/wasabi/resolver.rb
wasabi-3.1.0 lib/wasabi/resolver.rb