class BindingDumper::Dumpers::ClassDumper
Class responsible for converting classes to marshalable Hash
@example
class MyClass @a = 1 @@b = 2 end dump = BindingDumper::Dumpers::ClassDumper.new(MyClass).convert # => { marshalable: :hash } BindingDumper::Dumpers::ClassDumper.new(MyClass).deconvert # => MyClass
Public Instance Methods
can_convert?()
click to toggle source
Returns true
if ClassDumper
can convert passed abstract_object
@return [true, false]
# File lib/binding_dumper/dumpers/class_dumper.rb, line 21 def can_convert? klass.is_a?(Class) end
can_deconvert?()
click to toggle source
Returns true
if ClassDumper
can deconvert passed abstract_object
@return [true, false]
# File lib/binding_dumper/dumpers/class_dumper.rb, line 29 def can_deconvert? abstract_object.is_a?(Hash) && (abstract_object.has_key?(:_cvars) || abstract_object.has_key?(:_anonymous)) end
convert()
click to toggle source
Converts passed abstract_object
to marshalable Hash
@return [Hash]
# File lib/binding_dumper/dumpers/class_dumper.rb, line 38 def convert return unless should_convert? dumped_ids << klass.object_id if klass.name { _klass: klass, _ivars: converted_ivars(dumped_ids), _cvars: converted_cvars(dumped_ids) } else { _anonymous: true } end end
deconvert()
click to toggle source
Deconverts passed abstract_object
back to the original state
@return [Class]
# File lib/binding_dumper/dumpers/class_dumper.rb, line 60 def deconvert return Class.new if abstract_object[:_anonymous] klass, converted_ivars, converted_cvars = abstract_object[:_klass], abstract_object[:_ivars], abstract_object[:_cvars] converted_ivars.each do |ivar_name, converted_ivar| ivar = UniversalDumper.deconvert(converted_ivar) klass.instance_variable_set(ivar_name, ivar) end converted_cvars.each do |cvar_name, converted_cvar| cvar = UniversalDumper.deconvert(converted_cvar) klass.class_variable_set(cvar_name, cvar) end klass end
Private Instance Methods
converted_cvars(dumped_ids = [])
click to toggle source
Returns converted mapping of class variables like
{ class variable name => class variable vakue }
@return [Hash]
# File lib/binding_dumper/dumpers/class_dumper.rb, line 98 def converted_cvars(dumped_ids = []) converted = klass.class_variables.map do |cvar_name| ivar = klass.class_variable_get(cvar_name) if dumped_ids.include?(ivar.object_id) [] else conveted_ivar = UniversalDumper.convert(ivar, dumped_ids) [cvar_name, conveted_ivar] end end Hash[converted] end
converted_ivars(dumped_ids = [])
click to toggle source
Returns converted mapping of instance variables like
{ instance variable name => instance variable value }
@return [Hash]
# File lib/binding_dumper/dumpers/class_dumper.rb, line 84 def converted_ivars(dumped_ids = []) converted = klass.instance_variables.map do |ivar_name| ivar = klass.instance_variable_get(ivar_name) conveted_ivar = UniversalDumper.convert(ivar, dumped_ids) [ivar_name, conveted_ivar] end Hash[converted] end