Skip to content

Commit cb27e40

Browse files
committed
🚧 Ruby 2.7 compatibility (incomplete)
1 parent 365b307 commit cb27e40

File tree

6 files changed

+37
-18
lines changed

6 files changed

+37
-18
lines changed

lib/net/imap.rb

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -932,7 +932,8 @@ def idle_response_timeout; config.idle_response_timeout end
932932

933933
# :stopdoc:
934934
def max_response_size
935-
config.max_response_size(connection_state:, tls_verified: tls_verified?)
935+
config.max_response_size(connection_state: connection_state,
936+
tls_verified: tls_verified?)
936937
end
937938

938939
def max_response_size=(val)
@@ -2982,7 +2983,10 @@ def receive_responses
29822983
when ContinuationRequest
29832984
@continuation_request_arrival.signal
29842985
end
2985-
state_unselected! if resp in {data: {code: {name: "CLOSED"}}}
2986+
case resp
2987+
in {data: {code: {name: "CLOSED"}}} then state_unselected!
2988+
else
2989+
end
29862990
@response_handlers.each do |handler|
29872991
handler.call(resp)
29882992
end
@@ -3105,8 +3109,11 @@ def response_limit!(bytes_read, literal_size = nil)
31053109
limit -= bytes_read
31063110
unless (literal_size || 0) < limit
31073111
raise ResponseTooLargeError.new(
3108-
state: @state, tls_verified: tls_verified?,
3109-
max_response_size:, bytes_read:, literal_size:,
3112+
connection_state: connection_state,
3113+
tls_verified: tls_verified?,
3114+
max_response_size: max_response_size,
3115+
bytes_read: bytes_read,
3116+
literal_size: literal_size,
31103117
)
31113118
end
31123119
limit

lib/net/imap/config.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ def max_response_size(connection_state: nil, tls_verified: nil)
387387
# Set to :reset to #reset all of the attributes to inherit
388388
# from the #parent config.
389389
def max_response_size=(bytes)
390-
if bytes in :reset
390+
if bytes == :reset
391391
reset :max_response_size_tls_verified
392392
reset :max_response_size_tls_unverified
393393
reset :max_response_size_state_not_authenticated

lib/net/imap/config/attr_type_coercion.rb

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ def attr_accessor(attr, type: nil)
1919
AttrTypeCoercion.attr_accessor(attr, type: type)
2020
end
2121

22-
module_function def Integer? = NInteger
23-
module_function def IntegerOrProc? = NIntegerOrProc
22+
module_function def Integer?; NInteger end
23+
module_function def IntegerOrProc?; NIntegerOrProc end
2424
end
2525
private_constant :Macros
2626

@@ -29,10 +29,17 @@ def self.included(mod)
2929
end
3030
private_class_method :included
3131

32-
def self.safe(...) = Ractor.make_shareable nil.instance_eval(...).freeze
32+
if defined?(Ractor.make_shareable)
33+
def self.safe(...) Ractor.make_shareable nil.instance_eval(...).freeze end
34+
else
35+
def self.safe(...) nil.instance_eval(...).freeze end
36+
end
3337
private_class_method :safe
3438

35-
Types = Hash.new do |h, type| type => Proc | nil; safe{type} end
39+
Types = Hash.new do |h, type|
40+
type.nil? || Proc === type or raise TypeError, "type not nil or Proc"
41+
safe{type}
42+
end
3643
Types[:boolean] = Boolean = safe{-> {!!_1}}
3744
Types[Integer] = safe{->{Integer(_1)}}
3845

@@ -44,7 +51,7 @@ def self.attr_accessor(attr, type: nil)
4451

4552
Procable = safe{->val {
4653
val = val.to_proc if val.respond_to?(:to_proc)
47-
val in Proc or raise TypeError, "expected Proc, got %p" [val]
54+
Proc === val or raise TypeError, "expected Proc, got %p" [val]
4855
val
4956
}}
5057

lib/net/imap/errors.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class ResponseTooLargeError < ResponseReadError
2121
attr_reader :max_response_size, :state, :tls_verified
2222
alias tls_verified? tls_verified
2323

24-
def initialize(msg = nil, *,
24+
def initialize(msg = nil, *args,
2525
bytes_read: nil,
2626
literal_size: nil,
2727
state: nil,
@@ -36,7 +36,7 @@ def initialize(msg = nil, *,
3636
"Response size", response_size_msg, "exceeds max_response_size",
3737
max_response_size && "(#{max_response_size}B)",
3838
].compact.join(" ")
39-
super(msg, *)
39+
super(msg, *args)
4040
end
4141

4242
private
@@ -52,12 +52,12 @@ def response_size_msg
5252
class SocketReadLimitError < ResponseReadError
5353
attr_reader :socket_read_limit
5454

55-
def initialize(msg = nil, *, socket_read_limit: nil)
55+
def initialize(msg = nil, *args, socket_read_limit: nil)
5656
@socket_read_limit = socket_read_limit
5757
msg ||= [
5858
"Socket read limit", socket_read_limit, "<= 0",
5959
].compact.join(" ")
60-
super(msg, *)
60+
super(msg, *args)
6161
end
6262
end
6363

test/net/imap/test_config.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,8 @@ def duck.to_r; 1/11111 end
429429
test "#max_response_size(state, tls_verified: bool)" do
430430
config = Config.new 0.5 # backported
431431
max_response_size_for = -> (connection_state, tls_verified) {
432-
config.max_response_size(connection_state:, tls_verified:)
432+
config.max_response_size(connection_state: connection_state,
433+
tls_verified: tls_verified)
433434
}
434435
assert_equal 10 << 10, max_response_size_for.(:not_authenticated, false)
435436
assert_equal 10 << 10, max_response_size_for.(:not_authenticated, true)
@@ -459,7 +460,8 @@ def duck.to_r; 1/11111 end
459460
test "#max_response_size=(Integer | nil | :reset)" do
460461
config = Config.new 0.5 # backported
461462
max_response_size_for = -> (connection_state, tls_verified) {
462-
config.max_response_size(connection_state:, tls_verified:)
463+
config.max_response_size(connection_state: connection_state,
464+
tls_verified: tls_verified)
463465
}
464466

465467
config.max_response_size = 10_000

test/net/imap/test_imap_socket_read_limit.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def setup_illegal_CRs_response_on_noop(server)
6565
setup_various_responses_on_noop(server)
6666
responses = []
6767
imap.add_response_handler do
68-
responses << _1.data if _1 in Net::IMAP::UntaggedResponse
68+
responses << _1.data if Net::IMAP::UntaggedResponse === _1
6969
end
7070

7171
imap.noop
@@ -126,7 +126,10 @@ def setup_illegal_CRs_response_on_noop(server)
126126

127127
calls.each do |args|
128128
assert_equal 4, args.count
129-
assert_pattern do args => [Integer, Integer | nil, Array, ^imap] end
129+
assert_kind_of Integer, args[0]
130+
assert [Integer, NilClass].include? args[1].class
131+
assert_kind_of Array, args[2]
132+
assert_same imap, args[3]
130133
end
131134

132135
# check (and drop) the IMAP client

0 commit comments

Comments
 (0)