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