Class: Twig::TokenParser::Yield

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

Instance Attribute Summary

Attributes inherited from Base

#parser

Instance Method Summary collapse

Instance Method Details

#parse(token) ⇒ Object



6
7
8
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
# File 'lib/twig/token_parser/yield.rb', line 6

def parse(token)
  stream = parser.stream
  lineno = token.lineno
  expr = parser.parse_expression
  arguments = []

  stream.expect(Token::NAME_TYPE, 'do')

  if stream.next_if(Token::OPERATOR_TYPE, '|')
    until stream.test(Token::OPERATOR_TYPE, '|')
      unless arguments.empty?
        stream.expect(Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma')
      end

      arguments.push(stream.expect(Token::NAME_TYPE).value)
    end

    stream.expect(Token::OPERATOR_TYPE, '|')
  end

  stream.expect(Token::BLOCK_END_TYPE)
  body = parser.subparse(method(:decide_yield_end), drop_needle: true)
  stream.expect(Token::BLOCK_END_TYPE)

  # If it's a context variable, turn it into a helper method
  # ex: {% yield turbo_frame_tag do %}
  if expr.is_a?(Node::Expression::Variable::Context)
    expr = Node::Expression::HelperMethod.new(
      expr.attributes[:name],
      Node::Nodes.new({}),
      lineno
    )
  end

  Node::Yield.new(expr, body, arguments, lineno)
end

#tagObject



43
44
45
# File 'lib/twig/token_parser/yield.rb', line 43

def tag
  'yield'
end