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, &block)

Other tags:
    Api: - private

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

def call_unsafe(input)

Other tags:
    Api: - private

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

def default(*)

Other tags:
    Api: - private
def default(*)
  raise ".enum(*values).default(value) is not supported. Call "\
        ".default(value).enum(*values) instead"
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 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 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

Other tags:
    Api: - public

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

def try(input)

Other tags:
    Api: - public

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