aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/renderer
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2011-05-01 12:37:57 +0200
committerJosé Valim <jose.valim@gmail.com>2011-05-01 13:40:13 +0200
commit367bdc53611fe1da9cedda3220a83d3f39409cff (patch)
treef9f2fe13521d436a61d7068b7fc1b7d3e27f363e /actionpack/lib/action_view/renderer
parent33cc001f9158463389a9c9c321de0dbdccb1df8d (diff)
downloadrails-367bdc53611fe1da9cedda3220a83d3f39409cff.tar.gz
rails-367bdc53611fe1da9cedda3220a83d3f39409cff.tar.bz2
rails-367bdc53611fe1da9cedda3220a83d3f39409cff.zip
Remove view dependency from AV::Renderer.
Diffstat (limited to 'actionpack/lib/action_view/renderer')
-rw-r--r--actionpack/lib/action_view/renderer/abstract_renderer.rb4
-rw-r--r--actionpack/lib/action_view/renderer/partial_renderer.rb69
-rw-r--r--actionpack/lib/action_view/renderer/renderer.rb46
-rw-r--r--actionpack/lib/action_view/renderer/template_renderer.rb4
4 files changed, 57 insertions, 66 deletions
diff --git a/actionpack/lib/action_view/renderer/abstract_renderer.rb b/actionpack/lib/action_view/renderer/abstract_renderer.rb
index 37bc0ae244..d389105a7a 100644
--- a/actionpack/lib/action_view/renderer/abstract_renderer.rb
+++ b/actionpack/lib/action_view/renderer/abstract_renderer.rb
@@ -3,9 +3,9 @@ module ActionView
delegate :find_template, :template_exists?, :with_fallbacks, :update_details,
:with_layout_format, :formats, :freeze_formats, :to => :@lookup_context
- def initialize(view, lookup_context)
- @view = view
+ def initialize(lookup_context, controller)
@lookup_context = lookup_context
+ @controller = controller
end
def render
diff --git a/actionpack/lib/action_view/renderer/partial_renderer.rb b/actionpack/lib/action_view/renderer/partial_renderer.rb
index 0eeead2e5d..70327b16c4 100644
--- a/actionpack/lib/action_view/renderer/partial_renderer.rb
+++ b/actionpack/lib/action_view/renderer/partial_renderer.rb
@@ -217,45 +217,14 @@ module ActionView
class PartialRenderer < AbstractRenderer #:nodoc:
PARTIAL_NAMES = Hash.new {|h,k| h[k] = {} }
- # TODO Controller should not come from the view
- def initialize(view, *)
+ def initialize(*)
super
- @controller = @view.controller
@partial_names = PARTIAL_NAMES[@controller.class.name]
end
- def setup(options, block)
- partial = options[:partial]
-
- @options = options
- @locals = options[:locals] || {}
- @block = block
-
- if String === partial
- @object = options[:object]
- @path = partial
- @collection = collection
- else
- @object = partial
-
- if @collection = collection_from_object || collection
- paths = @collection_data = @collection.map { |o| partial_path(o) }
- @path = paths.uniq.size == 1 ? paths.first : nil
- else
- @path = partial_path
- end
- end
+ def render(context, options, block)
+ setup(context, options, block)
- if @path
- @variable, @variable_counter = retrieve_variable(@path)
- else
- paths.map! { |path| retrieve_variable(path).unshift(path) }
- end
-
- self
- end
-
- def render
wrap_formats(@path) do
identifier = ((@template = find_partial) ? @template.identifier : @path)
@@ -303,6 +272,38 @@ module ActionView
private
+ def setup(context, options, block)
+ @view = context
+ partial = options[:partial]
+
+ @options = options
+ @locals = options[:locals] || {}
+ @block = block
+
+ if String === partial
+ @object = options[:object]
+ @path = partial
+ @collection = collection
+ else
+ @object = partial
+
+ if @collection = collection_from_object || collection
+ paths = @collection_data = @collection.map { |o| partial_path(o) }
+ @path = paths.uniq.size == 1 ? paths.first : nil
+ else
+ @path = partial_path
+ end
+ end
+
+ if @path
+ @variable, @variable_counter = retrieve_variable(@path)
+ else
+ paths.map! { |path| retrieve_variable(path).unshift(path) }
+ end
+
+ self
+ end
+
def controller_prefixes
@controller_prefixes ||= @controller && @controller._prefixes
end
diff --git a/actionpack/lib/action_view/renderer/renderer.rb b/actionpack/lib/action_view/renderer/renderer.rb
index 7b95c2dd92..582ed2f9f8 100644
--- a/actionpack/lib/action_view/renderer/renderer.rb
+++ b/actionpack/lib/action_view/renderer/renderer.rb
@@ -3,37 +3,25 @@ module ActionView
# to other objects like TemplateRenderer and PartialRenderer which
# actually renders the template.
class Renderer
- attr_accessor :lookup_context
+ attr_accessor :lookup_context, :controller
- # TODO: render_context should not be an initialization parameter
- # TODO: controller should be received on initialization
- def initialize(lookup_context, render_context)
- @render_context = render_context
+ def initialize(lookup_context, controller)
@lookup_context = lookup_context
- @view_flow = OutputFlow.new
+ @controller = controller
end
- # Returns the result of a render that's dictated by the options hash. The primary options are:
- #
- # * <tt>:partial</tt> - See ActionView::Partials.
- # * <tt>:file</tt> - Renders an explicit template file (this used to be the old default), add :locals to pass in those.
- # * <tt>:inline</tt> - Renders an inline template similar to how it's done in the controller.
- # * <tt>:text</tt> - Renders the text passed in out.
- #
- # If no options hash is passed or :update specified, the default is to render a partial and use the second parameter
- # as the locals hash.
- def render(options = {}, locals = {}, &block)
+ def render(context, options = {}, locals = {}, &block)
case options
when Hash
if block_given?
- _render_partial(options.merge(:partial => options[:layout]), &block)
+ _render_partial(context, options.merge(:partial => options[:layout]), &block)
elsif options.key?(:partial)
- _render_partial(options)
+ _render_partial(context, options)
else
- _render_template(options)
+ _render_template(context, options)
end
else
- _render_partial(:partial => options, :locals => locals)
+ _render_partial(context, :partial => options, :locals => locals)
end
end
@@ -42,30 +30,30 @@ module ActionView
#
# Note that partials are not supported to be rendered with streaming,
# so in such cases, we just wrap them in an array.
- def render_body(options)
+ def render_body(context, options)
if options.key?(:partial)
- [_render_partial(options)]
+ [_render_partial(context, options)]
else
- StreamingTemplateRenderer.new(@render_context, @lookup_context).render(options)
+ StreamingTemplateRenderer.new(@lookup_context, @controller).render(context, options)
end
end
private
- def _render_template(options) #:nodoc:
- _template_renderer.render(options)
+ def _render_template(context, options) #:nodoc:
+ _template_renderer.render(context, options)
end
def _template_renderer #:nodoc:
- @_template_renderer ||= TemplateRenderer.new(@render_context, @lookup_context)
+ @_template_renderer ||= TemplateRenderer.new(@lookup_context, @controller)
end
- def _render_partial(options, &block) #:nodoc:
- _partial_renderer.setup(options, block).render
+ def _render_partial(context, options, &block) #:nodoc:
+ _partial_renderer.render(context, options, block)
end
def _partial_renderer #:nodoc:
- @_partial_renderer ||= PartialRenderer.new(@render_context, @lookup_context)
+ @_partial_renderer ||= PartialRenderer.new(@lookup_context, @controller)
end
end
end \ No newline at end of file
diff --git a/actionpack/lib/action_view/renderer/template_renderer.rb b/actionpack/lib/action_view/renderer/template_renderer.rb
index 471428ac9e..6c55a865a1 100644
--- a/actionpack/lib/action_view/renderer/template_renderer.rb
+++ b/actionpack/lib/action_view/renderer/template_renderer.rb
@@ -3,7 +3,9 @@ require 'active_support/core_ext/array/wrap'
module ActionView
class TemplateRenderer < AbstractRenderer #:nodoc:
- def render(options)
+ def render(context, options)
+ @view = context
+
wrap_formats(options[:template] || options[:file]) do
template = determine_template(options)
freeze_formats(template.formats, true)