Class: Musa::GenerativeGrammar::Implementation::Node
- Inherits:
-
Object
- Object
- Musa::GenerativeGrammar::Implementation::Node
- Defined in:
- lib/musa-dsl/generative/generative-grammar.rb
Direct Known Subclasses
BlockNode, ConditionNode, FinalNode, NextNode, OrNode, ProxyNode, RepeatNode
Instance Method Summary collapse
- #[](index) ⇒ Object
- #_options(parent: nil, &condition) ⇒ Object
- #limit(attribute = nil, after_collect_operation = nil, comparison_method = nil, comparison_value = nil, &block) ⇒ Object
- #next(other) ⇒ Object (also: #+)
- #options(attribute = nil, after_collect_operation = nil, comparison_method = nil, comparison_value = nil, raw: nil, content: nil, &condition) ⇒ Object
- #or(other) ⇒ Object (also: #|)
- #repeat(exactly = nil, min: nil, max: nil) ⇒ Object
- #size ⇒ Object (also: #length)
- #to_serie(flatten: true, &condition) ⇒ Object (also: #s)
Instance Method Details
#[](index) ⇒ Object
101 102 103 |
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 101 def [](index) [index].to_serie.to_node end |
#_options(parent: nil, &condition) ⇒ Object
114 115 116 |
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 114 def (parent: nil, &condition) raise NotImplementedError end |
#limit(attribute = nil, after_collect_operation = nil, comparison_method = nil, comparison_value = nil, &block) ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 58 def limit(attribute = nil, after_collect_operation = nil, comparison_method = nil, comparison_value = nil, &block) raise ArgumentError, 'Cannot use simplified arguments and yield block at the same time' if (attribute || after_collect_operation || comparison_method || comparison_value) && @block block ||= generate_simple_condition_block(attribute, after_collect_operation, comparison_method, comparison_value) ConditionNode.new(self, &block) end |
#next(other) ⇒ Object Also known as: +
66 67 68 |
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 66 def next(other) NextNode.new(self, other) end |
#options(attribute = nil, after_collect_operation = nil, comparison_method = nil, comparison_value = nil, raw: nil, content: nil, &condition) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 72 def (attribute = nil, after_collect_operation = nil, comparison_method = nil, comparison_value = nil, raw: nil, content: nil, &condition) raise ArgumentError, 'Cannot use simplified arguments and yield block at the same time' if (attribute || after_collect_operation || comparison_method || comparison_value) && @condition raise ArgumentError, 'Cannot use raw: true and content: option at the same time' if raw && content raw ||= false content ||= :itself condition ||= generate_simple_condition_block(attribute, after_collect_operation, comparison_method, comparison_value) if raw (&condition) else (&condition).collect { |o| o.collect(&:content).send(content) } end end |
#or(other) ⇒ Object Also known as: |
30 31 32 |
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 30 def or(other) OrNode.new(self, other) end |
#repeat(exactly = nil, min: nil, max: nil) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 36 def repeat(exactly = nil, min: nil, max: nil) raise ArgumentError, 'Only exactly value or min/max values are allowed' if exactly && (min || max) min = max = exactly if exactly if min && min > 0 pre = self (min - 1).times do pre += self end end if pre && max == min pre elsif pre && max > min pre + RepeatNode.new(self, max - min) else RepeatNode.new(self, max) end end |
#size ⇒ Object Also known as: length
95 96 97 |
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 95 def size .size end |
#to_serie(flatten: true, &condition) ⇒ Object Also known as: s
105 106 107 108 109 110 |
# File 'lib/musa-dsl/generative/generative-grammar.rb', line 105 def to_serie(flatten: true, &condition) serie = (&condition).collect { |o| o.collect(&:content) }.to_serie(of_series: true).merge serie = serie.flatten if flatten serie.prototype end |