module Dry::Types::BuilderMethods

def Array(type)

Returns:
  • (Dry::Types::Array) -

Parameters:
  • type (Dry::Types::Type) --
def Array(type)
  Strict(::Array).of(type)
end

def Constant(object)

Returns:
  • (Dry::Types::Type) -

Parameters:
  • object (Object) --
def Constant(object)
  Nominal(object.class).constrained(is: object)
end

def Constructor(klass, cons = nil, &block) # rubocop:disable Metrics/PerceivedComplexity:

Returns:
  • (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)

Returns:
  • (Dry::Types::Array) -

Parameters:
  • type_map (Hash{Symbol => Dry::Types::Type}) --
def Hash(type_map)
  Strict(::Hash).schema(type_map)
end

def Instance(klass)

Returns:
  • (Dry::Types::Type) -

Parameters:
  • klass (Class, Module) -- Class or module
def Instance(klass)
  Nominal(klass).constrained(type: klass)
end

def Interface(*methods)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (Dry::Types::Type) -

Parameters:
  • value (Object) --
def Value(value)
  Nominal(value.class).constrained(eql: value)
end

def included(base)

Other tags:
    Api: - private
def included(base)
  super
  base.extend(BuilderMethods)
end