module Appsignal::Utils::QueryParamsSanitizer::ClassMethods

def sanitize(params, only_top_level = false, key_sanitizer = nil)

def sanitize(params, only_top_level = false, key_sanitizer = nil)
  case params
  when Hash
    sanitize_hash params, only_top_level, key_sanitizer
  when Array
    sanitize_array params, only_top_level, key_sanitizer
  else
    REPLACEMENT_KEY
  end
end

def sanitize_array(array, only_top_level, key_sanitizer)

def sanitize_array(array, only_top_level, key_sanitizer)
  if only_top_level
    sanitize(array[0], only_top_level, key_sanitizer)
  else
    array.map do |value|
      sanitize(value, only_top_level, key_sanitizer)
    end.uniq
  end
end

def sanitize_hash(hash, only_top_level, key_sanitizer)

def sanitize_hash(hash, only_top_level, key_sanitizer)
  {}.tap do |h|
    hash.each do |key, value|
      h[sanitize_key(key, key_sanitizer)] =
        if only_top_level
          REPLACEMENT_KEY
        else
          sanitize(value, only_top_level, key_sanitizer)
        end
    end
  end
end

def sanitize_key(key, sanitizer)

def sanitize_key(key, sanitizer)
  case sanitizer
  when :mongodb then key.to_s.gsub(/(\..+)/, ".#{REPLACEMENT_KEY}")
  else key
  end
end