Class: Twig::TokenParser::For

Inherits:
Base
  • Object
show all
Defined in:
lib/twig/token_parser/for.rb

Overview

for user in users %

  • user.name }
  • endfor %

    Instance Attribute Summary

    Attributes inherited from Base

    #parser

    Instance Method Summary collapse

    Instance Method Details

    #parse(token) ⇒ Object

    
    
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    # File 'lib/twig/token_parser/for.rb', line 9
    
    def parse(token)
      lineno = token.lineno
      stream = parser.stream
    
      targets = parse_assignment_expression
      stream.expect(Token::OPERATOR_TYPE, 'in')
      seq = parser.parse_expression
    
      if_expr = nil
      if stream.next_if(Token::NAME_TYPE, 'if')
        if_expr = parser.parse_expression
      end
    
      stream.expect(Token::BLOCK_END_TYPE)
      body = parser.subparse(method(:decide_for_fork))
    
      if stream.next.value == 'else'
        stream.expect(Token::BLOCK_END_TYPE)
        else_expr = parser.subparse(method(:decide_for_end), drop_needle: true)
      else
        else_expr = nil
      end
    
      stream.expect(Token::BLOCK_END_TYPE)
    
      if targets.nodes.length > 1
        key_target = targets.nodes[0]
        key_target = Node::Expression::Variable::AssignContext.new(
          key_target.attributes[:name],
          key_target.lineno
        )
        value_target = targets.nodes[1]
      else
        key_target = Node::Expression::Variable::AssignContext.new('_key', lineno)
        value_target = targets.nodes[0]
      end
    
      value_target = Node::Expression::Variable::AssignContext.new(
        value_target.attributes[:name],
        value_target.lineno
      )
    
      Node::For.new(key_target, value_target, seq, if_expr, body, else_expr, lineno)
    end

    #tagObject

    
    
    54
    55
    56
    # File 'lib/twig/token_parser/for.rb', line 54
    
    def tag
      'for'
    end