diff --git a/lib/net/imap/sequence_set.rb b/lib/net/imap/sequence_set.rb
index 5a04a06ea..5e90d77b3 100644
--- a/lib/net/imap/sequence_set.rb
+++ b/lib/net/imap/sequence_set.rb
@@ -528,8 +528,8 @@ def ===(other)
def cover?(other) input_to_tuples(other).none? { !include_tuple?(_1) } end
# Returns +true+ when a given number or range is in +self+, and +false+
- # otherwise. Returns +false+ unless +number+ is an Integer, Range, or
- # *.
+ # otherwise. Returns +nil+ when +number+ isn't a valid SequenceSet
+ # element (Integer, Range, *, +sequence-set+ string).
#
# set = Net::IMAP::SequenceSet["5:10,100,111:115"]
# set.include? 1 #=> false
@@ -537,8 +537,8 @@ def cover?(other) input_to_tuples(other).none? { !include_tuple?(_1) } end
# set.include? 11..20 #=> false
# set.include? 100 #=> true
# set.include? 6 #=> true, covered by "5:10"
- # set.include? 4..9 #=> true, covered by "5:10"
- # set.include? "4:9" #=> true, strings are parsed
+ # set.include? 6..9 #=> true, covered by "5:10"
+ # set.include? "6:9" #=> true, strings are parsed
# set.include? 4..9 #=> false, intersection is not sufficient
# set.include? "*" #=> false, use #limit to re-interpret "*"
# set.include? -1 #=> false, -1 is interpreted as "*"
@@ -547,11 +547,14 @@ def cover?(other) input_to_tuples(other).none? { !include_tuple?(_1) } end
# set.include? :* #=> true
# set.include? "*" #=> true
# set.include? -1 #=> true
- # set.include? 200.. #=> true
- # set.include? 100.. #=> false
+ # set.include?(200..) #=> true
+ # set.include?(100..) #=> false
#
# Related: #include_star?, #cover?, #===
- def include?(element) include_tuple? input_to_tuple element end
+ def include?(element)
+ tuple = input_to_tuple element rescue nil
+ !!include_tuple?(tuple) if tuple
+ end
alias member? include?
diff --git a/test/net/imap/test_sequence_set.rb b/test/net/imap/test_sequence_set.rb
index a5dbd6194..156213bca 100644
--- a/test/net/imap/test_sequence_set.rb
+++ b/test/net/imap/test_sequence_set.rb
@@ -794,13 +794,16 @@ def obj.to_sequence_set; 192_168.001_255 end
end
test "#include?" do
- assert SequenceSet["2:4"].include?(3)
- assert SequenceSet["2,*:12"].include? :*
- assert SequenceSet["2,*:12"].include?(-1)
+ assert_equal true, SequenceSet["2:4"].include?(3)
+ assert_equal true, SequenceSet["2,*:12"].include?(:*)
+ assert_equal true, SequenceSet["2,*:12"].include?(-1)
+ assert_nil SequenceSet["1:*"].include?("hopes and dreams")
+ assert_nil SequenceSet["1:*"].include?(:wat?)
+ assert_nil SequenceSet["1:*"].include?([1, 2, 3])
set = SequenceSet.new Array.new(100) { rand(1..1500) }
rev = (~set).limit(max: 1_501)
- set.numbers.each do assert set.include?(_1) end
- rev.numbers.each do refute set.include?(_1) end
+ set.numbers.each do assert_equal true, set.include?(_1) end
+ rev.numbers.each do assert_equal false, set.include?(_1) end
end
test "#cover?" do