class Net::IMAP::Config

def with(**attrs)

If +self+ is frozen, the copy will also be frozen.

If no keyword arguments are given, an ArgumentError will be raised.

block, yields the new config and returns the block's result.
Without a block, returns a new config which inherits from self. With a

with(**attrs) {|config| } -> result
with(**attrs) -> config
:call-seq:
def with(**attrs)
  attrs.empty? and
    raise ArgumentError, "expected keyword arguments, none given"
  copy = new(**attrs)
  copy.freeze if frozen?
  block_given? ? yield(copy) : copy
end