From 367bdc53611fe1da9cedda3220a83d3f39409cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sun, 1 May 2011 12:37:57 +0200 Subject: Remove view dependency from AV::Renderer. --- .../lib/action_view/renderer/abstract_renderer.rb | 4 +- .../lib/action_view/renderer/partial_renderer.rb | 69 +++++++++++----------- actionpack/lib/action_view/renderer/renderer.rb | 46 ++++++--------- .../lib/action_view/renderer/template_renderer.rb | 4 +- 4 files changed, 57 insertions(+), 66 deletions(-) (limited to 'actionpack/lib/action_view/renderer') 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: - # - # * :partial - See ActionView::Partials. - # * :file - Renders an explicit template file (this used to be the old default), add :locals to pass in those. - # * :inline - Renders an inline template similar to how it's done in the controller. - # * :text - 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) -- cgit v1.2.3