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