1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Finished implementing layout for render :text

This commit is contained in:
Carl Lerche 2009-03-20 16:50:51 -07:00 committed by Yehuda Katz
parent 81e814adfa
commit c6123c3703
7 changed files with 67 additions and 16 deletions

View file

@ -20,8 +20,8 @@ module AbstractController
@_action_view ||= ActionView::Base.new(self.class.view_paths, {}, self)
end
def render(name = action_name, options = {})
self.response_body = render_to_string(name, options)
def render(options = {})
self.response_body = render_to_string(options)
end
# Raw rendering of a template.
@ -30,7 +30,9 @@ module AbstractController
# @option _layout<String> The relative path to the layout template to use
#
# :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])
_render_template(template, options)
end

View file

@ -1,16 +1,33 @@
module ActionController
module Layouts
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
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
begin
view_paths.find_by_parts(controller_path, formats, "layouts")
_layout_for_name(controller_path)
rescue ActionView::MissingTemplate
begin
view_paths.find_by_parts("application", formats, "layouts")
_layout_for_name("application")
rescue ActionView::MissingTemplate
end
end

View file

@ -38,13 +38,13 @@ module ActionController
options[:_template] = ActionView::TextTemplate.new(_text(options))
template = nil
elsif options.key?(:template)
template = options.delete(:template)
options[:_template_name] = options[:template]
elsif options.key?(:action)
template = options.delete(:action).to_s
options[:_template_name] = options[:action].to_s
options[:_prefix] = _prefix
end
super(template, options)
super(options)
end
private
@ -54,7 +54,7 @@ module ActionController
end
def _text(options)
text = options.delete(:text)
text = options[:text]
case text
when nil then " "
@ -63,7 +63,7 @@ module ActionController
end
def _process_options(options)
if status = options.delete(:status)
if status = options[:status]
response.status = status.to_i
end
end

View file

@ -31,7 +31,11 @@ module AbstractController
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
super
end
@ -130,7 +134,7 @@ module AbstractController
self.class.layout(formats)
end
def render_to_string(name = action_name, options = {})
def render_to_string(options = {})
options[:_layout] = options[:layout] || _layout
super
end

View file

@ -7,6 +7,10 @@ module AbstractController
include Renderer
include Helpers
def render(string)
super(:_template_name => string)
end
append_view_path File.expand_path(File.join(File.dirname(__FILE__), "views"))
end

View file

@ -8,7 +8,7 @@ module HappyPath
"layouts/greetings.html.erb" => "<%= yield %>, I wish thee well."
)]
def render_hello_world_from_variable
def render_hello_world
render :text => "hello david"
end
@ -36,6 +36,14 @@ module HappyPath
render :text => "hello world", :layout => true
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
render :text => "hello world", :layout => "greetings"
end
@ -44,7 +52,7 @@ module HappyPath
class TestSimpleTextRender < SimpleRouteCase
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_status 200
end
@ -96,4 +104,20 @@ module HappyPath
assert_body "hello world, I wish thee well."
assert_status 200
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

View file

@ -32,8 +32,8 @@ module ActionController
include ActionController::HideActions
include ActionController::UrlFor
include ActionController::Renderer
include ActionController::Layouts
include ActionController::Renderer
def self.inherited(klass)
@subclasses ||= []