Introduce ActionView::InlineTemplate class

This commit is contained in:
Pratik Naik 2008-04-19 16:16:32 +01:00
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 @@ def render(options = nil, extra_options = {}, &block) #:doc:
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_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 @@ def render(options = {}, local_assigns = {}, &block) #:nodoc:
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

@ -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
@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
# Clear the forward slash at the beginning if exists
@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)
@locals = locals || {}
@handler = self.class.handler_class_for_extension(@extension).new(@view)
end
@ -32,7 +28,7 @@ def source
end
def method_key
@method_key ||= (@filename || @source)
@filename
end
def base_path_for_exception

@ -20,7 +20,7 @@ def setup
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 @@ def test_custom_render
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 @@ def test_custom_render2
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