Skip to content

Commit 59e49bb

Browse files
committed
🔧 Add Config#overrides? (opposite of #inherited?)
1 parent 573a591 commit 59e49bb

2 files changed

Lines changed: 47 additions & 0 deletions

File tree

lib/net/imap/config/attr_inheritance.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,31 @@ def new(**attrs) self.class.new(self, **attrs) end
6666
# inherited, or +false+ if any of them are overriden. When no +attrs+
6767
# are given, returns +true+ if *all* attributes are inherited, or
6868
# +false+ if any attribute is overriden.
69+
#
70+
# Related: #overrides?
6971
def inherited?(*attrs)
7072
attrs = data.members if attrs.empty?
7173
attrs.all? { data[_1] == INHERITED }
7274
end
7375

76+
# :call-seq:
77+
# overrides?(attr) -> true or false
78+
# overrides?(*attrs) -> true or false
79+
# overrides? -> true or false
80+
#
81+
# Returns +true+ if +attr+ is defined on this config and not inherited
82+
# from #parent.
83+
#
84+
# When multiple +attrs+ are given, returns +true+ if
85+
# *any* of them are defined on +self+. When no +attrs+ are given,
86+
# returns +true+ if *any* attribute is overriden.
87+
#
88+
# Related: #inherited?
89+
def overrides?(*attrs)
90+
attrs = data.members if attrs.empty?
91+
attrs.any? { data[_1] != INHERITED }
92+
end
93+
7494
# :call-seq:
7595
# reset -> self
7696
# reset(attr) -> attribute value

test/net/imap/test_config.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,33 @@ def duck.to_r = 1/11111
349349
assert child.inherited?(:debug, :idle_response_timeout, :open_timeout)
350350
end
351351

352+
test "#overrides?" do
353+
base = Config.new debug: false, open_timeout: 99, idle_response_timeout: 15
354+
child = base.new debug: true, open_timeout: 15, idle_response_timeout: 10
355+
assert child.overrides?
356+
assert child.overrides?(:idle_response_timeout)
357+
assert child.overrides?(:idle_response_timeout, :open_timeout)
358+
assert child.overrides?(:sasl_ir, :open_timeout)
359+
refute child.overrides?(:sasl_ir, :max_response_size)
360+
refute child.overrides?(:sasl_ir)
361+
362+
child.reset(:idle_response_timeout)
363+
assert child.overrides?
364+
refute child.overrides?(:idle_response_timeout)
365+
assert child.overrides?(:idle_response_timeout, :open_timeout)
366+
assert child.overrides?(:sasl_ir, :open_timeout)
367+
refute child.overrides?(:sasl_ir, :max_response_size)
368+
refute child.overrides?(:sasl_ir)
369+
370+
child.reset
371+
refute child.overrides?
372+
refute child.overrides?(:idle_response_timeout)
373+
refute child.overrides?(:idle_response_timeout, :open_timeout)
374+
refute child.overrides?(:sasl_ir, :open_timeout)
375+
refute child.overrides?(:sasl_ir, :max_response_size)
376+
refute child.overrides?(:sasl_ir)
377+
end
378+
352379
test "#reset all attributes" do
353380
base = Config.new debug: false, open_timeout: 99, idle_response_timeout: 15
354381
child = base.new debug: true, open_timeout: 15, idle_response_timeout: 10

0 commit comments

Comments
 (0)