提交 c6123c37 编写于 作者: C Carl Lerche 提交者: Yehuda Katz

Finished implementing layout for render :text

上级 81e814ad
...@@ -20,8 +20,8 @@ def _action_view ...@@ -20,8 +20,8 @@ def _action_view
@_action_view ||= ActionView::Base.new(self.class.view_paths, {}, self) @_action_view ||= ActionView::Base.new(self.class.view_paths, {}, self)
end end
def render(name = action_name, options = {}) def render(options = {})
self.response_body = render_to_string(name, options) self.response_body = render_to_string(options)
end end
# Raw rendering of a template. # Raw rendering of a template.
...@@ -30,7 +30,9 @@ def render(name = action_name, options = {}) ...@@ -30,7 +30,9 @@ def render(name = action_name, options = {})
# @option _layout<String> The relative path to the layout template to use # @option _layout<String> The relative path to the layout template to use
# #
# :api: plugin # :api: plugin
def render_to_string(name = action_name, options = {}) def render_to_string(options = {})
name = options[:_template_name] || action_name
template = options[:_template] || view_paths.find_by_parts(name.to_s, formats, options[:_prefix]) template = options[:_template] || view_paths.find_by_parts(name.to_s, formats, options[:_prefix])
_render_template(template, options) _render_template(template, options)
end end
......
module ActionController module ActionController
module Layouts module Layouts
def render_to_string(options) def render_to_string(options)
options[:_layout] = options[:layout] || _layout if !options.key?(:text) || options.key?(:layout)
options[:_layout] = options.key?(:layout) ? _layout_for_option(options[:layout]) : _layout
end
super super
end end
private
def _layout_for_option(name)
case name
when String then _layout_for_name(name)
when true then _layout
when false then nil
end
end
def _layout_for_name(name)
view_paths.find_by_parts(name, formats, "layouts")
end
def _layout def _layout
begin begin
view_paths.find_by_parts(controller_path, formats, "layouts") _layout_for_name(controller_path)
rescue ActionView::MissingTemplate rescue ActionView::MissingTemplate
begin begin
view_paths.find_by_parts("application", formats, "layouts") _layout_for_name("application")
rescue ActionView::MissingTemplate rescue ActionView::MissingTemplate
end end
end end
......
...@@ -38,13 +38,13 @@ def render_to_string(options) ...@@ -38,13 +38,13 @@ def render_to_string(options)
options[:_template] = ActionView::TextTemplate.new(_text(options)) options[:_template] = ActionView::TextTemplate.new(_text(options))
template = nil template = nil
elsif options.key?(:template) elsif options.key?(:template)
template = options.delete(:template) options[:_template_name] = options[:template]
elsif options.key?(:action) elsif options.key?(:action)
template = options.delete(:action).to_s options[:_template_name] = options[:action].to_s
options[:_prefix] = _prefix options[:_prefix] = _prefix
end end
super(template, options) super(options)
end end
private private
...@@ -54,7 +54,7 @@ def _prefix ...@@ -54,7 +54,7 @@ def _prefix
end end
def _text(options) def _text(options)
text = options.delete(:text) text = options[:text]
case text case text
when nil then " " when nil then " "
...@@ -63,7 +63,7 @@ def _text(options) ...@@ -63,7 +63,7 @@ def _text(options)
end end
def _process_options(options) def _process_options(options)
if status = options.delete(:status) if status = options[:status]
response.status = status.to_i response.status = status.to_i
end end
end end
......
...@@ -31,7 +31,11 @@ class RenderingController < AbstractController::Base ...@@ -31,7 +31,11 @@ class RenderingController < AbstractController::Base
def _prefix() end def _prefix() end
def render(name = action_name, options = {}) def render(options = {})
if options.is_a?(String)
options = {:_template_name => options}
end
options[:_prefix] = _prefix options[:_prefix] = _prefix
super super
end end
...@@ -130,7 +134,7 @@ def _layout ...@@ -130,7 +134,7 @@ def _layout
self.class.layout(formats) self.class.layout(formats)
end end
def render_to_string(name = action_name, options = {}) def render_to_string(options = {})
options[:_layout] = options[:layout] || _layout options[:_layout] = options[:layout] || _layout
super super
end end
......
...@@ -7,6 +7,10 @@ class ControllerWithHelpers < AbstractController::Base ...@@ -7,6 +7,10 @@ class ControllerWithHelpers < AbstractController::Base
include Renderer include Renderer
include Helpers include Helpers
def render(string)
super(:_template_name => string)
end
append_view_path File.expand_path(File.join(File.dirname(__FILE__), "views")) append_view_path File.expand_path(File.join(File.dirname(__FILE__), "views"))
end end
......
...@@ -8,7 +8,7 @@ class RenderTextController < ActionController::Base2 ...@@ -8,7 +8,7 @@ class RenderTextController < ActionController::Base2
"layouts/greetings.html.erb" => "<%= yield %>, I wish thee well." "layouts/greetings.html.erb" => "<%= yield %>, I wish thee well."
)] )]
def render_hello_world_from_variable def render_hello_world
render :text => "hello david" render :text => "hello david"
end end
...@@ -36,6 +36,14 @@ def render_text_with_layout ...@@ -36,6 +36,14 @@ def render_text_with_layout
render :text => "hello world", :layout => true render :text => "hello world", :layout => true
end end
def render_text_with_layout_false
render :text => "hello world", :layout => false
end
def render_text_with_layout_nil
render :text => "hello world", :layout => nil
end
def render_text_with_custom_layout def render_text_with_custom_layout
render :text => "hello world", :layout => "greetings" render :text => "hello world", :layout => "greetings"
end end
...@@ -44,7 +52,7 @@ def render_text_with_custom_layout ...@@ -44,7 +52,7 @@ def render_text_with_custom_layout
class TestSimpleTextRender < SimpleRouteCase class TestSimpleTextRender < SimpleRouteCase
describe "Rendering text from a action with default options renders the text without the layout" describe "Rendering text from a action with default options renders the text without the layout"
get "/happy_path/render_text/render_hello_world_from_variable" get "/happy_path/render_text/render_hello_world"
assert_body "hello david" assert_body "hello david"
assert_status 200 assert_status 200
end end
...@@ -96,4 +104,20 @@ class TestTextRenderWithCustomLayout < SimpleRouteCase ...@@ -96,4 +104,20 @@ class TestTextRenderWithCustomLayout < SimpleRouteCase
assert_body "hello world, I wish thee well." assert_body "hello world, I wish thee well."
assert_status 200 assert_status 200
end end
class TestTextRenderWithLayoutFalse < SimpleRouteCase
describe "Rendering text with :layout => false"
get "/happy_path/render_text/render_text_with_layout_false"
assert_body "hello world"
assert_status 200
end
class TestTextRenderWithLayoutNil < SimpleRouteCase
describe "Rendering text with :layout => nil"
get "/happy_path/render_text/render_text_with_layout_nil"
assert_body "hello world"
assert_status 200
end
end end
\ No newline at end of file
...@@ -32,8 +32,8 @@ class Base2 < AbstractBase ...@@ -32,8 +32,8 @@ class Base2 < AbstractBase
include ActionController::HideActions include ActionController::HideActions
include ActionController::UrlFor include ActionController::UrlFor
include ActionController::Renderer
include ActionController::Layouts include ActionController::Layouts
include ActionController::Renderer
def self.inherited(klass) def self.inherited(klass)
@subclasses ||= [] @subclasses ||= []
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册