Sha256: a7cb173be7030fcc9360998d4098d5de034acb461cc73376eed3bcfef42181d1

Contents?: true

Size: 1.47 KB

Versions: 12

Compression:

Stored size: 1.47 KB

Contents

# Copyright (c) 2015 Sqreen. All Rights Reserved.
# Please refer to our terms for more information: https://www.sqreen.com/terms.html

module Sqreen
  # Serialization functions: convert Hash -> simple ruby types
  module Serializer
    # Serialize a deep hash/array to more simple types
    def self.serialize(obj, max_depth = 10)
      if obj.is_a?(Array)
        new_obj = []
        i = -1
        to_do = obj.map { |v| [new_obj, i += 1, v, 0] }
      else
        new_obj = {}
        to_do = obj.map { |k, v| [new_obj, k, v, 0] }
      end
      until to_do.empty?
        where, key, value, deepness = to_do.pop
        safe_key = key.kind_of?(Integer) ? key : key.to_s
        if value.is_a?(Hash) && deepness < max_depth
          where[safe_key] = {}
          to_do += value.map { |k, v| [where[safe_key], k, v, deepness + 1] }
        elsif value.is_a?(Array) && deepness < max_depth
          where[safe_key] = []
          i = -1
          to_do += value.map { |v| [where[safe_key], i += 1, v, deepness + 1] }
        else
          case value
          when Symbol
            where[safe_key] = value.to_s
          when Rational
            where[safe_key] = value.to_f
          when Time
            where[safe_key] = value.iso8601
          when Numeric, String, TrueClass, FalseClass, NilClass
            where[safe_key] = value
          else
            where[safe_key] = "#{value.class.name}:#{value.inspect}"
          end
        end
      end

      new_obj
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
sqreen-1.18.6-java lib/sqreen/serializer.rb
sqreen-1.18.6 lib/sqreen/serializer.rb
sqreen-1.18.5-java lib/sqreen/serializer.rb
sqreen-1.18.5 lib/sqreen/serializer.rb
sqreen-1.18.4-java lib/sqreen/serializer.rb
sqreen-1.18.4 lib/sqreen/serializer.rb
sqreen-1.18.3-java lib/sqreen/serializer.rb
sqreen-1.18.3 lib/sqreen/serializer.rb
sqreen-1.18.3.beta2 lib/sqreen/serializer.rb
sqreen-1.18.3.beta1 lib/sqreen/serializer.rb
sqreen-1.18.2-java lib/sqreen/serializer.rb
sqreen-1.18.2 lib/sqreen/serializer.rb