Skip to content

Commit ff393a7

Browse files
committed
Move NumValidator and Errors to other files
1 parent 50a5991 commit ff393a7

File tree

5 files changed

+132
-118
lines changed

5 files changed

+132
-118
lines changed

lib/net/imap.rb

Lines changed: 6 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
# See Net::IMAP for documentation.
1414
#
1515

16-
1716
require "socket"
1817
require "monitor"
1918
require 'net/protocol'
@@ -22,12 +21,6 @@
2221
rescue LoadError
2322
end
2423

25-
require_relative "imap/command_data"
26-
require_relative "imap/data_encoding"
27-
require_relative "imap/flags"
28-
require_relative "imap/response_data"
29-
require_relative "imap/response_parser"
30-
3124
module Net
3225

3326
#
@@ -1462,118 +1455,13 @@ def start_tls_session(params = {})
14621455
end
14631456
end
14641457

1465-
# Common validators of number and nz_number types
1466-
module NumValidator # :nodoc
1467-
class << self
1468-
# Check is passed argument valid 'number' in RFC 3501 terminology
1469-
def valid_number?(num)
1470-
# [RFC 3501]
1471-
# number = 1*DIGIT
1472-
# ; Unsigned 32-bit integer
1473-
# ; (0 <= n < 4,294,967,296)
1474-
num >= 0 && num < 4294967296
1475-
end
1476-
1477-
# Check is passed argument valid 'nz_number' in RFC 3501 terminology
1478-
def valid_nz_number?(num)
1479-
# [RFC 3501]
1480-
# nz-number = digit-nz *DIGIT
1481-
# ; Non-zero unsigned 32-bit integer
1482-
# ; (0 < n < 4,294,967,296)
1483-
num != 0 && valid_number?(num)
1484-
end
1485-
1486-
# Check is passed argument valid 'mod_sequence_value' in RFC 4551 terminology
1487-
def valid_mod_sequence_value?(num)
1488-
# mod-sequence-value = 1*DIGIT
1489-
# ; Positive unsigned 64-bit integer
1490-
# ; (mod-sequence)
1491-
# ; (1 <= n < 18,446,744,073,709,551,615)
1492-
num >= 1 && num < 18446744073709551615
1493-
end
1494-
1495-
# Ensure argument is 'number' or raise DataFormatError
1496-
def ensure_number(num)
1497-
return if valid_number?(num)
1498-
1499-
msg = "number must be unsigned 32-bit integer: #{num}"
1500-
raise DataFormatError, msg
1501-
end
1502-
1503-
# Ensure argument is 'nz_number' or raise DataFormatError
1504-
def ensure_nz_number(num)
1505-
return if valid_nz_number?(num)
1506-
1507-
msg = "nz_number must be non-zero unsigned 32-bit integer: #{num}"
1508-
raise DataFormatError, msg
1509-
end
1510-
1511-
# Ensure argument is 'mod_sequence_value' or raise DataFormatError
1512-
def ensure_mod_sequence_value(num)
1513-
return if valid_mod_sequence_value?(num)
1514-
1515-
msg = "mod_sequence_value must be unsigned 64-bit integer: #{num}"
1516-
raise DataFormatError, msg
1517-
end
1518-
end
1519-
end
1520-
1521-
# Superclass of IMAP errors.
1522-
class Error < StandardError
1523-
end
1524-
1525-
# Error raised when data is in the incorrect format.
1526-
class DataFormatError < Error
1527-
end
1528-
1529-
# Error raised when a response from the server is non-parseable.
1530-
class ResponseParseError < Error
1531-
end
1532-
1533-
# Superclass of all errors used to encapsulate "fail" responses
1534-
# from the server.
1535-
class ResponseError < Error
1536-
1537-
# The response that caused this error
1538-
attr_accessor :response
1539-
1540-
def initialize(response)
1541-
@response = response
1542-
1543-
super @response.data.text
1544-
end
1545-
1546-
end
1547-
1548-
# Error raised upon a "NO" response from the server, indicating
1549-
# that the client command could not be completed successfully.
1550-
class NoResponseError < ResponseError
1551-
end
1552-
1553-
# Error raised upon a "BAD" response from the server, indicating
1554-
# that the client command violated the IMAP protocol, or an internal
1555-
# server failure has occurred.
1556-
class BadResponseError < ResponseError
1557-
end
1558-
1559-
# Error raised upon a "BYE" response from the server, indicating
1560-
# that the client is not being allowed to login, or has been timed
1561-
# out due to inactivity.
1562-
class ByeResponseError < ResponseError
1563-
end
1564-
1565-
# Error raised upon an unknown response from the server.
1566-
class UnknownResponseError < ResponseError
1567-
end
1568-
1569-
RESPONSE_ERRORS = Hash.new(ResponseError)
1570-
RESPONSE_ERRORS["NO"] = NoResponseError
1571-
RESPONSE_ERRORS["BAD"] = BadResponseError
1572-
1573-
# Error raised when too many flags are interned to symbols.
1574-
class FlagCountError < Error
1575-
end
15761458
end
15771459
end
15781460

