module Dry::Types::BuilderMethods

def Array(type) = Strict(::Array).of(type)

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

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

def Constant(object) = Nominal(object.class).constrained(is: object)

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

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) = Strict(::Hash).schema(type_map)

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

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

def Instance(klass)

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

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) = Nominal(value.class).constrained(eql: value)

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

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

def included(base)

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