class BindingDumper::Dumpers::HashDumper

Class responsible for converting arbitary hashes to marshalable hashes

@example

hash = { key: 'value' }
dump = BindingDumper::Dumpers::HashDumper.new(hash).convert
BindingDumper::Dumpers::HashDumper.new(dump).deconvert
# => { key: 'value' }

Public Instance Methods

can_convert?() click to toggle source

Returns true if HashDumper can convert passed abstract_object

@return [true, false]

# File lib/binding_dumper/dumpers/hash_dumper.rb, line 17
def can_convert?
  hash.is_a?(Hash)
end
can_deconvert?() click to toggle source

Returns true if HashDumper can deconvert passed abstract_object

@return [true, false]

# File lib/binding_dumper/dumpers/hash_dumper.rb, line 25
def can_deconvert?
  abstract_object.is_a?(Hash)
end
convert() click to toggle source

Converts passed abstract_object to marshalable Hash

@return [Hash]

# File lib/binding_dumper/dumpers/hash_dumper.rb, line 33
def convert
  unless should_convert?
    return { _existing_object_id: hash.object_id }
  end

  dumped_ids << hash.object_id

  prepared = hash.map do |k, v|
    converted_k = UniversalDumper.convert(k, dumped_ids)
    converted_v = UniversalDumper.convert(v, dumped_ids)
    [converted_k, converted_v]
  end

  result = Hash[prepared]

  {
    _old_object_id: hash.object_id,
    _object_data: result
  }
end
deconvert() { |result| ... } click to toggle source

Deconverts passed abstract_object back to the original state

@return [Hash]

# File lib/binding_dumper/dumpers/hash_dumper.rb, line 58
def deconvert
  result = {}
  yield result
  hash.each do |converted_k, converted_v|
    k = UniversalDumper.deconvert(converted_k)
    v = UniversalDumper.deconvert(converted_v)
    result[k] = v
  end
  result
end