Skip to content

Commit

Permalink
Make ActionController#render(string) work as a shortcut for render :t…
Browse files Browse the repository at this point in the history
…emplate => string. [#1435]

Examples:
  # Instead of render(:template => 'controller/action')
  render('controller/action')

Note : Argument must not begin with a '/', but have at least one '/'
  • Loading branch information
lifo committed Dec 25, 2008
1 parent 0619523 commit d67e038
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 4 deletions.
7 changes: 4 additions & 3 deletions actionpack/CHANGELOG
@@ -1,11 +1,12 @@
*2.3.0 [Edge]*

* Make ActionController#render(string) work as a shortcut for render :file => string. [#1435] [Pratik Naik] Examples:
* Make ActionController#render(string) work as a shortcut for render :file/:template => string. [#1435] [Pratik Naik] Examples:

# Instead of render(:file => '/Users/lifo/home.html.erb')
render('/Users/lifo/home.html.erb')
render('/Users/lifo/home.html.erb') # argument must begin with a '/'

Note : Filename must begin with a forward slash ('/')
# Instead of render(:template => 'controller/action')
render('controller/action') # argument must not begin with a '/', but contain a '/'

* Add :prompt option to date/time select helpers. #561 [Sam Oliver]

Expand Down
4 changes: 3 additions & 1 deletion actionpack/lib/action_controller/base.rb
Expand Up @@ -866,9 +866,11 @@ def render(options = nil, extra_options = {}, &block) #:doc:
elsif options == :update
options = extra_options.merge({ :update => true })
elsif options.is_a?(String)
case options.index('/')
case position = options.index('/')
when 0
extra_options[:file] = options
else
extra_options[:template] = options
end

options = extra_options
Expand Down
21 changes: 21 additions & 0 deletions actionpack/test/controller/render_test.rb
Expand Up @@ -202,6 +202,11 @@ def render_xml_hello
render :template => "test/hello"
end

def render_xml_hello_as_string_template
@name = "David"
render "test/hello"
end

def render_xml_with_custom_content_type
render :xml => "<blah/>", :content_type => "application/atomsvc+xml"
end
Expand Down Expand Up @@ -332,6 +337,10 @@ def render_with_explicit_template
render :template => "test/hello_world"
end

def render_with_explicit_string_template
render "test/hello_world"
end

def render_with_explicit_template_with_locals
render :template => "test/render_file_with_locals", :locals => { :secret => 'area51' }
end
Expand Down Expand Up @@ -654,6 +663,7 @@ def determine_layout
"accessing_params_in_template",
"accessing_params_in_template_with_layout",
"render_with_explicit_template",
"render_with_explicit_string_template",
"render_js_with_explicit_template",
"render_js_with_explicit_action_template",
"delete_with_js", "update_page", "update_page_with_instance_variables"
Expand Down Expand Up @@ -888,6 +898,12 @@ def test_render_xml
assert_equal "application/xml", @response.content_type
end

def test_render_xml_as_string_template
get :render_xml_hello_as_string_template
assert_equal "<html>\n <p>Hello David</p>\n<p>This is grand!</p>\n</html>\n", @response.body
assert_equal "application/xml", @response.content_type
end

def test_render_xml_with_default
get :greeting
assert_equal "<p>This is grand!</p>\n", @response.body
Expand Down Expand Up @@ -1073,6 +1089,11 @@ def test_render_with_explicit_template
assert_response :success
end

def test_render_with_explicit_string_template
get :render_with_explicit_string_template
assert_equal "<html>Hello world!</html>", @response.body
end

def test_double_render
assert_raises(ActionController::DoubleRenderError) { get :double_render }
end
Expand Down

0 comments on commit d67e038

Please sign in to comment.