From f8542a64b30bb6f67bcedf0c82de1291aab3c3d9 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Mon, 30 May 2005 09:00:46 +0000 Subject: Make sure the benchmarking render method always returns the result of the render, regardless of whether logging is enabled or not. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1371 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_controller/benchmarking.rb | 6 +++- .../action_controller/cgi_ext/raw_post_data_fix.rb | 4 ++- actionpack/test/controller/new_render_test.rb | 34 +++++++--------------- actionpack/test/controller/render_test.rb | 6 ++-- 5 files changed, 25 insertions(+), 27 deletions(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 9bac83a0e6..658d346056 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Make sure the benchmarking render method always returns the output of the render. + * render(:text), render(:partial), and render(:nothing) always default to :layout => false. This also fixes send_file, which was applying a layout if one existed for the current action. * verify with :redirect_to won't redirect if a redirect or render has already been performed #1350 diff --git a/actionpack/lib/action_controller/benchmarking.rb b/actionpack/lib/action_controller/benchmarking.rb index 6a78ad5dac..55aed1bca1 100644 --- a/actionpack/lib/action_controller/benchmarking.rb +++ b/actionpack/lib/action_controller/benchmarking.rb @@ -20,13 +20,17 @@ module ActionController #:nodoc: render_without_benchmark(options, deprecated_status) else db_runtime = ActiveRecord::Base.connection.reset_runtime if Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected? - @rendering_runtime = Benchmark::measure{ render_without_benchmark(options, deprecated_status) }.real + + render_output = nil + @rendering_runtime = Benchmark::measure{ render_output = render_without_benchmark(options, deprecated_status) }.real if Object.const_defined?("ActiveRecord") && ActiveRecord::Base.connected? @db_rt_before_render = db_runtime @db_rt_after_render = ActiveRecord::Base.connection.reset_runtime @rendering_runtime -= @db_rt_after_render end + + render_output end end diff --git a/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb b/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb index 11b36e0dd4..5cb13c2456 100644 --- a/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb +++ b/actionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb @@ -18,7 +18,9 @@ class CGI #:nodoc: end private - MULTIPART_FORM_BOUNDARY_RE = %r|\Amultipart/form-data.*boundary=\"?([^\";,]+)\"?|n #" + unless defined?(MULTIPART_FORM_BOUNDARY_RE) + MULTIPART_FORM_BOUNDARY_RE = %r|\Amultipart/form-data.*boundary=\"?([^\";,]+)\"?|n #" + end def multipart_form_boundary if env_table['REQUEST_METHOD'] == 'POST' diff --git a/actionpack/test/controller/new_render_test.rb b/actionpack/test/controller/new_render_test.rb index 3d1e6e794b..fb23b9e02c 100644 --- a/actionpack/test/controller/new_render_test.rb +++ b/actionpack/test/controller/new_render_test.rb @@ -9,10 +9,12 @@ module Fun end end - -class TestController < ActionController::Base +class NewRenderTestController < ActionController::Base layout :determine_layout + def self.controller_name; "test"; end + def self.controller_path; "test"; end + def hello_world end @@ -103,26 +105,17 @@ class TestController < ActionController::Base end end -TestController.template_root = File.dirname(__FILE__) + "/../fixtures/" +NewRenderTestController.template_root = File.dirname(__FILE__) + "/../fixtures/" Fun::GamesController.template_root = File.dirname(__FILE__) + "/../fixtures/" -class TestLayoutController < ActionController::Base - layout "layouts/standard" - - def hello_world - end - - def hello_world_outside_layout - end +class NewRenderTest < Test::Unit::TestCase + def setup + @controller = NewRenderTestController.new - def rescue_action(e) - raise unless ActionController::MissingTemplate === e - end -end + # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get + # a more accurate simulation of what happens in "real life". + @controller.logger = Logger.new(nil) -class RenderTest < Test::Unit::TestCase - def setup - @controller = TestController.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new @@ -244,9 +237,4 @@ class RenderTest < Test::Unit::TestCase get :accessing_params_in_template, :name => "David" assert_equal "Hello: David", @response.body end - - private - def process_request - TestController.process(@request, @response) - end end diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb index d3051ef6ad..98d279055d 100644 --- a/actionpack/test/controller/render_test.rb +++ b/actionpack/test/controller/render_test.rb @@ -1,6 +1,8 @@ require File.dirname(__FILE__) + '/../abstract_unit' -Customer = Struct.new("Customer", :name) +unless defined?(Customer) + Customer = Struct.new("Customer", :name) +end module Fun class GamesController < ActionController::Base @@ -214,4 +216,4 @@ class RenderTest < Test::Unit::TestCase def process_request TestController.process(@request, @response) end -end \ No newline at end of file +end -- cgit v1.2.3