Sha256: 26da1b6ac76968bb66413d2f2943852f7c64d4a72d0792b9ac7f31b0080128a2

Contents?: true

Size: 938 Bytes

Versions: 1

Compression:

Stored size: 938 Bytes

Contents

class Hedgelog
  class Normalizer
    # rubocop:disable Security/MarshalLoad
    def normalize(data)
      # Need to Marshal.dump/Marshal.load to deep copy the input so that scrubbing doesn't change global state
      d = Marshal.load(Marshal.dump(data))
      normalize_hash(d)
    end
    # rubocop:enable Security/MarshalLoad

    def normalize_struct(struct)
      normalize_hash(Hash[struct.each_pair.to_a])
    end

    def normalize_hash(hash)
      Hash[hash.map do |key, val|
        [key, normalize_thing(val)]
      end]
    end

    def normalize_array(array)
      array.to_json
    end

    private

    def normalize_thing(thing)
      return '' if thing.nil?
      thing = thing.as_json if thing.respond_to?(:as_json)
      return normalize_struct(thing) if thing.is_a?(Struct)
      return normalize_array(thing) if thing.is_a?(Array)
      return normalize_hash(thing) if thing.is_a?(Hash)
      thing
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hedgelog-0.1.9 lib/hedgelog/normalizer.rb