Module: BindingDumper::UniversalDumper

Extended by:
Memories, UniversalDumper
Included in:
UniversalDumper
Defined in:
lib/binding_dumper/universal_dumper.rb

Overview

Module that puts together all existing dumpers and wraps their functionality

This dumper can dump and load back any object using system of existing dumpers.

Examples:

dump = BindingDumper::UniversalDumper.dump(Object.new)
restored = BindingDumper::UniversalDumper.load(dump)
# => #<Object>

Constant Summary collapse

DUMPERS_ON_CONVERTING =
[
  Dumpers::MagicDumper,
  Dumpers::ProcDumper,
  Dumpers::ClassDumper,
  Dumpers::ArrayDumper,
  Dumpers::HashDumper,
  Dumpers::PrimitiveDumper,
  Dumpers::ObjectDumper
]
DUMPERS_ON_DECONVERTING =
[
  Dumpers::MagicDumper,
  Dumpers::ExistingObjectDumper,
  Dumpers::ProcDumper,
  Dumpers::ArrayDumper,
  Dumpers::ClassDumper,
  Dumpers::ObjectDumper,
  Dumpers::HashDumper,
  Dumpers::PrimitiveDumper
]

Instance Method Summary collapse

Methods included from Memories

flush_memories!, memories, remember!, with_memories

Instance Method Details

#convert(object, dumped_ids = []) ⇒ Hash

Converts passed object to marshalable string

Parameters:

  • object (Object)
  • dumped_ids (Array<Fixnum>) (defaults to: [])

    list of object_ids that are already dumped

Returns:

  • (Hash)


56
57
58
# File 'lib/binding_dumper/universal_dumper.rb', line 56

def convert(object, dumped_ids = [])
  converter_for(object, dumped_ids).convert
end

#converter_for(object, dumped_ids) ⇒ BindingDumper::Dumpers::Abstract

Returns converter that should be applied to provided object

Parameters:

  • object (Object)
  • dumped_ids (Array<Fixum>)

    list of object_ids that are already dumped

Returns:



43
44
45
46
47
# File 'lib/binding_dumper/universal_dumper.rb', line 43

def converter_for(object, dumped_ids)
  DUMPERS_ON_CONVERTING.map { |dumper_klass|
    dumper_klass.new(object, dumped_ids)
  }.detect(&:can_convert?)
end

#deconvert(converted_data) ⇒ Object

Deconverts passed object to marshalable string

Parameters:

  • object (Object)

Returns:

  • (Object)


91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/binding_dumper/universal_dumper.rb', line 91

def deconvert(converted_data)
  deconverter = deconverter_for(converted_data)

  if deconverter.is_a?(Dumpers::PrimitiveDumper)
    return deconverter.deconvert
  end

  old_object_id = converted_data[:_old_object_id]

  with_memories(old_object_id) do
    deconverter.deconvert do |object|
      remember!(object, old_object_id)
    end
  end
end

#deconverter_for(object) ⇒ BindingDumper::Dumpers::Abstract

Returns deconverter that should be applied to provided object

Parameters:

  • object (Object)

Returns:



77
78
79
80
81
82
83
# File 'lib/binding_dumper/universal_dumper.rb', line 77

def deconverter_for(object)
  DUMPERS_ON_DECONVERTING.map do |dumper_klass|
    dumper_klass.new(object)
  end.detect do |dumper|
    dumper.can_deconvert?
  end
end

#dump(object) ⇒ String

Dump passed object to string

Parameters:

  • object (Object)

Returns:

  • (String)


66
67
68
69
# File 'lib/binding_dumper/universal_dumper.rb', line 66

def dump(object)
  converted = convert(object)
  Marshal.dump(converted)
end

#load(object) ⇒ Object

Loads dumped object back to its original state

Parameters:

  • object (String)

Returns:

  • (Object)


113
114
115
116
# File 'lib/binding_dumper/universal_dumper.rb', line 113

def load(object)
  converted = Marshal.load(object)
  deconvert(converted)
end