class Dry::Types::Nominal

Nominal types define a primitive class and do not apply any constructors or constraints

Use these types for annotations and the base for building more complex types on top of them.

@api public

Constants

ALWAYS

Attributes

primitive[R]

@return [Class]

Public Class Methods

[](primitive) click to toggle source

@param [Class] primitive

@return [Type]

@api private

# File lib/dry/types/nominal.rb, line 33
def self.[](primitive)
  if primitive == ::Array
    Types::Array
  elsif primitive == ::Hash
    Types::Hash
  else
    self
  end
end
new(primitive, **options) click to toggle source

@param [Type,Class] primitive @param [Hash] options

@api private

Calls superclass method Dry::Types::Meta::new
# File lib/dry/types/nominal.rb, line 49
def initialize(primitive, **options)
  super
  @primitive = primitive
  freeze
end

Public Instance Methods

call_safe(input) click to toggle source

@param [BasicObject] input

@return [BasicObject]

@api private

# File lib/dry/types/nominal.rb, line 97
def call_safe(input)
  input
end
call_unsafe(input) click to toggle source

@param [BasicObject] input

@return [BasicObject]

@api private

# File lib/dry/types/nominal.rb, line 88
def call_unsafe(input)
  input
end
coerce(input) { || ... } click to toggle source

@api private

# File lib/dry/types/nominal.rb, line 146
def coerce(input, &_block)
  if primitive?(input)
    input
  elsif block_given?
    yield
  else
    raise CoercionError, "#{input.inspect} must be an instance of #{primitive}"
  end
end
constrained?() click to toggle source

@return [false]

@api public

# File lib/dry/types/nominal.rb, line 72
def constrained?
  false
end
default?() click to toggle source

@return [false]

@api public

# File lib/dry/types/nominal.rb, line 65
def default?
  false
end
failure(input, error) click to toggle source

@param (see Failure#initialize)

@return [Result::Failure]

@api public

# File lib/dry/types/nominal.rb, line 128
def failure(input, error)
  raise ArgumentError, "error must be a CoercionError" unless error.is_a?(CoercionError)

  Result::Failure.new(input, error)
end
lax() click to toggle source

Return self. Nominal types are lax by definition

@return [Nominal]

@api public

# File lib/dry/types/nominal.rb, line 188
def lax
  self
end
name() click to toggle source

@return [String]

@api public

# File lib/dry/types/nominal.rb, line 58
def name
  primitive.name
end
optional?() click to toggle source

@return [false]

@api public

# File lib/dry/types/nominal.rb, line 79
def optional?
  false
end
primitive?(value) click to toggle source

Checks whether value is of a primitive class

@param [Object] value

@return [Boolean]

@api public

# File lib/dry/types/nominal.rb, line 141
def primitive?(value)
  value.is_a?(primitive)
end
success(input) click to toggle source

@param (see Dry::Types::Success#initialize)

@return [Result::Success]

@api public

# File lib/dry/types/nominal.rb, line 119
def success(input)
  Result::Success.new(input)
end
to_ast(meta: true) click to toggle source

Return AST representation of a type nominal

@return [Array]

@api public

# File lib/dry/types/nominal.rb, line 179
def to_ast(meta: true)
  [:nominal, [primitive, meta ? self.meta : EMPTY_HASH]]
end
to_proc() click to toggle source

Wrap the type with a proc

@return [Proc]

@api public

# File lib/dry/types/nominal.rb, line 197
def to_proc
  ALWAYS
end
try(input) click to toggle source

@param [Object] input

@yieldparam [Failure] failure @yieldreturn [Result]

@return [Result,Logic::Result] when a block is not provided @return [nil] otherwise

@api public

# File lib/dry/types/nominal.rb, line 110
def try(input)
  success(input)
end
try_coerce(input) { |result| ... } click to toggle source

@api private

# File lib/dry/types/nominal.rb, line 157
def try_coerce(input)
  result = success(input)

  coerce(input) do
    result = failure(
      input,
      CoercionError.new("#{input.inspect} must be an instance of #{primitive}")
    )
  end

  if block_given?
    yield(result)
  else
    result
  end
end