Class: Dry::Types::Enum

Inherits:
Object
  • Object
show all
Includes:
Builder, Decorator, Type
Defined in:
lib/dry/types/enum.rb

Overview

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

Instance Attribute Summary collapse

Attributes included from Decorator

#type

Attributes included from Options

#options

Instance Method Summary collapse

Methods included from Builder

#&, #>, #constrained, #constrained_type, #constructor, #constructor_type, #enum, #fallback, #lax, #maybe, #optional, #|

Methods included from Decorator

#constrained?, #default?, #respond_to_missing?, #to_proc

Methods included from Options

#with

Methods included from Type

#call, #valid?

Constructor Details

#initialize(type, **options) ⇒ Enum

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Enum.

Parameters:

Options Hash (**options):



28
29
30
31
32
33
34
# File 'lib/dry/types/enum.rb', line 28

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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Dry::Types::Decorator

Instance Attribute Details

#inverted_mappingHash (readonly)

Returns:



21
22
23
# File 'lib/dry/types/enum.rb', line 21

def inverted_mapping
  @inverted_mapping
end

#mappingHash (readonly)

Returns:



18
19
20
# File 'lib/dry/types/enum.rb', line 18

def mapping
  @mapping
end

#valuesArray (readonly)

Returns:



15
16
17
# File 'lib/dry/types/enum.rb', line 15

def values
  @values
end

Instance Method Details

#call_safe(input) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Object)


44
# File 'lib/dry/types/enum.rb', line 44

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

#call_unsafe(input) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Object)


39
# File 'lib/dry/types/enum.rb', line 39

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

#defaultObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



52
53
54
55
# File 'lib/dry/types/enum.rb', line 52

def default(*)
  raise ".enum(*values).default(value) is not supported. Call " \
        ".default(value).enum(*values) instead"
end

#each_valueArray, Enumerator

Iterate over each enum value

Returns:



77
78
79
# File 'lib/dry/types/enum.rb', line 77

def each_value(&)
  values.each(&)
end

#joined_valuesString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (String)


91
92
93
94
95
96
97
98
99
# File 'lib/dry/types/enum.rb', line 91

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

#nameString

Returns:

  • (String)


86
# File 'lib/dry/types/enum.rb', line 86

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

#to_ast(meta: true) ⇒ Object

See Also:



63
64
65
# File 'lib/dry/types/enum.rb', line 63

def to_ast(meta: true)
  [:enum, [type.to_ast(meta: meta), mapping]]
end

#to_sString Also known as: inspect

Returns:

  • (String)


70
# File 'lib/dry/types/enum.rb', line 70

def to_s = PRINTER.(self)

#try(input) ⇒ Object

See Also:



49
# File 'lib/dry/types/enum.rb', line 49

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