class RSpec::DocumentRequests::Request

Attributes

example[R]
explanation[R]
method[R]
parsed_response[R]
path[R]
request_body[R]
request_headers[R]
request_parameters[R]
response[R]
response_headers[R]
response_parameters[R]

Public Class Methods

new(explanation:, example:, method:, path:, request_parameters:, request_headers:, response:) click to toggle source
# File lib/rspec/document_requests/request.rb, line 18
def initialize(explanation:, example:, method:, path:, request_parameters:, request_headers:, response:)
  @explanation    = explanation
  @example        = example
  @method         = method
  @path           = path
  @response       = response

  if request_parameters.is_a?(Hash)
    process_request_parameters(request_parameters)
  else
    @request_body = request_parameters
  end
  process_request_headers(request_headers || {})
  process_response_parameters
  process_response_headers
end

Private Instance Methods

filter_values(name) click to toggle source
# File lib/rspec/document_requests/request.rb, line 37
def filter_values(name)
  values = instance_variable_get(:"@#{name}")
  return values if values.nil?

  included_values = DocumentRequests.configuration.send(:"include_#{name}")
  excluded_values = DocumentRequests.configuration.send(:"exclude_#{name}")
  hidden_values = DocumentRequests.configuration.send(:"hide_#{name}")
  enforce = DocumentRequests.configuration.send(:"enforce_explain_#{name}")

  unexplained = []
  values.select! do |k, v|
    next false if included_values and included_values.exclude?(k)
    next false if excluded_values.include?(k)
    unexplained << k if v.generated
    v.value = "..." if hidden_values.include?(k)
    true
  end
  raise "Unexplained parameters used: #{unexplained.join(", ")}" if enforce and unexplained.any?
  values
end
process_parameters(input, output, explanation:, prefix: nil) click to toggle source
# File lib/rspec/document_requests/request.rb, line 93
def process_parameters(input, output, explanation:, prefix: nil)
  input.each do |key, value|
    key, value = nil, key if input.is_a?(Array)
    if prefix
      name = "#{prefix}[#{key}]"
    else
      name = input.is_a?(Array) ? "[]" : key.to_s
    end
    case value
      when Hash
        process_parameters(value, output, explanation: explanation, prefix: name)
      when Array
        if value.all? { |subvalue| subvalue.is_a?(Hash) }
          process_parameters(value, output, explanation: explanation, prefix: name)
        else
          name += "[]"
          output[name] ||= explanation[name] || Parameter.new(generated: true)
          output[name].value = [output[name].value, value.to_s].compact.join(", ")
        end
      else
        output[name] ||= explanation[name] || Parameter.new(generated: true)
        output[name].value = [output[name].value, value].compact.join(", ")
    end
  end
  if prefix.nil?
    explanation.each { |name, parameter| output[name] ||= parameter }
  end
end
process_request_headers(headers) click to toggle source
# File lib/rspec/document_requests/request.rb, line 64
def process_request_headers(headers)
  @request_headers = {}
  headers.each do |name, value|
    @request_headers[name] = @explanation.request.headers[name] || Parameter.new(generated: true)
    @request_headers[name].value = value
  end
  @explanation.request.headers.each { |name, header| @request_headers[name] ||= header }
  filter_values :request_headers
end
process_request_parameters(parameters, prefix: nil) click to toggle source
# File lib/rspec/document_requests/request.rb, line 58
def process_request_parameters(parameters, prefix: nil)
  @request_parameters = {}
  process_parameters(parameters, @request_parameters, explanation: @explanation.request.parameters)
  filter_values :request_parameters
end
process_response_headers() click to toggle source
# File lib/rspec/document_requests/request.rb, line 83
def process_response_headers
  @response_headers = {}
  @response.headers.each do |name, value|
    @response_headers[name] = @explanation.response.headers[name] || Parameter.new(generated: true)
    @response_headers[name].value = value
  end
  @explanation.response.headers.each { |name, header| @response_headers[name] ||= header }
  filter_values :response_headers
end
process_response_parameters(parameters = nil) click to toggle source
# File lib/rspec/document_requests/request.rb, line 74
def process_response_parameters(parameters = nil)
  @parsed_response = DocumentRequests.configuration.response_parser.call(response)
  if @parsed_response
    @response_parameters = {}
    process_parameters(@parsed_response, @response_parameters, explanation: @explanation.response.parameters)
  end
  filter_values :response_parameters
end