<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Segment7: render_tree for Rails</title>
    <link>http://blog.segment7.net/articles/2006/09/08/render_tree-for-rails</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>The Blog</description>
    <item>
      <title>render_tree for Rails</title>
      <description>&lt;p&gt;Spelunking deep in unfamiliar Rails view code?  Flushing out the cobwebs and updating your code?  Don't know what gets rendered when?

&lt;p&gt;I have a solution for you:

&lt;pre&gt;&lt;code&gt;class ActionView::Base

  alias plain_render render

  RENDERS = [:partial, :template, :file, :action, :text, :inline, :nothing,
             :update]

  def render(*args)
    @level ||= 0

    print '  ' * @level

    case args.first
    when String then
      p args.first
    when Hash then
      hash = args.first
      found = hash.keys &amp; RENDERS
      if found.length == 1 then
        puts "%p =&gt; %p" % [found.first, hash[found.first]]
      else
        raise "Dunno: %p" % [hash]
      end
    else
      raise "Dunno: %p" % [args]
    end

    @level += 1
    result = plain_render(*args)
    @level -= 1
    result
  end

end&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Drop that in &lt;tt&gt;test/render_tree.rb&lt;/tt&gt; and require it in your tests when you want to see a tree like this:

&lt;pre&gt;&lt;samp&gt;$ ruby test/views/things_view_test.rb -n test_view
Loaded suite test/views/things_view_test
Started
"things/things-header"
  "things/sidebar"
    "widgets/forms/goal_form"
    :partial =&gt; "widgets/sidenav_boxes/invite_and_edit"
      "widgets/sidenav_boxes/_invite_and_edit"
    :partial =&gt; "widgets/forms/edit_worth_doing_form"
      "widgets/forms/_edit_worth_doing_form"
    :partial =&gt; "widgets/sidenav_boxes/tags"
      "widgets/sidenav_boxes/_tags"
    :partial =&gt; "widgets/sidenav_boxes/popular_places"
      "widgets/sidenav_boxes/_popular_places"
    :partial =&gt; "widgets/sidenav_boxes/google_ads"
      "widgets/sidenav_boxes/_google_ads"
    :partial =&gt; "widgets/sidenav_boxes/find_help"
      "widgets/sidenav_boxes/_find_help"
    :partial =&gt; "widgets/sidenav_boxes/people_who_reached_this_goal"
      "widgets/sidenav_boxes/_people_who_reached_this_goal"
    :partial =&gt; "widgets/sidenav_boxes/quotation"
      "widgets/sidenav_boxes/_quotation"
    :partial =&gt; "widgets/sidenav_boxes/goal_created_by"
      "widgets/sidenav_boxes/_goal_created_by"
"widgets/general/post_add_messages"
"things/shared_body"
  :partial =&gt; "widgets/goals_gallery_teaser"
    "widgets/_goals_gallery_teaser"
  :partial =&gt; "entries_bucket"
    "things/_entries_bucket"
  "widgets/forms/related_goals"
.
Finished in 1.205494 seconds.

1 tests, 7 assertions, 0 failures, 0 errors&lt;/samp&gt;&lt;/pre&gt;

&lt;p&gt;(I think I'll end up throwing this into ZenTest.)
</description>
      <pubDate>Fri, 08 Sep 2006 11:02:00 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:0663309c-ce6f-412c-a6aa-a8df0160f8e0</guid>
      <author>drbrain@segment7.net (Eric Hodel)</author>
      <link>http://blog.segment7.net/articles/2006/09/08/render_tree-for-rails</link>
      <category>Hacking</category>
      <category>Rails</category>
      <category>Toys</category>
    </item>
    <item>
      <title>"render_tree for Rails" by Michael Schuerig</title>
      <description>&lt;p&gt;I&amp;#8217;m entirely happy if you just do the assertion :-}&lt;/p&gt;</description>
      <pubDate>Mon, 11 Sep 2006 12:59:35 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:87a1cb55-4327-4afc-8946-51aebc8741d6</guid>
      <link>http://blog.segment7.net/articles/2006/09/08/render_tree-for-rails#comment-343</link>
    </item>
    <item>
      <title>"render_tree for Rails" by Eric Hodel</title>
      <description>&lt;p&gt;@Michael: I&amp;#8217;m certainly not going to write it, sounds too complicated to me. :)  I&amp;#8217;ll just add it as a debugging tool.&lt;/p&gt;</description>
      <pubDate>Mon, 11 Sep 2006 10:47:16 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:c656eee9-bcb4-4b39-99db-2a1488783a7d</guid>
      <link>http://blog.segment7.net/articles/2006/09/08/render_tree-for-rails#comment-342</link>
    </item>
    <item>
      <title>"render_tree for Rails" by Michael Schuerig</title>
      <description>&lt;p&gt;If you add it to ZenTest, how about making it into an assertion? Something like matching a structural regular expression on renderings&lt;/p&gt;


&lt;pre&gt;
  assert_render_tree ['root_template',
    { :partial =&amp;gt; 'child1', :count =&amp;gt; 3 },
    [ { :partial =&amp;gt; 'child2' }, &amp;lt;grand_children&amp;gt; ],
    &amp;lt;more_children&amp;gt;],
    render_something
&lt;/pre&gt;

	&lt;p&gt;Don&amp;#8217;t make me write a BNF for it&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Mon, 11 Sep 2006 02:16:34 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:e119101d-cb10-4195-80f1-6ad7885c840f</guid>
      <link>http://blog.segment7.net/articles/2006/09/08/render_tree-for-rails#comment-341</link>
    </item>
    <item>
      <title>"render_tree for Rails" by Chris</title>
      <description>&lt;p&gt;Very nice&amp;#8212;trying it out now.  Thanks!&lt;/p&gt;</description>
      <pubDate>Fri, 08 Sep 2006 13:17:14 -0700</pubDate>
      <guid isPermaLink="false">urn:uuid:3a8da054-bd9d-4cae-b6dc-41430356ccd5</guid>
      <link>http://blog.segment7.net/articles/2006/09/08/render_tree-for-rails#comment-339</link>
    </item>
  </channel>
</rss>
