bluejay 0.1.0.alpha.2-arm64-darwin

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.bundle +0 -0
  5. data/lib/bluejay/3.2/bluejay_rb.bundle +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