Module: Net::IMAP::Config::AttrVersionDefaults
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
|
Extended In:
| |
| Defined in: | lib/net/imap/config/attr_version_defaults.rb |
Overview
NOTE: This module is an internal implementation detail, with no guarantee of backward compatibility.
Adds a defaults parameter to #attr_accessor, which is used to compile version_defaults.
Constant Summary
-
CURRENT_VERSION =
# File 'lib/net/imap/config/attr_version_defaults.rb', line 16
The
x.ypart of VERSION, as a Rational number.VERSION.to_r
-
FUTURE_VERSION =
The config version used for
Config[:future]. -
NEXT_VERSION =
# File 'lib/net/imap/config/attr_version_defaults.rb', line 19
The config version used for
Config[:next].CURRENT_VERSION -
VERSIONS =
# File 'lib/net/imap/config/attr_version_defaults.rb', line 24((0.0r..FUTURE_VERSION) % 0.1r).to_a.freeze
Class Method Summary
- .compile_default! Internal use only
- .compile_version_defaults! Internal use only
Instance Attribute Summary
-
#version_defaults
rw
See version_defaults.
Instance Method Summary
- #attr_accessor(name, defaults: nil, default: (unset = true), **kw) Internal use only
Class Method Details
.compile_default!
This method is for internal use only.
[ GitHub ]
# File 'lib/net/imap/config/attr_version_defaults.rb', line 52
def self.compile_default! raise "Config.default already compiled" if Config.default default = VERSIONS.select { _1 <= CURRENT_VERSION } .filter_map { version_defaults[_1] } .prepend(version_defaults.delete(nil)) .inject(&:merge) Config.new(**default).freeze end
.compile_version_defaults!
This method is for internal use only.
[ GitHub ]
# File 'lib/net/imap/config/attr_version_defaults.rb', line 61
def self.compile_version_defaults! # Temporarily assign Config.default, enabling #load_defaults(:default) version_defaults[:default] = Config.default # Use #load_defaults so some attributes are inherited from global. version_defaults[:default] = Config.new.load_defaults(:default).freeze version_defaults[0.0r] = Config[version_defaults.fetch(0.0r)] VERSIONS.each_cons(2) do |prior, version| updates = version_defaults[version] version_defaults[version] = version_defaults[prior] .then { updates ? _1.dup.update(**updates).freeze : _1 } end # Safe conversions one way only: # 0.6r.to_f == 0.6 # => true # 0.6 .to_r == 0.6r # => false version_defaults.to_a.each do |k, v| next unless k in Rational version_defaults[k.to_f] = v end version_defaults[:original] = Config[0.0r] version_defaults[:current] = Config[CURRENT_VERSION] version_defaults[:next] = Config[NEXT_VERSION] version_defaults[:future] = Config[FUTURE_VERSION] version_defaults.freeze end
Instance Attribute Details
#version_defaults (rw)
[ GitHub ]# File 'lib/net/imap/config/attr_version_defaults.rb', line 27
singleton_class.attr_accessor :version_defaults
Instance Method Details
#attr_accessor(name, defaults: nil, default: (unset = true), **kw)
This method is for internal use only.
[ GitHub ]
# File 'lib/net/imap/config/attr_version_defaults.rb', line 40
def attr_accessor(name, defaults: nil, default: (unset = true), **kw) unless unset version = DEFAULT_TO_INHERIT.include?(name) ? nil : 0.0r defaults = { version => default } end defaults&.each_pair do |version, default| AttrVersionDefaults.version_defaults[version] ||= {} AttrVersionDefaults.version_defaults[version][name] = default end super(name, **kw) end