Class: GraphQL::Schema::Enum
- Extended by:
 - Member::ValidatesInput
 
- Defined in:
 - lib/graphql/schema/enum.rb
 
Overview
Extend this class to define GraphQL enums in your schema.
By default, GraphQL enum values are translated into Ruby strings.
You can provide a custom value with the value: keyword.
Direct Known Subclasses
Introspection::DirectiveLocationEnum, Introspection::TypeKindEnum
Defined Under Namespace
Classes: MissingValuesError, UnresolvedValueError
Constant Summary
Constants included from Member::GraphQLTypeNames
Member::GraphQLTypeNames::Boolean, Member::GraphQLTypeNames::ID, Member::GraphQLTypeNames::Int
Instance Attribute Summary
Attributes included from Member::BaseDSLMethods
#default_graphql_name, #graphql_name
Attributes included from Member::RelayShortcuts
#connection_type, #connection_type_class, #edge_type, #edge_type_class
Attributes included from Member::HasAstNode
Class Method Summary collapse
- 
  
    
      .all_enum_value_definitions  ⇒ Array<Schema::EnumValue> 
    
    
  
  
  
  
  
  
  
  
  
    
An unfiltered list of all definitions.
 - 
  
    
      .coerce_input(value_name, ctx)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
 - 
  
    
      .coerce_result(value, ctx)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
 - 
  
    
      .enum_value_class(new_enum_value_class = nil)  ⇒ Class 
    
    
  
  
  
  
  
  
  
  
  
    
For handling
value(...)inputs and buildingGraphQL::Enum::EnumValues out of them. - 
  
    
      .enum_values(context = GraphQL::Query::NullContext.instance)  ⇒ Array<GraphQL::Schema::EnumValue> 
    
    
  
  
  
  
  
  
  
  
  
    
