Sha256: 2f5c604bafd58d14bc95f78f1b7a70e846c3c7eda7871670cdf7501a9ebd74d8

Contents?: true

Size: 1.41 KB

Versions: 55

Compression:

Stored size: 1.41 KB

Contents

module Appsignal
  module Utils
    def self.sanitize(params, only_top_level=false, key_sanitizer=nil)
      if params.is_a?(Hash)
        {}.tap do |hsh|
          params.each do |key, val|
            hsh[self.sanitize_key(key, key_sanitizer)] = if only_top_level
              '?'
            else
              sanitize(val, only_top_level, key_sanitizer=nil)
            end
          end
        end
      elsif params.is_a?(Array)
        if only_top_level
          sanitize(params[0], only_top_level, key_sanitizer=nil)
        else
          params.map do |item|
            sanitize(item, only_top_level, key_sanitizer=nil)
          end.uniq
        end
      else
        '?'
      end
    end

    def self.sanitize_key(key, sanitizer)
      case sanitizer
      when :mongodb then key.to_s.gsub(/(\..+)/, '.?')
      else key
      end
    end

    def self.json_generate(body)
      JSON.generate(jsonify(body))
    end

    def self.jsonify(value)
      case value
      when String
        encode_utf8(value)
      when Numeric, NilClass, TrueClass, FalseClass
        value
      when Hash
        Hash[value.map { |k, v| [jsonify(k), jsonify(v)] }]
      when Array
        value.map { |v| jsonify(v) }
      else
        jsonify(value.to_s)
      end
    end

    def self.encode_utf8(value)
      value.encode(
        'utf-8'.freeze,
        :invalid => :replace,
        :undef   => :replace
      )
    end
  end
end

Version data entries

55 entries across 55 versions & 1 rubygems

Version Path
appsignal-1.2.5 lib/appsignal/utils.rb
appsignal-1.2.4 lib/appsignal/utils.rb
appsignal-1.2.4.beta.4 lib/appsignal/utils.rb
appsignal-1.2.4.beta.3 lib/appsignal/utils.rb
appsignal-1.2.4.beta.2 lib/appsignal/utils.rb
appsignal-1.2.4.beta.1 lib/appsignal/utils.rb
appsignal-1.2.3 lib/appsignal/utils.rb
appsignal-1.2.3.beta.3 lib/appsignal/utils.rb
appsignal-1.2.3.beta.2 lib/appsignal/utils.rb
appsignal-1.2.3.beta.1 lib/appsignal/utils.rb
appsignal-1.2.2 lib/appsignal/utils.rb
appsignal-1.2.1 lib/appsignal/utils.rb
appsignal-1.2.1.beta.3 lib/appsignal/utils.rb
appsignal-1.2.1.beta.2 lib/appsignal/utils.rb
appsignal-1.2.1.beta.1 lib/appsignal/utils.rb
appsignal-1.2.0 lib/appsignal/utils.rb
appsignal-1.2.0.beta.1 lib/appsignal/utils.rb
appsignal-1.2.0.alpha.6 lib/appsignal/utils.rb
appsignal-1.2.0.alpha.5 lib/appsignal/utils.rb
appsignal-1.2.0.alpha.4 lib/appsignal/utils.rb