Class: Tracebook::RedactionPipeline
- Inherits:
-
Object
- Object
- Tracebook::RedactionPipeline
- Defined in:
- lib/tracebook/redaction_pipeline.rb
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
Instance Method Summary collapse
- #apply_callable_redactors!(data) ⇒ Object private
- #apply_database_rules!(data) ⇒ Object private
- #apply_to_metadata!(data, redactor) ⇒ Object private
- #apply_to_request!(data, redactor) ⇒ Object private
- #apply_to_response!(data, redactor) ⇒ Object private
- #call(normalized) ⇒ Object
- #deep_transform(value, redactor) ⇒ Object private
-
#initialize(config: Tracebook.config) ⇒ RedactionPipeline
constructor
A new instance of RedactionPipeline.
- #redact_string(value, pattern, replacement) ⇒ Object private
Constructor Details
#initialize(config: Tracebook.config) ⇒ RedactionPipeline
Returns a new instance of RedactionPipeline.
9 10 11 |
# File 'lib/tracebook/redaction_pipeline.rb', line 9 def initialize(config: Tracebook.config) @config = config end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
7 8 9 |
# File 'lib/tracebook/redaction_pipeline.rb', line 7 def config @config end |
Instance Method Details
#apply_callable_redactors!(data) ⇒ Object (private)
24 25 26 27 28 29 30 31 |
# File 'lib/tracebook/redaction_pipeline.rb', line 24 def apply_callable_redactors!(data) redactors = Array(config.redactors) + Array(config.custom_redactors) redactors.each do |redactor| apply_to_request!(data, redactor) apply_to_response!(data, redactor) (data, redactor) end end |
#apply_database_rules!(data) ⇒ Object (private)
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/tracebook/redaction_pipeline.rb', line 33 def apply_database_rules!(data) Tracebook::RedactionRule.where(enabled: true).order(:priority).find_each do |rule| callable = ->(value) { redact_string(value, rule.compiled_pattern, rule.replacement) } case rule.applies_to.to_sym when :request apply_to_request!(data, callable) when :response apply_to_response!(data, callable) when :both apply_to_request!(data, callable) apply_to_response!(data, callable) when :metadata (data, callable) end end end |
#apply_to_metadata!(data, redactor) ⇒ Object (private)
61 62 63 |
# File 'lib/tracebook/redaction_pipeline.rb', line 61 def (data, redactor) data[:metadata] = deep_transform(data[:metadata], redactor) end |
#apply_to_request!(data, redactor) ⇒ Object (private)
51 52 53 54 |
# File 'lib/tracebook/redaction_pipeline.rb', line 51 def apply_to_request!(data, redactor) data[:request_payload] = deep_transform(data[:request_payload], redactor) data[:request_text] = redactor.call(data[:request_text]) if data[:request_text].is_a?(String) end |
#apply_to_response!(data, redactor) ⇒ Object (private)
56 57 58 59 |
# File 'lib/tracebook/redaction_pipeline.rb', line 56 def apply_to_response!(data, redactor) data[:response_payload] = deep_transform(data[:response_payload], redactor) data[:response_text] = redactor.call(data[:response_text]) if data[:response_text].is_a?(String) end |
#call(normalized) ⇒ Object
13 14 15 16 17 18 19 20 |
# File 'lib/tracebook/redaction_pipeline.rb', line 13 def call(normalized) data = normalized.to_h.deep_dup apply_callable_redactors!(data) apply_database_rules!(data) NormalizedInteraction.new(**data) end |
#deep_transform(value, redactor) ⇒ Object (private)
65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/tracebook/redaction_pipeline.rb', line 65 def deep_transform(value, redactor) case value when String redactor.call(value) when Hash value.each_with_object({}) do |(key, nested), memo| memo[key] = deep_transform(nested, redactor) end when Array value.map { |nested| deep_transform(nested, redactor) } else value end end |
#redact_string(value, pattern, replacement) ⇒ Object (private)
80 81 82 83 84 |
# File 'lib/tracebook/redaction_pipeline.rb', line 80 def redact_string(value, pattern, replacement) return value unless value.is_a?(String) value.gsub(pattern, replacement) end |