class ActionView::Renderer

Action View Renderer

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.

Attributes

lookup_context[RW]

Public Class Methods

new(lookup_context) click to toggle source
# File lib/action_view/renderer/renderer.rb, line 18
def initialize(lookup_context)
  @lookup_context = lookup_context
end

Public Instance Methods

render(context, options) click to toggle source

Main render entry point shared by Action View and Action Controller.

# File lib/action_view/renderer/renderer.rb, line 23
def render(context, options)
  render_to_object(context, options).body
end
render_body(context, options) click to toggle source

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 lib/action_view/renderer/renderer.rb, line 40
def render_body(context, options)
  if options.key?(:partial)
    [render_partial(context, options)]
  else
    StreamingTemplateRenderer.new(@lookup_context).render(context, options)
  end
end

Private Instance Methods

collection_from_object(object) click to toggle source
# File lib/action_view/renderer/renderer.rb, line 103
def collection_from_object(object)
  object if object.respond_to?(:to_ary)
end
collection_from_options(options) click to toggle source
# File lib/action_view/renderer/renderer.rb, line 96
def collection_from_options(options)
  if options.key?(:collection)
    collection = options[:collection]
    collection || []
  end
end
render_partial_to_object(context, options, &block) click to toggle source
# File lib/action_view/renderer/renderer.rb, line 61
def render_partial_to_object(context, options, &block)
  partial = options[:partial]
  if String === partial
    collection = collection_from_options(options)

    if collection
      # Collection + Partial
      renderer = CollectionRenderer.new(@lookup_context, options)
      renderer.render_collection_with_partial(collection, partial, context, block)
    else
      if options.key?(:object)
        # Object + Partial
        renderer = ObjectRenderer.new(@lookup_context, options)
        renderer.render_object_with_partial(options[:object], partial, context, block)
      else
        # Partial
        renderer = PartialRenderer.new(@lookup_context, options)
        renderer.render(partial, context, block)
      end
    end
  else
    collection = collection_from_object(partial) || collection_from_options(options)

    if collection
      # Collection + Derived Partial
      renderer = CollectionRenderer.new(@lookup_context, options)
      renderer.render_collection_derive_partial(collection, context, block)
    else
      # Object + Derived Partial
      renderer = ObjectRenderer.new(@lookup_context, options)
      renderer.render_object_derive_partial(partial, context, block)
    end
  end
end
render_template_to_object(context, options) click to toggle source
# File lib/action_view/renderer/renderer.rb, line 57
def render_template_to_object(context, options)
  TemplateRenderer.new(@lookup_context).render(context, options)
end