Class: Coach::RequestSerializer
- Inherits:
-
Object
- Object
- Coach::RequestSerializer
- 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
-
.apply_header_rule(header, value) ⇒ Object
Applies sanitizing rules.
-
.clear_header_rules! ⇒ Object
Resets all header sanitizing.
- .header_rules ⇒ Object
-
.sanitize_header(header, &rule) ⇒ Object
Sets global rules on how to sanitize headers.
Instance Method Summary collapse
-
#initialize(request) ⇒ RequestSerializer
constructor
A new instance of RequestSerializer.
- #serialize ⇒ Object
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_rules ⇒ Object
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
#serialize ⇒ Object
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 |