aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG7
-rw-r--r--actionpack/lib/action_controller/base.rb9
-rw-r--r--actionpack/test/controller/render_test.rb29
3 files changed, 36 insertions, 9 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index 9187bd6128..5906ab1f16 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,12 @@
*2.3.0 [Edge]*
+* Make ActionController#render(string) work as a shortcut for render :file => string. [#1435] [Pratik Naik] Examples:
+
+ # Instead of render(:file => '/Users/lifo/home.html.erb')
+ render('/Users/lifo/home.html.erb')
+
+ Note : Filename must begin with a forward slash ('/')
+
* Add :prompt option to date/time select helpers. #561 [Sam Oliver]
* Fixed that send_file shouldn't set an etag #1578 [Hongli Lai]
diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb
index 552075025f..9bf044b6c0 100644
--- a/actionpack/lib/action_controller/base.rb
+++ b/actionpack/lib/action_controller/base.rb
@@ -865,6 +865,13 @@ module ActionController #:nodoc:
return render(:file => default_template, :layout => true)
elsif options == :update
options = extra_options.merge({ :update => true })
+ elsif options.is_a?(String)
+ case options.index('/')
+ when 0
+ extra_options[:file] = options
+ end
+
+ options = extra_options
end
layout = pick_layout(options)
@@ -1183,7 +1190,7 @@ module ActionController #:nodoc:
end
def validate_render_arguments(options, extra_options)
- if options && options != :update && !options.is_a?(Hash)
+ if options && options != :update && !options.is_a?(String) && !options.is_a?(Hash)
raise RenderError, "You called render with invalid options : #{options.inspect}"
end
diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb
index 57827aaab7..f2393e695a 100644
--- a/actionpack/test/controller/render_test.rb
+++ b/actionpack/test/controller/render_test.rb
@@ -104,6 +104,12 @@ class TestController < ActionController::Base
render :file => path
end
+ def render_file_as_string_with_instance_variables
+ @secret = 'in the sauce'
+ path = File.expand_path(File.join(File.dirname(__FILE__), '../fixtures/test/render_file_with_ivar.erb'))
+ render path
+ end
+
def render_file_not_using_full_path
@secret = 'in the sauce'
render :file => 'test/render_file_with_ivar'
@@ -124,6 +130,11 @@ class TestController < ActionController::Base
render :file => path, :locals => {:secret => 'in the sauce'}
end
+ def render_file_as_string_with_locals
+ path = File.expand_path(File.join(File.dirname(__FILE__), '../fixtures/test/render_file_with_locals.erb'))
+ render path, :locals => {:secret => 'in the sauce'}
+ end
+
def accessing_request_in_template
render :inline => "Hello: <%= request.host %>"
end
@@ -182,10 +193,6 @@ class TestController < ActionController::Base
render :text => "appended"
end
- def render_invalid_args
- render("test/hello")
- end
-
def render_vanilla_js_hello
render :js => "alert('hello')"
end
@@ -751,6 +758,11 @@ class RenderTest < ActionController::TestCase
assert_equal "The secret is in the sauce\n", @response.body
end
+ def test_render_file_as_string_with_instance_variables
+ get :render_file_as_string_with_instance_variables
+ assert_equal "The secret is in the sauce\n", @response.body
+ end
+
def test_render_file_not_using_full_path
get :render_file_not_using_full_path
assert_equal "The secret is in the sauce\n", @response.body
@@ -766,6 +778,11 @@ class RenderTest < ActionController::TestCase
assert_equal "The secret is in the sauce\n", @response.body
end
+ def test_render_file_as_string_with_locals
+ get :render_file_as_string_with_locals
+ assert_equal "The secret is in the sauce\n", @response.body
+ end
+
def test_render_file_from_template
get :render_file_from_template
assert_equal "The secret is in the sauce\n", @response.body
@@ -831,10 +848,6 @@ class RenderTest < ActionController::TestCase
assert_equal 'appended', @response.body
end
- def test_attempt_to_render_with_invalid_arguments
- assert_raises(ActionController::RenderError) { get :render_invalid_args }
- end
-
def test_attempt_to_access_object_method
assert_raises(ActionController::UnknownAction, "No action responded to [clone]") { get :clone }
end