class Sidekiq::Crypt::Traverser

Public Class Methods

new(filters) click to toggle source
# File lib/sidekiq-crypt/traverser.rb, line 8
def initialize(filters)
  @filters = filters
end

Public Instance Methods

traverse!(args, proc) click to toggle source
# File lib/sidekiq-crypt/traverser.rb, line 12
def traverse!(args, proc)
  args.each_with_index do |arg, index|
    next unless arg.is_a?(Hash) || arg.is_a?(Array)

    # override the params
    args[index] = traverse(arg, proc)
  end
end

Private Instance Methods

filter_match?(key) click to toggle source
# File lib/sidekiq-crypt/traverser.rb, line 41
def filter_match?(key)
  @filters.any? do |filter|
    case filter
    when Regexp then key.to_s.match(filter)
    else key.to_s == filter.to_s
    end
  end
end
traverse(object, proc) click to toggle source
# File lib/sidekiq-crypt/traverser.rb, line 23
def traverse(object, proc)
  # sidekiq arguments must be serialized as JSON.
  # Therefore, object could be hash, array or primitives like string/number
  # Also, recursive hashes or arrays is not possible.
  case object
  when Hash
    clean_hash = {}

    object.each do |key, value|
      clean_hash[key] = filter_match?(key) ? proc.call(key, value) : traverse(value, proc)
    end

    clean_hash
  when Array then object.map { |element| traverse(element, proc) }
  else object
  end
end