class Net::IMAP::Config

Net::IMAP::Config (自 v0.4.13 起可用) 存储 Net::IMAP 客户端的配置选项。全局配置可以在 Net::IMAP.configNet::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.newconfig 关键字参数加载特定 net-imapx.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 加载的属性名称数组。

属性

debug[RW]

调试模式 (布尔值)。默认值为 false

debugtrue

  • 将记录发送到服务器和从服务器接收的 Data

  • ResponseParser 将打印额外的详细信息以提示解析错误。这可能包括可恢复的错误。

  • ResponseParser 会进行额外的断言。

注意: 版本化的默认配置从 Config.global 继承 debug,并且 load_defaults 不会覆盖 debug

enforce_logindisabled[RW]

控制当存在 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

idle_response_timeout[RW]

客户端请求离开 IDLE 状态后,等待接收 IDLE 响应的秒数。

请参阅 Net::IMAP#idleNet::IMAP#idle_done

默认值为 5 秒。

open_timeout[RW]

等待连接打开的秒数。

如果 IMAP 对象在此时间内无法打开连接,则会引发 Net::OpenTimeout 异常。

请参阅 Net::IMAP.new

默认值为 30 秒。

responses_without_args[RW]

控制在不带任何参数(typeblock)调用时 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。

注意:responses_without_argsresponses_without_block 的别名。

responses_without_args=[RW]

控制在不带任何参数(typeblock)调用时 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。

注意:responses_without_argsresponses_without_block 的别名。

responses_without_block[RW]

控制在不带任何参数(typeblock)调用时 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。

注意:responses_without_argsresponses_without_block 的别名。

sasl_ir[RW]

当服务器和 SASL 机制都支持时,是否使用 SASL-IR 扩展。可以通过 Net::IMAP#authenticatesasl_ir 关键字参数覆盖。

v0.4.0 中添加了对 SASL-IR 的支持。)

有效选项

false (添加支持之前的原始行为)

即使服务器和机制都支持,也不要使用 SASL-IR

true (自 v0.4 以来的默认值)

当服务器和机制都支持时,使用 SASL-IR

公共类方法

Net::IMAP::Config[number] → 版本化配置 单击以切换源代码
Net::IMAP::Config[symbol] → 命名配置
Net::IMAP::Config[hash] → 新的冻结配置
Net::IMAP::Config[config] → 相同的配置

给定一个版本号,返回目标版本的默认配置。请参阅 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
default() 单击以切换源代码

默认配置,它是硬编码且冻结的。

# File net-imap-0.5.4/lib/net/imap/config.rb, line 126
def self.default; @default end
global() 单击以切换源代码

全局配置对象。也可以从 Net::IMAP.config 访问。

# File net-imap-0.5.4/lib/net/imap/config.rb, line 129
def self.global; @global if defined?(@global) end
new(parent = Config.global, **attrs) { |self| ... } 单击以切换源代码

创建一个新的配置对象,并使用 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
version_defaults() 单击以切换源代码

硬编码配置的哈希,按版本号或名称索引。

# File net-imap-0.5.4/lib/net/imap/config.rb, line 132
def self.version_defaults; @version_defaults end

公共实例方法

debug? → 布尔值 单击以切换源代码

debug 的别名

# File net-imap-0.5.4/lib/net/imap/config.rb, line 187
      
load_defaults(version) → self 单击以切换源代码

重置当前配置,使其表现得像 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
to_h → 哈希 单击以切换源代码

返回哈希中的所有配置属性。

# File net-imap-0.5.4/lib/net/imap/config.rb, line 353
def to_h; data.members.to_h { [_1, send(_1)] } end
update(**attrs) → self 单击以切换源代码

将所有提供的 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
with(**attrs) → config 单击以切换源代码
with(**attrs) {|config| } → 结果

如果没有块,则返回从 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

受保护的实例方法

defaults_hash() 点击切换源代码
# 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