class Dry::Types::Enum

@api public
Enum types can be used to define an enum on top of an existing type

def call_safe(input, &) = type.call_safe(map_value(input), &)

Other tags:
    Api: - private

Returns:
  • (Object) -
def call_safe(input, &) = type.call_safe(map_value(input), &)

def call_unsafe(input) = type.call_unsafe(map_value(input))

Other tags:
    Api: - private

Returns:
  • (Object) -
def call_unsafe(input) = type.call_unsafe(map_value(input))

def default(*)

Other tags:
    Api: - private
def default(*)
  raise ".enum(*values).default(value) is not supported. Call " \
        ".default(value).enum(*values) instead"
end

def each_value(&)

Other tags:
    Api: - public

Returns:
  • (Array, Enumerator) -
def each_value(&)
  values.each(&)
end

def initialize(type, **options)

Other tags:
    Api: - private

Options Hash: (**options)
  • :values (Array) --

Parameters:
  • options (Hash) --
  • type (Type) --
def initialize(type, **options)
  super
  @mapping = options.fetch(:mapping).freeze
  @values = @mapping.keys.freeze
  @inverted_mapping = @mapping.invert.freeze
  freeze
end

def joined_values

Other tags:
    Api: - private

Returns:
  • (String) -
def joined_values
  mapping.keys.map { |value|
    if value.is_a?(::String)
      value
    else
      value.inspect
    end
  }.join("|")
end

def map_value(input)

Other tags:
    Api: - private

Returns:
  • (Object) -

Parameters:
  • input (Object) --
def map_value(input)
  if input.equal?(Undefined)
    type.call
  elsif mapping.key?(input)
    input
  else
    inverted_mapping.fetch(input, input)
  end
end

def name = "#{super}(#{joined_values})"

Other tags:
    Api: - public

Returns:
  • (String) -
def name = "#{super}(#{joined_values})"

def to_ast(meta: true)

Other tags:
    Api: - public

Other tags:
    See: Nominal#to_ast -
def to_ast(meta: true)
  [:enum, [type.to_ast(meta: meta), mapping]]
end

def to_s = PRINTER.(self)

Other tags:
    Api: - public

Returns:
  • (String) -
def to_s = PRINTER.(self)

def try(input, &) = super(map_value(input))

Other tags:
    Api: - public

Other tags:
    See: Dry::Types::Constrained#try -
def try(input, &) = super(map_value(input))