Module: Net::IMAP::Config::AttrVersionDefaults
- Included in:
- Net::IMAP::Config
- 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 Config.version_defaults.
Constant Summary collapse
- CURRENT_VERSION =
The
x.ypart of Net::IMAP::VERSION, as a Rational number. VERSION.to_r
- NEXT_VERSION =
The config version used for
Config[:next]. CURRENT_VERSION- VERSIONS =
((0.0r..FUTURE_VERSION) % 0.1r).to_a.freeze
Instance Attribute Summary collapse
-
#version_defaults ⇒ Object
readonly
See Config.version_defaults.
Class Method Summary collapse
Instance Method Summary collapse
-
#attr_accessor(name, defaults: nil, default: (unset = true), **kw) ⇒ Object
:stopdoc: internal APIs only.
Instance Attribute Details
#version_defaults ⇒ Object (readonly)
See Config.version_defaults.
27 28 29 |
# File 'lib/net/imap/config/attr_version_defaults.rb', line 27 def version_defaults @version_defaults end |
Class Method Details
.compile_default! ⇒ Object
52 53 54 55 56 57 58 59 |
# 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! ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/net/imap/config/attr_version_defaults.rb', line 61 def self.compile_version_defaults! 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[:default] = Config[CURRENT_VERSION] version_defaults[:next] = Config[NEXT_VERSION] version_defaults[:future] = Config[FUTURE_VERSION] version_defaults.freeze end |
Instance Method Details
#attr_accessor(name, defaults: nil, default: (unset = true), **kw) ⇒ Object
:stopdoc: internal APIs only
40 41 42 43 44 45 46 47 48 49 50 |
# 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 |