模块 Net::IMAP::DeprecatedClientOptions

此模块处理各种 Net::IMAP 方法的已弃用参数。

公共类方法

Net::IMAP.new(host, **options) # 标准关键字选项 点击以切换源代码
Net::IMAP.new(host, options) # 过时的哈希选项
Net::IMAP.new(host, port) # 过时的端口参数
Net::IMAP.new(host, port, usessl, certs = nil, verify = true) # 已弃用的 SSL 参数

转换 Net::IMAP.new 参数以实现向后兼容性。

过时的参数

使用过时的参数不会打印警告。过时的参数将在未来的版本中弃用。

如果给出了第二个位置参数并且它是一个哈希(或可以通过 #to_hash 转换),则将其转换为关键字参数。

# Obsolete:
Net::IMAP.new("imap.example.com", options_hash)
# Use instead:
Net::IMAP.new("imap.example.com", **options_hash)

如果给出了第二个位置参数并且它不是哈希,则将其转换为 port 关键字参数。

# Obsolete:
Net::IMAP.new("imap.example.com", 114433)
# Use instead:
Net::IMAP.new("imap.example.com", port: 114433)

已弃用的参数

使用已弃用的参数会打印警告。转换为关键字参数以避免警告。已弃用的参数将在未来的版本中删除。

如果 usessl 为 false,则忽略 certsverify。当它为 true 时,所有三个参数都将转换为 ssl 关键字参数。如果没有 certsverify,则将其转换为 ssl: true

# DEPRECATED:
Net::IMAP.new("imap.example.com", nil, true) # => prints a warning
# Use instead:
Net::IMAP.new("imap.example.com", ssl: true)

certs 是目录路径时,它会转换为 ca_path: certs

# DEPRECATED:
Net::IMAP.new("imap.example.com", nil, true, "/path/to/certs") # => prints a warning
# Use instead:
Net::IMAP.new("imap.example.com", ssl: {ca_path: "/path/to/certs"})

certs 是文件路径时,它会转换为 ca_file: certs

# DEPRECATED:
Net::IMAP.new("imap.example.com", nil, true, "/path/to/cert.pem") # => prints a warning
# Use instead:
Net::IMAP.new("imap.example.com", ssl: {ca_file: "/path/to/cert.pem"})

verifyfalse 时,它会转换为 verify_mode: OpenSSL::SSL::VERIFY_NONE

# DEPRECATED:
Net::IMAP.new("imap.example.com", nil, true, nil, false) # => prints a warning
# Use instead:
Net::IMAP.new("imap.example.com", ssl: {verify_mode: OpenSSL::SSL::VERIFY_NONE})
调用超类方法
# File net-imap-0.5.4/lib/net/imap/deprecated_client_options.rb, line 72
def initialize(host, port_or_options = nil, *deprecated, **options)
  if port_or_options.nil? && deprecated.empty?
    super host, **options
  elsif options.any?
    # Net::IMAP.new(host, *__invalid__, **options)
    raise ArgumentError, "Do not combine deprecated and keyword arguments"
  elsif port_or_options.respond_to?(:to_hash) and deprecated.any?
    # Net::IMAP.new(host, options, *__invalid__)
    raise ArgumentError, "Do not use deprecated SSL params with options hash"
  elsif port_or_options.respond_to?(:to_hash)
    super host, **Hash.try_convert(port_or_options)
  elsif deprecated.empty?
    super host, port: port_or_options
  elsif deprecated.shift
    warn("DEPRECATED: Call Net::IMAP.new with keyword options",
         uplevel: 1, category: :deprecated)
    super host, port: port_or_options, ssl: create_ssl_params(*deprecated)
  else
    warn("DEPRECATED: Call Net::IMAP.new with keyword options",
         uplevel: 1, category: :deprecated)
    super host, port: port_or_options, ssl: false
  end
end

公共实例方法

starttls(**options) # 标准 点击以切换源代码
starttls(options = {}) # 过时
starttls(certs = nil, verify = true) # 已弃用

转换 Net::IMAP#starttls 参数以实现向后兼容性。

certsverify 的支持将在未来的版本中删除。

有关 certsverify 的解释,请参见 ::new

调用超类方法
# File net-imap-0.5.4/lib/net/imap/deprecated_client_options.rb, line 106
def starttls(*deprecated, **options)
  if deprecated.empty?
    super(**options)
  elsif options.any?
    # starttls(*__invalid__, **options)
    raise ArgumentError, "Do not combine deprecated and keyword options"
  elsif deprecated.first.respond_to?(:to_hash) && deprecated.length > 1
    # starttls(*__invalid__, **options)
    raise ArgumentError, "Do not use deprecated verify param with options hash"
  elsif deprecated.first.respond_to?(:to_hash)
    super(**Hash.try_convert(deprecated.first))
  else
    warn("DEPRECATED: Call Net::IMAP#starttls with keyword options",
         uplevel: 1, category: :deprecated)
    super(**create_ssl_params(*deprecated))
  end
end

私有实例方法

create_ssl_params(certs = nil, verify = true) 点击以切换源代码
# File net-imap-0.5.4/lib/net/imap/deprecated_client_options.rb, line 126
def create_ssl_params(certs = nil, verify = true)
  params = {}
  if certs
    if File.file?(certs)
      params[:ca_file] = certs
    elsif File.directory?(certs)
      params[:ca_path] = certs
    end
  end
  params[:verify_mode] =
    verify ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
  params
end