module Dry::Initializer::Dispatchers::PrepareDefault

Public Instance Methods

call(default: nil, optional: nil, **options) click to toggle source
# File lib/dry/initializer/dispatchers/prepare_default.rb, line 13
def call(default: nil, optional: nil, **options)
  default = callable! default
  check_arity! default

  {default: default, optional: (optional | default), **options}
end

Private Instance Methods

callable!(default) click to toggle source
# File lib/dry/initializer/dispatchers/prepare_default.rb, line 22
def callable!(default)
  return unless default
  return default if default.respond_to?(:call)
  return callable(default.to_proc) if default.respond_to?(:to_proc)

  invalid!(default)
end
check_arity!(default) click to toggle source
# File lib/dry/initializer/dispatchers/prepare_default.rb, line 30
def check_arity!(default)
  return unless default

  arity = default.method(:call).arity.to_i
  return unless arity.positive?

  invalid!(default)
end
invalid!(default) click to toggle source
# File lib/dry/initializer/dispatchers/prepare_default.rb, line 39
def invalid!(default)
  raise TypeError, "The #{default.inspect} should be" \
                   " either convertable to proc with no arguments," \
                   " or respond to #call without arguments."
end