bluejay 0.1.0.alpha.2-x86_64-linux

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +411 -0
  4. data/lib/bluejay/3.1/bluejay_rb.so +0 -0
  5. data/lib/bluejay/3.2/bluejay_rb.so +0 -0
  6. data/lib/bluejay/base/custom_scalar_type.rb +25 -0
  7. data/lib/bluejay/base/directive.rb +25 -0
  8. data/lib/bluejay/base/enum_type.rb +25 -0
  9. data/lib/bluejay/base/input_object_type.rb +25 -0
  10. data/lib/bluejay/base/interface_type.rb +25 -0
  11. data/lib/bluejay/base/object_type.rb +25 -0
  12. data/lib/bluejay/base/query_root.rb +25 -0
  13. data/lib/bluejay/base/schema.rb +25 -0
  14. data/lib/bluejay/base/union_type.rb +25 -0
  15. data/lib/bluejay/base.rb +11 -0
  16. data/lib/bluejay/base_input_type.rb +13 -0
  17. data/lib/bluejay/base_output_type.rb +15 -0
  18. data/lib/bluejay/builtin/directives/deprecated.rb +34 -0
  19. data/lib/bluejay/builtin/directives/include.rb +35 -0
  20. data/lib/bluejay/builtin/directives/skip.rb +35 -0
  21. data/lib/bluejay/builtin/directives/specified_by.rb +33 -0
  22. data/lib/bluejay/builtin/enum_types/directive_location.rb +44 -0
  23. data/lib/bluejay/builtin/enum_types/type_kind.rb +33 -0
  24. data/lib/bluejay/builtin/object_types/directive.rb +34 -0
  25. data/lib/bluejay/builtin/object_types/enum_value.rb +33 -0
  26. data/lib/bluejay/builtin/object_types/field.rb +35 -0
  27. data/lib/bluejay/builtin/object_types/input_value.rb +29 -0
  28. data/lib/bluejay/builtin/object_types/schema.rb +31 -0
  29. data/lib/bluejay/builtin/object_types/type.rb +57 -0
  30. data/lib/bluejay/builtin.rb +25 -0
  31. data/lib/bluejay/custom_scalar_type.rb +69 -0
  32. data/lib/bluejay/directive.rb +71 -0
  33. data/lib/bluejay/enum_type.rb +48 -0
  34. data/lib/bluejay/errors.rb +20 -0
  35. data/lib/bluejay/finalize.rb +27 -0
  36. data/lib/bluejay/input_object_type.rb +73 -0
  37. data/lib/bluejay/input_type_shorthands.rb +28 -0
  38. data/lib/bluejay/interface_type.rb +74 -0
  39. data/lib/bluejay/json_value.rb +16 -0
  40. data/lib/bluejay/name_from_class.rb +18 -0
  41. data/lib/bluejay/object_type.rb +81 -0
  42. data/lib/bluejay/output_type_shorthands.rb +28 -0
  43. data/lib/bluejay/query_root.rb +64 -0
  44. data/lib/bluejay/schema.rb +91 -0
  45. data/lib/bluejay/union_type.rb +50 -0
  46. data/lib/bluejay/version.rb +5 -0
  47. data/lib/bluejay.rb +45 -0
  48. data/lib/rbi_ext/model.rb +64 -0
  49. data/lib/tapioca/dsl/compilers/directive.rb +42 -0
  50. data/lib/tapioca/dsl/compilers/input_object_type.rb +41 -0
  51. data/lib/tapioca/dsl/compilers/interface_type.rb +33 -0
  52. data/lib/tapioca/dsl/compilers/object_type.rb +53 -0
  53. data/lib/tapioca/dsl/compilers/schema.rb +51 -0
  54. data/rust-toolchain.toml +2 -0
  55. metadata +118 -0
