mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Introduce ActionView::InlineTemplate class
This commit is contained in:
parent
69a5c1df82
commit
534c6b2444
7 changed files with 37 additions and 18 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Introduce ActionView::InlineTemplate class. [Pratik]
|
||||
|
||||
* Automatically parse posted JSON content for Mime::JSON requests. [rick]
|
||||
|
||||
POST /posts
|
||||
|
|
|
@ -870,7 +870,7 @@ module ActionController #:nodoc:
|
|||
|
||||
elsif inline = options[:inline]
|
||||
add_variables_to_assigns
|
||||
tmpl = ActionView::Template.new(@template, options[:inline], false, options[:locals], true, options[:type])
|
||||
tmpl = ActionView::InlineTemplate.new(@template, options[:inline], options[:locals], options[:type])
|
||||
render_for_text(@template.render_template(tmpl), options[:status])
|
||||
|
||||
elsif action_name = options[:action]
|
||||
|
|
|
@ -30,6 +30,7 @@ require 'action_view/template_handlers/rjs'
|
|||
require 'action_view/template_finder'
|
||||
require 'action_view/template'
|
||||
require 'action_view/partial_template'
|
||||
require 'action_view/inline_template'
|
||||
|
||||
require 'action_view/base'
|
||||
require 'action_view/partials'
|
||||
|
|
|
@ -279,7 +279,7 @@ If you are rendering a subtemplate, you must now use controller-like partial syn
|
|||
elsif options[:partial]
|
||||
render_partial(options[:partial], ActionView::Base::ObjectWrapper.new(options[:object]), options[:locals])
|
||||
elsif options[:inline]
|
||||
template = Template.new(self, options[:inline], false, options[:locals], true, options[:type])
|
||||
template = InlineTemplate.new(self, options[:inline], options[:locals], options[:type])
|
||||
render_template(template)
|
||||
end
|
||||
end
|
||||
|
|
20
actionpack/lib/action_view/inline_template.rb
Normal file
20
actionpack/lib/action_view/inline_template.rb
Normal file
|
@ -0,0 +1,20 @@
|
|||
module ActionView #:nodoc:
|
||||
class InlineTemplate < Template #:nodoc:
|
||||
|
||||
def initialize(view, source, locals = {}, type = nil)
|
||||
@view = view
|
||||
@finder = @view.finder
|
||||
|
||||
@source = source
|
||||
@extension = type
|
||||
@locals = locals || {}
|
||||
|
||||
@handler = self.class.handler_class_for_extension(@extension).new(@view)
|
||||
end
|
||||
|
||||
def method_key
|
||||
@source
|
||||
end
|
||||
|
||||
end
|
||||
end
|
|
@ -2,22 +2,18 @@ module ActionView #:nodoc:
|
|||
class Template #:nodoc:
|
||||
|
||||
attr_accessor :locals
|
||||
attr_reader :handler, :path, :source, :extension, :filename, :path_without_extension, :method
|
||||
attr_reader :handler, :path, :extension, :filename, :path_without_extension, :method
|
||||
|
||||
def initialize(view, path_or_source, use_full_path, locals = {}, inline = false, inline_type = nil)
|
||||
def initialize(view, path, use_full_path, locals = {})
|
||||
@view = view
|
||||
@finder = @view.finder
|
||||
|
||||
unless inline
|
||||
# Clear the forward slash at the beginning if exists
|
||||
@path = use_full_path ? path_or_source.sub(/^\//, '') : path_or_source
|
||||
@path = use_full_path ? path.sub(/^\//, '') : path
|
||||
@view.first_render ||= @path
|
||||
@source = nil # Don't read the source until we know that it is required
|
||||
set_extension_and_file_name(use_full_path)
|
||||
else
|
||||
@source = path_or_source
|
||||
@extension = inline_type
|
||||
end
|
||||
|
||||
@locals = locals || {}
|
||||
@handler = self.class.handler_class_for_extension(@extension).new(@view)
|
||||
end
|
||||
|
@ -32,7 +28,7 @@ module ActionView #:nodoc:
|
|||
end
|
||||
|
||||
def method_key
|
||||
@method_key ||= (@filename || @source)
|
||||
@filename
|
||||
end
|
||||
|
||||
def base_path_for_exception
|
||||
|
|
|
@ -20,7 +20,7 @@ class CustomHandlerTest < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_custom_render
|
||||
template = ActionView::Template.new(@view, "hello <%= one %>", false, { :one => "two" }, true, "foo")
|
||||
template = ActionView::InlineTemplate.new(@view, "hello <%= one %>", { :one => "two" }, "foo")
|
||||
|
||||
result = @view.render_template(template)
|
||||
assert_equal(
|
||||
|
@ -29,7 +29,7 @@ class CustomHandlerTest < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_custom_render2
|
||||
template = ActionView::Template.new(@view, "hello <%= one %>", false, { :one => "two" }, true, "foo2")
|
||||
template = ActionView::InlineTemplate.new(@view, "hello <%= one %>", { :one => "two" }, "foo2")
|
||||
result = @view.render_template(template)
|
||||
assert_equal(
|
||||
[ "hello <%= one %>", { :one => "two" }, @view ],
|
||||
|
@ -38,7 +38,7 @@ class CustomHandlerTest < Test::Unit::TestCase
|
|||
|
||||
def test_unhandled_extension
|
||||
# uses the ERb handler by default if the extension isn't recognized
|
||||
template = ActionView::Template.new(@view, "hello <%= one %>", false, { :one => "two" }, true, "bar")
|
||||
template = ActionView::InlineTemplate.new(@view, "hello <%= one %>", { :one => "two" }, "bar")
|
||||
result = @view.render_template(template)
|
||||
assert_equal "hello two", result
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue