diff options
author | José Valim <jose.valim@gmail.com> | 2010-01-20 14:21:27 +0100 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-01-20 15:02:13 +0100 |
commit | 8e2fd54b19656a6edbd94f8707927d09e167e7fc (patch) | |
tree | c000b4aa817f677d8160a13e630a2536e76264d0 /actionpack/lib/abstract_controller/rendering.rb | |
parent | 8b9bfbe225a59ccefa46f1e8bf301bc483bef0e0 (diff) | |
download | rails-8e2fd54b19656a6edbd94f8707927d09e167e7fc.tar.gz rails-8e2fd54b19656a6edbd94f8707927d09e167e7fc.tar.bz2 rails-8e2fd54b19656a6edbd94f8707927d09e167e7fc.zip |
Bring normalize behavior to AbstractController::Rendering
Diffstat (limited to 'actionpack/lib/abstract_controller/rendering.rb')
-rw-r--r-- | actionpack/lib/abstract_controller/rendering.rb | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/actionpack/lib/abstract_controller/rendering.rb b/actionpack/lib/abstract_controller/rendering.rb index 0dab4a3cc0..644419a585 100644 --- a/actionpack/lib/abstract_controller/rendering.rb +++ b/actionpack/lib/abstract_controller/rendering.rb @@ -40,12 +40,13 @@ module AbstractController # Mostly abstracts the fact that calling render twice is a DoubleRenderError. # Delegates render_to_body and sticks the result in self.response_body. - def render(*args) + def render(*args, &block) if response_body raise AbstractController::DoubleRenderError, "Can only render or redirect once per action" end - self.response_body = render_to_body(*args) + options = _normalize_options(*args, &block) + self.response_body = render_to_body(options) end # Raw rendering of a template to a Rack-compatible body. @@ -69,7 +70,8 @@ module AbstractController # render_to_body into a String. # # :api: plugin - def render_to_string(options = {}) + def render_to_string(*args) + options = _normalize_options(*args) AbstractController::Rendering.body_to_s(render_to_body(options)) end @@ -96,6 +98,20 @@ module AbstractController _view_paths end + # Normalize options, by converting render "foo" to render :template => "foo" + # and render "/foo" to render :file => "/foo". + def _normalize_options(action=nil, options={}) + case action + when Hash + options, action = action, nil + when String + key = (action.index("/") == 0 ? :file : :template) + options.merge!(key => action) + end + + options + end + # Return a string representation of a Rack-compatible response body. def self.body_to_s(body) if body.respond_to?(:to_str) |