Sha256: 30080b7bc03f812b617b1a40c12a346de05853a7078fc267db782c192edea5c4

Contents?: true

Size: 1.46 KB

Versions: 114

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

class ReeObject::LoadJsonDump
  include Ree::FnDSL

  fn :load_json_dump

  ARRAY = 'array'
  HASH = 'hash'
  PRIMITIVE = 'primitive'
  OBJECT = 'object'

  contract(Hash => Any)
  def call(dump)
    recursively_load(dump)
  end

  private

  def recursively_load(dump)
    case dump['type']
    when ARRAY
      dump['value'].map { recursively_load(_1)}
    when HASH
      result = {}

      dump['value'].map do |v|
        result[recursively_load(v[0])] = recursively_load(v[1])
      end

      result
    when PRIMITIVE
      load_primitive(dump['class'], dump['value'])
    when OBJECT
      load_object(dump['class'], dump['value'])
    else
      raise NotImplementedError, "unsupported type provider '#{dump['type']}'"
    end
  end

  private

  def load_primitive(class_str, val)
    if class_str == 'Class' || class_str == 'Module'
      return Object.const_get(val)
    end

    klass = Object.const_get(class_str)

    if klass == Symbol
      val.to_sym
    elsif klass == Date
      Date.parse(val)
    elsif klass == Time
      Time.parse(val)
    elsif klass == DateTime
      DateTime.parse(val)
    elsif klass == Module || klass == Class
      klass
    else
      val
    end
  end

  def load_object(class_str, val)
    klass = Object.const_get(class_str)
    obj = klass.allocate

    val.each do |v|
      var = recursively_load(v[0])
      value = recursively_load(v[1])
      obj.instance_variable_set(var, value)
    end

    obj
  end
end

Version data entries

114 entries across 114 versions & 1 rubygems

Version Path
ree_lib-1.1.1 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.1.0 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.124 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.123 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.122 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.121 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.120 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.119 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.118 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.117 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.116 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.115 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.114 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.113 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.112 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.111 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.110 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.109 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.108 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
ree_lib-1.0.107 lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb