@@ -70,6 +70,28 @@ class IMAP
70
70
# copy == input #=> false, different set membership
71
71
# copy.eql? input #=> false, different string value
72
72
#
73
+ # Use Net::IMAP::SequenceSet() to coerce a single (optional) input.
74
+ # A SequenceSet input is returned without duplication, even when frozen.
75
+ #
76
+ # set = Net::IMAP::SequenceSet()
77
+ # set.string #=> nil
78
+ # set.frozen? #=> false
79
+ #
80
+ # # String order is preserved
81
+ # set = Net::IMAP::SequenceSet("1,2,3:7,5,6:10,2048,1024")
82
+ # set.valid_string #=> "1,2,3:7,5,6:10,2048,1024"
83
+ # set.frozen? #=> false
84
+ #
85
+ # # Other inputs are normalized
86
+ # set = Net::IMAP::SequenceSet([1, 2, [3..7, 5], 6..10, 2048, 1024])
87
+ # set.valid_string #=> "1:10,55,1024:2048"
88
+ # set.frozen? #=> false
89
+ #
90
+ # unfrozen = set
91
+ # frozen = set.dup.freeze
92
+ # unfrozen.equal? Net::IMAP::SequenceSet(unfrozen) #=> true
93
+ # frozen.equal? Net::IMAP::SequenceSet(frozen) #=> true
94
+ #
73
95
# Use ::[] to coerce one or more arguments into a valid frozen SequenceSet.
74
96
# A valid frozen SequenceSet is returned directly, without allocating a new
75
97
# object. ::[] will not create an invalid (empty) set.
@@ -95,7 +117,7 @@ class IMAP
95
117
#
96
118
# Objects which respond to +to_sequence_set+ (such as SearchResult and
97
119
# ThreadMember) can be coerced to a SequenceSet with ::new, ::try_convert,
98
- # or ::[].
120
+ # ::[], or Net::IMAP::SequenceSet .
99
121
#
100
122
# search = imap.uid_search(["SUBJECT", "hello", "NOT", "SEEN"])
101
123
# seqset = Net::IMAP::SequenceSet(search) - already_fetched
@@ -203,6 +225,7 @@ class IMAP
203
225
# * ::new: Creates a new mutable sequence set, which may be empty (invalid).
204
226
# * ::try_convert: Calls +to_sequence_set+ on an object and verifies that
205
227
# the result is a SequenceSet.
228
+ # * Net::IMAP::SequenceSet(): Coerce an input using ::try_convert or ::new.
206
229
# * ::empty: Returns a frozen empty (invalid) SequenceSet.
207
230
# * ::full: Returns a frozen SequenceSet containing every possible number.
208
231
#
@@ -387,7 +410,7 @@ class << self
387
410
#
388
411
# Use ::new to create a mutable or empty SequenceSet.
389
412
#
390
- # Related: ::new, ::try_convert
413
+ # Related: ::new, Net::IMAP::SequenceSet(), ::try_convert
391
414
def []( first , *rest )
392
415
if rest . empty?
393
416
if first . is_a? ( SequenceSet ) && first . frozen? && first . valid?
@@ -410,7 +433,7 @@ def [](first, *rest)
410
433
# If +obj.to_sequence_set+ doesn't return a SequenceSet, an exception is
411
434
# raised.
412
435
#
413
- # Related: ::new, ::[]
436
+ # Related: Net::IMAP::SequenceSet(), ::new, ::[]
414
437
def try_convert ( obj )
415
438
return obj if obj . is_a? ( SequenceSet )
416
439
return nil unless obj . respond_to? ( :to_sequence_set )
@@ -486,6 +509,8 @@ def full; FULL end
486
509
# * ::[] returns a frozen validated (non-empty) SequenceSet, without
487
510
# allocating a new object when the input is already a valid frozen
488
511
# SequenceSet.
512
+ # * Net::IMAP::SequenceSet() coerces an input to SequenceSet, without
513
+ # allocating a new object when the input is already a SequenceSet.
489
514
# * ::try_convert calls +to_sequence_set+ on inputs that support it and
490
515
# returns +nil+ for inputs that don't.
491
516
# * ::empty and ::full both return frozen singleton sets which can be
0 commit comments