class Blinkist::AirbrakeScrubber::DeepTraversal

Public Class Methods

new(source) click to toggle source
# File lib/blinkist-airbrake-scrubber/deep_traversal.rb, line 9
def initialize(source)
  @source = source
end

Public Instance Methods

traverse(&block) click to toggle source
# File lib/blinkist-airbrake-scrubber/deep_traversal.rb, line 13
def traverse(&block)
  recursive_traverse(@source, &block)
end

Private Instance Methods

recursive_traverse(input, &block) click to toggle source
# File lib/blinkist-airbrake-scrubber/deep_traversal.rb, line 19
def recursive_traverse(input, &block)
  case input
  when Array
    input.map { |i| recursive_traverse(i, &block) }

  when Hash
    Hash[input.map do |key, value|
      # Go deeper for things that are not simple objects
      case value
      when Array, Hash
        [key, recursive_traverse(value, &block)]
      else
        [key, block.call(key, value)]
      end
    end]
  else
    input
  end
end