modular_tree 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/modular_tree/implementations.rb +50 -0
- data/lib/modular_tree/properties.rb +4 -0
- data/lib/modular_tree/version.rb +1 -1
- data/lib/modular_tree.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b145f3b7daeb0bddc2a2415e3a98d6d6232d95afeca8147908bffa2089ff412
|
4
|
+
data.tar.gz: 68271887a655b0196e5f9819f72ee80ca9e853c15568ab48cc1d7e15c4a29d22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9a39254ef102c23dbba9445b5b95b3d925d0954ef28de91107318c24ce9c450dd1fc2612cae18fc2c4033314bcd85b14a7126eb09e01daee076e380b05fe54c
|
7
|
+
data.tar.gz: 3b84c591c7816199835041074b6fb8b9506c5b85b438000045ce4d21627559835edeadf0336ca6635d76cef563082254318a1cf13d15342c431f407f51868615
|
@@ -167,6 +167,33 @@ module Tree
|
|
167
167
|
|
168
168
|
def each_child(&block) = @children.map(&block)
|
169
169
|
def attach(child) = @children << child
|
170
|
+
|
171
|
+
# Can be used with any array implementation
|
172
|
+
def insert(where, child) = insert_append(:insert, where, child)
|
173
|
+
def append(where, child) = insert_append(:append, where, child)
|
174
|
+
|
175
|
+
def replace(where, *children)
|
176
|
+
children = Array(children).flatten
|
177
|
+
case where
|
178
|
+
when Integer
|
179
|
+
subject = @children[where] or raise ArgumentError
|
180
|
+
index = where
|
181
|
+
else
|
182
|
+
subject = where
|
183
|
+
index = @children.index(where) or raise ArgumentError
|
184
|
+
end
|
185
|
+
@children = @children[0...index] + children + @children[index + 1..-1]
|
186
|
+
subject
|
187
|
+
end
|
188
|
+
|
189
|
+
protected
|
190
|
+
def insert_append(which, where, child)
|
191
|
+
if !where.is_a?(Integer)
|
192
|
+
where = @children.index(where) or raise ArgumentError, "Can't find object"
|
193
|
+
end
|
194
|
+
where += 1 if which == :append
|
195
|
+
@children.insert(where, child)
|
196
|
+
end
|
170
197
|
end
|
171
198
|
|
172
199
|
module InternalChildrenHashImplementation
|
@@ -198,5 +225,28 @@ module Tree
|
|
198
225
|
child.send(:parent=, self)
|
199
226
|
end
|
200
227
|
end
|
228
|
+
|
229
|
+
module InternalParentChildArrayImplementation
|
230
|
+
include InternalParentChildImplementation
|
231
|
+
|
232
|
+
def insert(where, child)
|
233
|
+
super
|
234
|
+
child.send(:parent=, self)
|
235
|
+
end
|
236
|
+
|
237
|
+
def append(where, child)
|
238
|
+
super
|
239
|
+
child.send(:parent=, self)
|
240
|
+
end
|
241
|
+
|
242
|
+
# Requires that Child classes already has defined this
|
243
|
+
def replace(where, *children)
|
244
|
+
children = Array(children).flatten
|
245
|
+
subject = super(where, children)
|
246
|
+
subject.send(:parent=, nil)
|
247
|
+
children.each { |child| child.send(:parent=, self) }
|
248
|
+
subject
|
249
|
+
end
|
250
|
+
end
|
201
251
|
end
|
202
252
|
|
data/lib/modular_tree/version.rb
CHANGED
data/lib/modular_tree.rb
CHANGED
@@ -39,7 +39,7 @@ module Tree
|
|
39
39
|
class ArrayTree < AbstractTree # Aka. SetTree aka. Tree
|
40
40
|
include InternalParentImplementation
|
41
41
|
include InternalChildrenArrayImplementation
|
42
|
-
include
|
42
|
+
include InternalParentChildArrayImplementation
|
43
43
|
include UpTreeAlgorithms
|
44
44
|
include DownTreeAlgorithms
|
45
45
|
include DownTreeFilteredAlgorithms
|