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.



480
481
482
483
484
485
486
487
488
489
# File 'lib/roda/plugins/render.rb', line 480

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.



492
493
494
# File 'lib/roda/plugins/render.rb', line 492

def render_opts
  self.class.render_opts
end

#view(template, opts = (content = _optimized_view_content(template); OPTS)) ⇒ 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. See Render for details.



499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
# File 'lib/roda/plugins/render.rb', line 499

def view(template, opts = (content = _optimized_view_content(template); OPTS))
  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)
  end

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

  content
end