class Net::IMAP::Config
Net::IMAP::Config
stores configuration options for Net::IMAP
clients. The global configuration can be seen at either Net::IMAP.config
or Net::IMAP::Config.global
, and the client-specific configuration can be seen at Net::IMAP#config
.
When creating a new client, all unhandled keyword arguments to Net::IMAP.new
are delegated to Config.new
. Every client has its own config.
debug_client = Net::IMAP.new(hostname, debug: true) quiet_client = Net::IMAP.new(hostname, debug: false) debug_client.config.debug? # => true quiet_client.config.debug? # => false
Inheritance¶ ↑
Configs have a parent config, and any attributes which have not been set locally will inherit the parent’s value. Every client creates its own specific config. By default, client configs inherit from Config.global
.
plain_client = Net::IMAP.new(hostname) debug_client = Net::IMAP.new(hostname, debug: true) quiet_client = Net::IMAP.new(hostname, debug: false) plain_client.config.inherited?(:debug) # => true debug_client.config.inherited?(:debug) # => false quiet_client.config.inherited?(:debug) # => false plain_client.config.debug? # => false debug_client.config.debug? # => true quiet_client.config.debug? # => false # Net::IMAP.debug is delegated to Net::IMAP::Config.global.debug Net::IMAP.debug = true plain_client.config.debug? # => true debug_client.config.debug? # => true quiet_client.config.debug? # => false Net::IMAP.debug = false plain_client.config.debug = true plain_client.config.inherited?(:debug) # => false plain_client.config.debug? # => true plain_client.config.reset(:debug) plain_client.config.inherited?(:debug) # => true plain_client.config.debug? # => false
Versioned defaults¶ ↑
The effective default configuration for a specific x.y
version of net-imap
can be loaded with the config
keyword argument to Net::IMAP.new
. Requesting default configurations for previous versions enables extra backward compatibility with those versions:
client = Net::IMAP.new(hostname, config: 0.3) client.config.sasl_ir # => false client.config.responses_without_block # => :silence_deprecation_warning client = Net::IMAP.new(hostname, config: 0.4) client.config.sasl_ir # => true client.config.responses_without_block # => :silence_deprecation_warning client = Net::IMAP.new(hostname, config: 0.5) client.config.sasl_ir # => true client.config.responses_without_block # => :warn client = Net::IMAP.new(hostname, config: :future) client.config.sasl_ir # => true client.config.responses_without_block # => :raise
The versioned default configs inherit certain specific config options from Config.global
, for example debug
:
client = Net::IMAP.new(hostname, config: 0.4) Net::IMAP.debug = false client.config.debug? # => false Net::IMAP.debug = true client.config.debug? # => true
Use load_defaults
to globally behave like a specific version:
client = Net::IMAP.new(hostname) client.config.sasl_ir # => true Net::IMAP.config.load_defaults 0.3 client.config.sasl_ir # => false
Named defaults¶ ↑
In addition to x.y
version numbers, the following aliases are supported:
:default
-
An alias for
:current
.NOTE: This is not the same as
Config.default
. It inherits some attributes fromConfig.global
, for example:debug
. :current
-
An alias for the current
x.y
version’s defaults. :next
-
The planned config for the next
x.y
version. :future
-
The planned eventual config for some future
x.y
version.
For example, to raise exceptions for all current deprecations:
client = Net::IMAP.new(hostname, config: :future) client.responses # raises an ArgumentError
Thread Safety¶ ↑
NOTE: Updates to config objects are not synchronized for thread-safety.
Constants
- DEFAULT_TO_INHERIT
Array of attribute names that are not loaded by
load_defaults
.
Attributes
The debug mode (boolean)
The default value is false
.
Seconds to wait until an IDLE response is received, after the client asks to leave the IDLE state.
See Net::IMAP#idle
and Net::IMAP#idle_done
.
The default value is 5
seconds.
Seconds to wait until a connection is opened.
If the IMAP
object cannot open a connection within this time, it raises a Net::OpenTimeout exception.
See Net::IMAP.new
.
The default value is 30
seconds.
Controls the behavior of Net::IMAP#responses
when called without a block. Valid options are :warn
, :raise
, or :silence_deprecation_warning
.
Starting with version | The default value is |
---|---|
v0.4.13 | +:silence_deprecation_warning+ |
v0.5 <em>(planned)</em> | +:warn+ |
_eventually_ | +:raise+ |
Whether to use the SASL-IR
extension when the server and SASL mechanism both support it.
Starting with version | The default value is |
---|---|
_original_ | +false+ <em>(extension unsupported)</em> |
v0.4 | +true+ <em>(support added)</em> |
Public Class Methods
Given a version number, returns the default configuration for the target version. See Versioned defaults at Config
.
Given a version name, returns the default configuration for the target version. See Named defaults at Config
.
Given a Hash, creates a new frozen config which inherits from Config.global
. Use Config.new
for an unfrozen config.
Given a config, returns that same config.
# File net-imap-0.4.16/lib/net/imap/config.rb, line 151 def self.[](config) if config.is_a?(Config) then config elsif config.nil? && global.nil? then nil elsif config.respond_to?(:to_hash) then new(global, **config).freeze else version_defaults.fetch(config) do case config when Numeric raise RangeError, "unknown config version: %p" % [config] when Symbol raise KeyError, "unknown config name: %p" % [config] else raise TypeError, "no implicit conversion of %s to %s" % [ config.class, Config ] end end end end
The default config, which is hardcoded and frozen.
# File net-imap-0.4.16/lib/net/imap/config.rb, line 126 def self.default; @default end
The global config object. Also available from Net::IMAP.config
.
# File net-imap-0.4.16/lib/net/imap/config.rb, line 129 def self.global; @global if defined?(@global) end
Creates a new config object and initialize its attribute with attrs
.
If parent
is not given, the global config is used by default.
If a block is given, the new config object is yielded to it.
Net::IMAP::Config::AttrInheritance#new
# File net-imap-0.4.16/lib/net/imap/config.rb, line 236 def initialize(parent = Config.global, **attrs) super(parent) update(**attrs) yield self if block_given? end
A hash of hard-coded configurations, indexed by version number.
# File net-imap-0.4.16/lib/net/imap/config.rb, line 132 def self.version_defaults; @version_defaults end
Public Instance Methods
Alias for debug
# File net-imap-0.4.16/lib/net/imap/config.rb, line 180
Resets the current config to behave like the versioned default configuration for version
. parent
will not be changed.
Some config attributes default to inheriting from their parent
(which is usually Config.global
) and are left unchanged, for example: debug
.
See Versioned defaults at Config
and Named defaults at Config
.
# File net-imap-0.4.16/lib/net/imap/config.rb, line 287 def load_defaults(version) [Numeric, Symbol, String].any? { _1 === version } or raise ArgumentError, "expected number or symbol, got %p" % [version] update(**Config[version].defaults_hash) end
Returns all config attributes in a hash.
# File net-imap-0.4.16/lib/net/imap/config.rb, line 296 def to_h; data.members.to_h { [_1, send(_1)] } end
Assigns all of the provided attrs
to this config, and returns self
.
An ArgumentError is raised unless every key in attrs
matches an assignment method on Config
.
NOTE:
update
is not atomic. If an exception is raised due to an invalid attribute value,attrs
may be partially applied.
# File net-imap-0.4.16/lib/net/imap/config.rb, line 252 def update(**attrs) unless (bad = attrs.keys.reject { respond_to?(:"#{_1}=") }).empty? raise ArgumentError, "invalid config options: #{bad.join(", ")}" end attrs.each do send(:"#{_1}=", _2) end self end
Without a block, returns a new config which inherits from self. With a block, yields the new config and returns the block’s result.
If no keyword arguments are given, an ArgumentError will be raised.
If self
is frozen, the copy will also be frozen.
# File net-imap-0.4.16/lib/net/imap/config.rb, line 270 def with(**attrs) attrs.empty? and raise ArgumentError, "expected keyword arguments, none given" copy = new(**attrs) copy.freeze if frozen? block_given? ? yield(copy) : copy end
Protected Instance Methods
# File net-imap-0.4.16/lib/net/imap/config.rb, line 300 def defaults_hash to_h.reject {|k,v| DEFAULT_TO_INHERIT.include?(k) } end