module BindingDumper::UniversalDumper

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.

@example

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

Constants

DUMPERS_ON_CONVERTING
DUMPERS_ON_DECONVERTING

Public Instance Methods

convert(object, dumped_ids = []) click to toggle source

Converts passed object to marshalable string

@param object [Object] @param dumped_ids [Array<Fixnum>] list of object_ids that are already dumped

@return [Hash]

# 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) click to toggle source

Returns converter that should be applied to provided object

@param object [Object] @param dumped_ids [Array<Fixum>] list of object_ids that are already dumped

@return [BindingDumper::Dumpers::Abstract]

# 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) click to toggle source

Deconverts passed object to marshalable string

@param object [Object]

@return [Object]

# 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) click to toggle source

Returns deconverter that should be applied to provided object

@param object [Object]

@return [BindingDumper::Dumpers::Abstract]

# 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) click to toggle source

Dump passed object to string

@param object [Object]

@return [String]

# File lib/binding_dumper/universal_dumper.rb, line 66
def dump(object)
  converted = convert(object)
  Marshal.dump(converted)
end
load(object) click to toggle source

Loads dumped object back to its original state

@param object [String]

@return [Object]

# File lib/binding_dumper/universal_dumper.rb, line 113
def load(object)
  converted = Marshal.load(object)
  deconvert(converted)
end