/
request.rb
100 lines (80 loc) · 2.36 KB
/
request.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
require 'rack/request'
require 'rack/utils'
module Loga
module Rack
class Request < ::Rack::Request
ACTION_DISPATCH_REQUEST_ID = 'action_dispatch.request_id'.freeze
ACTION_CONTROLLER_INSTANCE = 'action_controller.instance'.freeze
def initialize(env)
super
@uuid = nil
end
def uuid
@uuid ||= env[ACTION_DISPATCH_REQUEST_ID]
end
alias request_id uuid
# Builds a namespaced controller name and action name string.
#
# class Admin::UsersController
# def show
# end
# end
#
# => "Admin::UsersController#show"
def controller_action_name
aci && "#{aci.class.name}##{aci.action_name}"
end
def original_path
env['loga.request.original_path']
end
# rubocop:disable Metrics/LineLength
def filtered_full_path
@filtered_full_path ||=
query_string.empty? ? original_path : "#{original_path}?#{filtered_query_string}"
end
# rubocop:enable Metrics/LineLength
def filtered_parameters
@filtered_parameters ||= filtered_query_hash.merge(filtered_form_hash)
end
def filtered_query_hash
@filtered_query_hash ||= filter_hash(query_hash)
end
def filtered_form_hash
@filtered_form_hash ||= filter_hash(form_hash)
end
private
def query_hash
params
env['rack.request.query_hash'] || {}
end
def form_hash
params
env['rack.request.form_hash'] || {}
end
def filter_hash(hash)
parameter_filter.filter(hash)
end
KV_RE = '[^&;=]+'.freeze
PAIR_RE = /(#{KV_RE})=(#{KV_RE})/
def filtered_query_string
query_string.gsub(PAIR_RE) do |_|
parameter_filter.filter([[$1, $2]]).first.join('=')
end
end
def parameter_filter
@parameter_filter ||=
ParameterFilter.new(loga_filter_parameters | action_dispatch_filter_params)
end
def loga_filter_parameters
Loga.configuration.filter_parameters || []
end
def action_dispatch_filter_params
env['action_dispatch.parameter_filter'] || []
end
def action_controller_instance
@action_controller_instance ||= env[ACTION_CONTROLLER_INSTANCE]
end
alias aci action_controller_instance
end
end
end