@@ -87,6 +87,12 @@ class IMAP
87
87
# Net::IMAP.debug = true
88
88
# client.config.debug? # => true
89
89
#
90
+ # Use #load_defaults to globally behave like a specific version:
91
+ # client = Net::IMAP.new(hostname)
92
+ # client.config.sasl_ir # => true
93
+ # Net::IMAP.config.load_defaults 0.3
94
+ # client.config.sasl_ir # => false
95
+ #
90
96
# === Named defaults
91
97
# In addition to +x.y+ version numbers, the following aliases are supported:
92
98
#
@@ -270,11 +276,32 @@ def with(**attrs)
270
276
block_given? ? yield ( copy ) : copy
271
277
end
272
278
279
+ # :call-seq: load_defaults(version) -> self
280
+ #
281
+ # Resets the current config to behave like the versioned default
282
+ # configuration for +version+. #parent will not be changed.
283
+ #
284
+ # Some config attributes default to inheriting from their #parent (which
285
+ # is usually Config.global) and are left unchanged, for example: #debug.
286
+ #
287
+ # See Config@Versioned+defaults and Config@Named+defaults.
288
+ def load_defaults ( version )
289
+ [ Numeric , Symbol , String ] . any? { _1 === version } or
290
+ raise ArgumentError , "expected number or symbol, got %p" % [ version ]
291
+ update ( **Config [ version ] . defaults_hash )
292
+ end
293
+
273
294
# :call-seq: to_h -> hash
274
295
#
275
296
# Returns all config attributes in a hash.
276
297
def to_h ; data . members . to_h { [ _1 , send ( _1 ) ] } end
277
298
299
+ protected
300
+
301
+ def defaults_hash
302
+ to_h . reject { |k , v | DEFAULT_TO_INHERIT . include? ( k ) }
303
+ end
304
+
278
305
@default = new (
279
306
debug : false ,
280
307
open_timeout : 30 ,
@@ -285,9 +312,7 @@ def to_h; data.members.to_h { [_1, send(_1)] } end
285
312
286
313
@global = default . new
287
314
288
- version_defaults [ 0.4 ] = Config [
289
- default . to_h . reject { |k , v | DEFAULT_TO_INHERIT . include? ( k ) }
290
- ]
315
+ version_defaults [ 0.4 ] = Config [ default . send ( :defaults_hash ) ]
291
316
292
317
version_defaults [ 0 ] = Config [ 0.4 ] . dup . update (
293
318
sasl_ir : false ,
0 commit comments