Skip to content

Commit adaa4d1

Browse files
committed
🐛 Fix SequenceSet#include? for invalid inputs
The rdoc said it returned `false`, but it actually crashed. I've fixed it to return `nil` and modified the docs to match.
1 parent 9872eb6 commit adaa4d1

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

lib/net/imap/sequence_set.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -528,8 +528,8 @@ def ===(other)
528528
def cover?(other) input_to_tuples(other).none? { !include_tuple?(_1) } end
529529

530530
# Returns +true+ when a given number or range is in +self+, and +false+
531-
# otherwise. Returns +false+ unless +number+ is an Integer, Range, or
532-
# <tt>*</tt>.
531+
# otherwise. Returns +nil+ when +number+ isn't a valid SequenceSet
532+
# element (Integer, Range, <tt>*</tt>, +sequence-set+ string).
533533
#
534534
# set = Net::IMAP::SequenceSet["5:10,100,111:115"]
535535
# set.include? 1 #=> false
@@ -551,7 +551,10 @@ def cover?(other) input_to_tuples(other).none? { !include_tuple?(_1) } end
551551
# set.include?(100..) #=> false
552552
#
553553
# Related: #include_star?, #cover?, #===
554-
def include?(element) include_tuple? input_to_tuple element end
554+
def include?(element)
555+
tuple = input_to_tuple element rescue nil
556+
!!include_tuple?(tuple) if tuple
557+
end
555558

556559
alias member? include?
557560

test/net/imap/test_sequence_set.rb

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -794,13 +794,16 @@ def obj.to_sequence_set; 192_168.001_255 end
794794
end
795795

796796
test "#include?" do
797-
assert SequenceSet["2:4"].include?(3)
798-
assert SequenceSet["2,*:12"].include? :*
799-
assert SequenceSet["2,*:12"].include?(-1)
797+
assert_equal true, SequenceSet["2:4"].include?(3)
798+
assert_equal true, SequenceSet["2,*:12"].include?(:*)
799+
assert_equal true, SequenceSet["2,*:12"].include?(-1)
800+
assert_nil SequenceSet["1:*"].include?("hopes and dreams")
801+
assert_nil SequenceSet["1:*"].include?(:wat?)
802+
assert_nil SequenceSet["1:*"].include?([1, 2, 3])
800803
set = SequenceSet.new Array.new(100) { rand(1..1500) }
801804
rev = (~set).limit(max: 1_501)
802-
set.numbers.each do assert set.include?(_1) end
803-
rev.numbers.each do refute set.include?(_1) end
805+
set.numbers.each do assert_equal true, set.include?(_1) end
806+
rev.numbers.each do assert_equal false, set.include?(_1) end
804807
end
805808

806809
test "#cover?" do

0 commit comments

Comments
 (0)