Class: ReqresRspec::Collector

Inherits:
Object
  • Object
show all
Defined in:
lib/reqres_rspec/collector.rb

Constant Summary collapse

EXCLUDE_RESPONSE_HEADER_PATTERNS =

response headers contain many unnecessary information, everything from this list will be stripped

%w[
  X-Frame-Options
  X-XSS-Protection
  X-Content-Type-Options
  X-UA-Compatible
]
EXCLUDE_REQUEST_HEADER_PATTERNS =

request headers contain many unnecessary information, everything that match items from this list will be stripped

%w[
  rack.
  action_dispatch
  REQUEST_METHOD
  SERVER_NAME
  SERVER_PORT
  QUERY_STRING
  SCRIPT_NAME
  CONTENT_LENGTH
  HTTPS
  HTTP_HOST
  HTTP_USER_AGENT
  REMOTE_ADDR
  PATH_INFO
]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCollector

Returns a new instance of Collector.



33
34
35
# File 'lib/reqres_rspec/collector.rb', line 33

def initialize
  self.records = []
end

Instance Attribute Details

#recordsObject

Contains spec values read from rspec example, request and response



4
5
6
# File 'lib/reqres_rspec/collector.rb', line 4

def records
  @records
end

Instance Method Details

#collect(spec, request, response) ⇒ Object

collects spec data for further processing



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/reqres_rspec/collector.rb', line 38

def collect(spec, request, response)
  # TODO: remove boilerplate code
  return if request.nil? || response.nil? || !defined?(request.env)

  description = query_parameters = backend_parameters = 'not available'
  params = []
  if request.env && (request_params = request.env['action_dispatch.request.parameters'])
    if request_params['controller'] && request_params['action']
      description = get_action_description(request_params['controller'], request_params['action'])
      params = get_action_params(request_params['controller'], request_params['action'])
      query_parameters = request_params.reject { |p| %w[controller action].include? p }
      backend_parameters = request_params.reject { |p| !%w[controller action].include? p }
    end
  end

  self.records << {
    title: spec.example.full_description,
    description: description,
    params: params,
    request_path: get_symbolized_path(request),
    request: {
      host: request.host,
      url: request.url,
      path: request.path,
      method: request.request_method,
      query_parameters: query_parameters,
      backend_parameters: backend_parameters,
      body: request.body.read,
      content_length: request.content_length,
      content_type: request.content_type,
      headers: read_request_headers(request),
      accept: request.accept,
    },
    response: {
      code: response.status,
      body: response.body,
      headers: read_response_headers(response),
    }
  }
end

#sortObject

sorts records alphabetically



80
81
82
# File 'lib/reqres_rspec/collector.rb', line 80

def sort
  self.records.sort!{ |x,y| x[:request_path] <=> y[:request_path] }
end