Sha256: 4ffe47e79b4420f84ae866398b49be5af0a9371d5c65446c1dfbe8f99ebfd406

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

module Contracts
  class Request
    def initialize(host, definition)
      @host = host
      @definition = definition
    end

    def host
      @host
    end

    def method
      @definition['method'].to_s.downcase.to_sym
    end

    def path
      @definition['path']
    end

    def path=(value)
      @definition['path'] = value
    end

    def headers
      @definition['headers']
    end

    def params
      @definition['params']
    end

    def absolute_uri
      @host + path
    end

    def full_uri
      return absolute_uri if params.empty?

      uri = Addressable::URI.new
      uri.query_values = params

      absolute_uri + '?' + uri.query
    end

    def execute
      response = HTTParty.send(method, @host + path, {
        httparty_params_key => normalized_params,
        :headers => headers
      })
      ResponseAdapter.new(response)
    end

    private
    def httparty_params_key
      method == :get ? :query : :body
    end

    def normalized_params
      method == :get ? params : params.to_json
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
contracts_api_test-0.0.1 lib/contracts/request.rb