Possible values of this enum.
 - 
  
    
      .kind  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
 - 
  
    
      .validate_non_null_input(value_name, ctx, max_errors: nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
 - 
  
    
      .value(*args, **kwargs, &block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    
Define a value for this enum.
 - 
  
    
      .values(context = GraphQL::Query::NullContext.instance)  ⇒ Hash<String => GraphQL::Schema::EnumValue> 
    
    
  
  
  
  
  
  
  
  
  
    
Possible values of this enum, keyed by name.
 
Methods included from Member::ValidatesInput
coerce_isolated_input, coerce_isolated_result, valid_input?, valid_isolated_input?, validate_input
Methods included from Member::BaseDSLMethods
#authorized?, #default_relay, #description, #introspection, #introspection?, #mutation, #name, #visible?
Methods included from Member::BaseDSLMethods::ConfigurationExtension
Methods included from Member::TypeSystemHelpers
#initialize, #kind, #list?, #non_null?, #to_list_type, #to_non_null_type, #to_type_signature
Methods included from Member::Scoped
#inherited, #reauthorize_scoped_objects, #scope_items
Methods included from Member::HasPath
Methods included from Member::HasAstNode
Methods included from Member::HasDirectives
add_directive, #directive, #directives, get_directives, #inherited, #remove_directive, remove_directive
Class Method Details
.all_enum_value_definitions ⇒ Array<Schema::EnumValue>
Returns An unfiltered list of all definitions.
      94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110  | 
    
      # File 'lib/graphql/schema/enum.rb', line 94 def all_enum_value_definitions all_defns = if superclass.respond_to?(:all_enum_value_definitions) superclass.all_enum_value_definitions else [] end @own_values && @own_values.each do |_key, value| if value.is_a?(Array) all_defns.concat(value) else all_defns << value end end all_defns end  | 
  
.coerce_input(value_name, ctx) ⇒ Object
      154 155 156 157 158 159 160 161 162 163 164 165 166  | 
    
      # File 'lib/graphql/schema/enum.rb', line 154 def coerce_input(value_name, ctx) all_values = ctx.warden ? ctx.warden.enum_values(self) : values.each_value if v = all_values.find { |val| val.graphql_name == value_name } v.value elsif v = all_values.find { |val| val.value == value_name } # this is for matching default values, which are "inputs", but they're # the Ruby value, not the GraphQL string. v.value else nil end end  | 
  
.coerce_result(value, ctx) ⇒ Object
      143 144 145 146 147 148 149 150 151 152  | 
    
      # File 'lib/graphql/schema/enum.rb', line 143 def coerce_result(value, ctx) warden = ctx.warden all_values = warden ? warden.enum_values(self) : values.each_value enum_value = all_values.find { |val| val.value == value } if enum_value enum_value.graphql_name else raise self::UnresolvedValueError.new(enum: self, value: value, context: ctx) end end  | 
  
.enum_value_class(new_enum_value_class = nil) ⇒ Class
Returns for handling value(...) inputs and building GraphQL::Enum::EnumValues out of them.
      118 119 120 121 122 123 124 125 126  | 
    
      # File 'lib/graphql/schema/enum.rb', line 118 def enum_value_class(new_enum_value_class = nil) if new_enum_value_class @enum_value_class = new_enum_value_class elsif defined?(@enum_value_class) && @enum_value_class @enum_value_class else superclass <= GraphQL::Schema::Enum ? superclass.enum_value_class : nil end end  | 
  
.enum_values(context = GraphQL::Query::NullContext.instance) ⇒ Array<GraphQL::Schema::EnumValue>
Returns Possible values of this enum.
      71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91  | 
    
      # File 'lib/graphql/schema/enum.rb', line 71 def enum_values(context = GraphQL::Query::NullContext.instance) inherited_values = superclass.respond_to?(:enum_values) ? superclass.enum_values(context) : nil visible_values = [] warden = Warden.from_context(context) own_values.each do |key, values_entry| if (v = Warden.visible_entry?(:visible_enum_value?, values_entry, context, warden)) visible_values << v end end if inherited_values # Local values take precedence over inherited ones inherited_values.each do |i_val| if !visible_values.any? { |v| v.graphql_name == i_val.graphql_name } visible_values << i_val end end end visible_values end  | 
  
.kind ⇒ Object
      128 129 130  | 
    
      # File 'lib/graphql/schema/enum.rb', line 128 def kind GraphQL::TypeKinds::ENUM end  | 
  
.validate_non_null_input(value_name, ctx, max_errors: nil) ⇒ Object
      132 133 134 135 136 137 138 139 140 141  | 
    
      # File 'lib/graphql/schema/enum.rb', line 132 def validate_non_null_input(value_name, ctx, max_errors: nil) allowed_values = ctx.warden.enum_values(self) matching_value = allowed_values.find { |v| v.graphql_name == value_name } if matching_value.nil? GraphQL::Query::InputValidationResult.from_problem("Expected #{GraphQL::Language.serialize(value_name)} to be one of: #{allowed_values.map(&:graphql_name).join(', ')}") else nil end end  | 
  
.value(*args, **kwargs, &block) ⇒ void
This method returns an undefined value.
Define a value for this enum
      52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68  | 
    
      # File 'lib/graphql/schema/enum.rb', line 52 def value(*args, **kwargs, &block) kwargs[:owner] = self value = enum_value_class.new(*args, **kwargs, &block) key = value.graphql_name prev_value = own_values[key] case prev_value when nil own_values[key] = value when GraphQL::Schema::EnumValue own_values[key] = [prev_value, value] when Array prev_value << value else raise "Invariant: Unexpected enum value for #{key.inspect}: #{prev_value.inspect}" end value end  | 
  
.values(context = GraphQL::Query::NullContext.instance) ⇒ Hash<String => GraphQL::Schema::EnumValue>
Returns Possible values of this enum, keyed by name.
      113 114 115  | 
    
      # File 'lib/graphql/schema/enum.rb', line 113 def values(context = GraphQL::Query::NullContext.instance) enum_values(context).each_with_object({}) { |val, obj| obj[val.graphql_name] = val } end  |