module Fictium::RSpec::Autocomplete::Params

Constants

IGNORED_PATH_PARAMETERS
REQUEST_SECTIONS

Public Class Methods

extract_from_request(action, request) click to toggle source
# File lib/fictium/rspec/autocomplete/params.rb, line 13
def extract_from_request(action, request)
  action.method = request.method.downcase
  extract_path(action, request)
  REQUEST_SECTIONS.each do |section|
    action.params[section] ||= ActiveSupport::HashWithIndifferentAccess.new
    send(:"parse_request_#{section}", action.params[section], action, request)
  end
end
extract_from_response(example, response) click to toggle source
# File lib/fictium/rspec/autocomplete/params.rb, line 22
def extract_from_response(example, response)
  example.headers ||= ActiveSupport::HashWithIndifferentAccess.new
  response.headers.each do |name, value|
    next unless valid_header?(name)

    example.headers[name] ||= {}
    example.headers[name].merge!(
      example: value
    )
  end
end

Private Class Methods

extract_path(action, request) click to toggle source
# File lib/fictium/rspec/autocomplete/params.rb, line 36
def extract_path(action, request)
  return unless action.path.nil?

  mapped_controllers = transform_path(request)
  full_path = CGI.unescape(url_for(**mapped_controllers.merge(only_path: true)))
  action.path = full_path.sub(action.resource.base_path || '', '')
rescue ActionController::UrlGenerationError
  action.path = ''
end
ignored_header_groups() click to toggle source
# File lib/fictium/rspec/autocomplete/params.rb, line 101
def ignored_header_groups
  Fictium.configuration.ignored_header_groups
end
parse_request_header(params, _action, request) click to toggle source
# File lib/fictium/rspec/autocomplete/params.rb, line 66
def parse_request_header(params, _action, request)
  request.headers.to_h.each do |name, value|
    next unless valid_header?(name)

    params[name] ||= {}
    params[name].merge!(
      example: value
    )
  end
end
parse_request_path(params, _action, request) click to toggle source
# File lib/fictium/rspec/autocomplete/params.rb, line 77
def parse_request_path(params, _action, request)
  request.path_parameters.except(*IGNORED_PATH_PARAMETERS).each do |name, value|
    params[name] ||= {}
    params[name].merge!(
      example: value
    )
  end
end
parse_request_query(params, _action, request) click to toggle source
# File lib/fictium/rspec/autocomplete/params.rb, line 57
def parse_request_query(params, _action, request)
  request.query_parameters.each do |key, value|
    params[key] ||= {}
    params[key].merge!(
      example: value
    )
  end
end
transform_path(request) click to toggle source
# File lib/fictium/rspec/autocomplete/params.rb, line 46
def transform_path(request)
  {}.tap do |result|
    request.path_parameters.except(*IGNORED_PATH_PARAMETERS).each do |key, _|
      result[key] = "{#{key}}"
    end
    request.path_parameters.slice(*IGNORED_PATH_PARAMETERS).each do |key, value|
      result[key] = value
    end
  end
end
valid_header?(name) click to toggle source
# File lib/fictium/rspec/autocomplete/params.rb, line 95
def valid_header?(name)
  return false if ignored_header_groups.any? { |group| name.downcase.start_with?(group) }

  !Fictium.configuration.ignored_header_values.include?(name.downcase)
end