class Each

Function to map over elements in the context

Public Instance Methods

to_html(body, context) click to toggle source
# File lib/emerald/nodes/each.rb, line 9
def to_html(body, context)
  vars = collection.content(context)
  key_name = indexed.text_value.length.positive? ? indexed.key_name : nil

  # TODO: clean up somehow
  if vars.is_a? Hash
    vars
      .map do |var, key|
        new_ctx = context.clone
        new_ctx[val_name.text_value] = var
        new_ctx[key_name.text_value] = key if key_name

        body.to_html(new_ctx)
      end
      .join("\n")
  elsif vars.is_a? Array
    vars
      .map.with_index do |var, idx|
        new_ctx = context.clone
        new_ctx[val_name.text_value] = var
        new_ctx[key_name.text_value] = idx if key_name

        body.to_html(new_ctx)
      end
      .join("\n")
  elsif vars.nil?
    ''
  else
    raise 'bad variable type :('
  end
end