graphql 1.13.24 → 2.0.0

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.

Potentially problematic release.


This version of graphql might be problematic. Click here for more details.

Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/analysis/ast/query_complexity.rb +1 -1
  3. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  4. data/lib/graphql/analysis/ast/visitor.rb +1 -1
  5. data/lib/graphql/analysis/ast.rb +0 -10
  6. data/lib/graphql/analysis.rb +0 -7
  7. data/lib/graphql/backtrace/table.rb +0 -18
  8. data/lib/graphql/backtrace/tracer.rb +1 -2
  9. data/lib/graphql/backtrace.rb +2 -8
  10. data/lib/graphql/dig.rb +1 -1
  11. data/lib/graphql/execution/errors.rb +1 -9
  12. data/lib/graphql/execution/interpreter/runtime.rb +6 -13
  13. data/lib/graphql/execution/interpreter.rb +0 -22
  14. data/lib/graphql/execution/lazy.rb +1 -1
  15. data/lib/graphql/execution/lookahead.rb +6 -13
  16. data/lib/graphql/execution/multiplex.rb +50 -107
  17. data/lib/graphql/execution.rb +11 -3
  18. data/lib/graphql/introspection/directive_type.rb +2 -2
  19. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  20. data/lib/graphql/introspection/entry_points.rb +2 -15
  21. data/lib/graphql/introspection/field_type.rb +1 -1
  22. data/lib/graphql/introspection/schema_type.rb +2 -2
  23. data/lib/graphql/introspection/type_type.rb +5 -5
  24. data/lib/graphql/language/document_from_schema_definition.rb +0 -17
  25. data/lib/graphql/language/nodes.rb +0 -3
  26. data/lib/graphql/pagination/connections.rb +2 -28
  27. data/lib/graphql/query/context.rb +1 -185
  28. data/lib/graphql/query/input_validation_result.rb +0 -9
  29. data/lib/graphql/query/literal_input.rb +8 -13
  30. data/lib/graphql/query/validation_pipeline.rb +6 -34
  31. data/lib/graphql/query/variable_validation_error.rb +2 -2
  32. data/lib/graphql/query/variables.rb +8 -31
  33. data/lib/graphql/query.rb +5 -34
  34. data/lib/graphql/railtie.rb +0 -104
  35. data/lib/graphql/relay/range_add.rb +0 -4
  36. data/lib/graphql/relay.rb +0 -15
  37. data/lib/graphql/schema/addition.rb +1 -8
  38. data/lib/graphql/schema/argument.rb +6 -28
  39. data/lib/graphql/schema/build_from_definition.rb +7 -9
  40. data/lib/graphql/schema/directive.rb +1 -22
  41. data/lib/graphql/schema/enum.rb +3 -19
  42. data/lib/graphql/schema/enum_value.rb +1 -23
  43. data/lib/graphql/schema/field.rb +22 -221
  44. data/lib/graphql/schema/input_object.rb +17 -65
  45. data/lib/graphql/schema/interface.rb +1 -30
  46. data/lib/graphql/schema/introspection_system.rb +3 -8
  47. data/lib/graphql/schema/late_bound_type.rb +2 -2
  48. data/lib/graphql/schema/list.rb +3 -24
  49. data/lib/graphql/schema/loader.rb +0 -1
  50. data/lib/graphql/schema/member/base_dsl_methods.rb +1 -6
  51. data/lib/graphql/schema/member/build_type.rb +4 -6
  52. data/lib/graphql/schema/member/has_arguments.rb +16 -20
  53. data/lib/graphql/schema/member/has_fields.rb +3 -3
  54. data/lib/graphql/schema/member/has_interfaces.rb +1 -13
  55. data/lib/graphql/schema/member/validates_input.rb +2 -2
  56. data/lib/graphql/schema/member.rb +0 -6
  57. data/lib/graphql/schema/mutation.rb +0 -9
  58. data/lib/graphql/schema/non_null.rb +3 -9
  59. data/lib/graphql/schema/object.rb +0 -40
  60. data/lib/graphql/schema/relay_classic_mutation.rb +17 -28
  61. data/lib/graphql/schema/scalar.rb +1 -16
  62. data/lib/graphql/schema/union.rb +0 -16
  63. data/lib/graphql/schema/warden.rb +3 -12
  64. data/lib/graphql/schema/wrapper.rb +0 -5
  65. data/lib/graphql/schema.rb +106 -945
  66. data/lib/graphql/static_validation/base_visitor.rb +4 -21
  67. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
  68. data/lib/graphql/static_validation/validator.rb +2 -24
  69. data/lib/graphql/static_validation.rb +0 -2
  70. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
  71. data/lib/graphql/subscriptions/event.rb +1 -1
  72. data/lib/graphql/subscriptions/instrumentation.rb +0 -51
  73. data/lib/graphql/subscriptions.rb +4 -13
  74. data/lib/graphql/tracing/data_dog_tracing.rb +16 -20
  75. data/lib/graphql/tracing/platform_tracing.rb +4 -32
  76. data/lib/graphql/tracing.rb +0 -1
  77. data/lib/graphql/types/relay/connection_behaviors.rb +2 -6
  78. data/lib/graphql/types/relay/default_relay.rb +0 -10
  79. data/lib/graphql/types/relay/node_behaviors.rb +5 -1
  80. data/lib/graphql/types/relay.rb +0 -2
  81. data/lib/graphql/types/string.rb +1 -1
  82. data/lib/graphql/version.rb +1 -1
  83. data/lib/graphql.rb +1 -66
  84. metadata +28 -164
  85. data/lib/graphql/analysis/analyze_query.rb +0 -98
  86. data/lib/graphql/analysis/field_usage.rb +0 -45
  87. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  88. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  89. data/lib/graphql/analysis/query_complexity.rb +0 -88
  90. data/lib/graphql/analysis/query_depth.rb +0 -43
  91. data/lib/graphql/analysis/reducer_state.rb +0 -48
  92. data/lib/graphql/argument.rb +0 -131
  93. data/lib/graphql/authorization.rb +0 -82
  94. data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
  95. data/lib/graphql/backwards_compatibility.rb +0 -61
  96. data/lib/graphql/base_type.rb +0 -232
  97. data/lib/graphql/boolean_type.rb +0 -2
  98. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  99. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  100. data/lib/graphql/compatibility/execution_specification.rb +0 -436
  101. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  102. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
  103. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  104. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  105. data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
  106. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
  107. data/lib/graphql/compatibility.rb +0 -5
  108. data/lib/graphql/define/assign_argument.rb +0 -12
  109. data/lib/graphql/define/assign_connection.rb +0 -13
  110. data/lib/graphql/define/assign_enum_value.rb +0 -18
  111. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  112. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  113. data/lib/graphql/define/assign_object_field.rb +0 -42
  114. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  115. data/lib/graphql/define/instance_definable.rb +0 -255
  116. data/lib/graphql/define/no_definition_error.rb +0 -7
  117. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  118. data/lib/graphql/define/type_definer.rb +0 -31
  119. data/lib/graphql/define.rb +0 -31
  120. data/lib/graphql/deprecated_dsl.rb +0 -55
  121. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  122. data/lib/graphql/directive/include_directive.rb +0 -2
  123. data/lib/graphql/directive/skip_directive.rb +0 -2
  124. data/lib/graphql/directive.rb +0 -107
  125. data/lib/graphql/enum_type.rb +0 -133
  126. data/lib/graphql/execution/execute.rb +0 -333
  127. data/lib/graphql/execution/flatten.rb +0 -40
  128. data/lib/graphql/execution/typecast.rb +0 -50
  129. data/lib/graphql/field/resolve.rb +0 -59
  130. data/lib/graphql/field.rb +0 -226
  131. data/lib/graphql/float_type.rb +0 -2
  132. data/lib/graphql/function.rb +0 -128
  133. data/lib/graphql/id_type.rb +0 -2
  134. data/lib/graphql/input_object_type.rb +0 -138
  135. data/lib/graphql/int_type.rb +0 -2
  136. data/lib/graphql/interface_type.rb +0 -72
  137. data/lib/graphql/internal_representation/document.rb +0 -27
  138. data/lib/graphql/internal_representation/node.rb +0 -206
  139. data/lib/graphql/internal_representation/print.rb +0 -51
  140. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  141. data/lib/graphql/internal_representation/scope.rb +0 -88
  142. data/lib/graphql/internal_representation/visit.rb +0 -36
  143. data/lib/graphql/internal_representation.rb +0 -7
  144. data/lib/graphql/list_type.rb +0 -80
  145. data/lib/graphql/non_null_type.rb +0 -71
  146. data/lib/graphql/object_type.rb +0 -130
  147. data/lib/graphql/query/arguments.rb +0 -189
  148. data/lib/graphql/query/arguments_cache.rb +0 -24
  149. data/lib/graphql/query/executor.rb +0 -52
  150. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  151. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  152. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  153. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  154. data/lib/graphql/query/serial_execution.rb +0 -40
  155. data/lib/graphql/relay/array_connection.rb +0 -83
  156. data/lib/graphql/relay/base_connection.rb +0 -189
  157. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  158. data/lib/graphql/relay/connection_resolve.rb +0 -43
  159. data/lib/graphql/relay/connection_type.rb +0 -54
  160. data/lib/graphql/relay/edge.rb +0 -27
  161. data/lib/graphql/relay/edge_type.rb +0 -19
  162. data/lib/graphql/relay/edges_instrumentation.rb +0 -39
  163. data/lib/graphql/relay/global_id_resolve.rb +0 -17
  164. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  165. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  166. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  167. data/lib/graphql/relay/mutation/result.rb +0 -38
  168. data/lib/graphql/relay/mutation.rb +0 -106
  169. data/lib/graphql/relay/node.rb +0 -39
  170. data/lib/graphql/relay/page_info.rb +0 -7
  171. data/lib/graphql/relay/relation_connection.rb +0 -188
  172. data/lib/graphql/relay/type_extensions.rb +0 -32
  173. data/lib/graphql/scalar_type.rb +0 -91
  174. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  175. data/lib/graphql/schema/default_parse_error.rb +0 -10
  176. data/lib/graphql/schema/default_type_error.rb +0 -17
  177. data/lib/graphql/schema/member/accepts_definition.rb +0 -164
  178. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
  179. data/lib/graphql/schema/member/instrumentation.rb +0 -131
  180. data/lib/graphql/schema/middleware_chain.rb +0 -82
  181. data/lib/graphql/schema/possible_types.rb +0 -44
  182. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  183. data/lib/graphql/schema/timeout_middleware.rb +0 -88
  184. data/lib/graphql/schema/traversal.rb +0 -228
  185. data/lib/graphql/schema/validation.rb +0 -313
  186. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  187. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  188. data/lib/graphql/string_type.rb +0 -2
  189. data/lib/graphql/subscriptions/subscription_root.rb +0 -76
  190. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  191. data/lib/graphql/types/relay/node_field.rb +0 -24
  192. data/lib/graphql/types/relay/nodes_field.rb +0 -43
  193. data/lib/graphql/union_type.rb +0 -115
  194. data/lib/graphql/upgrader/member.rb +0 -937
  195. data/lib/graphql/upgrader/schema.rb +0 -38
