module Libhoney::Cleaner

Constants

ENCODING_OPTIONS
RAISED
RECURSION

Public Instance Methods

clean_data(data, seen = {}) click to toggle source

Cleans an object for converting to JSON. Checks for recursion, exceptions generated, and non UTF8 encoded strings. @param data the data to clean @param seen [Hash] used to check for recursion @return the cleaned object

# File lib/libhoney/cleaner.rb, line 12
def clean_data(data, seen = {})
  return nil if data.nil?

  # check for recursion here, by tracking all of the potentially nested
  # objects that we have seen before.
  protection =  case data
                when Hash, Array, Set
                  # bail here if we have already seen this object
                  return seen[data] if seen[data]

                  seen[data] = RECURSION
                end

  value = case data
          when Hash
            clean_hash = {}
            data.each do |key, val|
              clean_hash[key] = clean_data(val, seen)
            end
            clean_hash
          when Array, Set
            data.map do |element|
              clean_data(element, seen)
            end
          when Numeric, TrueClass, FalseClass
            data
          when String
            clean_string(data)
          else
            str = begin
                    data.to_s
                  rescue StandardError
                    RAISED
                  end
            clean_string(str)
          end

  seen[data] = value if protection
  value
end
clean_string(str) click to toggle source

Converts a string to UTF8 encoding if required using the ENCODING_OPTIONS @param str [String] the string to convert @return [String] the UTF8 encoded string

# File lib/libhoney/cleaner.rb, line 56
def clean_string(str)
  return str if str.encoding == Encoding::UTF_8 && str.valid_encoding?

  str.encode(Encoding::UTF_8, **ENCODING_OPTIONS)
end