Class: Antlers::Parser
- Inherits:
-
Object
- Object
- Antlers::Parser
- Defined in:
- lib/parser.rb
Instance Method Summary collapse
-
#branch(node:, sequence:) ⇒ Object
rubocop:disable Metrics/AbcSize.
-
#initialize(namespace: nil) ⇒ Parser
constructor
A new instance of Parser.
- #parse(sequence:, id: :root_node) ⇒ Object
- #sub_branch(node:, sequence:, end_key:, end_name: nil) ⇒ Object
Constructor Details
#initialize(namespace: nil) ⇒ Parser
Returns a new instance of Parser.
8 9 10 |
# File 'lib/parser.rb', line 8 def initialize(namespace: nil) @factory = NodeFactory.new(namespace:) end |
Instance Method Details
#branch(node:, sequence:) ⇒ Object
rubocop:disable Metrics/AbcSize
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 |
# File 'lib/parser.rb', line 16 def branch(node:, sequence:) # rubocop:disable Metrics/AbcSize until sequence.empty? segment = sequence.shift if segment.is_a?(String) node.children << segment elsif segment[:var] node.children << @factory.var_node(segment:) elsif segment[:prop] node.children << @factory.prop_node(segment:) elsif segment[:slot] node.children << @factory.yield_node(segment:) elsif segment[:slot_def] slot_node = @factory.slot_node(segment:) node.children << slot_node sub_branch(node: slot_node, sequence:, end_key: :slot_end, end_name: slot_node.name) elsif segment[:for_def] for_node = @factory.for_node(segment:) node.children << for_node sub_branch(node: for_node, sequence:, end_key: :for_end, end_name: 'level_1') elsif segment[:form_def] form_node = @factory.form_node(segment:) node.children << form_node sub_branch(node: form_node, sequence:, end_key: :form_end, end_name: 'level_1') end end node end |
#parse(sequence:, id: :root_node) ⇒ Object
12 13 14 |
# File 'lib/parser.rb', line 12 def parse(sequence:, id: :root_node) branch(node: RootNode.new(name: id), sequence:) end |
#sub_branch(node:, sequence:, end_key:, end_name: nil) ⇒ Object
46 47 48 49 50 51 |
# File 'lib/parser.rb', line 46 def sub_branch(node:, sequence:, end_key:, end_name: nil) sub_sequence = [] sub_sequence << sequence.shift until sequence.first.is_a?(Hash) && sequence.first[end_key] == end_name branch(node:, sequence: sub_sequence) end |