module Roda::RodaPlugins::RenderEach::InstanceMethods

  1. lib/roda/plugins/render_each.rb

Methods

Public Instance

  1. render_each

Public Instance methods

render_each(enum, template, opts=(no_opts = true; optimized_template = _cached_render_each_template_method(template); OPTS), &block)

For each value in enum, render the given template using the given opts. The template and options hash are passed to render. Additional options supported:

:local

The local variable to use for the current enum value inside the template. An explicit nil value does not set a local variable. If not set, uses the template name.

[show source]
    # File lib/roda/plugins/render_each.rb
 80 def render_each(enum, template, opts=(no_opts = true; optimized_template = _cached_render_each_template_method(template); OPTS), &block)
 81   if optimized_template
 82     return _optimized_render_each(enum, optimized_template, render_each_default_local(template), {}, &block)
 83   elsif opts.has_key?(:local)
 84     as = opts[:local]
 85   else
 86     as = render_each_default_local(template)
 87     if no_opts && optimized_template.nil? && (optimized_template = _optimized_render_method_for_locals(template, (locals = {as=>nil})))
 88       return _optimized_render_each(enum, optimized_template, as, locals, &block)
 89     end
 90   end
 91 
 92   if as
 93     opts = opts.dup
 94     if locals
 95       opts[:locals] = locals
 96     else
 97       locals = opts[:locals] = if locals = opts[:locals]
 98         Hash[locals]
 99       else
100         {}
101       end
102       locals[as] = nil
103     end
104 
105     if (opts.keys - ALLOWED_KEYS).empty? && (optimized_template = _optimized_render_method_for_locals(template, locals))
106       return _optimized_render_each(enum, optimized_template, as, locals, &block)
107     end
108   end
109 
110   if defined?(yield)
111     enum.each do |v|
112       locals[as] = v if as
113       yield render_template(template, opts)
114     end
115     nil
116   else
117     enum.map do |v|
118       locals[as] = v if as
119       render_template(template, opts)
120     end.join
121   end
122 end