Skip to content

Commit abff00f

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 34a1f27 commit abff00f

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

lib/net/imap/config.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,10 +288,15 @@ def self.[](config)
288288
# [+true+ <em>(original default)</em>]
289289
# ResponseParser only uses UIDPlusData.
290290
#
291+
# [+:up_to_max_size+ <em>(default since +v0.5.6+)</em>]
292+
# ResponseParser uses UIDPlusData when the +uid-set+ size is below
293+
# parser_max_deprecated_uidplus_data_size. Above that size,
294+
# ResponseParser uses AppendUIDData or CopyUIDData.
295+
#
291296
# [+false+ <em>(planned default for +v0.6+)</em>]
292297
# ResponseParser _only_ uses AppendUIDData and CopyUIDData.
293298
attr_accessor :parser_use_deprecated_uidplus_data, type: [
294-
true, false
299+
true, :up_to_max_size, false
295300
]
296301

297302
# The maximum +uid-set+ size that ResponseParser will parse into
@@ -417,6 +422,7 @@ def defaults_hash
417422

418423
version_defaults[0.5] = Config[0.4].dup.update(
419424
responses_without_block: :warn,
425+
parser_use_deprecated_uidplus_data: :up_to_max_size,
420426
parser_max_deprecated_uidplus_data_size: 100,
421427
).freeze
422428

lib/net/imap/response_parser.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1896,7 +1896,7 @@ def DeprecatedUIDPlus(validity, src_uids = nil, dst_uids)
18961896
src_uids &&= src_uids.each_ordered_number.to_a
18971897
dst_uids = dst_uids.each_ordered_number.to_a
18981898
UIDPlusData.new(validity, src_uids, dst_uids)
1899-
else
1899+
elsif config.parser_use_deprecated_uidplus_data != :up_to_max_size
19001900
parse_error("uid-set is too large: %d > %d", count, max)
19011901
end
19021902
end

test/net/imap/test_imap_response_parser.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,17 @@ def test_fetch_binary_and_binary_size
227227
assert_equal 100, uidplus.assigned_uids.size
228228
end
229229

230+
test "APPENDUID with parser_use_deprecated_uidplus_data = :up_to_max_size" do
231+
parser = Net::IMAP::ResponseParser.new(config: {
232+
parser_use_deprecated_uidplus_data: :up_to_max_size,
233+
parser_max_deprecated_uidplus_data_size: 100
234+
})
235+
response = parser.parse("A004 OK [APPENDUID 1 101:200] Done\r\n")
236+
assert_instance_of Net::IMAP::UIDPlusData, response.data.code.data
237+
response = parser.parse("A004 OK [APPENDUID 1 100:200] Done\r\n")
238+
assert_instance_of Net::IMAP::AppendUIDData, response.data.code.data
239+
end
240+
230241
test "APPENDUID with parser_use_deprecated_uidplus_data = false" do
231242
parser = Net::IMAP::ResponseParser.new(config: {
232243
parser_use_deprecated_uidplus_data: false,
@@ -293,6 +304,19 @@ def test_fetch_binary_and_binary_size
293304
assert_equal 100, uidplus.source_uids.size
294305
end
295306

307+
test "COPYUID with parser_use_deprecated_uidplus_data = :up_to_max_size" do
308+
parser = Net::IMAP::ResponseParser.new(config: {
309+
parser_use_deprecated_uidplus_data: :up_to_max_size,
310+
parser_max_deprecated_uidplus_data_size: 100
311+
})
312+
response = parser.parse("A004 OK [COPYUID 1 101:200 1:100] Done\r\n")
313+
copyuid = response.data.code.data
314+
assert_instance_of Net::IMAP::UIDPlusData, copyuid
315+
response = parser.parse("A004 OK [COPYUID 1 100:200 1:101] Done\r\n")
316+
copyuid = response.data.code.data
317+
assert_instance_of Net::IMAP::CopyUIDData, copyuid
318+
end
319+
296320
test "COPYUID with parser_use_deprecated_uidplus_data = false" do
297321
parser = Net::IMAP::ResponseParser.new(config: {
298322
parser_use_deprecated_uidplus_data: false,

0 commit comments

Comments
 (0)