class Net::IMAP::Config
Net::IMAP::Config
(自 v0.4.13
起可用) 存储 Net::IMAP
客户端的配置选项。全局配置可以在 Net::IMAP.config
或 Net::IMAP::Config.global
中查看,而客户端特定的配置可以在 Net::IMAP#config
中查看。
创建新客户端时,传递给 Net::IMAP.new
的所有未处理的关键字参数都会委托给 Config.new
。每个客户端都有自己的配置。
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
继承¶ ↑
配置具有 父配置,任何未在本地设置的属性都将继承父类的值。每个客户端都会创建自己的特定配置。默认情况下,客户端配置继承自 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
版本化默认值¶ ↑
可以使用 Net::IMAP.new
的 config
关键字参数加载特定 net-imap
的 x.y
版本的有效默认配置。请求先前版本的默认配置可以实现与这些版本的额外向后兼容性。
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
版本化的默认配置从 Config.global
继承某些特定的配置选项,例如 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
使用 load_defaults
来全局表现得像特定版本一样
client = Net::IMAP.new(hostname) client.config.sasl_ir # => true Net::IMAP.config.load_defaults 0.3 client.config.sasl_ir # => false
命名默认值¶ ↑
除了 x.y
版本号,还支持以下别名
:default
-
:current
的别名。注意:这与
Config.default
不同。它从Config.global
继承一些属性,例如:debug
。 :current
-
当前
x.y
版本的默认值的别名。 :next
-
下一个
x.y
版本的计划配置。 :future
-
未来某个
x.y
版本的计划最终配置。
例如,要为所有当前的弃用引发异常
client = Net::IMAP.new(hostname, config: :future) client.responses # raises an ArgumentError
线程安全¶ ↑
注意: 对配置对象的更新不会针对线程安全进行同步。
常量
- DEFAULT_TO_INHERIT
不会被
load_defaults
加载的属性名称数组。
属性
调试模式 (布尔值)。默认值为 false
。
当 debug
为 true
时
-
将记录发送到服务器和从服务器接收的
Data
。 -
ResponseParser
将打印额外的详细信息以提示解析错误。这可能包括可恢复的错误。 -
ResponseParser
会进行额外的断言。
注意: 版本化的默认配置从 Config.global
继承 debug
,并且 load_defaults
不会覆盖 debug
。
控制当存在 LOGINDISABLED
功能时 Net::IMAP#login
的行为。强制执行时,当存在该功能时,Net::IMAP
将引发 LoginDisabledError
。
(v0.5.0
中添加了对 LOGINDISABLED
的支持。)
有效选项¶ ↑
false
(添加支持之前的原始行为)-
发送
LOGIN
命令,而不检查LOGINDISABLED
。 :when_capabilities_cached
-
当
Net::IMAP#capabilities_cached?
为 true 时强制执行该要求,但不要发送CAPABILITY
命令来发现功能。 true
(自v0.5
以来的默认值)-
仅当不存在
LOGINDISABLED
功能时才发送LOGIN
命令。当功能未知时,Net::IMAP
将自动先发送CAPABILITY
命令,然后再发送LOGIN
。
控制在不带任何参数(type
或 block
)调用时 Net::IMAP#responses
的行为。
有效选项¶ ↑
:silence_deprecation_warning
(原始行为)-
返回可变的 responses 哈希(没有任何警告)。这不具有线程安全性。
:warn
(自v0.5
以来的默认值)-
打印警告并返回可变的 responses 哈希。这不具有线程安全性。
:frozen_dup
(v0.6
的计划默认值)-
返回未处理的 responses 哈希的冻结副本,并带有冻结的数组值。
请注意,使用
type
且不带块调用IMAP#responses
是不可配置的,并且始终表现得像:frozen_dup
。(
v0.4.17
中添加了:frozen_dup
配置选项) :raise
-
使用弃用警告引发 ArgumentError。
控制在不带任何参数(type
或 block
)调用时 Net::IMAP#responses
的行为。
有效选项¶ ↑
:silence_deprecation_warning
(原始行为)-
返回可变的 responses 哈希(没有任何警告)。这不具有线程安全性。
:warn
(自v0.5
以来的默认值)-
打印警告并返回可变的 responses 哈希。这不具有线程安全性。
:frozen_dup
(v0.6
的计划默认值)-
返回未处理的 responses 哈希的冻结副本,并带有冻结的数组值。
请注意,使用
type
且不带块调用IMAP#responses
是不可配置的,并且始终表现得像:frozen_dup
。(
v0.4.17
中添加了:frozen_dup
配置选项) :raise
-
使用弃用警告引发 ArgumentError。
控制在不带任何参数(type
或 block
)调用时 Net::IMAP#responses
的行为。
有效选项¶ ↑
:silence_deprecation_warning
(原始行为)-
返回可变的 responses 哈希(没有任何警告)。这不具有线程安全性。
:warn
(自v0.5
以来的默认值)-
打印警告并返回可变的 responses 哈希。这不具有线程安全性。
:frozen_dup
(v0.6
的计划默认值)-
返回未处理的 responses 哈希的冻结副本,并带有冻结的数组值。
请注意,使用
type
且不带块调用IMAP#responses
是不可配置的,并且始终表现得像:frozen_dup
。(
v0.4.17
中添加了:frozen_dup
配置选项) :raise
-
使用弃用警告引发 ArgumentError。
当服务器和 SASL 机制都支持时,是否使用 SASL-IR
扩展。可以通过 Net::IMAP#authenticate
的 sasl_ir
关键字参数覆盖。
(v0.4.0
中添加了对 SASL-IR
的支持。)
有效选项¶ ↑
false
(添加支持之前的原始行为)-
即使服务器和机制都支持,也不要使用
SASL-IR
。 true
(自v0.4
以来的默认值)-
当服务器和机制都支持时,使用
SASL-IR
。
公共类方法
给定一个版本号,返回目标版本的默认配置。请参阅 Config
的版本化默认值。
给定一个版本名称,返回目标版本的默认配置。请参阅 Config
的命名默认值。
给定一个哈希,创建一个新的冻结配置,该配置继承自 Config.global
。使用 Config.new
获取未冻结的配置。
给定一个配置,返回相同的配置。
# File net-imap-0.5.4/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
默认配置,它是硬编码且冻结的。
# File net-imap-0.5.4/lib/net/imap/config.rb, line 126 def self.default; @default end
全局配置对象。也可以从 Net::IMAP.config
访问。
# File net-imap-0.5.4/lib/net/imap/config.rb, line 129 def self.global; @global if defined?(@global) end
创建一个新的配置对象,并使用 attrs
初始化其属性。
如果未给出 parent
,则默认使用全局配置。
如果给出了块,则会将新的配置对象传递给它。
# File net-imap-0.5.4/lib/net/imap/config.rb, line 293 def initialize(parent = Config.global, **attrs) super(parent) update(**attrs) yield self if block_given? end
硬编码配置的哈希,按版本号或名称索引。
# File net-imap-0.5.4/lib/net/imap/config.rb, line 132 def self.version_defaults; @version_defaults end
公共实例方法
debug
的别名
# File net-imap-0.5.4/lib/net/imap/config.rb, line 187
重置当前配置,使其表现得像 version
的版本化默认配置。parent
不会被更改。
某些配置属性默认继承自它们的 parent
(通常是 Config.global
),并且保持不变,例如:debug
。
请参阅 Config
的版本化默认值 和 Config
的命名默认值。
# File net-imap-0.5.4/lib/net/imap/config.rb, line 344 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
返回哈希中的所有配置属性。
# File net-imap-0.5.4/lib/net/imap/config.rb, line 353 def to_h; data.members.to_h { [_1, send(_1)] } end
将所有提供的 attrs
分配给此配置,并返回 self
。
除非 attrs
中的每个键都与 Config
上的赋值方法匹配,否则会引发 ArgumentError。
注意:
update
不是原子的。如果由于属性值无效而引发异常,则可能会部分应用attrs
。
# File net-imap-0.5.4/lib/net/imap/config.rb, line 309 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
如果没有块,则返回从 self 继承的新配置。如果有块,则将新的配置传递给该块并返回该块的结果。
如果没有给出关键字参数,则会引发 ArgumentError。
如果 self
被冻结,副本也将被冻结。
# File net-imap-0.5.4/lib/net/imap/config.rb, line 327 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
受保护的实例方法
# File net-imap-0.5.4/lib/net/imap/config.rb, line 357 def defaults_hash to_h.reject {|k,v| DEFAULT_TO_INHERIT.include?(k) } end