Class: Twig::ExpressionParser::ExpressionParsers

Inherits:
Object
  • Object
show all
Defined in:
lib/twig/expression_parser/expression_parsers.rb

Instance Method Summary collapse

Constructor Details

#initialize(parsers = []) ⇒ ExpressionParsers

Returns a new instance of ExpressionParsers.

Parameters:



7
8
9
10
11
12
# File 'lib/twig/expression_parser/expression_parsers.rb', line 7

def initialize(parsers = [])
  @parsers_by_name = {}
  @parsers_by_class = {}

  add(parsers)
end

Instance Method Details

#add(parsers) ⇒ Object

Parameters:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/twig/expression_parser/expression_parsers.rb', line 15

def add(parsers)
  parsers.each do |parser|
    if parser.precedence > 512 || parser.precedence.negative?
      raise(
        ArgumentError,
        "Precedence for \"#{parser.name}\" must be between 0 and 512, got #{parser.precedence}."
      )
    end

    parsers_by_name[parser.type] ||= {}
    parsers_by_name[parser.type][parser.name] = parser
    parsers_by_class[parser.class.name] = parser

    parser.aliases.each do |alias_name|
      parsers_by_name[parser.type][alias_name] = parser
    end
  end
end

#by_class(klass) ⇒ ExpressionParser::Base?

Returns:



39
40
41
# File 'lib/twig/expression_parser/expression_parsers.rb', line 39

def by_class(klass)
  parsers_by_class[klass]
end

#by_name(type, name) ⇒ ExpressionParser::Base?

Returns:



44
45
46
# File 'lib/twig/expression_parser/expression_parsers.rb', line 44

def by_name(type, name)
  parsers_by_name[type][name]
end

#eachObject



34
35
36
# File 'lib/twig/expression_parser/expression_parsers.rb', line 34

def each(&)
  parsers_by_name.values.map(&:values).flatten.each(&)
end