Sha256: 06c07b46367fd25ff188441e2a5dde478eb53a16c0ee6ec0b9a9f7189bcb6856

Contents?: true

Size: 818 Bytes

Versions: 9

Compression:

Stored size: 818 Bytes

Contents

require 'json'

module Serializer
  extend self

  def serialize(obj, json = true)
    result = obj.is_a?(Array) ? array(obj) : item(obj)
    json ? result.to_json : result
  end

  private

  def array(obj)
    obj.each_with_object([]) { |item, result| result << serialize(item, false) }
  end

  def hash(obj)
    obj.each_with_object({}) { |(k, v), result| result[k] = serialize(v, false) }
  end

  def item(obj)
    { class: obj.class.to_s, value: value(obj) }
  end

  def properties(obj)
    obj.instance_variables.each_with_object({}) do |var, result|
      result[var] = serialize(obj.instance_variable_get(var), false)
    end
  end

  def value(obj)
    return obj.to_s if %w(Float Integer Number String Symbol).include?(obj.class.to_s)
    return hash(obj) if obj.is_a?(Hash)
    properties(obj)
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
beryl-0.3.1 lib/serializer.rb
beryl-0.3.0 lib/serializer.rb
beryl-0.2.5 lib/serializer.rb
beryl-0.2.4 lib/serializer.rb
beryl-0.2.3 lib/serializer.rb
beryl-0.2.2 lib/serializer.rb
beryl-0.2.1 lib/serializer.rb
beryl-0.2.0 lib/serializer.rb
beryl-0.1.0 lib/serializer.rb