net-imap 0.4.17 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of net-imap might be problematic. Click here for more details.

@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "set" unless defined?(::Set)
4
+
3
5
  module Net
4
6
  class IMAP
5
7
 
@@ -14,13 +16,6 @@ module Net
14
16
  # receive a SequenceSet as an argument, for example IMAP#search, IMAP#fetch,
15
17
  # and IMAP#store.
16
18
  #
17
- # == EXPERIMENTAL API
18
- #
19
- # SequenceSet is currently experimental. Only two methods, ::[] and
20
- # #valid_string, are considered stable. Although the API isn't expected to
21
- # change much, any other methods may be removed or changed without
22
- # deprecation.
23
- #
24
19
  # == Creating sequence sets
25
20
  #
26
21
  # SequenceSet.new with no arguments creates an empty sequence set. Note
@@ -37,7 +32,8 @@ module Net
37
32
  #
38
33
  # SequenceSet.new may receive a single optional argument: a non-zero 32 bit
39
34
  # unsigned integer, a range, a <tt>sequence-set</tt> formatted string,
40
- # another sequence set, or an enumerable containing any of these.
35
+ # another sequence set, a Set (containing only numbers or <tt>*</tt>), or an
36
+ # Array containing any of these (array inputs may be nested).
41
37
  #
42
38
  # set = Net::IMAP::SequenceSet.new(1)
43
39
  # set.valid_string #=> "1"
@@ -286,11 +282,7 @@ module Net
286
282
 
287
283
  # valid inputs for "*"
288
284
  STARS = [:*, ?*, -1].freeze
289
- private_constant :STAR_INT, :STARS
290
-
291
- COERCIBLE = ->{ _1.respond_to? :to_sequence_set }
292
- ENUMABLE = ->{ _1.respond_to?(:each) && _1.respond_to?(:empty?) }
293
- private_constant :COERCIBLE, :ENUMABLE
285
+ private_constant :STARS
294
286
 
295
287
  class << self
296
288
 
@@ -325,7 +317,7 @@ module Net
325
317
  # raised.
326
318
  def try_convert(obj)
327
319
  return obj if obj.is_a?(SequenceSet)
328
- return nil unless respond_to?(:to_sequence_set)
320
+ return nil unless obj.respond_to?(:to_sequence_set)
329
321
  obj = obj.to_sequence_set
330
322
  return obj if obj.is_a?(SequenceSet)
331
323
  raise DataFormatError, "invalid object returned from to_sequence_set"
@@ -389,6 +381,10 @@ module Net
389
381
  # Related: #valid_string, #normalized_string, #to_s
390
382
  def string; @string ||= normalized_string if valid? end
391
383
 
384
+ # Returns an array with #normalized_string when valid and an empty array
385
+ # otherwise.
386
+ def deconstruct; valid? ? [normalized_string] : [] end
387
+
392
388
  # Assigns a new string to #string and resets #elements to match. It
393
389
  # cannot be set to an empty string—assign +nil+ or use #clear instead.
394
390
  # The string is validated but not normalized.
@@ -1272,7 +1268,8 @@ module Net
1272
1268
  when *STARS, Integer, Range then [input_to_tuple(obj)]
1273
1269
  when String then str_to_tuples obj
1274
1270
  when SequenceSet then obj.tuples
1275
- when ENUMABLE then obj.flat_map { input_to_tuples _1 }
1271
+ when Set then obj.map { [to_tuple_int(_1)] * 2 }
1272
+ when Array then obj.flat_map { input_to_tuples _1 }
1276
1273
  when nil then []
1277
1274
  else
1278
1275
  raise DataFormatError,
@@ -1285,8 +1282,7 @@ module Net
1285
1282
  # String, Set, Array, or... any type of object.
1286
1283
  def input_try_convert(input)
1287
1284
  SequenceSet.try_convert(input) ||
1288
- # Integer.try_convert(input) || # ruby 3.1+
1289
- input.respond_to?(:to_int) && Integer(input.to_int) ||
1285
+ Integer.try_convert(input) ||
1290
1286
  String.try_convert(input) ||
1291
1287
  input
1292
1288
  end
@@ -1416,12 +1412,11 @@ module Net
1416
1412
  end
1417
1413
 
1418
1414
  def nz_number(num)
1419
- case num
1420
- when Integer, /\A[1-9]\d*\z/ then num = Integer(num)
1421
- else raise DataFormatError, "%p is not a valid nz-number" % [num]
1422
- end
1423
- NumValidator.ensure_nz_number(num)
1424
- num
1415
+ String === num && !/\A[1-9]\d*\z/.match?(num) and
1416
+ raise DataFormatError, "%p is not a valid nz-number" % [num]
1417
+ NumValidator.ensure_nz_number Integer num
1418
+ rescue TypeError # To catch errors from Integer()
1419
+ raise DataFormatError, $!.message
1425
1420
  end
1426
1421
 
1427
1422
  # intentionally defined after the class implementation