Skip to content

Commit e58aff6

Browse files
committed
🔧 Add :up_to_max_size config for UIDPlusData
When `parser_use_deprecated_uidplus_data` is set to `:up_to_max_size`, ResponseParser uses UIDPlusData when the `uid-set` size is below `parser_max_deprecated_uidplus_data_size`. Above that size, ResponseParser uses AppendUIDData or CopyUIDData. This option is now the default for v0.5.
1 parent 2f58d02 commit e58aff6

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

lib/net/imap/config.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,10 +313,15 @@ def self.[](config)
313313
# [+true+ <em>(original default)</em>]
314314
# ResponseParser only uses UIDPlusData.
315315
#
316+
# [+:up_to_max_size+ <em>(default since +v0.5.6+)</em>]
317+
# ResponseParser uses UIDPlusData when the +uid-set+ size is below
318+
# parser_max_deprecated_uidplus_data_size. Above that size,
319+
# ResponseParser uses AppendUIDData or CopyUIDData.
320+
#
316321
# [+false+ <em>(planned default for +v0.6+)</em>]
317322
# ResponseParser _only_ uses AppendUIDData and CopyUIDData.
318323
attr_accessor :parser_use_deprecated_uidplus_data, type: [
319-
true, false
324+
true, :up_to_max_size, false
320325
]
321326

322327
# The maximum +uid-set+ size that ResponseParser will parse into
@@ -423,7 +428,7 @@ def defaults_hash
423428
sasl_ir: true,
424429
enforce_logindisabled: true,
425430
responses_without_block: :warn,
426-
parser_use_deprecated_uidplus_data: true,
431+
parser_use_deprecated_uidplus_data: :up_to_max_size,
427432
parser_max_deprecated_uidplus_data_size: 100,
428433
).freeze
429434

lib/net/imap/response_parser.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2030,7 +2030,7 @@ def DeprecatedUIDPlus(validity, src_uids = nil, dst_uids)
20302030
src_uids &&= src_uids.each_ordered_number.to_a
20312031
dst_uids = dst_uids.each_ordered_number.to_a
20322032
UIDPlusData.new(validity, src_uids, dst_uids)
2033-
else
2033+
elsif config.parser_use_deprecated_uidplus_data != :up_to_max_size
20342034
parse_error("uid-set is too large: %d > %d", count, max)
20352035
end
20362036
end

test/net/imap/test_imap_response_parser.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,17 @@ def test_fetch_binary_and_binary_size
236236
assert_equal 100, uidplus.assigned_uids.size
237237
end
238238

239+
test "APPENDUID with parser_use_deprecated_uidplus_data = :up_to_max_size" do
240+
parser = Net::IMAP::ResponseParser.new(config: {
241+
parser_use_deprecated_uidplus_data: :up_to_max_size,
242+
parser_max_deprecated_uidplus_data_size: 100
243+
})
244+
response = parser.parse("A004 OK [APPENDUID 1 101:200] Done\r\n")
245+
assert_instance_of Net::IMAP::UIDPlusData, response.data.code.data
246+
response = parser.parse("A004 OK [APPENDUID 1 100:200] Done\r\n")
247+
assert_instance_of Net::IMAP::AppendUIDData, response.data.code.data
248+
end
249+
239250
test "APPENDUID with parser_use_deprecated_uidplus_data = false" do
240251
parser = Net::IMAP::ResponseParser.new(config: {
241252
parser_use_deprecated_uidplus_data: false,
@@ -302,6 +313,19 @@ def test_fetch_binary_and_binary_size
302313
assert_equal 100, uidplus.source_uids.size
303314
end
304315

316+
test "COPYUID with parser_use_deprecated_uidplus_data = :up_to_max_size" do
317+
parser = Net::IMAP::ResponseParser.new(config: {
318+
parser_use_deprecated_uidplus_data: :up_to_max_size,
319+
parser_max_deprecated_uidplus_data_size: 100
320+
})
321+
response = parser.parse("A004 OK [COPYUID 1 101:200 1:100] Done\r\n")
322+
copyuid = response.data.code.data
323+
assert_instance_of Net::IMAP::UIDPlusData, copyuid
324+
response = parser.parse("A004 OK [COPYUID 1 100:200 1:101] Done\r\n")
325+
copyuid = response.data.code.data
326+
assert_instance_of Net::IMAP::CopyUIDData, copyuid
327+
end
328+
305329
test "COPYUID with parser_use_deprecated_uidplus_data = false" do
306330
parser = Net::IMAP::ResponseParser.new(config: {
307331
parser_use_deprecated_uidplus_data: false,

0 commit comments

Comments
 (0)