Tenderlove Making

Graphing Ruby Objects

I’ve been working more on my ObjectGraph project, and I think I’m about ready to release. With a bunch of help from Ryan, and other Seattle.rb folks fixing my dumb errors, I’ve added a couple new features to Object Graph that I think people will enjoy.

First, you can no graph ascendants of your object. Say you have a reference, and you want to know the graph pointing to that reference. You can do it now: ~~~ ruby class A; end a = A.new struct = { :one => [], :two => [a] }

grapher = ObjectGraph.new(:ascendants => true) grapher.graph(a) puts grapher ~~~ Which will produce this graph: ascendants

You can also see differences in graphs. Say you want to know what happens to your graph after performing some action. Just pass a block to the graph method, and ObjectGraph will diff the two trees. Green boxes are new objects, pink boxes are one that went away, and red arrows are references that were destroyed. ~~~ ruby class A; end struct = { :one => [], :two => [A.new]}

grapher = ObjectGraph.new grapher.graph(struct) do |s| s[:one] « A.new s[:two].pop end puts grapher ~~~ diff

« go back