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), &)
- Api: - private
Returns:
-
(Object)
-
def call_safe(input, &) = type.call_safe(map_value(input), &)
def call_unsafe(input) = type.call_unsafe(map_value(input))
- Api: - private
Returns:
-
(Object)
-
def call_unsafe(input) = type.call_unsafe(map_value(input))
def default(*)
- Api: - private
def default(*) raise ".enum(*values).default(value) is not supported. Call " \ ".default(value).enum(*values) instead" end
def each_value(&)
- Api: - public
Returns:
-
(Array, Enumerator)
-
def each_value(&) values.each(&) end
def initialize(type, **options)
- 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
- 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)
- 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})"
- Api: - public
Returns:
-
(String)
-
def name = "#{super}(#{joined_values})"
def to_ast(meta: true)
- 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)
- Api: - public
Returns:
-
(String)
-
def to_s = PRINTER.(self)
def try(input, &) = super(map_value(input))
- Api: - public
Other tags:
- See: Dry::Types::Constrained#try -
def try(input, &) = super(map_value(input))