Sha256: df6ccdb1bd78874401bdb79af45818e86c204bdef731cf5f860faa6d45faba77

Contents?: true

Size: 794 Bytes

Versions: 1

Compression:

Stored size: 794 Bytes

Contents

class Hedgelog
  class Normalizer
    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

    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?
      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.6 lib/hedgelog/normalizer.rb