Sha256: dc5129f5e2fb3fc8735c7085ca8bdf3f0f6ceeba869757f963937afbc069bf75

Contents?: true

Size: 1.52 KB

Versions: 4

Compression:

Stored size: 1.52 KB

Contents

require 'pact/reification'

module Pact
  class RequestDecorator

    def initialize request
      @request = request
    end

    def to_json(options = {})
      as_json.to_json(options)
    end

    def as_json options = {}
      to_hash
    end

    def to_hash
      hash = {
        method: request.method,
        path: request.path,
      }
      hash[:query]   = query   if request.specified?(:query)
      hash[:headers] = headers if request.specified?(:headers)
      hash[:body]    = body    if request.specified?(:body)
      hash
    end

    private

    attr_reader :request

    def headers
      Pact::Reification.from_term(request.headers)
    end

    # This feels wrong to be checking the class type of the Query
    # Do this better somehow.
    def query
      Pact::Reification.from_term(request.query)
    end

    # This feels wrong to be checking the class type of the body
    # Do this better somehow.
    def body
      if content_type_is_form && request.body.is_a?(Hash)
        URI.encode_www_form convert_hash_body_to_array_of_arrays
      else
        Pact::Reification.from_term(request.body)
      end
    end

    def content_type_is_form
      request.content_type? 'application/x-www-form-urlencoded'
    end

    #This probably belongs somewhere else.
    def convert_hash_body_to_array_of_arrays
      arrays = []
      request.body.keys.each do | key |
        [*request.body[key]].each do | value |
          arrays << [key, value]
        end
      end
      Pact::Reification.from_term arrays
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
pact-mock_service-0.2.3.pre.rc2 lib/pact/consumer_contract/request_decorator.rb
pact-mock_service-0.2.3.pre.rc1 lib/pact/consumer_contract/request_decorator.rb
pact-mock_service-0.2.2 lib/pact/consumer_contract/request_decorator.rb
pact-mock_service-0.2.1 lib/pact/consumer_contract/request_decorator.rb