module Net::IMAP::Config::AttrInheritance
NOTE: The public methods on this module are part of the stable public API of
Net::IMAP::Config
. But the module itself is an internal implementation detail, with no guarantee of backward compatibility.
attr_accessor
methods will delegate to their parent
when the local value does not contain an override. Inheritance forms a singly linked list, so lookup will be O(n)
on the number of ancestors. In practice, the ancestor chain is not expected to be long. Without customization, it is only three deep:
When creating a client with the config
keyword, for example to use the appropriate defaults for an application or a library while still relying on global for configuration of debug
or logger
, most likely the ancestor chain is still only four deep:
IMAP#config
→ alternate defaults →Config.global
→Config.default
Attributes
The parent Config
object
Public Instance Methods
Returns true
if attr
is inherited from parent
and not overridden by this config.
# File lib/net/imap/config/attr_inheritance.rb, line 59 def inherited?(attr) data[attr] == INHERITED end
Creates a new config, which inherits from self
.
# File lib/net/imap/config/attr_inheritance.rb, line 55 def new(**attrs) self.class.new(self, **attrs) end
Resets an attr
to inherit from the parent
config.
When attr
is nil or not given, all attributes are reset.
# File lib/net/imap/config/attr_inheritance.rb, line 68 def reset(attr = nil) if attr.nil? data.members.each do |attr| data[attr] = INHERITED end self elsif inherited?(attr) nil else old, data[attr] = data[attr], INHERITED old end end
Protected Instance Methods
# File lib/net/imap/config/attr_inheritance.rb, line 48 def initialize(parent = nil) # :notnew: super() @parent = Config[parent] reset end