Sha256: 02cc05f1d4d23d12a0390ff2511c175dc52dcf4006b69a697cb387a1984d7ec5

Contents?: true

Size: 1.48 KB

Versions: 29

Compression:

Stored size: 1.48 KB

Contents

# typed: true

# 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

29 entries across 29 versions & 1 rubygems

Version Path
sqreen-1.22.0-java lib/sqreen/serializer.rb
sqreen-1.22.0 lib/sqreen/serializer.rb
sqreen-1.21.1-java lib/sqreen/serializer.rb
sqreen-1.21.1 lib/sqreen/serializer.rb
sqreen-1.21.0-java lib/sqreen/serializer.rb
sqreen-1.21.0 lib/sqreen/serializer.rb
sqreen-1.20.4-java lib/sqreen/serializer.rb
sqreen-1.20.4 lib/sqreen/serializer.rb
sqreen-1.21.0.beta3-java lib/sqreen/serializer.rb
sqreen-1.21.0.beta3 lib/sqreen/serializer.rb
sqreen-1.20.4.beta1 lib/sqreen/serializer.rb
sqreen-1.19.4 lib/sqreen/serializer.rb
sqreen-1.20.3 lib/sqreen/serializer.rb
sqreen-1.20.2 lib/sqreen/serializer.rb
sqreen-1.21.0.beta2 lib/sqreen/serializer.rb
sqreen-1.21.0.beta1 lib/sqreen/serializer.rb
sqreen-1.20.1-java lib/sqreen/serializer.rb
sqreen-1.20.1 lib/sqreen/serializer.rb
sqreen-1.20.0-java lib/sqreen/serializer.rb
sqreen-1.20.0 lib/sqreen/serializer.rb