class Cased::Sensitive::Processor

Attributes

audit_event[R]
handlers[R]

Public Class Methods

new(audit_event, handlers) click to toggle source
# File lib/cased/sensitive/processor.rb, line 27
def initialize(audit_event, handlers)
  @audit_event = audit_event.dup.freeze
  @ranges = []
  @handlers = handlers
end
process(audit_event, handlers = nil) click to toggle source
# File lib/cased/sensitive/processor.rb, line 8
def self.process(audit_event, handlers = nil)
  handlers ||= Cased::Sensitive::Handler.handlers
  processor = new(audit_event, handlers)
  processor.process
  processor
end
process!(audit_event, handlers = nil) click to toggle source
# File lib/cased/sensitive/processor.rb, line 15
def self.process!(audit_event, handlers = nil)
  processor = process(audit_event, handlers)
  return unless processor.sensitive?

  audit_event[:'.cased'] = {
    pii: processor.to_h,
  }
end

Public Instance Methods

process() click to toggle source
# File lib/cased/sensitive/processor.rb, line 33
def process
  return true if defined?(@processed)

  walk(audit_event)
  @processed = true
end
ranges() click to toggle source
# File lib/cased/sensitive/processor.rb, line 40
def ranges
  @ranges.flatten
end
sensitive?() click to toggle source
# File lib/cased/sensitive/processor.rb, line 44
def sensitive?
  process && ranges.any?
end
to_h() click to toggle source
# File lib/cased/sensitive/processor.rb, line 48
def to_h
  results = {}
  ranges.each do |range|
    results[range.key] ||= []
    results[range.key] << range.to_h
  end
  results
end

Private Instance Methods

process_handlers(audit_event, path, value) click to toggle source
# File lib/cased/sensitive/processor.rb, line 70
def process_handlers(audit_event, path, value)
  handlers.each do |handler|
    ranges = handler.call(audit_event, path, value)
    @ranges << ranges unless ranges.nil? || ranges.empty?
  end
end
walk(hash) click to toggle source
# File lib/cased/sensitive/processor.rb, line 59
def walk(hash)
  hash.each_with_json_path do |path, value|
    case value
    when Cased::Sensitive::String
      @ranges << value.range(key: path)
    when ::String
      process_handlers(audit_event, path, value)
    end
  end
end