lib/yasl/dumper.rb in yasl-0.1.0 vs lib/yasl/dumper.rb in yasl-0.2.0
- old
+ new
@@ -73,23 +73,23 @@
dump_structure(klass, for_classes: true) unless klass.class_variables.empty? && klass.instance_variables.empty?
end
def dump_ruby_basic_data_type_data(object)
case object
- when Time
+ when class_ancestor_names_include?('Time')
object.to_datetime.marshal_dump
- when Date
+ when class_ancestor_names_include?('Date')
object.marshal_dump
- when Complex, Rational, Regexp, Symbol
+ when class_ancestor_names_include?('Complex', 'Rational', 'Regexp', 'Symbol', 'BigDecimal')
object.to_s
- when Set
+ when class_ancestor_names_include?('Set')
object.to_a.uniq.map {|element| dump_structure(element) unless unserializable?(element)}
- when Range
+ when class_ancestor_names_include?('Range')
[object.begin, object.end, object.exclude_end?]
- when Array
+ when class_ancestor_names_include?('Array')
object.map {|element| dump_structure(element) unless unserializable?(element)}
- when Hash
+ when class_ancestor_names_include?('Hash')
object.reject do |key, value|
[key, value].detect {|element| unserializable?(element)}
end.map do |pair|
pair.map {|element| dump_structure(element)}
end
@@ -186,8 +186,16 @@
class_objects[object_class] ||= []
class_objects[object_class] << object unless class_objects[object_class].include?(object)
class_objects[object_class].index(object) + 1
end
+ def class_ancestor_names_include?(*class_names)
+ lambda do |object|
+ class_names.reduce(false) do |result, class_name|
+ result || object.class.ancestors.map(&:name).include?(class_name)
+ end
+ end
+ end
+
end
end