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:
parent
81e814adfa
commit
c6123c3703
7 changed files with 67 additions and 16 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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 ||= []
|
||||
|
|
Loading…
Reference in a new issue