module Dry::Types::BuilderMethods
def Array(type) = Strict(::Array).of(type)
-
(Dry::Types::Array)
-
Parameters:
-
type
(Dry::Types::Type
) --
def Array(type) = Strict(::Array).of(type)
def Constant(object) = Nominal(object.class).constrained(is: object)
-
(Dry::Types::Type)
-
Parameters:
-
object
(Object
) --
def Constant(object) = Nominal(object.class).constrained(is: object)
def Constructor(klass, cons = nil, &block) # rubocop:disable Metrics/PerceivedComplexity:
-
(Dry::Types::Type)
-
Parameters:
-
block
(#call, nil
) -- Value constructor -
cons
(#call, nil
) -- Value constructor -
klass
(Class
) --
def Constructor(klass, cons = nil, &block) # rubocop:disable Metrics/PerceivedComplexity: if klass.is_a?(Type) if cons || block klass.constructor(cons || block) else klass end else Nominal(klass).constructor(cons || block || klass.method(:new)) end end
def Hash(type_map) = Strict(::Hash).schema(type_map)
-
(Dry::Types::Array)
-
Parameters:
-
type_map
(Hash{Symbol => Dry::Types::Type}
) --
def Hash(type_map) = Strict(::Hash).schema(type_map)
def Instance(klass)
-
(Dry::Types::Type)
-
Parameters:
-
klass
(Class, Module
) -- Class or module
def Instance(klass) unless klass.is_a?(::Module) raise ::ArgumentError, "Expected a class or module, got #{klass.inspect}" end Nominal(klass).constrained(type: klass) end
def Interface(*methods)
-
(Dry::Types::Contrained)
-
Parameters:
-
methods
(Array
) -- Method names
def Interface(*methods) methods.reduce(Types["nominal.any"]) do |type, method| type.constrained(respond_to: method) end end
def Map(key_type, value_type)
-
(Dry::Types::Map)
-
Parameters:
-
value_type
(Type
) -- Value type -
key_type
(Type
) -- Key type
def Map(key_type, value_type) Nominal(::Hash).map(key_type, value_type) end
def Nominal(klass)
-
(Dry::Types::Type)
-
Parameters:
-
klass
(Class
) --
def Nominal(klass) if klass <= ::Array Array.new(klass) elsif klass <= ::Hash Hash.new(klass) else Nominal.new(klass) end end
def Value(value) = Nominal(value.class).constrained(eql: value)
-
(Dry::Types::Type)
-
Parameters:
-
value
(Object
) --
def Value(value) = Nominal(value.class).constrained(eql: value)
def included(base)
- Api: - private
def included(base) super base.extend(BuilderMethods) end