Skip to content

Commit d75cdba

Browse files
committed
🔊 Warn about deprecated responses usage
This was extracted from #93 and split into a separate PR. A new config option is added: `responses_without_block`. This is provided as a workaround, until dependant projects can update their usage. A future release may remove this backwards compatibility, but _no sooner_ than v0.6.
1 parent a972bf8 commit d75cdba

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

lib/net/imap.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2501,6 +2501,7 @@ def idle_done
25012501
#
25022502
# Calling without a block is unsafe and deprecated. Future releases will
25032503
# raise ArgumentError unless a block is given.
2504+
# See Config#responses_without_block.
25042505
#
25052506
# Previously unhandled responses are automatically cleared before entering a
25062507
# mailbox with #select or #examine. Long-lived connections can receive many
@@ -2525,7 +2526,12 @@ def responses(type = nil)
25252526
elsif type
25262527
raise ArgumentError, "Pass a block or use #clear_responses"
25272528
else
2528-
# warn("DEPRECATED: pass a block or use #clear_responses", uplevel: 1)
2529+
case config.responses_without_block
2530+
when :raise
2531+
raise ArgumentError, "Pass a block or use #clear_responses"
2532+
when :warn
2533+
warn("DEPRECATED: pass a block or use #clear_responses", uplevel: 1)
2534+
end
25292535
@responses
25302536
end
25312537
end

lib/net/imap/config.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,19 @@ def self.[](config) # :nodoc: unfinished API
8585
# | _original_ | +5+ seconds |
8686
attr_accessor :idle_response_timeout, type: Integer
8787

88+
# :markup: markdown
89+
#
90+
# Controls the behavior of Net::IMAP#responses when called without a
91+
# block. Valid options are `:warn`, `:raise`, or
92+
# `:silence_deprecation_warning`.
93+
#
94+
# | Starting with version | The default value is |
95+
# |-----------------------|--------------------------------|
96+
# | v0.4.13 | +:silence_deprecation_warning+ |
97+
# | v0.5 | +:warn+ |
98+
# | _eventually_ | +:raise+ |
99+
attr_accessor :responses_without_block
100+
88101
# Creates a new config object and initialize its attribute with +attrs+.
89102
#
90103
# If +parent+ is not given, the global config is used by default.
@@ -100,6 +113,7 @@ def initialize(parent = Config.global, **attrs)
100113
debug: false,
101114
open_timeout: 30,
102115
idle_response_timeout: 5,
116+
responses_without_block: :silence_deprecation_warning,
103117
).freeze
104118

105119
@global = default.new

test/net/imap/test_imap.rb

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,10 +1105,22 @@ def test_responses
11051105
assert_equal(1, imap.responses("RECENT", &:last))
11061106
assert_raise(ArgumentError) do imap.responses("UIDNEXT") end
11071107
# Deprecated style, without a block:
1108-
# assert_warn(/Pass a block.*or.*clear_responses/i) do
1109-
# assert_equal(%i[Answered Flagged Deleted Seen Draft],
1110-
# imap.responses["FLAGS"]&.last)
1111-
# end
1108+
imap.config.responses_without_block = :raise
1109+
assert_raise(ArgumentError) do imap.responses end
1110+
imap.config.responses_without_block = :warn
1111+
assert_raise(ArgumentError) do imap.responses("UIDNEXT") end
1112+
assert_warn(/Pass a block.*or.*clear_responses/i) do
1113+
assert_equal(%i[Answered Flagged Deleted Seen Draft],
1114+
imap.responses["FLAGS"]&.last)
1115+
end
1116+
# TODO: assert_no_warn?
1117+
imap.config.responses_without_block = :silence_deprecation_warning
1118+
assert_raise(ArgumentError) do imap.responses("UIDNEXT") end
1119+
stderr = EnvUtil.verbose_warning {
1120+
assert_equal(%i[Answered Flagged Deleted Seen Draft],
1121+
imap.responses["FLAGS"]&.last)
1122+
}
1123+
assert_empty stderr
11121124
end
11131125
end
11141126

0 commit comments

Comments
 (0)