graphql 2.4.7 → 2.4.9

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/backtrace/table.rb +95 -55
  3. data/lib/graphql/backtrace.rb +1 -19
  4. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +11 -4
  5. data/lib/graphql/execution/interpreter/runtime.rb +34 -26
  6. data/lib/graphql/execution/interpreter.rb +3 -1
  7. data/lib/graphql/execution/multiplex.rb +0 -4
  8. data/lib/graphql/introspection/directive_location_enum.rb +1 -1
  9. data/lib/graphql/query.rb +0 -8
  10. data/lib/graphql/schema/build_from_definition.rb +1 -0
  11. data/lib/graphql/schema/enum.rb +21 -1
  12. data/lib/graphql/schema/resolver.rb +1 -0
  13. data/lib/graphql/schema/subscription.rb +50 -4
  14. data/lib/graphql/schema/validator/required_validator.rb +23 -6
  15. data/lib/graphql/schema/visibility/profile.rb +1 -1
  16. data/lib/graphql/schema.rb +8 -24
  17. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +12 -10
  18. data/lib/graphql/subscriptions/event.rb +12 -1
  19. data/lib/graphql/subscriptions/serialize.rb +1 -3
  20. data/lib/graphql/tracing/active_support_notifications_trace.rb +1 -1
  21. data/lib/graphql/tracing/active_support_notifications_tracing.rb +1 -1
  22. data/lib/graphql/tracing/appoptics_trace.rb +2 -0
  23. data/lib/graphql/tracing/appoptics_tracing.rb +2 -0
  24. data/lib/graphql/tracing/appsignal_trace.rb +2 -0
  25. data/lib/graphql/tracing/appsignal_tracing.rb +2 -0
  26. data/lib/graphql/tracing/call_legacy_tracers.rb +66 -0
  27. data/lib/graphql/tracing/data_dog_trace.rb +2 -0
  28. data/lib/graphql/tracing/data_dog_tracing.rb +2 -0
  29. data/lib/graphql/tracing/legacy_hooks_trace.rb +1 -0
  30. data/lib/graphql/tracing/legacy_trace.rb +4 -61
  31. data/lib/graphql/tracing/new_relic_trace.rb +2 -0
  32. data/lib/graphql/tracing/new_relic_tracing.rb +2 -0
  33. data/lib/graphql/tracing/notifications_tracing.rb +2 -0
  34. data/lib/graphql/tracing/null_trace.rb +9 -0
  35. data/lib/graphql/tracing/prometheus_trace/graphql_collector.rb +2 -0
  36. data/lib/graphql/tracing/prometheus_trace.rb +5 -0
  37. data/lib/graphql/tracing/prometheus_tracing.rb +2 -0
  38. data/lib/graphql/tracing/scout_trace.rb +2 -0
  39. data/lib/graphql/tracing/scout_tracing.rb +2 -0
  40. data/lib/graphql/tracing/sentry_trace.rb +2 -0
  41. data/lib/graphql/tracing/statsd_trace.rb +2 -0
  42. data/lib/graphql/tracing/statsd_tracing.rb +2 -0
  43. data/lib/graphql/tracing/trace.rb +4 -1
  44. data/lib/graphql/tracing.rb +28 -30
  45. data/lib/graphql/version.rb +1 -1
  46. metadata +103 -9
  47. data/lib/graphql/backtrace/inspect_result.rb +0 -38
  48. data/lib/graphql/backtrace/trace.rb +0 -93
  49. data/lib/graphql/backtrace/tracer.rb +0 -80
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.7
4
+ version: 2.4.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Mosolgo
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-12-07 00:00:00.000000000 Z
10
+ date: 2025-01-29 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: base64
@@ -38,6 +37,20 @@ dependencies:
38
37
  - - ">="
39
38
  - !ruby/object:Gem::Version
40
39
  version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: logger
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
41
54
  - !ruby/object:Gem::Dependency
42
55
  name: benchmark-ips
43
56
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +191,76 @@ dependencies:
178
191
  - - ">="
179
192
  - !ruby/object:Gem::Version
180
193
  version: '0'
194
+ - !ruby/object:Gem::Dependency
195
+ name: simplecov
196
+ requirement: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ type: :development
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ - !ruby/object:Gem::Dependency
209
+ name: simplecov-lcov
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ type: :development
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: undercover
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ type: :development
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ - !ruby/object:Gem::Dependency
237
+ name: pronto
238
+ requirement: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: '0'
243
+ type: :development
244
+ prerelease: false
245
+ version_requirements: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: '0'
250
+ - !ruby/object:Gem::Dependency
251
+ name: pronto-undercover
252
+ requirement: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ version: '0'
257
+ type: :development
258
+ prerelease: false
259
+ version_requirements: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
181
264
  - !ruby/object:Gem::Dependency
