apollo-federation 3.7.0 → 3.8.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 +4 -4
- data/CHANGELOG.md +16 -0
- data/README.md +28 -1
- data/lib/apollo-federation/entities_field.rb +24 -12
- data/lib/apollo-federation/object.rb +12 -0
- data/lib/apollo-federation/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea55be797646c3f816a4f83e134bed0fd3cf3ee1cd7ce30cda45e88513385a75
|
4
|
+
data.tar.gz: 271cb2c2d084ae1499e1974de9d06035701a4d356781a0a7cfc49bf4c0eb88d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58f93ab4cb85ddac1f2e537dd83d25e9fe88e174c43c4c7d864ee6e2b16858d510dd79f36b246ac6bfda27bef7a940ea2840c414f613ca92e5bb7d63f1cec9b1
|
7
|
+
data.tar.gz: 36f9fd3a2259508d896d8bb42f0e187bacfe628bcfdf8d88ac1effc10f62bf465da5c4a6ff38dd5c682527cf1c710becd6f8c5c2d27c6883801b396b04d55725
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
# [3.8.0](https://github.com/Gusto/apollo-federation-ruby/compare/v3.7.1...v3.8.0) (2023-06-02)
|
2
|
+
|
3
|
+
|
4
|
+
### Features
|
5
|
+
|
6
|
+
* optionally underscore _Any keys ([#248](https://github.com/Gusto/apollo-federation-ruby/issues/248)) ([f1688e7](https://github.com/Gusto/apollo-federation-ruby/commit/f1688e793ba08195a06ddad74d84f2858dcdfcdf))
|
7
|
+
|
8
|
+
## [3.7.1](https://github.com/Gusto/apollo-federation-ruby/compare/v3.7.0...v3.7.1) (2023-06-01)
|
9
|
+
|
10
|
+
|
11
|
+
### Bug Fixes
|
12
|
+
|
13
|
+
* handle lazy `resolve_references` return values ([#250](https://github.com/Gusto/apollo-federation-ruby/issues/250)) ([e29b155](https://github.com/Gusto/apollo-federation-ruby/commit/e29b15550d48093c6ed5b73dabb8206a3e9463b0))
|
14
|
+
* handle lazy `resolve_references` return values ([#250](https://github.com/Gusto/apollo-federation-ruby/issues/250)) ([1614440](https://github.com/Gusto/apollo-federation-ruby/commit/16144402d32de3d5016023b87fc2b949364761f5))
|
15
|
+
* handle lazy resolve_references return values ([#250](https://github.com/Gusto/apollo-federation-ruby/issues/250)) ([fa72465](https://github.com/Gusto/apollo-federation-ruby/commit/fa72465bd5f1d38f3556b748b905f16f932829ac))
|
16
|
+
|
1
17
|
# [3.7.0](https://github.com/Gusto/apollo-federation-ruby/compare/v3.6.9...v3.7.0) (2023-05-26)
|
2
18
|
|
3
19
|
|
data/README.md
CHANGED
@@ -325,12 +325,39 @@ Define a `resolve_reference` class method on your object. The method will be pas
|
|
325
325
|
|
326
326
|
```ruby
|
327
327
|
class User < BaseObject
|
328
|
+
key fields: :user_id
|
329
|
+
field :user_id, ID, null: false
|
330
|
+
|
328
331
|
def self.resolve_reference(reference, context)
|
329
|
-
USERS.find { |user| user[:
|
332
|
+
USERS.find { |user| user[:userId] == reference[:userId] }
|
330
333
|
end
|
331
334
|
end
|
332
335
|
```
|
333
336
|
|
337
|
+
To maintain backwards compatibility, by default, reference hash keys are camelcase. They can be underscored by setting `underscore_reference_keys` on your entity class. In order to maintain consistency with GraphQL Ruby, we may change the keys to be underscored by default in a future major release.
|
338
|
+
|
339
|
+
```ruby
|
340
|
+
class User < BaseObject
|
341
|
+
key fields: :user_id
|
342
|
+
field :user_id, ID, null: false
|
343
|
+
underscore_reference_keys true
|
344
|
+
|
345
|
+
def self.resolve_reference(reference, context)
|
346
|
+
USERS.find { |user| user[:user_id] == reference[:user_id] }
|
347
|
+
end
|
348
|
+
end
|
349
|
+
```
|
350
|
+
Alternatively you can change the default for your project by setting `underscore_reference_keys` on `BaseObject`:
|
351
|
+
|
352
|
+
```ruby
|
353
|
+
class BaseObject < GraphQL::Schema::Object
|
354
|
+
include ApolloFederation::Object
|
355
|
+
|
356
|
+
field_class BaseField
|
357
|
+
underscore_reference_keys true
|
358
|
+
end
|
359
|
+
```
|
360
|
+
|
334
361
|
### Tracing
|
335
362
|
|
336
363
|
To support [federated tracing](https://www.apollographql.com/docs/apollo-server/federation/metrics/):
|
@@ -34,7 +34,7 @@ module ApolloFederation
|
|
34
34
|
.with_index { |r, i| [r, i] }
|
35
35
|
.group_by { |(r, _i)| r[:__typename] }
|
36
36
|
|
37
|
-
grouped_references_with_indices.
|
37
|
+
maybe_lazies = grouped_references_with_indices.map do |typename, references_with_indices|
|
38
38
|
references = references_with_indices.map(&:first)
|
39
39
|
indices = references_with_indices.map(&:last)
|
40
40
|
|
@@ -49,6 +49,14 @@ module ApolloFederation
|
|
49
49
|
# TODO: What if the type is an interface?
|
50
50
|
type_class = class_of_type(type)
|
51
51
|
|
52
|
+
if type_class.underscore_reference_keys
|
53
|
+
references.map! do |reference|
|
54
|
+
reference.transform_keys do |key|
|
55
|
+
GraphQL::Schema::Member::BuildType.underscore(key.to_s).to_sym
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
52
60
|
if type_class.respond_to?(:resolve_references)
|
53
61
|
results = type_class.resolve_references(references, context)
|
54
62
|
elsif type_class.respond_to?(:resolve_reference)
|
@@ -57,21 +65,25 @@ module ApolloFederation
|
|
57
65
|
results = references
|
58
66
|
end
|
59
67
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
68
|
+
context.schema.after_lazy(results) do |resolved_results|
|
69
|
+
resolved_results.zip(indices).each do |result, i|
|
70
|
+
final_result[i] = context.schema.after_lazy(result) do |resolved_value|
|
71
|
+
# TODO: This isn't 100% correct: if (for some reason) 2 different resolve_reference
|
72
|
+
# calls return the same object, it might not have the right type
|
73
|
+
# Right now, apollo-federation just adds a __typename property to the result,
|
74
|
+
# but I don't really like the idea of modifying the resolved object
|
75
|
+
context[resolved_value] = type
|
76
|
+
resolved_value
|
77
|
+
end
|
70
78
|
end
|
71
79
|
end
|
72
80
|
end
|
73
81
|
|
74
|
-
|
82
|
+
# Make sure we've resolved the outer level of lazies so we can return an array with a possibly lazy
|
83
|
+
# entry for each requested entity
|
84
|
+
GraphQL::Execution::Lazy.all(maybe_lazies).then do
|
85
|
+
final_result
|
86
|
+
end
|
75
87
|
end
|
76
88
|
|
77
89
|
private
|
@@ -43,6 +43,18 @@ module ApolloFederation
|
|
43
43
|
arguments: arguments,
|
44
44
|
)
|
45
45
|
end
|
46
|
+
|
47
|
+
def underscore_reference_keys(value = nil)
|
48
|
+
if value.nil?
|
49
|
+
if @underscore_reference_keys.nil?
|
50
|
+
find_inherited_value(:underscore_reference_keys, false)
|
51
|
+
else
|
52
|
+
@underscore_reference_keys
|
53
|
+
end
|
54
|
+
else
|
55
|
+
@underscore_reference_keys = value
|
56
|
+
end
|
57
|
+
end
|
46
58
|
end
|
47
59
|
end
|
48
60
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apollo-federation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Noa Elad
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-06-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: graphql
|