<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>actionpack/lib/action_controller/rack_process.rb</filename>
    </added>
    <added>
      <filename>actionpack/test/controller/rack_test.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,6 @@
+* Added Rack processor [Ezra Zygmuntowicz, Josh Peek]
+
+
 *2.1.0 (May 31st, 2008)*
 
 * InstanceTag#default_time_from_options overflows to DateTime [Geoff Buesing]</diff>
      <filename>actionpack/CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -53,6 +53,7 @@ require 'action_controller/streaming'
 require 'action_controller/session_management'
 require 'action_controller/http_authentication'
 require 'action_controller/components'
+require 'action_controller/rack_process'
 require 'action_controller/record_identifier'
 require 'action_controller/request_forgery_protection'
 require 'action_controller/headers'</diff>
      <filename>actionpack/lib/action_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -96,7 +96,7 @@ module ActionController
     include ActiveSupport::Callbacks
     define_callbacks :prepare_dispatch, :before_dispatch, :after_dispatch
 
-    def initialize(output, request = nil, response = nil)
+    def initialize(output = $stdout, request = nil, response = nil)
       @output, @request, @response = output, request, response
     end
 
@@ -123,6 +123,12 @@ module ActionController
       failsafe_rescue exception
     end
 
+    def call(env)
+      @request = RackRequest.new(env)
+      @response = RackResponse.new
+      dispatch
+    end
+
     def reload_application
       # Run prepare callbacks before every request in development mode
       run_callbacks :prepare_dispatch</diff>
      <filename>actionpack/lib/action_controller/dispatcher.rb</filename>
    </modified>
    <modified>
      <diff>@@ -114,3 +114,36 @@ class CgiRequestNeedsRewoundTest &lt; BaseCgiTest
     assert_equal 0, request.body.pos
   end
 end
+
+class CgiResponseTest &lt; BaseCgiTest
+  def setup
+    super
+    @fake_cgi.expects(:header).returns(&quot;HTTP/1.0 200 OK\nContent-Type: text/html\n&quot;)
+    @response = ActionController::CgiResponse.new(@fake_cgi)
+    @output = StringIO.new('')
+  end
+
+  def test_simple_output
+    @response.body = &quot;Hello, World!&quot;
+
+    @response.out(@output)
+    assert_equal &quot;HTTP/1.0 200 OK\nContent-Type: text/html\nHello, World!&quot;, @output.string
+  end
+
+  def test_head_request
+    @fake_cgi.env_table['REQUEST_METHOD'] = 'HEAD'
+    @response.body = &quot;Hello, World!&quot;
+
+    @response.out(@output)
+    assert_equal &quot;HTTP/1.0 200 OK\nContent-Type: text/html\n&quot;, @output.string
+  end
+
+  def test_streaming_block
+    @response.body = Proc.new do |response, output|
+      5.times { |n| output.write(n) }
+    end
+
+    @response.out(@output)
+    assert_equal &quot;HTTP/1.0 200 OK\nContent-Type: text/html\n01234&quot;, @output.string
+  end
+end</diff>
      <filename>actionpack/test/controller/cgi_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>3282bf3b5016f0c9028cfff1012e8c31a13b40b7</id>
    </parent>
  </parents>
  <author>
    <name>Ezra Zygmuntowicz</name>
    <email>ez@engineyard.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/06cb20708be13fbf736447aa0e5e6dd7d64c8b5d</url>
  <id>06cb20708be13fbf736447aa0e5e6dd7d64c8b5d</id>
  <committed-date>2008-06-01T11:25:11-07:00</committed-date>
  <authored-date>2008-06-01T11:25:11-07:00</authored-date>
  <message>Added Rack processor

Signed-off-by: Joshua Peek &lt;josh@joshpeek.com&gt;</message>
  <tree>c2ac7798ef3aacbf7b44ef4b104fac71bc8a2eb7</tree>
  <committer>
    <name>Joshua Peek</name>
    <email>josh@joshpeek.com</email>
  </committer>
</commit>
