<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -43,18 +43,29 @@ module Comma
   class DataExtractor &lt; Extractor
 
     def method_missing(sym, *args, &amp;block)
-      @results &lt;&lt; @instance.send(sym).to_s if args.blank?
+      if args.blank?
+        result = block ? yield(@instance.send(sym)) : @instance.send(sym)
+        @results &lt;&lt; result.to_s
+      end
 
       args.each do |arg|
         case arg
         when Hash
           arg.each do |k, v|
-            @results &lt;&lt; (@instance.send(sym).nil? ? '' : @instance.send(sym).send(k).to_s )
+            if block
+              @results &lt;&lt; (@instance.send(sym).nil? ? '' : yield(@instance.send(sym).send(k)).to_s )
+            else
+              @results &lt;&lt; (@instance.send(sym).nil? ? '' : @instance.send(sym).send(k).to_s )
+            end
           end
         when Symbol
+          if block
+            @results &lt;&lt; (@instance.send(sym).nil? ? '' : yield(@instance.send(sym).send(arg)).to_s)
+          else
             @results &lt;&lt; ( @instance.send(sym).nil? ? '' : @instance.send(sym).send(arg).to_s )
+          end
         when String
-          @results &lt;&lt; @instance.send(sym).to_s
+          @results &lt;&lt; (block ? yield(@instance.send(sym)) : @instance.send(sym)).to_s
         else
           raise &quot;Unknown data symbol #{arg.inspect}&quot;
         end</diff>
      <filename>lib/comma/extractors.rb</filename>
    </modified>
    <modified>
      <diff>@@ -151,6 +151,34 @@ describe Comma, 'to_comma data/headers object extensions' do
     end
     
   end
+
+  describe 'with block' do
+    before do
+      class Foo
+        attr_accessor :content, :time
+        comma do
+          time('Date') {|i| i.strftime(&quot;%Y/%m/%d&quot;) }
+          content {|i| i ? i : '---' }
+          content('Truncated Content') {|i| i &amp;&amp; i.length &gt; 10 ? i[0..10] : '---' }
+        end
+      
+        def initialize(content)
+          @content = content
+          @time = Time.mktime(2009, 9, 8, 12, 44, 40)
+        end
+      end
+    
+      @foo = Foo.new('content ' * 5)
+      @bar = Foo.new nil
+    end
+    
+    it 'should return yielded values by block' do
+      header, foo, bar = [@foo, @bar].to_comma.split(&quot;\n&quot;)
+      foo.should == &quot;2009/09/08,content content content content content ,content con&quot;
+      bar.should == &quot;2009/09/08,---,---&quot;
+    end
+
+  end
   
   describe 'on an object with no comma declaration' do
     </diff>
      <filename>spec/comma/comma_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>08ecf5d555036abaae79fb5442d9a4cb9832d3e2</id>
    </parent>
  </parents>
  <author>
    <name>swdyh</name>
    <email>youhei@gmail.com</email>
  </author>
  <url>http://github.com/crafterm/comma/commit/66f3a877c0def5e5597663971e75fb833795ba95</url>
  <id>66f3a877c0def5e5597663971e75fb833795ba95</id>
  <committed-date>2009-09-07T22:03:19-07:00</committed-date>
  <authored-date>2009-09-07T22:03:19-07:00</authored-date>
  <message>Enabled definition to give a block.</message>
  <tree>8cd35f299f410c8d6717d90fc3c748549eab10b0</tree>
  <committer>
    <name>swdyh</name>
    <email>youhei@gmail.com</email>
  </committer>
</commit>
