Class: GraphQL::EnumType

Inherits:
BaseType show all
Defined in:
lib/graphql/enum_type.rb

Overview

A finite set of possible values, represented in query strings with SCREAMING_CASE_NAMES

Examples:

An enum of programming languages


LanguageEnum = GraphQL::EnumType.define do
  name "Languages"
  description "Programming languages for Web projects"
  value("PYTHON", "A dynamic, function-oriented language")
  value("RUBY", "A very dynamic language aimed at programmer happiness")
  value("JAVASCRIPT", "Accidental lingua franca of the web")
end

Defined Under Namespace

Classes: EnumValue

Instance Attribute Summary

Attributes inherited from BaseType

#description, #name

Instance Method Summary collapse

Methods inherited from BaseType

#==, #coerce_input, #resolve_type, #to_list_type, #to_non_null_type, #unwrap, #valid_input?, #validate_input

Methods included from Define::InstanceDefinable

included

Methods included from Define::NonNullWithBang

#!

Constructor Details

#initializeEnumType

Returns a new instance of EnumType.



17
18
19
20
# File 'lib/graphql/enum_type.rb', line 17

def initialize
  @values_by_name = {}
  @values_by_value = {}
end

Instance Method Details

#add_value(enum_value) ⇒ Object



28
29
30
31
# File 'lib/graphql/enum_type.rb', line 28

def add_value(enum_value)
  @values_by_name[enum_value.name] = enum_value
  @values_by_value[enum_value.value] = enum_value
end

#coerce_non_null_input(value_name) ⇒ Object

Get the underlying value for this enum value

Examples:

get episode value from Enum

episode = EpisodeEnum.coerce("NEWHOPE")
episode # => 6

Parameters:

  • value_name (String)

    the string representation of this enum value

Returns:

  • (Object)

    the underlying value for this enum value



69
70
71
72
# File 'lib/graphql/enum_type.rb', line 69

def coerce_non_null_input(value_name)
  return nil unless @values_by_name.key?(value_name)
  @values_by_name.fetch(value_name).value
end

#coerce_result(value) ⇒ Object



74
75
76
# File 'lib/graphql/enum_type.rb', line 74

def coerce_result(value)
  @values_by_value.fetch(value).name
end

#kindObject



47
48
49
# File 'lib/graphql/enum_type.rb', line 47

def kind
  GraphQL::TypeKinds::ENUM
end

#to_sObject



78
79
80
# File 'lib/graphql/enum_type.rb', line 78

def to_s
  name
end

#validate_non_null_input(value_name) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/graphql/enum_type.rb', line 51

def validate_non_null_input(value_name)
  result = GraphQL::Query::InputValidationResult.new

  if !@values_by_name.key?(value_name)
    result.add_problem("Expected #{JSON.dump(value_name)} to be one of: #{@values_by_name.keys.join(', ')}")
  end

  result
end

#value(name, description = nil, deprecation_reason: nil, value: name) ⇒ Object

Deprecated.

use define API instead

Define a value within this enum

Parameters:

  • name (String)

    the string representation of this value

  • description (String) (defaults to: nil)
  • deprecation_reason (String) (defaults to: nil)

    if provided, ‘deprecated?` will be true

  • value (Object) (defaults to: name)

    the underlying value for this enum value



43
44
45
# File 'lib/graphql/enum_type.rb', line 43

def value(name, description=nil, deprecation_reason: nil, value: name)
  values[name] = EnumValue.new(name: name, description: description, deprecation_reason: deprecation_reason, value: value)
end

#valuesObject



33
34
35
# File 'lib/graphql/enum_type.rb', line 33

def values
  @values_by_name
end

#values=(values) ⇒ Object



22
23
24
25
26
# File 'lib/graphql/enum_type.rb', line 22

def values=(values)
  @values_by_name = {}
  @values_by_value = {}
  values.each { |enum_value| add_value(enum_value) }
end