Sha256: 1c6b109ff9311ef0ab5a2e5486c48cd804a8b665f2ff8ce0724af3f3ad32d2d7

Contents?: true

Size: 1.53 KB

Versions: 2

Compression:

Stored size: 1.53 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] = request.headers if request.specified?(:headers)
      hash[:body]    = body            if request.specified?(:body)
      hash
    end

    private

    attr_reader :request

    # This feels wrong to be checking the class type of the Query
    # Do this better somehow.
    def query
      if request.query.is_a?(Pact::QueryHash)
        Pact::Reification.from_term(request.query)
      else
        request.query
      end
    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
        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, Pact::Reification.from_term(value)]
        end
      end
      arrays
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pact-mock_service-0.2.0 lib/pact/consumer_contract/request_decorator.rb
pact-mock_service-0.1.0 lib/pact/consumer_contract/request_decorator.rb