8000 Allow `Node#traverse` to return enumerator. Fixes #117. · socketry/async@85d6559 · GitHub
[go: up one dir, main page]

Skip to content

Commit 85d6559

Browse files
committed
Allow Node#traverse to return enumerator. Fixes #117.
1 parent a2cabe6 commit 85d6559

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

lib/async/node.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,13 +209,19 @@ def consume
209209
end
210210
end
211211

212+
def traverse(&block)
213+
return enum_for(:traverse) unless block_given?
214+
215+
self.traverse_recurse(&block)
216+
end
217+
212218
# Traverse the tree.
213219
# @yields {|node, level| ...} The node and the level relative to the given root.
214-
def traverse(level = 0, &block)
220+
protected def traverse_recurse(level = 0, &block)
215221
yield self, level
216222

217223
@children&.each do |child|
218-
child.traverse(level + 1, &block)
224+
child.traverse_recurse(level + 1, &block)
219225
end
220226
end
221227

test/async/node.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,4 +301,14 @@
301301
node.terminate
302302
end
303303
end
304+
305+
with '#traverse' do
306+
it 'can traverse without a block' do
307+
middle = Async::Node.new(node, annotation: "middle")
308+
child1 = Async::Node.new(middle, transient: true, annotation: "child1")
309+
child2 = Async::Node.new(middle, annotation: "child2")
310+
311+
expect(node.traverse.to_a).to be == [[node, 0], [middle, 1], [child1, 2], [child2, 2]]
312+
end
313+
end
304314
end

0 commit comments

Comments
 (0)
0