1461+
require_relative "imap/errors"
1462+
require_relative "imap/command_data"
1463+
require_relative "imap/data_encoding"
1464+
require_relative "imap/flags"
1465+
require_relative "imap/response_data"
1466+
require_relative "imap/response_parser"
15791467
require_relative "imap/authenticators"

lib/net/imap/command_data.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# frozen_string_literal: true
22

3+
require_relative "errors"
4+
35
module Net
46
class IMAP < Protocol
57

lib/net/imap/data_encoding.rb

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# frozen_string_literal: true
22

3+
require_relative "errors"
4+
35
module Net
46
class IMAP < Protocol
57

@@ -43,5 +45,62 @@ def self.format_datetime(time)
4345
return time.strftime('%d-%b-%Y %H:%M %z')
4446
end
4547

48+
# Common validators of number and nz_number types
49+
module NumValidator # :nodoc
50+
module_function
51+
52+
# Check is passed argument valid 'number' in RFC 3501 terminology
53+
def valid_number?(num)
54+
# [RFC 3501]
55+
# number = 1*DIGIT
56+
# ; Unsigned 32-bit integer
57+
# ; (0 <= n < 4,294,967,296)
58+
num >= 0 && num < 4294967296
59+
end
60+
61+
# Check is passed argument valid 'nz_number' in RFC 3501 terminology
62+
def valid_nz_number?(num)
63+
# [RFC 3501]
64+
# nz-number = digit-nz *DIGIT
65+
# ; Non-zero unsigned 32-bit integer
66+
# ; (0 < n < 4,294,967,296)
67+
num != 0 && valid_number?(num)
68+
end
69+
70+
# Check is passed argument valid 'mod_sequence_value' in RFC 4551 terminology
71+
def valid_mod_sequence_value?(num)
72+
# mod-sequence-value = 1*DIGIT
73+
# ; Positive unsigned 64-bit integer
74+
# ; (mod-sequence)
75+
# ; (1 <= n < 18,446,744,073,709,551,615)
76+
num >= 1 && num < 18446744073709551615
77+
end
78+
79+
# Ensure argument is 'number' or raise DataFormatError
80+
def ensure_number(num)
81+
return if valid_number?(num)
82+
83+
msg = "number must be unsigned 32-bit integer: #{num}"
84+
raise DataFormatError, msg
85+
end
86+
87+
# Ensure argument is 'nz_number' or raise DataFormatError
88+
def ensure_nz_number(num)
89+
return if valid_nz_number?(num)
90+
91+
msg = "nz_number must be non-zero unsigned 32-bit integer: #{num}"
92+
raise DataFormatError, msg
93+
end
94+
95+
# Ensure argument is 'mod_sequence_value' or raise DataFormatError
96+
def ensure_mod_sequence_value(num)
97+
return if valid_mod_sequence_value?(num)
98+
99+
msg = "mod_sequence_value must be unsigned 64-bit integer: #{num}"
100+
raise DataFormatError, msg
101+
end
102+
103+
end
104+
46105
end
47106
end

lib/net/imap/errors.rb

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# frozen_string_literal: true
2+
3+
module Net
4+
class IMAP < Protocol
5+
6+
# Superclass of IMAP errors.
7+
class Error < StandardError
8+
end
9+
10+
# Error raised when data is in the incorrect format.
11+
class DataFormatError < Error
12+
end
13+
14+
# Error raised when a response from the server is non-parseable.
15+
class ResponseParseError < Error
16+
end
17+
18+
# Superclass of all errors used to encapsulate "fail" responses
19+
# from the server.
20+
class ResponseError < Error
21+
22+
# The response that caused this error
23+
attr_accessor :response
24+
25+
def initialize(response)
26+
@response = response
27+
28+
super @response.data.text
29+
end
30+
31+
end
32+
33+
# Error raised upon a "NO" response from the server, indicating
34+
# that the client command could not be completed successfully.
35+
class NoResponseError < ResponseError
36+
end
37+
38+
# Error raised upon a "BAD" response from the server, indicating
39+
# that the client command violated the IMAP protocol, or an internal
40+
# server failure has occurred.
41+
class BadResponseError < ResponseError
42+
end
43+
44+
# Error raised upon a "BYE" response from the server, indicating
45+
# that the client is not being allowed to login, or has been timed
46+
# out due to inactivity.
47+
class ByeResponseError < ResponseError
48+
end
49+
50+
# Error raised upon an unknown response from the server.
51+
class UnknownResponseError < ResponseError
52+
end
53+
54+
RESPONSE_ERRORS = Hash.new(ResponseError)
55+
RESPONSE_ERRORS["NO"] = NoResponseError
56+
RESPONSE_ERRORS["BAD"] = BadResponseError
57+
58+
# Error raised when too many flags are interned to symbols.
59+
class FlagCountError < Error
60+
end
61+
62+
end
63+
end

lib/net/imap/response_parser.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# frozen_string_literal: true
22

3+
require_relative "errors"
4+
35
module Net
46
class IMAP < Protocol
57

0 commit comments

Comments
 (0)