Guest User

Untitled

a guest
May 23rd, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.69 KB | None | 0 0
  1. class Object
  2. def walk(&block)
  3. walk_object(Set.new, &block)
  4. end
  5.  
  6. def walk_object(set, &block)
  7. return false if set.include?(self.object_id)
  8.  
  9. set << self.object_id
  10.  
  11. yield self
  12.  
  13. walk_subobjects(set, &block)
  14. end
  15.  
  16. def walk_subobjects(set, &block)
  17. instance_variables.each { |name|
  18. o = obj.instance_variable_get(name)
  19. o.walk_object(set, &block)
  20. }
  21. end
  22. end
  23.  
  24. class Array
  25. def walk_subobjects(set, &block)
  26. super
  27. self.each { |o| o.walk_object(set, &block) }
  28. end
  29. end
  30.  
  31. class Hash
  32. def walk_subobjects(set, &block)
  33. super
  34. keys.walk_subobjects(set, &block)
  35. values.walk_subobjects(set, &block)
  36. end
  37. end
Add Comment
Please, Sign In to add comment