@@ -0,0 +1,13 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ BaseInputType = T.type_alias do
6
+ T.any(
7
+ Scalar,
8
+ Base::InputObjectType::ClassMethods,
9
+ Base::EnumType::ClassMethods,
10
+ Base::CustomScalarType::ClassMethods,
11
+ )
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ BaseOutputType = T.type_alias do
6
+ T.any(
7
+ Scalar,
8
+ Base::EnumType::ClassMethods,
9
+ Base::ObjectType::ClassMethods,
10
+ Base::UnionType::ClassMethods,
11
+ Base::InterfaceType::ClassMethods,
12
+ Base::CustomScalarType::ClassMethods,
13
+ )
14
+ end
15
+ end
@@ -0,0 +1,34 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module Directives
7
+ class Deprecated < Directive
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "deprecated"
14
+ end
15
+
16
+ sig { override.returns(T::Array[InputValueDefinition]) }
17
+ def argument_definitions
18
+ [
19
+ InputValueDefinition.new(name: "reason", type: it(Scalar::String)),
20
+ ]
21
+ end
22
+
23
+ sig { override.returns(T::Array[DirectiveLocation]) }
24
+ def locations
25
+ [
26
+ DirectiveLocation::FIELD_DEFINITION,
27
+ DirectiveLocation::ENUM_VALUE,
28
+ ]
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,35 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module Directives
7
+ class Include < Directive
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "include"
14
+ end
15
+
16
+ sig { override.returns(T::Array[InputValueDefinition]) }
17
+ def argument_definitions
18
+ [
19
+ InputValueDefinition.new(name: "if", type: it!(Scalar::Boolean), ruby_name: "if_arg"),
20
+ ]
21
+ end
22
+
23
+ sig { override.returns(T::Array[DirectiveLocation]) }
24
+ def locations
25
+ [
26
+ DirectiveLocation::FIELD,
27
+ DirectiveLocation::FRAGMENT_SPREAD,
28
+ DirectiveLocation::INLINE_FRAGMENT,
29
+ ]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module Directives
7
+ class Skip < Directive
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "skip"
14
+ end
15
+
16
+ sig { override.returns(T::Array[InputValueDefinition]) }
17
+ def argument_definitions
18
+ [
19
+ InputValueDefinition.new(name: "if", type: it!(Scalar::Boolean), ruby_name: "if_arg"),
20
+ ]
21
+ end
22
+
23
+ sig { override.returns(T::Array[DirectiveLocation]) }
24
+ def locations
25
+ [
26
+ DirectiveLocation::FIELD,
27
+ DirectiveLocation::FRAGMENT_SPREAD,
28
+ DirectiveLocation::INLINE_FRAGMENT,
29
+ ]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,33 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module Directives
7
+ class SpecifiedBy < Directive
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "specifiedBy"
14
+ end
15
+
16
+ sig { override.returns(T::Array[InputValueDefinition]) }
17
+ def argument_definitions
18
+ [
19
+ InputValueDefinition.new(name: "url", type: it!(Scalar::String)),
20
+ ]
21
+ end
22
+
23
+ sig { override.returns(T::Array[DirectiveLocation]) }
24
+ def locations
25
+ [
26
+ DirectiveLocation::SCALAR,
27
+ ]
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,44 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module EnumTypes
7
+ class DirectiveLocation < EnumType
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "__DirectiveLocation"
14
+ end
15
+
16
+ sig { override.returns(T::Array[EnumValueDefinition]) }
17
+ def enum_value_definitions
18
+ [
19
+ EnumValueDefinition.new(name: "QUERY"),
20
+ EnumValueDefinition.new(name: "MUTATION"),
21
+ EnumValueDefinition.new(name: "SUBSCRIPTION"),
22
+ EnumValueDefinition.new(name: "FIELD"),
23
+ EnumValueDefinition.new(name: "FRAGMENT_DEFINITION"),
24
+ EnumValueDefinition.new(name: "FRAGMENT_SPREAD"),
25
+ EnumValueDefinition.new(name: "INLINE_FRAGMENT"),
26
+ EnumValueDefinition.new(name: "VARIABLE_DEFINITION"),
27
+ EnumValueDefinition.new(name: "SCHEMA"),
28
+ EnumValueDefinition.new(name: "SCALAR"),
29
+ EnumValueDefinition.new(name: "OBJECT"),
30
+ EnumValueDefinition.new(name: "FIELD_DEFINITION"),
31
+ EnumValueDefinition.new(name: "ARGUMENT_DEFINITION"),
32
+ EnumValueDefinition.new(name: "INTERFACE"),
33
+ EnumValueDefinition.new(name: "UNION"),
34
+ EnumValueDefinition.new(name: "ENUM"),
35
+ EnumValueDefinition.new(name: "ENUM_VALUE"),
36
+ EnumValueDefinition.new(name: "INPUT_OBJECT"),
37
+ EnumValueDefinition.new(name: "INPUT_FIELD_DEFINITION"),
38
+ ]
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,33 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module EnumTypes
7
+ class TypeKind < EnumType
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "__TypeKind"
14
+ end
15
+
16
+ sig { override.returns(T::Array[EnumValueDefinition]) }
17
+ def enum_value_definitions
18
+ [
19
+ EnumValueDefinition.new(name: "SCALAR"),
20
+ EnumValueDefinition.new(name: "OBJECT"),
21
+ EnumValueDefinition.new(name: "INTERFACE"),
22
+ EnumValueDefinition.new(name: "UNION"),
23
+ EnumValueDefinition.new(name: "ENUM"),
24
+ EnumValueDefinition.new(name: "INPUT_OBJECT"),
25
+ EnumValueDefinition.new(name: "LIST"),
26
+ EnumValueDefinition.new(name: "NON_NULL"),
27
+ ]
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,34 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module ObjectTypes
7
+ class Directive < ObjectType
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "__Directive"
14
+ end
15
+
16
+ sig { override.returns(T::Array[FieldDefinition]) }
17
+ def field_definitions
18
+ [
19
+ FieldDefinition.new(name: "name", type: ot!(Scalar::String)),
20
+ FieldDefinition.new(name: "description", type: ot(Scalar::String)),
21
+ FieldDefinition.new(name: "locations", type: lot!(ot!(EnumTypes::DirectiveLocation))),
22
+ FieldDefinition.new(name: "args", type: lot!(ot!(InputValue))),
23
+ FieldDefinition.new(
24
+ name: "isRepeatable",
25
+ type: ot!(Scalar::Boolean),
26
+ resolver_method_name: "repeatable?",
27
+ ),
28
+ ]
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,33 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module ObjectTypes
7
+ class EnumValue < ObjectType
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "__EnumValue"
14
+ end
15
+
16
+ sig { override.returns(T::Array[FieldDefinition]) }
17
+ def field_definitions
18
+ [
19
+ FieldDefinition.new(name: "name", type: ot!(Scalar::String)),
20
+ FieldDefinition.new(name: "description", type: ot(Scalar::String)),
21
+ FieldDefinition.new(
22
+ name: "isDeprecated",
23
+ type: ot!(Scalar::Boolean),
24
+ resolver_method_name: "deprecated?",
25
+ ),
26
+ FieldDefinition.new(name: "deprecationReason", type: ot(Scalar::String)),
27
+ ]
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,35 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module ObjectTypes
7
+ class Field < ObjectType
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "__Field"
14
+ end
15
+
16
+ sig { override.returns(T::Array[FieldDefinition]) }
17
+ def field_definitions
18
+ [
19
+ FieldDefinition.new(name: "name", type: ot!(Scalar::String), resolver_method_name: "name"),
20
+ FieldDefinition.new(name: "description", type: ot(Scalar::String)),
21
+ FieldDefinition.new(name: "args", type: lot!(ot!(InputValue))),
22
+ FieldDefinition.new(name: "type", type: ot!(Type)),
23
+ FieldDefinition.new(
24
+ name: "isDeprecated",
25
+ type: ot!(Scalar::Boolean),
26
+ resolver_method_name: "deprecated?",
27
+ ),
28
+ FieldDefinition.new(name: "deprecationReason", type: ot(Scalar::String)),
29
+ ]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,29 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module ObjectTypes
7
+ class InputValue < ObjectType
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "__InputValue"
14
+ end
15
+
16
+ sig { override.returns(T::Array[FieldDefinition]) }
17
+ def field_definitions
18
+ [
19
+ FieldDefinition.new(name: "description", type: ot(Scalar::String)),
20
+ FieldDefinition.new(name: "name", type: ot(Scalar::String)),
21
+ FieldDefinition.new(name: "type", type: ot!(Type)),
22
+ FieldDefinition.new(name: "defaultValue", type: ot(Scalar::String)),
23
+ ]
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module ObjectTypes
7
+ class Schema < ObjectType
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "__Schema"
14
+ end
15
+
16
+ sig { override.returns(T::Array[FieldDefinition]) }
17
+ def field_definitions
18
+ [
19
+ FieldDefinition.new(name: "description", type: ot(Scalar::String)),
20
+ FieldDefinition.new(name: "types", type: lot!(ot!(Type))),
21
+ FieldDefinition.new(name: "queryType", type: ot!(Type)),
22
+ FieldDefinition.new(name: "mutationType", type: ot(Type)),
23
+ FieldDefinition.new(name: "subscriptionType", type: ot(Type)),
24
+ FieldDefinition.new(name: "directives", type: lot!(ot!(Directive))),
25
+ ]
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,57 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ module ObjectTypes
7
+ class Type < ObjectType
8
+ class << self
9
+ extend(T::Sig)
10
+
11
+ sig { override.returns(String) }
12
+ def graphql_name
13
+ "__Type"
14
+ end
15
+
16
+ sig { override.returns(T::Array[FieldDefinition]) }
17
+ def field_definitions
18
+ [
19
+ FieldDefinition.new(name: "kind", type: ot!(EnumTypes::TypeKind)),
20
+ FieldDefinition.new(name: "name", type: ot(Scalar::String)),
21
+ FieldDefinition.new(name: "description", type: ot(Scalar::String)),
22
+ FieldDefinition.new(
23
+ name: "fields",
24
+ argument_definitions: [InputValueDefinition.new(
25
+ name: "includeDeprecated",
26
+ type: it(Scalar::Boolean),
27
+ default_value: false,
28
+ )],
29
+ type: lot(ot!(Field)),
30
+ ),
31
+ FieldDefinition.new(name: "interfaces", type: lot(ot!(Type))),
32
+ FieldDefinition.new(name: "possibleTypes", type: lot(ot!(Type))),
33
+ FieldDefinition.new(
34
+ name: "enumValues",
35
+ argument_definitions: [InputValueDefinition.new(
36
+ name: "includeDeprecated",
37
+ type: it(Scalar::Boolean),
38
+ default_value: false,
39
+ )],
40
+ type: lot(ot!(EnumValue)),
41
+ ),
42
+ FieldDefinition.new(
43
+ name: "inputFields",
44
+ type: lot(ot!(InputValue)),
45
+ ),
46
+ FieldDefinition.new(name: "ofType", type: ot(Type)),
47
+ FieldDefinition.new(
48
+ name: "specifiedByURL",
49
+ type: ot(Scalar::String),
50
+ ),
51
+ ]
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,25 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ module Builtin
6
+ class << self
7
+ extend(T::Sig)
8
+
9
+ sig { returns(FieldDefinition) }
10
+ def typename_field_definition
11
+ @typename_field_definition ||= T.let(
12
+ FieldDefinition.new(
13
+ name: "__typename",
14
+ type: OutputType.new(
15
+ type: Scalar::String,
16
+ required: true,
17
+ ),
18
+ resolver_method_name: "resolve_typename",
19
+ ),
20
+ T.nilable(FieldDefinition),
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,69 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ class CustomScalarType
6
+ extend(T::Generic)
7
+ include(Base::CustomScalarType)
8
+
9
+ InternalRepresentation = type_template
10
+
11
+ class << self
12
+ extend(T::Sig)
13
+ extend(T::Helpers)
14
+ include(NameFromClass)
15
+
16
+ abstract!
17
+
18
+ sig { overridable.returns(String) }
19
+ def graphql_name
20
+ name_from_class
21
+ end
22
+
23
+ sig { overridable.returns(T.nilable(String)) }
24
+ def description
25
+ nil
26
+ end
27
+
28
+ sig { overridable.returns(T::Array[Directive]) }
29
+ def directives
30
+ []
31
+ end
32
+
33
+ sig { overridable.returns(T.nilable(String)) }
34
+ def specified_by_url
35
+ nil
36
+ end
37
+
38
+ sig { overridable.params(value: InternalRepresentation).returns(Result[T.untyped, String]) }
39
+ def coerce_result(value)
40
+ Result.ok(value)
41
+ end
42
+
43
+ sig { abstract.params(value: T.untyped).returns(Result[InternalRepresentation, String]) }
44
+ def coerce_input(value); end
45
+
46
+ sig { overridable.returns(String) }
47
+ def internal_representation_sorbet_type_name
48
+ const_get(:InternalRepresentation).name
49
+ end
50
+
51
+ private
52
+
53
+ sig(:final) { override.returns(CustomScalarTypeDefinition) }
54
+ def definition
55
+ @definition ||= T.let(
56
+ CustomScalarTypeDefinition.new(
57
+ name: graphql_name,
58
+ description:,
59
+ directives:,
60
+ specified_by_url:,
61
+ ruby_class: self,
62
+ internal_representation_sorbet_type_name:,
63
+ ),
64
+ T.nilable(CustomScalarTypeDefinition),
65
+ )
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,71 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ class Directive
6
+ include(Base::Directive)
7
+
8
+ class << self
9
+ extend(T::Sig)
10
+ extend(T::Helpers)
11
+ include(InputTypeShorthands)
12
+ include(NameFromClass)
13
+
14
+ abstract!
15
+
16
+ sig { overridable.returns(String) }
17
+ def graphql_name
18
+ name_from_class
19
+ end
20
+
21
+ sig { overridable.returns(T.nilable(String)) }
22
+ def description
23
+ nil
24
+ end
25
+
26
+ sig { abstract.returns(T::Array[InputValueDefinition]) }
27
+ def argument_definitions; end
28
+
29
+ sig { abstract.returns(T::Array[DirectiveLocation]) }
30
+ def locations; end
31
+
32
+ sig { overridable.returns(T::Boolean) }
33
+ def repeatable?
34
+ false
35
+ end
36
+
37
+ private
38
+
39
+ sig(:final) { override.returns(DirectiveDefinition) }
40
+ def definition
41
+ @definition ||= T.let(nil, T.nilable(DirectiveDefinition))
42
+ @definition ||= begin
43
+ argument_definitions = self.argument_definitions
44
+ argument_definitions.each { |ivd| attr_reader(ivd.ruby_name) }
45
+ DirectiveDefinition.new(
46
+ name: graphql_name,
47
+ argument_definitions:,
48
+ description:,
49
+ locations:,
50
+ is_repeatable: repeatable?,
51
+ ruby_class: self,
52
+ )
53
+ end
54
+ end
55
+ end
56
+
57
+ define_method(:initialize) do |**kwargs|
58
+ self.class.send(:definition).argument_definitions.each do |ivd|
59
+ arg = kwargs[ivd.ruby_name]
60
+ instance_variable_set("@#{ivd.ruby_name}", arg)
61
+ end
62
+ freeze
63
+ end
64
+
65
+ define_method(:==) do |other|
66
+ self.class == other.class && self.class.send(:definition).argument_definitions.all? do |ivd|
67
+ send(ivd.ruby_name) == other.send(ivd.ruby_name)
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,48 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module Bluejay
5
+ class EnumType
6
+ include(Base::EnumType)
7
+
8
+ class << self
9
+ extend(T::Sig)
10
+ extend(T::Helpers)
11
+ include(NameFromClass)
12
+
13
+ abstract!
14
+
15
+ sig { overridable.returns(String) }
16
+ def graphql_name
17
+ name_from_class
18
+ end
19
+
20
+ sig { overridable.returns(T.nilable(String)) }
21
+ def description
22
+ nil
23
+ end
24
+
25
+ sig { abstract.returns(T::Array[EnumValueDefinition]) }
26
+ def enum_value_definitions; end
27
+
28
+ sig { overridable.returns(T::Array[Directive]) }
29
+ def directives
30
+ []
31
+ end
32
+
33
+ private
34
+
35
+ sig(:final) { override.returns(EnumTypeDefinition) }
36
+ def definition
37
+ @definition ||= T.let(nil, T.nilable(EnumTypeDefinition))
38
+ @definition ||= EnumTypeDefinition.new(
39
+ name: graphql_name,
40
+ enum_value_definitions:,
41
+ description:,
42
+ directives:,
43
+ ruby_class: self,
44
+ )
45
+ end
46
+ end
47
+ end
48
+ end