graphql 2.5.24 → 2.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: edd07077eba1bb80e09f60cefbb284c8f3d520c89f515708e62a1ea63e10eeee
4
- data.tar.gz: 921a1370ea598626b4248ea8723f0361550686d3eabd39b9fb8d234642c7b5dd
3
+ metadata.gz: 73ce16b1c358f4ab02c2d2d00e3a2a6b58a36ec2ca2d3012026ef5e346976b15
4
+ data.tar.gz: 8608b2cb12777e9d53c26508fb592a4c71bd733973e80608fa0010f46933d714
5
5
  SHA512:
6
- metadata.gz: 68dd9c0b0d92d1787dfc76a163d2a057377466246814e694c021cb2a9e994d04974369b74cdb591db7581cc2987e0527e86073554669a77cc9c3be07dfa4c68a
7
- data.tar.gz: ab56518a1d21932d0a9026e76340e9fc4b5d3088c3e002ddc002c6afec4171a86b9778a0f82878ead52d57ac8ea950b0a7aa68cf67aa54a77b600f7cd45d1eca
6
+ metadata.gz: ee646816ac6503e2a50e601b8bcde6750409fb7bb34dd3395e7a6ba36cfc7f86ba2cd4a07b1a300b9f15d480d5a40e1e681b6a54a8355201997bff1ac3675566
7
+ data.tar.gz: c7f5679d27b0c4141feb01b2b15a5e04bdf5e77c3ef940d5c0cc8ecdcec995ef2e47657f8b2838ea317c639b9be628fd57c4224864b6b754207f18c4d9087b51
@@ -99,6 +99,16 @@ module GraphQL
99
99
  # It's possible that this was already loaded by the directives
100
100
  prev_type = types[definition.name]
101
101
  if prev_type.nil? || prev_type.is_a?(Schema::LateBoundType)
102
+ if definition.is_a?(GraphQL::Language::Nodes::ObjectTypeDefinition) || definition.is_a?(Language::Nodes::InterfaceTypeDefinition)
103
+ interface_names = definition.interfaces.map(&:name)
104
+ transitive_names = interface_names.map { |n| document.definitions.find { |d| d.respond_to?(:name) && d.name == n }&.interfaces&.map(&:name) }
105
+ transitive_names.flatten!
106
+ transitive_names.compact!
107
+ if !(missing_transitive_interfaces = transitive_names - interface_names).empty?
108
+ raise GraphQL::Schema::InvalidDocumentError, "type #{definition.name} is missing one or more transitive interface names: #{missing_transitive_interfaces.join(", ")}. Add them to the type's `implements` list and try again."
109
+ end
110
+ end
111
+
102
112
  types[definition.name] = build_definition_from_node(definition, type_resolver, default_resolve, base_types)
103
113
  end
104
114
  end
@@ -132,7 +132,7 @@ module GraphQL
132
132
  # @yieldparam memo [Object] Any extension-specific value which will be passed to {#after_resolve} later
133
133
  # @return [Object] The return value for this field.
134
134
  def resolve(object: nil, objects: nil, arguments:, context:)
135
- yield(object || objects, arguments, nil)
135
+ yield(object.nil? ? objects : object, arguments, nil)
136
136
  end
137
137
 
138
138
  # Called after {#field} was resolved, and after any lazy values (like `Promise`s) were synced,
@@ -149,7 +149,7 @@ module GraphQL
149
149
  # @param memo [Object] The third value yielded by {#resolve}, or `nil` if there wasn't one
150
150
  # @return [Object] The return value for this field.
151
151
  def after_resolve(object: nil, objects: nil, arguments:, context:, values: nil, value: nil, memo:)
152
- value || values
152
+ value.nil? ? values : value
153
153
  end
154
154
  end
155
155
  end
@@ -66,14 +66,31 @@ module GraphQL
66
66
  q = context.query
67
67
  trace_objs = [object]
68
68
  q.current_trace.begin_execute_field(field, @prepared_arguments, trace_objs, q)
69
- begin
70
- is_authed, new_return_value = authorized?(**@prepared_arguments)
71
- rescue GraphQL::UnauthorizedError => err
72
- new_return_value = q.schema.unauthorized_object(err)
73
- is_authed = true # the error was handled
69
+ is_ready = ready?(**@prepared_arguments)
70
+ runner = @field_resolve_step.runner
71
+ if runner.resolves_lazies && runner.schema.lazy?(is_ready)
72
+ is_ready, new_return_value = runner.schema.sync_lazy(is_ready)
74
73
  end
75
74
 
76
- if (runner = @field_resolve_step.runner).resolves_lazies && runner.schema.lazy?(is_authed)
75
+ if is_ready.is_a?(Array)
76
+ is_ready, new_return_value = is_ready
77
+ if is_ready != false
78
+ raise "Unexpected result from #ready? (expected `true`, `false` or `[false, {...}]`): [#{is_ready.inspect}, #{new_return_value.inspect}]"
79
+ else
80
+ new_return_value
81
+ end
82
+ end
83
+
84
+ if is_ready
85
+ begin
86
+ is_authed, new_return_value = authorized?(**@prepared_arguments)
87
+ rescue GraphQL::UnauthorizedError => err
88
+ new_return_value = q.schema.unauthorized_object(err)
89
+ is_authed = true # the error was handled
90
+ end
91
+ end
92
+
93
+ if runner.resolves_lazies && runner.schema.lazy?(is_authed)
77
94
  is_authed, new_return_value = runner.schema.sync_lazy(is_authed)
78
95
  end
79
96
 
@@ -93,7 +110,13 @@ module GraphQL
93
110
  q = context.query
94
111
  q.current_trace.end_execute_field(field, @prepared_arguments, trace_objs, q, [result])
95
112
  exec_result[exec_index] = result
96
- rescue RuntimeError => err
113
+ rescue GraphQL::UnauthorizedError => auth_err
114
+ exec_result[exec_index] = begin
115
+ context.schema.unauthorized_object(auth_err)
116
+ rescue GraphQL::ExecutionError => exec_err
117
+ exec_err
118
+ end
119
+ rescue GraphQL::RuntimeError => err
97
120
  exec_result[exec_index] = err
98
121
  rescue StandardError => stderr
99
122
  exec_result[exec_index] = begin
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
- VERSION = "2.5.24"
3
+ VERSION = "2.6.0"
4
4
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.24
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Mosolgo
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-04-23 00:00:00.000000000 Z
10
+ date: 2026-04-24 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: base64