Class: Rewrite::ByExample::Composition
- Defined in:
- lib/rewrite/by_example/composition.rb
Overview
A Composition is an aggregation of Sequence. So where a LengthOne and a BindSequence are both leaves of a sequence tree, a Composition is a node.
Instance Attribute Summary collapse
-
#length_range ⇒ Object
readonly
Returns the value of attribute length_range.
-
#sub_sequences ⇒ Object
readonly
Returns the value of attribute sub_sequences.
Instance Method Summary collapse
- #fold(enum_of_bindings) ⇒ Object
-
#initialize(*sub_sequences) ⇒ Composition
constructor
A new instance of Composition.
- #to_s ⇒ Object
- #unfolders_by_length(length) ⇒ Object
Constructor Details
#initialize(*sub_sequences) ⇒ Composition
Returns a new instance of Composition.
13 14 15 16 |
# File 'lib/rewrite/by_example/composition.rb', line 13 def initialize(*sub_sequences) @sub_sequences = sub_sequences#.map { |sub| Sequence.from_object(sub) } @length_range = range_sum(@sub_sequences) end |
Instance Attribute Details
#length_range ⇒ Object (readonly)
Returns the value of attribute length_range.
11 12 13 |
# File 'lib/rewrite/by_example/composition.rb', line 11 def length_range @length_range end |
#sub_sequences ⇒ Object (readonly)
Returns the value of attribute sub_sequences.
11 12 13 |
# File 'lib/rewrite/by_example/composition.rb', line 11 def sub_sequences @sub_sequences end |
Instance Method Details
#fold(enum_of_bindings) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/rewrite/by_example/composition.rb', line 26 def fold(enum_of_bindings) sub_sequences.inject(s()) { |refolded, sub_sequence| folded = sub_sequence.fold(enum_of_bindings) if folded.nil? s(*(refolded + [nil])) elsif sub_sequence.is_a? LengthOne s(*(refolded + [folded])) else s(*(refolded + folded)) end } end |
#to_s ⇒ Object
22 23 24 |
# File 'lib/rewrite/by_example/composition.rb', line 22 def to_s sub_sequences.map { |ss| ss.to_s }.join(', ') end |
#unfolders_by_length(length) ⇒ Object
18 19 20 |
# File 'lib/rewrite/by_example/composition.rb', line 18 def unfolders_by_length(length) unfolders_by_length_helper(sub_sequences(), length) end |