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