Module: Roda::RodaPlugins::Render::InstanceMethods

Defined in:
lib/roda/plugins/render.rb

Instance Method Summary collapse

Instance Method Details

#render(template, opts = (no_opts = true; optimized_template = _cached_template_method(template); OPTS), &block) ⇒ Object Also known as: render_template

Render the given template. See Render for details.



510
511
512
513
514
515
516
517
518
519
# File 'lib/roda/plugins/render.rb', line 510

def render(template, opts = (no_opts = true; optimized_template = _cached_template_method(template); OPTS), &block)
  if optimized_template
    send(optimized_template, OPTS, &block)
  elsif !no_opts && opts.length == 1 && (locals = opts[:locals]) && (optimized_template = _optimized_render_method_for_locals(template, locals))
    send(optimized_template, locals, &block)
  else
    opts = render_template_opts(template, opts)
    retrieve_template(opts).render((opts[:scope]||self), (opts[:locals]||OPTS), &block)
  end
end

#render_optsObject

Return the render options for the instance’s class.



522
523
524
# File 'lib/roda/plugins/render.rb', line 522

def render_opts
  self.class.render_opts
end

#view(template, opts = (yield); OPTS), &block) ⇒ Object

Render the given template. If there is a default layout for the class, take the result of the template rendering and render it inside the layout. Blocks passed to view are passed to render when rendering the template. See Render for details.



531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
# File 'lib/roda/plugins/render.rb', line 531

def view(template, opts = (content = _optimized_view_content(template) unless defined?(yield); OPTS), &block)
  if content
    # First, check if the optimized layout method has already been created,
    # and use it if so.  This way avoids the extra conditional and local variable
    # assignments in the next section.
    if layout_method = _layout_method
      return send(layout_method, OPTS){content}
    end

    # If we have an optimized template method but no optimized layout method, create the
    # optimized layout method if possible and use it.  If you can't create the optimized
    # layout method, fall through to the slower approach.
    if layout_template = self.class.opts[:render][:optimize_layout]
      retrieve_template(:template=>layout_template, :cache_key=>nil, :template_method_cache_key => :_roda_layout)
      if layout_method = _layout_method
        return send(layout_method, OPTS){content}
      end
    end
  else
    opts = parse_template_opts(template, opts)
    content = opts[:content] || render_template(opts, &block)
  end

  if layout_opts  = view_layout_opts(opts)
    content = render_template(layout_opts){content}
  end

  content
end