Module: ERBPropagator

Defined in:
lib/contrast/extension/assess/erb.rb

Overview

This module is used to track propagation through ERB template rendering

Class Method Summary collapse

Class Method Details

.result_tagger(patcher, preshift, ret, _block) ⇒ Object



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
# File 'lib/contrast/extension/assess/erb.rb', line 7

def result_tagger patcher, preshift, ret, _block
  return unless preshift.args.length >= 1

  properties = Contrast::Agent::Assess::Tracker.properties(ret)
  return unless properties

  used_binding = preshift.args[0]
  binding_variable_set = used_binding.local_variables

  erb_pre_result = preshift.object.src
  parent_events = []
  binding_variable_set.each do |bound_var_symbol|
    bound_variable_value = used_binding.local_variable_get(bound_var_symbol)
    next unless Contrast::Agent::Assess::Tracker.tracked?(bound_variable_value)
    next unless erb_pre_result.include?(bound_var_symbol.to_s)

    start_index = ret.index(bound_variable_value)
    next if start_index.nil?

    properties.copy_from(bound_variable_value, ret, start_index)
    parent_event = Contrast::Agent::Assess::Tracker.properties(bound_variable_value)&.event
    parent_events << parent_event if parent_event
  end
  properties.build_event(
      patcher,
      ret,
      preshift.object,
      ret,
      preshift.args,
      1)
  properties.event.instance_variable_set(:@_parent_events, parent_events)

  ret
end