Class: ActionView::Renderer
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | actionview/lib/action_view/renderer/renderer.rb |
Overview
=====================
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 Method Summary
- .new(lookup_context) ⇒ Renderer constructor
Instance Attribute Summary
Instance Method Summary
-
#render(context, options, &block)
Main render entry point shared by Action View and Action Controller.
-
#render_body(context, options)
Render but returns a valid
::Rackbody. - #collection_from_object(object) private
- #collection_from_options(options) private
- #render_partial_to_object(context, options, &block) private
- #render_template_to_object(context, options, &block) private
- #cache_hits Internal use only
- #render_partial(context, options, &block) Internal use only
- #render_to_object(context, options, &block) Internal use only
Constructor Details
.new(lookup_context) ⇒ Renderer
# File 'actionview/lib/action_view/renderer/renderer.rb', line 19
def initialize(lookup_context) @lookup_context = lookup_context end
Instance Attribute Details
#lookup_context (rw)
[ GitHub ]# File 'actionview/lib/action_view/renderer/renderer.rb', line 17
attr_accessor :lookup_context
Instance Method Details
#cache_hits
# File 'actionview/lib/action_view/renderer/renderer.rb', line 53
def cache_hits # :nodoc: @cache_hits ||= {} end
#collection_from_object(object) (private)
[ GitHub ]# File 'actionview/lib/action_view/renderer/renderer.rb', line 104
def collection_from_object(object) object if object.respond_to?(:to_ary) end
#collection_from_options(options) (private)
[ GitHub ]# File 'actionview/lib/action_view/renderer/renderer.rb', line 97
def () if .key?(:collection) collection = [:collection] collection || [] end end
#render(context, options, &block)
Main render entry point shared by Action View and Action Controller.
# File 'actionview/lib/action_view/renderer/renderer.rb', line 24
def render(context, , &block) render_to_object(context, , &block).body end
#render_body(context, options)
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.
# File 'actionview/lib/action_view/renderer/renderer.rb', line 41
def render_body(context, ) if .key?(:partial) [render_partial(context, )] else StreamingTemplateRenderer.new(@lookup_context).render(context, ) end end
#render_partial(context, options, &block)
# File 'actionview/lib/action_view/renderer/renderer.rb', line 49
def render_partial(context, , &block) # :nodoc: render_partial_to_object(context, , &block).body end
#render_partial_to_object(context, options, &block) (private)
[ GitHub ]# File 'actionview/lib/action_view/renderer/renderer.rb', line 62
def render_partial_to_object(context, , &block) partial = [:partial] if String === partial collection = () if collection # Collection + Partial renderer = CollectionRenderer.new(@lookup_context, ) renderer.render_collection_with_partial(collection, partial, context, block) else if .key?(:object) # Object + Partial renderer = ObjectRenderer.new(@lookup_context, ) renderer.render_object_with_partial([:object], partial, context, block) else # Partial renderer = PartialRenderer.new(@lookup_context, ) renderer.render(partial, context, block) end end else collection = collection_from_object(partial) || () if collection # Collection + Derived Partial renderer = CollectionRenderer.new(@lookup_context, ) renderer.render_collection_derive_partial(collection, context, block) else # Object + Derived Partial renderer = ObjectRenderer.new(@lookup_context, ) renderer.render_object_derive_partial(partial, context, block) end end end
#render_template_to_object(context, options, &block) (private)
[ GitHub ]# File 'actionview/lib/action_view/renderer/renderer.rb', line 58
def render_template_to_object(context, , &block) TemplateRenderer.new(@lookup_context).render(context, , &block) end
#render_to_object(context, options, &block)
# File 'actionview/lib/action_view/renderer/renderer.rb', line 28
def render_to_object(context, , &block) # :nodoc: if .key?(:partial) render_partial_to_object(context, ) else render_template_to_object(context, , &block) end end