module Roda::RodaPlugins::RenderEach::InstanceMethods
def _cached_render_each_template_method(template)
a string or symbol, or if compiled method support for this template has
method name to call to render the template. Return false if not given
If compiled method support is enabled in the render plugin, return the
def _cached_render_each_template_method(template) case template when String, Symbol if (method_cache = render_opts[:template_method_cache]) _cached_template_method_lookup(method_cache, [:_render_locals, template, [template.to_sym]]) end else false end end
def _cached_render_each_template_method(template)
def _cached_render_each_template_method(template) nil end
def _optimized_render_each(enum, optimized_template, as, locals)
def _optimized_render_each(enum, optimized_template, as, locals) enum.map do |v| locals[as] = v send(optimized_template, locals) end.join end
def render_each(enum, template, opts=(no_opts = true; optimized_template = _cached_render_each_template_method(template); OPTS))
inside the template. An explicit +nil+ value does not
:local :: The local variable to use for the current enum value
Additional options supported:
given opts. The template and options hash are passed to +render+.
For each value in enum, render the given template using the
def render_each(enum, template, opts=(no_opts = true; optimized_template = _cached_render_each_template_method(template); OPTS)) if optimized_template return _optimized_render_each(enum, optimized_template, render_each_default_local(template), {}) elsif opts.has_key?(:local) as = opts[:local] else as = render_each_default_local(template) if no_opts && optimized_template.nil? && (optimized_template = _optimized_render_method_for_locals(template, (locals = {as=>nil}))) return _optimized_render_each(enum, optimized_template, as, locals) end end if as opts = opts.dup if locals = opts[:locals] locals = opts[:locals] = Hash[locals] else locals = opts[:locals] = {} end locals[as] = nil if (opts.keys - ALLOWED_KEYS).empty? && (optimized_template = _optimized_render_method_for_locals(template, locals)) return _optimized_render_each(enum, optimized_template, as, locals) end end enum.map do |v| locals[as] = v if as render_template(template, opts) end.join end
def render_each_default_local(template)
The default local variable name to use for the template, if the :local option
def render_each_default_local(template) File.basename(template.to_s).sub(/\..+\z/, '').to_sym end