class Pacto::Stubs::WebMockAdapter

Public Class Methods

new() click to toggle source
# File lib/pacto/stubs/webmock_adapter.rb, line 6
def initialize
  register_hooks
end

Public Instance Methods

process_hooks(request_signature, response) click to toggle source
# File lib/pacto/stubs/webmock_adapter.rb, line 28
def process_hooks(request_signature, response)
  WebMockHelper.generate(request_signature, response) if Pacto.generating?

  contracts = Pacto.contracts_for request_signature
  Pacto.configuration.hook.process contracts, request_signature, response

  WebMockHelper.validate(request_signature, response) if Pacto.validating?
end
reset!() click to toggle source
# File lib/pacto/stubs/webmock_adapter.rb, line 23
def reset!
  WebMock.reset!
  WebMock.reset_callbacks
end
stub_request!(request, response) click to toggle source
# File lib/pacto/stubs/webmock_adapter.rb, line 10
def stub_request!(request, response)
  uri_pattern = UriPattern.for(request)
  stub = WebMock.stub_request(request.method, uri_pattern)

  stub.request_pattern.with(strict_details(request)) if Pacto.configuration.strict_matchers

  stub.to_return(
    :status => response.status,
    :headers => response.headers,
    :body => format_body(response.body)
  )
end

Private Instance Methods

format_body(body) click to toggle source
# File lib/pacto/stubs/webmock_adapter.rb, line 45
def format_body(body)
  if body.is_a?(Hash) || body.is_a?(Array)
    body.to_json
  else
    body
  end
end
register_hooks() click to toggle source
# File lib/pacto/stubs/webmock_adapter.rb, line 39
def register_hooks
  WebMock.after_request do |request_signature, response|
    process_hooks request_signature, response
  end
end
strict_details(request) click to toggle source
# File lib/pacto/stubs/webmock_adapter.rb, line 53
def strict_details(request)
  {}.tap do |details|
    unless request.params.empty?
      details[webmock_params_key(request)] = request.params
    end
    unless request.headers.empty?
      details[:headers] = request.headers
    end
  end
end
webmock_params_key(request) click to toggle source
# File lib/pacto/stubs/webmock_adapter.rb, line 64
def webmock_params_key(request)
  request.method == :get ? :query : :body
end