diff options
author | Piotr Sarnacki <drogus@gmail.com> | 2013-05-04 15:09:22 +0200 |
---|---|---|
committer | Łukasz Strzałkowski <lukasz.strzalkowski@gmail.com> | 2013-06-20 17:23:15 +0200 |
commit | 0d6e8edc2a47a4b4c6824936632bfb83850db343 (patch) | |
tree | 8829bfb94756e48e9489c4e8d22bb41df251bc81 /actionview/lib/action_view/renderer/renderer.rb | |
parent | 78b0934dd1bb84e8f093fb8ef95ca99b297b51cd (diff) | |
download | rails-0d6e8edc2a47a4b4c6824936632bfb83850db343.tar.gz rails-0d6e8edc2a47a4b4c6824936632bfb83850db343.tar.bz2 rails-0d6e8edc2a47a4b4c6824936632bfb83850db343.zip |
Move actionpack/lib/action_view* into actionview/lib
Diffstat (limited to 'actionview/lib/action_view/renderer/renderer.rb')
-rw-r--r-- | actionview/lib/action_view/renderer/renderer.rb | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/actionview/lib/action_view/renderer/renderer.rb b/actionview/lib/action_view/renderer/renderer.rb new file mode 100644 index 0000000000..964b18337e --- /dev/null +++ b/actionview/lib/action_view/renderer/renderer.rb @@ -0,0 +1,50 @@ +module ActionView + # This is the main entry point for rendering. It basically delegates + # to other objects like TemplateRenderer and PartialRenderer which + # actually renders the template. + # + # The Renderer will parse the options from the +render+ or +render_body+ + # method and render a partial or a template based on the options. The + # +TemplateRenderer+ and +PartialRenderer+ objects are wrappers which do all + # the setup and logic necessary to render a view and a new object is created + # each time +render+ is called. + class Renderer + attr_accessor :lookup_context + + def initialize(lookup_context) + @lookup_context = lookup_context + end + + # Main render entry point shared by AV and AC. + def render(context, options) + if options.key?(:partial) + render_partial(context, options) + else + render_template(context, options) + end + end + + # Render but returns a valid Rack body. If fibers are defined, we return + # a streaming body that renders the template piece by piece. + # + # 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(context, options) + if options.key?(:partial) + [render_partial(context, options)] + else + StreamingTemplateRenderer.new(@lookup_context).render(context, options) + end + end + + # Direct accessor to template rendering. + def render_template(context, options) #:nodoc: + TemplateRenderer.new(@lookup_context).render(context, options) + end + + # Direct access to partial rendering. + def render_partial(context, options, &block) #:nodoc: + PartialRenderer.new(@lookup_context).render(context, options, block) + end + end +end |