182
265
  name: jekyll
183
266
  requirement: !ruby/object:Gem::Requirement
@@ -248,6 +331,20 @@ dependencies:
248
331
  - - "~>"
249
332
  - !ruby/object:Gem::Version
250
333
  version: 1.5.0
334
+ - !ruby/object:Gem::Dependency
335
+ name: mutex_m
336
+ requirement: !ruby/object:Gem::Requirement
337
+ requirements:
338
+ - - ">="
339
+ - !ruby/object:Gem::Version
340
+ version: '0'
341
+ type: :development
342
+ prerelease: false
343
+ version_requirements: !ruby/object:Gem::Requirement
344
+ requirements:
345
+ - - ">="
346
+ - !ruby/object:Gem::Version
347
+ version: '0'
251
348
  - !ruby/object:Gem::Dependency
252
349
  name: webrick
253
350
  requirement: !ruby/object:Gem::Requirement
@@ -330,11 +427,8 @@ files:
330
427
  - lib/graphql/analysis_error.rb
331
428
  - lib/graphql/autoload.rb
332
429
  - lib/graphql/backtrace.rb
333
- - lib/graphql/backtrace/inspect_result.rb
334
430
  - lib/graphql/backtrace/table.rb
335
- - lib/graphql/backtrace/trace.rb
336
431
  - lib/graphql/backtrace/traced_error.rb
337
- - lib/graphql/backtrace/tracer.rb
338
432
  - lib/graphql/coercion_error.rb
339
433
  - lib/graphql/current.rb
340
434
  - lib/graphql/dataloader.rb
@@ -594,6 +688,7 @@ files:
594
688
  - lib/graphql/tracing/appoptics_tracing.rb
595
689
  - lib/graphql/tracing/appsignal_trace.rb
596
690
  - lib/graphql/tracing/appsignal_tracing.rb
691
+ - lib/graphql/tracing/call_legacy_tracers.rb
597
692
  - lib/graphql/tracing/data_dog_trace.rb
598
693
  - lib/graphql/tracing/data_dog_tracing.rb
599
694
  - lib/graphql/tracing/legacy_hooks_trace.rb
@@ -602,6 +697,7 @@ files:
602
697
  - lib/graphql/tracing/new_relic_tracing.rb
603
698
  - lib/graphql/tracing/notifications_trace.rb
604
699
  - lib/graphql/tracing/notifications_tracing.rb
700
+ - lib/graphql/tracing/null_trace.rb
605
701
  - lib/graphql/tracing/platform_trace.rb
606
702
  - lib/graphql/tracing/platform_tracing.rb
607
703
  - lib/graphql/tracing/prometheus_trace.rb
@@ -652,7 +748,6 @@ metadata:
652
748
  bug_tracker_uri: https://github.com/rmosolgo/graphql-ruby/issues
653
749
  mailing_list_uri: https://buttondown.email/graphql-ruby
654
750
  rubygems_mfa_required: 'true'
655
- post_install_message:
656
751
  rdoc_options: []
657
752
  require_paths:
658
753
  - lib
@@ -667,8 +762,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
667
762
  - !ruby/object:Gem::Version
668
763
  version: '0'
669
764
  requirements: []
670
- rubygems_version: 3.5.12
671
- signing_key:
765
+ rubygems_version: 3.6.3
672
766
  specification_version: 4
673
767
  summary: A GraphQL language and runtime for Ruby
