Class: RedAlert::Cleaner

Inherits:
Object
  • Object
show all
Defined in:
lib/red_alert/cleaner.rb

Constant Summary collapse

FILTERED_TEXT =
'[REMOVED]'
RECURSIVE_TEXT =
'[RECURSIVE STRUCTURE]'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filter_keys) ⇒ Cleaner

Returns a new instance of Cleaner.



8
9
10
# File 'lib/red_alert/cleaner.rb', line 8

def initialize(filter_keys)
  @filter_keys = filter_keys.to_set
end

Instance Attribute Details

#filter_keysObject (readonly)

Returns the value of attribute filter_keys.



6
7
8
# File 'lib/red_alert/cleaner.rb', line 6

def filter_keys
  @filter_keys
end

Instance Method Details

#format(value, stack = Set.new) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/red_alert/cleaner.rb', line 23

def format(value, stack = Set.new)
  return RECURSIVE_TEXT if stack.include? value.object_id

  if value.respond_to? :to_ary
    value.map{|v| format v, stack + [value.object_id]}
  elsif value.respond_to? :to_hash
    value.each_with_object({}){|(k,v), memo| memo[k] = format v, stack + [value.object_id]}
  else
    value.nil? ? nil : value.to_s
  end
end

#scrub(params) ⇒ Object



12
13
14
15
16
17
18
19
20
21
# File 'lib/red_alert/cleaner.rb', line 12

def scrub(params)
  formatted = format(params)
  formatted.each do |key, value|
    if filter_keys.include? key
      formatted[key] = FILTERED_TEXT
    elsif value.respond_to? :to_hash
      formatted[key] = scrub value
    end
  end
end