123456789_123456789_123456789_123456789_123456789_

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

Class Method Summary

Instance Attribute Summary

Instance Method Summary

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