Skip to content

Commit b740344

Browse files
committed
✨ Delegate VanishedData#each => #uids.each_number
`VanishedData#to_a` is already provided, but using `#each` would be safer and simpler in many scenarios.
1 parent e230fe1 commit b740344

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

lib/net/imap/vanished_data.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ def initialize(uids:, earlier:)
5151
# See SequenceSet#numbers.
5252
def to_a; uids.numbers end
5353

54+
# Yields each UID in #uids and returns +self+. Returns an Enumerator when
55+
# no block is given.
56+
#
57+
# See SequenceSet#each_number.
58+
def each(&)
59+
return to_enum unless block_given?
60+
uids.each_number(&)
61+
self
62+
end
5463
end
5564
end
5665
end

test/net/imap/test_vanished_data.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,20 @@ class VanishedDataTest < Net::IMAP::TestCase
7171
assert_raise DataFormatError do VanishedData[nil, nil] end
7272
end
7373

74-
test "#to_a delegates to uids (SequenceSet#to_a)" do
74+
test "#to_a delegates to uids (SequenceSet#numbers)" do
7575
assert_equal [1, 2, 3, 4], VanishedData["1:4", true].to_a
7676
end
7777

78+
test "#each delegates to uids (SequenceSert#each_number)" do
79+
assert_kind_of Enumerator, VanishedData["1:4", true].each
80+
assert_equal [1, 2, 3, 4], VanishedData["1:4", true].each.to_a
81+
ary = []
82+
vanished = VanishedData["5:6,100", true]
83+
returned = vanished.each do ary << _1 end
84+
assert_same vanished, returned
85+
assert_equal [5, 6, 100], ary
86+
end
87+
7888
test "#deconstruct_keys returns uids and earlier" do
7989
assert_equal({uids: SequenceSet[1,9], earlier: true},
8090
VanishedData["1,9", true].deconstruct_keys([:uids, :earlier]))

0 commit comments

Comments
 (0)