Class: Lapsoss::Scrubber

Inherits:
Object
  • Object
show all
Defined in:
lib/lapsoss/scrubber.rb

Constant Summary collapse

DEFAULT_SCRUB_FIELDS =

Match Rails conventions - these are only used when Rails is not available Rails uses partial matching, so ‘passw’ matches ‘password’

%i[
  passw email secret token _key crypt salt certificate otp ssn cvv cvc
].freeze
MASK =
"[FILTERED]"

Instance Method Summary collapse

Constructor Details

#initialize(config = {}) ⇒ Scrubber

Returns a new instance of Scrubber.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/lapsoss/scrubber.rb', line 15

def initialize(config = {})
  @scrub_all = !!config[:scrub_all]
  @whitelist_fields = Array(config[:whitelist_fields]).map(&:to_s)
  @randomize_scrub_length = !!config[:randomize_scrub_length]

  # Combine: Rails filter parameters + custom fields (if provided)
  base_params = if defined?(Rails) && Rails.respond_to?(:application) && Rails.application
                  Rails.application.config.filter_parameters.presence || DEFAULT_SCRUB_FIELDS
  else
                  DEFAULT_SCRUB_FIELDS
  end

  filter_params = if config[:scrub_fields]
                    Array(base_params) + Array(config[:scrub_fields])
  else
                    base_params
  end

  @filter = ActiveSupport::ParameterFilter.new(filter_params, mask: MASK)
end

Instance Method Details

#scrub(data) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/lapsoss/scrubber.rb', line 36

def scrub(data)
  return data if data.nil?

  if @scrub_all
    deep_scrub_all(data)
  else
    filtered = @filter.filter(data)
    filtered = restore_whitelisted_values(data, filtered) if @whitelist_fields.any?
    @randomize_scrub_length ? randomize_masks(filtered) : filtered
  end
end