Skip to content

Commit d027cd2

Browse files
committed
✨ Allow obj.to_sequence_set => nil in try_convert
If `obj.to_sequence_set` returns `nil`, then `SequenceSet.try_convert` should return `nil`. This is consistent with how ruby's built-in `try_convert` methods work.
1 parent 6a05108 commit d027cd2

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

lib/net/imap/sequence_set.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -444,14 +444,14 @@ def [](first, *rest)
444444
# +to_sequence_set+, calls +obj.to_sequence_set+ and returns the result.
445445
# Otherwise returns +nil+.
446446
#
447-
# If +obj.to_sequence_set+ doesn't return a SequenceSet, an exception is
448-
# raised.
447+
# If +obj.to_sequence_set+ doesn't return a SequenceSet or +nil+, an
448+
# exception is raised.
449449
#
450450
# Related: Net::IMAP::SequenceSet(), ::new, ::[]
451451
def try_convert(obj)
452452
return obj if obj.is_a?(SequenceSet)
453453
return nil unless obj.respond_to?(:to_sequence_set)
454-
obj = obj.to_sequence_set
454+
return nil unless obj = obj.to_sequence_set
455455
return obj if obj.is_a?(SequenceSet)
456456
raise DataFormatError, "invalid object returned from to_sequence_set"
457457
end

test/net/imap/test_sequence_set.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,10 @@ def compare_to_reference_set(nums, set, seqset)
293293
assert_nil SequenceSet.try_convert("12:34")
294294
assert_nil SequenceSet.try_convert(Object.new)
295295

296+
obj = Object.new
297+
def obj.to_sequence_set; nil end
298+
assert_nil SequenceSet.try_convert(obj)
299+
296300
obj = Object.new
297301
def obj.to_sequence_set; SequenceSet[192, 168, 1, 255] end
298302
assert_equal SequenceSet[192, 168, 1, 255], SequenceSet.try_convert(obj)

0 commit comments

Comments
 (0)