@@ -1,232 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql/relay/type_extensions"
3
-
4
- module GraphQL
5
- # The parent for all type classes.
6
- class BaseType
7
- include GraphQL::Define::NonNullWithBang
8
- include GraphQL::Define::InstanceDefinable
9
- include GraphQL::Relay::TypeExtensions
10
-
11
- deprecated_accepts_definitions :name, :description,
12
- :introspection,
13
- :default_scalar,
14
- :default_relay,
15
- {
16
- connection: GraphQL::Define::AssignConnection,
17
- global_id_field: GraphQL::Define::AssignGlobalIdField,
18
- }
19
-
20
- ensure_defined(:graphql_name, :name, :description, :introspection?, :default_scalar?)
21
-
22
- attr_accessor :ast_node
23
-
24
- def initialize
25
- @introspection = false
26
- @default_scalar = false
27
- @default_relay = false
28
- end
29
-
30
- def initialize_copy(other)
31
- super
32
- # Reset these derived defaults
33
- @connection_type = nil
34
- @edge_type = nil
35
- end
36
-
37
- # @return [String] the name of this type, must be unique within a Schema
38
- attr_reader :name
39
- # Future-compatible alias
40
- # @see {GraphQL::SchemaMember}
41
- alias :graphql_name :name
42
- # Future-compatible alias
43
- # @see {GraphQL::SchemaMember}
44
- def graphql_definition(silence_deprecation_warning: false)
45
- itself
46
- end
47
-
48
- def type_class
49
- metadata[:type_class]
50
- end
51
-
52
- def name=(name)
53
- GraphQL::NameValidator.validate!(name)
54
- @name = name
55
- end
56
-
57
- # @return [String, nil] a description for this type
58
- attr_accessor :description
59
-
60
- # @return [Boolean] Is this type a predefined introspection type?
61
- def introspection?
62
- @introspection
63
- end
64
-
65
- # @return [Boolean] Is this type a built-in scalar type? (eg, `String`, `Int`)
66
- def default_scalar?
67
- @default_scalar
68
- end
69
-
70
- # @return [Boolean] Is this type a built-in Relay type? (`Node`, `PageInfo`)
71
- def default_relay?
72
- @default_relay
73
- end
74
-
75
- # @api private
76
- attr_writer :introspection, :default_scalar, :default_relay
77
-
78
- # @param other [GraphQL::BaseType] compare to this object
79
- # @return [Boolean] are these types equivalent? (incl. non-null, list)
80
- # @see {ModifiesAnotherType#==} for override on List & NonNull types
81
- def ==(other)
82
- other.is_a?(GraphQL::BaseType) && self.name == other.name
83
- end
84
-
85
- # If this type is modifying an underlying type,
86
- # return the underlying type. (Otherwise, return `self`.)
87
- def unwrap
88
- self
89
- end
90
-
91
- # @return [GraphQL::NonNullType] a non-null version of this type
92
- def to_non_null_type
93
- GraphQL::NonNullType.new(of_type: self)
94
- end
95
-
96
- # @return [GraphQL::ListType] a list version of this type
97
- def to_list_type
98
- GraphQL::ListType.new(of_type: self)
99
- end
100
-
101
- module ModifiesAnotherType
102
- def unwrap
103
- self.of_type.unwrap
104
- end
105
-
106
- def ==(other)
107
- other.is_a?(ModifiesAnotherType) && other.of_type == of_type
108
- end
109
- end
110
-
111
- # Find out which possible type to use for `value`.
112
- # Returns self if there are no possible types (ie, not Union or Interface)
113
- def resolve_type(value, ctx)
114
- self
115
- end
116
-
117
- # Print the human-readable name of this type using the query-string naming pattern
118
- def to_s
119
- name
120
- end
121
-
122
- alias :inspect :to_s
123
- alias :to_type_signature :to_s
124
-
125
- def valid_isolated_input?(value)
126
- valid_input?(value, GraphQL::Query::NullContext)
127
- end
128
-
129
- def validate_isolated_input(value)
130
- validate_input(value, GraphQL::Query::NullContext)
131
- end
132
-
133
- def coerce_isolated_input(value)
134
- coerce_input(value, GraphQL::Query::NullContext)
135
- end
136
-
137
- def coerce_isolated_result(value)
138
- coerce_result(value, GraphQL::Query::NullContext)
139
- end
140
-
141
- def valid_input?(value, ctx = nil)
142
- if ctx.nil?
143
- warn_deprecated_coerce("valid_isolated_input?")
144
- ctx = GraphQL::Query::NullContext
145
- end
146
-
147
- validate_input(value, ctx).valid?
148
- end
149
-
150
- def validate_input(value, ctx = nil)
151
- if ctx.nil?
152
- warn_deprecated_coerce("validate_isolated_input")
153
- ctx = GraphQL::Query::NullContext
154
- end
155
-
156
- if value.nil?
157
- GraphQL::Query::InputValidationResult.new
158
- else
159
- validate_non_null_input(value, ctx)
160
- end
161
- end
162
-
163
- def coerce_input(value, ctx = nil)
164
- if value.nil?
165
- nil
166
- else
167
- if ctx.nil?
168
- warn_deprecated_coerce("coerce_isolated_input")
169
- ctx = GraphQL::Query::NullContext
170
- end
171
- coerce_non_null_input(value, ctx)
172
- end
173
- end
174
-
175
- def coerce_result(value, ctx)
176
- raise GraphQL::RequiredImplementationMissingError
177
- end
178
-
179
- # Types with fields may override this
180
- # @param name [String] field name to lookup for this type
181
- # @return [GraphQL::Field, nil]
182
- def get_field(name)
183
- nil
184
- end
185
-
186
- # During schema definition, types can be defined inside procs or as strings.
187
- # This function converts it to a type instance
188
- # @return [GraphQL::BaseType]
189
- def self.resolve_related_type(type_arg)
190
- case type_arg
191
- when Proc
192
- # lazy-eval it, then try again
193
- resolve_related_type(type_arg.call)
194
- when String
195
- # Get a constant by this name
196
- resolve_related_type(Object.const_get(type_arg))
197
- else
198
- if type_arg.respond_to?(:graphql_definition)
199
- type_arg.graphql_definition(silence_deprecation_warning: true)
200
- else
201
- type_arg
202
- end
203
- end
204
- end
205
-
206
- # Return a GraphQL string for the type definition
207
- # @param schema [GraphQL::Schema]
208
- # @param printer [GraphQL::Schema::Printer]
209
- # @see {GraphQL::Schema::Printer#initialize for additional options}
210
- # @return [String] type definition
211
- def to_definition(schema, printer: nil, **args)
212
- printer ||= GraphQL::Schema::Printer.new(schema, **args)
213
- printer.print_type(self)
214
- end
215
-
216
- # Returns true if this is a non-nullable type. A nullable list of non-nullables is considered nullable.
217
- def non_null?
218
- false
219
- end
220
-
221
- # Returns true if this is a list type. A non-nullable list is considered a list.
222
- def list?
223
- false
224
- end
225
-
226
- private
227
-
228
- def warn_deprecated_coerce(alt_method_name)
229
- GraphQL::Deprecation.warn("Coercing without a context is deprecated; use `#{alt_method_name}` if you don't want context-awareness")
230
- end
231
- end
232
- end
@@ -1,2 +0,0 @@
1
- # frozen_string_literal: true
2
- GraphQL::BOOLEAN_TYPE = GraphQL::Types::Boolean.graphql_definition(silence_deprecation_warning: true)
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Compatibility
4
- module ExecutionSpecification
5
- module CounterSchema
6
- def self.build(execution_strategy)
7
- counter_type = nil
8
- schema = nil
9
-
10
- has_count_interface = GraphQL::InterfaceType.define do
11
- name "HasCount"
12
- field :count, types.Int
13
- field :counter, ->{ has_count_interface }
14
- end
15
-
16
- counter_type = GraphQL::ObjectType.define do
17
- name "Counter"
18
- interfaces [has_count_interface]
19
- field :count, types.Int, resolve: ->(o,a,c) { schema.metadata[:count] += 1 }
20
- field :counter, has_count_interface, resolve: ->(o,a,c) { :counter }
21
- end
22
-
23
- alt_counter_type = GraphQL::ObjectType.define do
24
- name "AltCounter"
25
- interfaces [has_count_interface]
26
- field :count, types.Int, resolve: ->(o,a,c) { schema.metadata[:count] += 1 }
27
- field :counter, has_count_interface, resolve: ->(o,a,c) { :counter }
28
- end
29
-
30
- has_counter_interface = GraphQL::InterfaceType.define do
31
- name "HasCounter"
32
- field :counter, has_count_interface
33
- end
34
-
35
- query_type = GraphQL::ObjectType.define do
36
- name "Query"
37
- interfaces [has_counter_interface]
38
- field :counter, has_count_interface, resolve: ->(o,a,c) { :counter }
39
- end
40
-
41
- schema = GraphQL::Schema.define(
42
- query: query_type,
43
- resolve_type: ->(t, o, c) { o == :counter ? counter_type : nil },
44
- orphan_types: [alt_counter_type, counter_type],
45
- query_execution_strategy: execution_strategy,
46
- )
47
- schema.metadata[:count] = 0
48
- schema
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,200 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Compatibility
4
- module ExecutionSpecification
5
- module SpecificationSchema
6
- BOGUS_NODE = OpenStruct.new({ bogus: true })
7
-
8
- DATA = {
9
- "1001" => OpenStruct.new({
10
- name: "Fannie Lou Hamer",
11
- birthdate: Time.new(1917, 10, 6),
12
- organization_ids: [],
13
- }),
14
- "1002" => OpenStruct.new({
15
- name: "John Lewis",
16
- birthdate: Time.new(1940, 2, 21),
17
- organization_ids: ["2001"],
18
- }),
19
- "1003" => OpenStruct.new({
20
- name: "Diane Nash",
21
- birthdate: Time.new(1938, 5, 15),
22
- organization_ids: ["2001", "2002"],
23
- }),
24
- "1004" => OpenStruct.new({
25
- name: "Ralph Abernathy",
26
- birthdate: Time.new(1926, 3, 11),
27
- organization_ids: ["2002"],
28
- }),
29
- "2001" => OpenStruct.new({
30
- name: "SNCC",
31
- leader_id: nil, # fail on purpose
32
- }),
33
- "2002" => OpenStruct.new({
34
- name: "SCLC",
35
- leader_id: "1004",
36
- }),
37
- "2003" => BOGUS_NODE,
38
- }
39
-
40
- # A list object must implement #each
41
- class CustomCollection
42
- def initialize(storage)
43
- @storage = storage
44
- end
45
-
46
- def each(&block)
47
- @storage.each(&block)
48
- end
49
- end
50
-
51
- module TestMiddleware
52
- def self.call(parent_type, parent_object, field_definition, field_args, query_context, &next_middleware)
53
- query_context[:middleware_log] && query_context[:middleware_log] << field_definition.name
54
- next_middleware.call
55
- end
56
- end
57
-
58
- def self.build(execution_strategy)
59
- organization_type = nil
60
-
61
- timestamp_type = GraphQL::ScalarType.define do
62
- name "Timestamp"
63
- coerce_input ->(value, _ctx) { Time.at(value.to_i) }
64
- coerce_result ->(value, _ctx) { value.to_i }
65
- end
66
-
67
- named_entity_interface_type = GraphQL::InterfaceType.define do
68
- name "NamedEntity"
69
- field :name, !types.String
70
- end
71
-
72
- person_type = GraphQL::ObjectType.define do
73
- name "Person"
74
- interfaces [named_entity_interface_type]
75
- field :name, !types.String
76
- field :birthdate, timestamp_type
77
- field :age, types.Int do
78
- argument :on, !timestamp_type
79
- resolve ->(obj, args, ctx) {
80
- if obj.birthdate.nil?
81
- nil
82
- else
83
- age_on = args[:on]
84
- age_years = age_on.year - obj.birthdate.year
85
- this_year_birthday = Time.new(age_on.year, obj.birthdate.month, obj.birthdate.day)
86
- if this_year_birthday > age_on
87
- age_years -= 1
88
- end
89
- end
90
- age_years
91
- }
92
- end
93
- field :organizations, types[organization_type] do
94
- resolve ->(obj, args, ctx) {
95
- CustomCollection.new(obj.organization_ids.map { |id| DATA[id] })
96
- }
97
- end
98
- field :first_organization, !organization_type do
99
- resolve ->(obj, args, ctx) {
100
- DATA[obj.organization_ids.first]
101
- }
102
- end
103
- end
104
-
105
- organization_type = GraphQL::ObjectType.define do
106
- name "Organization"
107
- interfaces [named_entity_interface_type]
108
- field :name, !types.String
109
- field :leader, !person_type do
110
- resolve ->(obj, args, ctx) {
111
- DATA[obj.leader_id] || (ctx[:return_error] ? ExecutionError.new("Error on Nullable") : nil)
112
- }
113
- end
114
- field :returnedError, types.String do
115
- resolve ->(o, a, c) {
116
- GraphQL::ExecutionError.new("This error was returned")
117
- }
118
- end
119
- field :raisedError, types.String do
120
- resolve ->(o, a, c) {
121
- raise GraphQL::ExecutionError.new("This error was raised")
122
- }
123
- end
124
-
125
- field :nodePresence, !types[!types.Boolean] do
126
- resolve ->(o, a, ctx) {
127
- [
128
- ctx.irep_node.is_a?(GraphQL::InternalRepresentation::Node),
129
- ctx.ast_node.is_a?(GraphQL::Language::Nodes::AbstractNode),
130
- false, # just testing
131
- ]
132
- }
133
- end
134
- end
135
-
136
- node_union_type = GraphQL::UnionType.define do
137
- name "Node"
138
- possible_types [person_type, organization_type]
139
- end
140
-
141
- query_type = GraphQL::ObjectType.define do
142
- name "Query"
143
- field :node, node_union_type do
144
- argument :id, !types.ID
145
- resolve ->(obj, args, ctx) {
146
- obj[args[:id]]
147
- }
148
- end
149
-
150
- field :requiredNode, node_union_type.to_non_null_type do
151
- argument :id, !types.ID
152
- resolve ->(obj, args, ctx) {
153
- obj[args[:id]]
154
- }
155
- end
156
-
157
- field :organization, !organization_type do
158
- argument :id, !types.ID
159
- resolve ->(obj, args, ctx) {
160
- if args[:id].start_with?("2")
161
- obj[args[:id]]
162
- else
163
- # test context.skip
164
- ctx.skip
165
- end
166
- }
167
- end
168
-
169
- field :organizations, types[organization_type] do
170
- resolve ->(obj, args, ctx) {
171
- [obj["2001"], obj["2002"]]
172
- }
173
- end
174
- end
175
-
176
- GraphQL::Schema.define do
177
- query_execution_strategy execution_strategy
178
- query query_type
179
-
180
- resolve_type ->(type, obj, ctx) {
181
- if obj.respond_to?(:birthdate)
182
- person_type
183
- elsif obj.respond_to?(:leader_id)
184
- organization_type
185
- else
186
- nil
187
- end
188
- }
189
-
190
- type_error ->(err, ctx) {
191
- ctx[:type_errors] && (ctx[:type_errors] << err.value)
192
- ctx[:gobble] || GraphQL::Schema::DefaultTypeError.call(err, ctx)
193
- }
194
- middleware(TestMiddleware)
195
- end
196
- end
197
- end
198
- end
199
- end
200
- end