class EachProcessor

Public Instance Methods

call(node:nil, attribute:nil, context:nil, **_) click to toggle source
# File lib/thymeleaf/dialects/default/processors/each.rb, line 6
def call(node:nil, attribute:nil, context:nil, **_)
  variable, stat, enumerable = EachExpression.parse(context, attribute.value)
  
  elements = evaluate_in_context(context, enumerable)
  
  stat_var = init_stat_var(stat, elements)


  attribute.unlink
  
  elements.each do |element|
    subcontext_vars = {}
    subcontext_vars[variable] = element unless variable.nil?

    unless stat.nil?
      stat_var[:index]  += 1
      stat_var[:count]  += 1
      stat_var[:current] = element
      stat_var[:even]    = stat_var[:count].even?
      stat_var[:odd]     = stat_var[:count].odd?
      stat_var[:first]   = (stat_var[:index].eql? 0)
      stat_var[:last]    = (stat_var[:count].eql? stat_var[:size])

      subcontext_vars[stat] = stat_var
    end
    
    subcontext = ContextHolder.new(subcontext_vars, context)
    new_node = node.dup
    subprocess_node(subcontext, new_node)
    node.add_previous_sibling(new_node)
  end

  node.children.each {|child| child.unlink }
  node.unlink
  
  context # TODO: Remove
end
has_subcontext?() click to toggle source
# File lib/thymeleaf/dialects/default/processors/each.rb, line 44
def has_subcontext?
  true
end

Private Instance Methods

init_stat_var(stat, elements) click to toggle source
# File lib/thymeleaf/dialects/default/processors/each.rb, line 50
def init_stat_var(stat, elements)
  if stat.nil?
    nil
  else
    {
        :index    => -1,
        :count    => 0,
        :size     => elements.length,
        :current  => nil,
        :even     => false,
        :odd      => true,
        :first    => true,
        :last     => false
    }
  end
end