aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_controller/cgi_process.rb2
-rw-r--r--actionpack/lib/action_controller/streaming.rb8
-rw-r--r--actionpack/test/controller/send_file_test.rb15
3 files changed, 10 insertions, 15 deletions
diff --git a/actionpack/lib/action_controller/cgi_process.rb b/actionpack/lib/action_controller/cgi_process.rb
index 8c472c5514..4413a29791 100644
--- a/actionpack/lib/action_controller/cgi_process.rb
+++ b/actionpack/lib/action_controller/cgi_process.rb
@@ -145,7 +145,7 @@ module ActionController #:nodoc:
if @cgi.send(:env_table)['REQUEST_METHOD'] == 'HEAD'
return
elsif @body.respond_to?(:call)
- @body.call(self)
+ @body.call(self, output)
else
output.write(@body)
end
diff --git a/actionpack/lib/action_controller/streaming.rb b/actionpack/lib/action_controller/streaming.rb
index 2914fd907b..0280522e13 100644
--- a/actionpack/lib/action_controller/streaming.rb
+++ b/actionpack/lib/action_controller/streaming.rb
@@ -61,20 +61,20 @@ module ActionController #:nodoc:
@performed_render = false
if options[:stream]
- render :text => Proc.new {
+ render :text => Proc.new { |response, output|
logger.info "Streaming file #{path}" unless logger.nil?
len = options[:buffer_size] || 4096
File.open(path, 'rb') do |file|
- if $stdout.respond_to?(:syswrite)
+ if output.respond_to?(:syswrite)
begin
while true
- $stdout.syswrite file.sysread(len)
+ output.syswrite(file.sysread(len))
end
rescue EOFError
end
else
while buf = file.read(len)
- $stdout.write buf
+ output.write(buf)
end
end
end
diff --git a/actionpack/test/controller/send_file_test.rb b/actionpack/test/controller/send_file_test.rb
index b7674bda60..0a1cc256d2 100644
--- a/actionpack/test/controller/send_file_test.rb
+++ b/actionpack/test/controller/send_file_test.rb
@@ -47,16 +47,11 @@ class SendFileTest < Test::Unit::TestCase
assert_not_nil response
assert_kind_of Proc, response.body
- old_stdout = $stdout
- begin
- require 'stringio'
- $stdout = StringIO.new
- $stdout.binmode
- assert_nothing_raised { response.body.call }
- assert_equal file_data, $stdout.string
- ensure
- $stdout = old_stdout
- end
+ require 'stringio'
+ output = StringIO.new
+ output.binmode
+ assert_nothing_raised { response.body.call(response, output) }
+ assert_equal file_data, output.string
end
def test_data