Sha256: eef15fc703e6e5e855b9462e3c264cee8318b8081032b777e4ecb9f4f6320a72
Contents?: true
Size: 940 Bytes
Versions: 3
Compression:
Stored size: 940 Bytes
Contents
# # Prepares the `:default` option # # It must respond to `.call` without arguments # module Dry::Initializer::Dispatchers::PrepareDefault extend self def call(default: nil, optional: nil, **options) default = callable! default check_arity! default { default: default, optional: (optional | default), **options } end private 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 def check_arity!(default) return unless default arity = default.method(:call).arity.to_i return unless arity.positive? invalid!(default) end def invalid!(default) raise TypeError, "The #{default.inspect} should be" \ " either convertable to proc with no arguments," \ " or respond to #call without arguments." end end
Version data entries
3 entries across 3 versions & 1 rubygems