module Dry::Types::Composition

Attributes

left[R]

@return [Type]

right[R]

@return [Type]

Public Class Methods

included(base) click to toggle source
# File lib/dry/types/composition.rb, line 33
def self.included(base)
  composition_name = Inflector.demodulize(base)
  ast_type = Inflector.underscore(composition_name).to_sym
  base.define_singleton_method(:ast_type) { ast_type }
  base.define_singleton_method(:composition_name) { composition_name }
  base.const_set("Constrained", Class.new(base) { include Constrained })
end
new(left, right, **options) click to toggle source

@param [Type] left @param [Type] right @param [Hash] options

@api private

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

Public Instance Methods

call_safe(input, &block) click to toggle source

@param [Object] input

@return [Object]

@api private

# File lib/dry/types/composition.rb, line 94
def call_safe(input, &block)
  raise NotImplementedError
end
call_unsafe(input) click to toggle source

@param [Object] input

@return [Object]

@api private

# File lib/dry/types/composition.rb, line 85
def call_unsafe(input)
  raise NotImplementedError
end
constrained?() click to toggle source

@return [false]

@api public

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

@return [false]

@api public

# File lib/dry/types/composition.rb, line 62
def default?
  false
end
failure(input, _error = nil) click to toggle source

@api private

# File lib/dry/types/composition.rb, line 116
def failure(input, _error = nil)
  result = try(input)
  if result.failure?
    result
  else
    raise ArgumentError, "Invalid failure value '#{input}' for #{inspect}"
  end
end
name() click to toggle source

@return [String]

@api public

# File lib/dry/types/composition.rb, line 55
def name
  [left, right].map(&:name).join(" #{self.class.operator} ")
end
optional?() click to toggle source

@return [Boolean]

@api public

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

@param [Object] value

@return [Boolean]

@api private

# File lib/dry/types/composition.rb, line 130
def primitive?(value)
  raise NotImplementedError
end
success(input) click to toggle source

@api private

# File lib/dry/types/composition.rb, line 106
def success(input)
  result = try(input)
  if result.success?
    result
  else
    raise ArgumentError, "Invalid success value '#{input}' for #{inspect}"
  end
end
to_ast(meta: true) click to toggle source

@see Nominal#to_ast

@api public

# File lib/dry/types/composition.rb, line 137
def to_ast(meta: true)
  [self.class.ast_type,
   [left.to_ast(meta: meta), right.to_ast(meta: meta), 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/composition.rb, line 147
def to_proc
  proc { |value| self.(value) }
end
try(input) click to toggle source

@param [Object] input

@api public

# File lib/dry/types/composition.rb, line 101
def try(input)
  raise NotImplementedError
end