Class: Coach::RequestSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/coach/request_serializer.rb

Constant Summary collapse

RACK_UNPREFIXED_HEADERS =

Rack specs dictate that CONTENT_TYPE and CONTENT_LENGTH are not prefixed with HTTP_. See rubydoc.info/github/rack/rack/master/file/SPEC

%w[CONTENT_TYPE CONTENT_LENGTH].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request) ⇒ RequestSerializer

Returns a new instance of RequestSerializer.



33
34
35
# File 'lib/coach/request_serializer.rb', line 33

def initialize(request)
  @request = request
end

Class Method Details

.apply_header_rule(header, value) ⇒ Object

Applies sanitizing rules. Expects ‘header` to be in ’http_header_name’ form.



22
23
24
25
26
# File 'lib/coach/request_serializer.rb', line 22

def self.apply_header_rule(header, value)
  return value if header_rules[header].nil?

  header_rules[header].call(value)
end

.clear_header_rules!Object

Resets all header sanitizing



29
30
31
# File 'lib/coach/request_serializer.rb', line 29

def self.clear_header_rules!
  @header_rules = {}
end

.header_rulesObject



10
11
12
# File 'lib/coach/request_serializer.rb', line 10

def self.header_rules
  @header_rules ||= {}
end

.sanitize_header(header, &rule) ⇒ Object

Sets global rules on how to sanitize headers. An optional block can be supplied that will determine how to transform the original header value, otherwise a default string is used.



17
18
19
# File 'lib/coach/request_serializer.rb', line 17

def self.sanitize_header(header, &rule)
  header_rules[header] = rule || ->(_value) { "[FILTERED]" }
end

Instance Method Details

#serializeObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/coach/request_serializer.rb', line 37

def serialize
  {
    # Identification
    request_id: @request.uuid,

    # Request details
    method: @request.method,
    path: request_path,
    format: @request.format.try(:ref),
    params: @request.filtered_parameters, # uses config.filter_parameters

    # Extra request info
    headers: filtered_headers,
    session_id: @request.remote_ip, # TODO: remove in a future release
    session_ip: @request.remote_ip,
  }
end