674
768
  test_files: []
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Backtrace
4
- module InspectResult
5
- module_function
6
-
7
- def inspect_result(obj)
8
- case obj
9
- when Hash
10
- "{" +
11
- obj.map do |key, val|
12
- "#{key}: #{inspect_truncated(val)}"
13
- end.join(", ") +
14
- "}"
15
- when Array
16
- "[" +
17
- obj.map { |v| inspect_truncated(v) }.join(", ") +
18
- "]"
19
- else
20
- inspect_truncated(obj)
21
- end
22
- end
23
-
24
- def inspect_truncated(obj)
25
- case obj
26
- when Hash
27
- "{...}"
28
- when Array
29
- "[...]"
30
- when GraphQL::Execution::Lazy
31
- "(unresolved)"
32
- else
33
- "#{obj.inspect}"
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,93 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Backtrace
4
- module Trace
5
- def initialize(*args, **kwargs, &block)
6
- @__backtrace_contexts = {}
7
- @__backtrace_last_context = nil
8
- super
9
- end
10
-
11
- def validate(query:, validate:)
12
- if query.multiplex
13
- push_query_backtrace_context(query)
14
- end
15
- super
16
- end
17
-
18
- def analyze_query(query:)
19
- if query.multiplex # missing for stand-alone static validation
20
- push_query_backtrace_context(query)
21
- end
22
- super
23
- end
24
-
25
- def execute_query(query:)
26
- push_query_backtrace_context(query)
27
- super
28
- end
29
-
30
- def execute_query_lazy(query:, multiplex:)
31
- query ||= multiplex.queries.first
32
- push_query_backtrace_context(query)
33
- super
34
- end
35
-
36
- def execute_field(field:, query:, ast_node:, arguments:, object:)
37
- push_field_backtrace_context(field, query, ast_node, arguments, object)
38
- super
39
- end
40
-
41
- def execute_field_lazy(field:, query:, ast_node:, arguments:, object:)
42
- push_field_backtrace_context(field, query, ast_node, arguments, object)
43
- super
44
- end
45
-
46
- def execute_multiplex(multiplex:)
47
- super
48
- rescue StandardError => err
49
- # This is an unhandled error from execution,
50
- # Re-raise it with a GraphQL trace.
51
- potential_context = @__backtrace_last_context
52
- if potential_context.is_a?(GraphQL::Query::Context) ||
53
- potential_context.is_a?(Backtrace::Frame)
54
- raise TracedError.new(err, potential_context)
55
- else
56
- raise
57
- end
58
- end
59
-
60
- private
61
-
62
- def push_query_backtrace_context(query)
63
- push_data = query
64
- push_key = []
65
- @__backtrace_contexts[push_key] = push_data
66
- @__backtrace_last_context = push_data
67
- end
68
-
69
- def push_field_backtrace_context(field, query, ast_node, arguments, object)
70
- push_key = query.context[:current_path]
71
- push_storage = @__backtrace_contexts
72
- parent_frame = push_storage[push_key[0..-2]]
73
-
74
- if parent_frame.is_a?(GraphQL::Query)
75
- parent_frame = parent_frame.context
76
- end
77
-
78
- push_data = Frame.new(
79
- query: query,
80
- path: push_key,
81
- ast_node: ast_node,
82
- field: field,
83
- object: object,
84
- arguments: arguments,
85
- parent_frame: parent_frame,
86
- )
87
- push_storage[push_key] = push_data
88
- @__backtrace_last_context = push_data
89
- end
90
-
91
- end
92
- end
93
- end
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- class Backtrace
4
- # TODO this is not fiber-friendly
5
- module Tracer
6
- module_function
7
-
8
- # Implement the {GraphQL::Tracing} API.
9
- def trace(key, metadata)
10
- case key
11
- when "lex", "parse"
12
- # No context here, don't have a query yet
13
- nil
14
- when "execute_multiplex", "analyze_multiplex"
15
- # No query context yet
16
- nil
17
- when "validate", "analyze_query", "execute_query", "execute_query_lazy"
18
- push_key = []
19
- if (query = metadata[:query]) || ((queries = metadata[:queries]) && (query = queries.first))
20
- push_data = query
21
- multiplex = query.multiplex
22
- elsif (multiplex = metadata[:multiplex])
23
- push_data = multiplex.queries.first
24
- end
25
- when "execute_field", "execute_field_lazy"
26
- query = metadata[:query]
27
- multiplex = query.multiplex
28
- push_key = query.context[:current_path]
29
- parent_frame = multiplex.context[:graphql_backtrace_contexts][push_key[0..-2]]
30
-
31
- if parent_frame.is_a?(GraphQL::Query)
32
- parent_frame = parent_frame.context
33
- end
34
-
35
- push_data = Frame.new(
36
- query: query,
37
- path: push_key,
38
- ast_node: metadata[:ast_node],
39
- field: metadata[:field],
40
- object: metadata[:object],
41
- arguments: metadata[:arguments],
42
- parent_frame: parent_frame,
43
- )
44
- else
45
- # Custom key, no backtrace data for this
46
- nil
47
- end
48
-
49
- if push_data && multiplex
50
- push_storage = multiplex.context[:graphql_backtrace_contexts] ||= {}
51
- push_storage[push_key] = push_data
52
- multiplex.context[:last_graphql_backtrace_context] = push_data
53
- end
54
-
55
- if key == "execute_multiplex"
56
- multiplex_context = metadata[:multiplex].context
57
- begin
58
- yield
59
- rescue StandardError => err
60
- # This is an unhandled error from execution,
61
- # Re-raise it with a GraphQL trace.
62
- potential_context = multiplex_context[:last_graphql_backtrace_context]
63
-
64
- if potential_context.is_a?(GraphQL::Query::Context) ||
65
- potential_context.is_a?(Backtrace::Frame)
66
- raise TracedError.new(err, potential_context)
67
- else
68
- raise
69
- end
70
- ensure
71
- multiplex_context.delete(:graphql_backtrace_contexts)
72
- multiplex_context.delete(:last_graphql_backtrace_context)
73
- end
74
- else
75
- yield
76
- end
77
- end
78
- end
79
- end
80
- end