class Pacto::Stubs::WebMockHelper

Public Class Methods

generate(request_signature, response) click to toggle source
# File lib/pacto/stubs/webmock_helper.rb, line 14
def generate(request_signature, response)
  logger.debug("Generating Contract for #{request_signature}, #{response}")
  begin
    contract_file = load_contract_file(request_signature)

    unless File.exists? contract_file
      generate_contract(request_signature, response, contract_file)
    end
  rescue => e
    logger.error("Error while generating Contract #{contract_file}: #{e.message}")
    logger.error("Backtrace: #{e.backtrace}")
  end
end
validate(request_signature, response) click to toggle source
# File lib/pacto/stubs/webmock_helper.rb, line 7
def validate(request_signature, response)
  pacto_response = webmock_to_pacto_response(response)
  contract = Pacto.contracts_for(request_signature).first
  validation = Validation.new request_signature, pacto_response, contract
  Pacto::ValidationRegistry.instance.register_validation validation
end

Private Class Methods

generate_contract(request_signature, response, contract_file) click to toggle source
# File lib/pacto/stubs/webmock_helper.rb, line 30
def generate_contract(request_signature, response, contract_file)
  uri = URI(request_signature.uri)
  pacto_request = webmock_to_pacto_request(request_signature)
  pacto_response = webmock_to_pacto_response(response)
  generator = Pacto::Generator.new
  FileUtils.mkdir_p(File.dirname contract_file)
  File.write(contract_file, generator.save(uri, pacto_request, pacto_response))
  logger.debug("Generating #{contract_file}")

  Pacto.load_contract contract_file, uri.host
end
load_contract_file(request_signature) click to toggle source
# File lib/pacto/stubs/webmock_helper.rb, line 42
def load_contract_file(request_signature)
  uri = URI(request_signature.uri)
  basename = File.basename(uri.path, '.json') + '.json'
  File.join(Pacto.configuration.contracts_path, uri.host, File.dirname(uri.path), basename)
end
webmock_to_pacto_request(webmock_request) click to toggle source
# File lib/pacto/stubs/webmock_helper.rb, line 48
def webmock_to_pacto_request(webmock_request)
  uri = webmock_request.uri
  Faraday::Request.create webmock_request.method do |req|
    req.path = uri.path
    req.params = uri.query_values
    req.headers = webmock_request.headers
    req.body = webmock_request.body
  end
end
webmock_to_pacto_response(webmock_response) click to toggle source
# File lib/pacto/stubs/webmock_helper.rb, line 58
def webmock_to_pacto_response(webmock_response)
  status, _description = webmock_response.status
  Faraday::Response.new(
    :status => status,
    :response_headers => webmock_response.headers || {},
    :body => webmock_response.body
  )
end