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
@return [Class]
Public Class Methods
@param [Class] primitive
@return [Type]
@api private
# File lib/dry/types/nominal.rb, line 26 def self.[](primitive) if primitive == ::Array Types::Array elsif primitive == ::Hash Types::Hash else self end end
@param [Type,Class] primitive @param [Hash] options
@api private
Dry::Types::Meta::new
# File lib/dry/types/nominal.rb, line 42 def initialize(primitive, **options) super @primitive = primitive freeze end
Public Instance Methods
@param [BasicObject] input
@return [BasicObject]
@api private
# File lib/dry/types/nominal.rb, line 90 def call_safe(input) input end
@param [BasicObject] input
@return [BasicObject]
@api private
# File lib/dry/types/nominal.rb, line 81 def call_unsafe(input) input end
@api private
# File lib/dry/types/nominal.rb, line 139 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
@return [false]
@api public
# File lib/dry/types/nominal.rb, line 65 def constrained? false end
@return [false]
@api public
# File lib/dry/types/nominal.rb, line 58 def default? false end
@param (see Failure#initialize)
@return [Result::Failure]
@api public
# File lib/dry/types/nominal.rb, line 121 def failure(input, error) raise ArgumentError, "error must be a CoercionError" unless error.is_a?(CoercionError) Result::Failure.new(input, error) end
Return self. Nominal
types are lax by definition
@return [Nominal]
@api public
# File lib/dry/types/nominal.rb, line 181 def lax self end
@return [String]
@api public
# File lib/dry/types/nominal.rb, line 51 def name primitive.name end
@return [false]
@api public
# File lib/dry/types/nominal.rb, line 72 def optional? false end
Checks whether value is of a primitive
class
@param [Object] value
@return [Boolean]
@api public
# File lib/dry/types/nominal.rb, line 134 def primitive?(value) value.is_a?(primitive) end
@param (see Dry::Types::Success#initialize)
@return [Result::Success]
@api public
# File lib/dry/types/nominal.rb, line 112 def success(input) Result::Success.new(input) end
Return AST representation of a type nominal
@return [Array]
@api public
# File lib/dry/types/nominal.rb, line 172 def to_ast(meta: true) [:nominal, [primitive, meta ? self.meta : EMPTY_HASH]] end
Wrap the type with a proc
@return [Proc]
@api public
# File lib/dry/types/nominal.rb, line 190 def to_proc ALWAYS end
@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 103 def try(input) success(input) end
@api private
# File lib/dry/types/nominal.rb, line 150 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