class Pacto::Generator

Public Class Methods

new(schema_version = 'draft3', schema_generator = JSON::SchemaGenerator, validator = Pacto::MetaSchema.new, generator_options = Pacto.configuration.generator_options, filters = Pacto::Generator::Filters.new) click to toggle source
# File lib/pacto/generator.rb, line 5
def initialize(schema_version = 'draft3',
  schema_generator = JSON::SchemaGenerator,
  validator = Pacto::MetaSchema.new,
  generator_options = Pacto.configuration.generator_options,
  filters = Pacto::Generator::Filters.new)
  @schema_version = schema_version
  @validator = validator
  @schema_generator = schema_generator
  @generator_options = generator_options
  @filters = filters
end

Public Instance Methods

generate(request_file, host) click to toggle source
# File lib/pacto/generator.rb, line 17
def generate(request_file, host)
  contract = Pacto.load_contract request_file, host
  request = contract.request
  response = contract.request.execute
  save(request_file, request, response)
end
save(source, request, response) click to toggle source
# File lib/pacto/generator.rb, line 24
def save(source, request, response)
  contract = generate_contract source, request, response
  pretty_contract = MultiJson.encode(contract, :pretty => true)
  # This is because of a discrepency w/ jruby vs MRI pretty json
  pretty_contract.gsub!(/^$\n/, '')
  @validator.validate pretty_contract
  pretty_contract
end

Private Instance Methods

generate_body(source, body) click to toggle source
# File lib/pacto/generator.rb, line 60
def generate_body(source, body)
  if body && !body.empty?
    body_schema = JSON::SchemaGenerator.generate source, body, @generator_options
    MultiJson.load(body_schema)
  end
end
generate_contract(source, request, response) click to toggle source
# File lib/pacto/generator.rb, line 35
def generate_contract(source, request, response)
  {
    :request => generate_request(request, response, source),
    :response => generate_response(request, response, source)
  }
end
generate_request(request, response, source) click to toggle source
# File lib/pacto/generator.rb, line 42
def generate_request(request, response, source)
  {
    :headers => @filters.filter_request_headers(request, response),
    :method => request.method,
    :params => request.params,
    :path => request.path,
    :body => generate_body(source, request.body)
  }.delete_if { |k, v| v.nil? }
end
generate_response(request, response, source) click to toggle source
# File lib/pacto/generator.rb, line 52
def generate_response(request, response, source)
  {
    :headers => @filters.filter_response_headers(request, response),
    :status => response.status,
    :body => generate_body(source, response.body)
  }.delete_if { |k, v| v.nil? }
end