<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -38,7 +38,13 @@ module Sinatra
     # *NOTICE* that you call this without an &lt;tt&gt;=&lt;/tt&gt; sign. IE, 
     # in a &lt;tt&gt;&lt;% %&gt;&lt;/tt&gt; block, and not in a &lt;tt&gt;&lt;%= %&gt;&lt;/tt&gt; block.
     def yield_content(key, *args)
-      content_blocks[key.to_sym].each {|content| content.call(*args) }
+      content_blocks[key.to_sym].map do |content| 
+        if respond_to?(:block_is_haml?) &amp;&amp; block_is_haml?(content)
+          capture_haml(*args, &amp;content)
+        else
+          content.call(*args)
+        end
+      end.join
     end
 
     private</diff>
      <filename>lib/sinatra/content_for.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,7 @@ end
 
 require 'contest'
 require 'sinatra/test'
+require 'haml'
 
 begin
   require 'redgreen'
@@ -39,50 +40,117 @@ class Test::Unit::TestCase
 end
 
 class ContentForTest &lt; Test::Unit::TestCase
-  def erb_app(view)
-    mock_app {
-      layout { '&lt;% yield_content :foo %&gt;' }
-      get('/') { erb view } 
-    }
+  context 'using erb' do
+    def erb_app(view)
+      mock_app {
+        layout { '&lt;% yield_content :foo %&gt;' }
+        get('/') { erb view } 
+      }
+    end
+
+    it 'renders blocks declared with the same key you use when rendering' do
+      erb_app '&lt;% content_for :foo do %&gt;foo&lt;% end %&gt;'
+
+      get '/'
+      assert ok?
+      assert_equal 'foo', body
+    end
+
+    it 'does not render a block with a different key' do
+      erb_app '&lt;% content_for :bar do %&gt;bar&lt;% end %&gt;'
+
+      get '/'
+      assert ok?
+      assert_equal '', body
+    end
+
+    it 'renders multiple blocks with the same key' do
+      erb_app &lt;&lt;-erb_snippet
+        &lt;% content_for :foo do %&gt;foo&lt;% end %&gt;
+        &lt;% content_for :foo do %&gt;bar&lt;% end %&gt;
+        &lt;% content_for :baz do %&gt;WON'T RENDER ME&lt;% end %&gt;
+        &lt;% content_for :foo do %&gt;baz&lt;% end %&gt;
+      erb_snippet
+
+      get '/'
+      assert ok?
+      assert_equal 'foobarbaz', body
+    end
+
+    it 'passes values to the blocks' do
+      mock_app {
+        layout { '&lt;% yield_content :foo, 1, 2 %&gt;' }
+        get('/') { erb '&lt;% content_for :foo do |a, b| %&gt;&lt;i&gt;&lt;%= a %&gt;&lt;/i&gt; &lt;%= b %&gt;&lt;% end %&gt;' }
+      }
+
+      get '/'
+      assert ok?
+      assert_equal '&lt;i&gt;1&lt;/i&gt; 2', body
+    end
   end
 
-  it 'renders blocks declared with the same key you use when rendering' do
-    erb_app '&lt;% content_for :foo do %&gt;foo&lt;% end %&gt;'
-
-    get '/'
-    assert ok?
-    assert_equal 'foo', body
-  end
-
-  it 'does not render a block with a different key' do
-    erb_app '&lt;% content_for :bar do %&gt;bar&lt;% end %&gt;'
-
-    get '/'
-    assert ok?
-    assert_equal '', body
-  end
-
-  it 'renders multiple blocks with the same key' do
-    erb_app &lt;&lt;-erb_snippet
-      &lt;% content_for :foo do %&gt;foo&lt;% end %&gt;
-      &lt;% content_for :foo do %&gt;bar&lt;% end %&gt;
-      &lt;% content_for :baz do %&gt;WON'T RENDER ME&lt;% end %&gt;
-      &lt;% content_for :foo do %&gt;baz&lt;% end %&gt;
-    erb_snippet
-
-    get '/'
-    assert ok?
-    assert_equal 'foobarbaz', body
-  end
-
-  it 'passes values to the blocks' do
-    mock_app {
-      layout { '&lt;% yield_content :foo, 1, 2 %&gt;' }
-      get('/') { erb '&lt;% content_for :foo do |a, b| %&gt;&lt;i&gt;&lt;%= a %&gt;&lt;/i&gt; &lt;%= b %&gt;&lt;% end %&gt;' }
-    }
-
-    get '/'
-    assert ok?
-    assert_equal '&lt;i&gt;1&lt;/i&gt; 2', body
+  context 'with haml' do
+    def haml_app(view)
+      mock_app {
+        layout { '= yield_content :foo' }
+        get('/') { haml view } 
+      }
+    end
+
+    it 'renders blocks declared with the same key you use when rendering' do
+      haml_app &lt;&lt;-haml_end
+- content_for :foo do
+  foo
+haml_end
+
+      get '/'
+      assert ok?
+      assert_equal &quot;foo\n&quot;, body
+    end
+
+    it 'does not render a block with a different key' do
+      haml_app &lt;&lt;-haml_end
+- content_for :bar do
+  bar
+haml_end
+
+      get '/'
+      assert ok?
+      assert_equal &quot;\n&quot;, body
+    end
+
+    it 'renders multiple blocks with the same key' do
+      haml_app &lt;&lt;-haml_end
+- content_for :foo do
+  foo
+- content_for :foo do
+  bar
+- content_for :baz do
+  WON'T RENDER ME
+- content_for :foo do
+  baz
+haml_end
+
+      get '/'
+      assert ok?
+      assert_equal &quot;foo\nbar\nbaz\n&quot;, body
+    end
+
+    it 'passes values to the blocks' do
+      mock_app {
+        layout { '= yield_content :foo, 1, 2' }
+        get('/') { 
+          haml &lt;&lt;-haml_end
+- content_for :foo do |a, b|
+  %i= a
+  =b
+haml_end
+        }
+      }
+
+      get '/'
+      assert ok?
+      assert_equal &quot;&lt;i&gt;1&lt;/i&gt;\n2\n&quot;, body
+    end
   end
 end</diff>
      <filename>test/content_for_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>4bf7ad975b5d08e6a2914f05319099c0a0a5a5a1</id>
    </parent>
  </parents>
  <author>
    <name>Matt Lyon</name>
    <email>matt@flowerpowered.com</email>
  </author>
  <url>http://github.com/foca/sinatra-content-for/commit/41e8d2504281b43e64a4a15d6f72ed639e7daacb</url>
  <id>41e8d2504281b43e64a4a15d6f72ed639e7daacb</id>
  <committed-date>2009-05-09T10:19:25-07:00</committed-date>
  <authored-date>2009-05-09T10:19:25-07:00</authored-date>
  <message>Add Haml support</message>
  <tree>af755d4390cac18cdf3d711345ac51d7dd8747a2</tree>
  <committer>
    <name>Nicolas Sanguinetti</name>
    <email>contacto@nicolassanguinetti.info</email>
  </committer>
</commit>
