Class: Labkit::Logging::FieldValidator::Registry

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/labkit/logging/field_validator/registry.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRegistry

Returns a new instance of Registry.



14
15
16
17
18
19
20
21
# File 'lib/labkit/logging/field_validator/registry.rb', line 14

def initialize
  @mutex = Mutex.new
  @offenses = Set.new
  @offense_keys = Set.new # For O(1) lookup
  @removed_offenses = Set.new
  @baseline_by_callsite = nil
  @resolved_fields = {} # Cache for resolved standard fields
end

Instance Attribute Details

#offensesObject (readonly)

Returns the value of attribute offenses.



12
13
14
# File 'lib/labkit/logging/field_validator/registry.rb', line 12

def offenses
  @offenses
end

Instance Method Details

#check_for_removed_offenses(callsite, fields, logger_class) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/labkit/logging/field_validator/registry.rb', line 44

def check_for_removed_offenses(callsite, fields, logger_class)
  baseline = baseline_by_callsite[[callsite, logger_class]]
  return unless baseline

  @mutex.synchronize do
    baseline.each do |offense|
      key = offense_key(offense)
      next if @offense_keys.include?(key)

      deprecated = offense['deprecated_field']
      standard = resolve_standard_field(offense['standard_field'])

      next unless fields.include?(standard) && fields.exclude?(deprecated)

      @removed_offenses << offense
    end
  end
end

#clear!Object



74
75
76
77
78
79
80
81
82
# File 'lib/labkit/logging/field_validator/registry.rb', line 74

def clear!
  @mutex.synchronize do
    @offenses.clear
    @offense_keys.clear
    @removed_offenses.clear
    @baseline_by_callsite = nil
    @resolved_fields.clear
  end
end

#finalizeObject

Returns [detected_offenses, new_offenses, removed_offenses]



64
65
66
67
68
69
70
71
72
# File 'lib/labkit/logging/field_validator/registry.rb', line 64

def finalize
  @mutex.synchronize do
    baseline_keys = load_baseline.to_set { |b| offense_key(b) }

    new_offenses = @offenses.reject { |o| baseline_keys.include?(offense_key(o)) }

    [@offenses.to_a, new_offenses, @removed_offenses.to_a]
  end
end

#record_offense(callsite, lineno, deprecated_field, standard_field, logger_class) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/labkit/logging/field_validator/registry.rb', line 23

def record_offense(callsite, lineno, deprecated_field, standard_field, logger_class)
  key = [callsite, deprecated_field, logger_class].freeze

  return if @offense_keys.include?(key)

  @mutex.synchronize do
    next if @offense_keys.include?(key)

    @offense_keys << key
    @offenses << {
      'callsite' => callsite,
      'lineno' => lineno,
      'deprecated_field' => deprecated_field,
      'standard_field' => standard_field,
      'logger_class' => logger_class
    }.freeze

    @removed_offenses.reject! { |r| offense_key(r) == key }
  end
end