apollo-federation 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ec8b363ade4047069cbbf7774e3fc88b93c4e9b61ae8ca0e5baf60e6ca0f488
4
- data.tar.gz: 73866b38229feea6644ed23ce2ac9adad4cf9c2fb760f4426e519ec317afc256
3
+ metadata.gz: 2c2b2d12a9e6be8b64cbd27aa7f0188975a49398538acab0bbb2881e9919651c
4
+ data.tar.gz: 614b16aed66cfdb99ee667647f020a33a537517cd4a9691e873b449b31aea57d
5
5
  SHA512:
6
- metadata.gz: 03d6d4e2dcc6243ca7e05c40225b0b3c8516d777ef2c9ba37516ab0fde3dd8a0c61e7872526be323a47e7c1ce908fe490547bb66ad300985e04dbd047879fa5e
7
- data.tar.gz: 924c9aae3668493d09559173a7d073aaf751fffad84df0958a6de9e4e4bfcebd984e4ba77cb5e06d8a1add6760271c075574f46c91e5f7c38f68bdb274f4e1be
6
+ metadata.gz: 7c0f879370628f7377b1b9646536c945974e494eb6602eb0f1adbc7d9471cd69641430b682f7892da330d32ec9d5a9e984518be5c7830ee0d4ae2c8e97cc94e8
7
+ data.tar.gz: bcbae55863980b44a39a8ba62d0eee3ead96052a2245a5a6c28105754b18e7c55e45deb6e04e1907fdd58bd00c6612eb9176b40ffd0ad883295076533facf084
data/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ # [2.1.0](https://github.com/Gusto/apollo-federation-ruby/compare/v2.0.3...v2.1.0) (2022-02-02)
2
+
3
+
4
+ ### Features
5
+
6
+ * snake case field references ([f5506ae](https://github.com/Gusto/apollo-federation-ruby/commit/f5506aecd10ea0c4a72744be07e0a9ad5cd45b16))
7
+
8
+ ## [2.0.3](https://github.com/Gusto/apollo-federation-ruby/compare/v2.0.2...v2.0.3) (2022-02-02)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * Attempt to remove platform specific lock on google-protobuf ([#171](https://github.com/Gusto/apollo-federation-ruby/issues/171)) ([7898c28](https://github.com/Gusto/apollo-federation-ruby/commit/7898c2851aca06f08fa2559652375769bb98dfd8))
14
+
15
+ ## [2.0.2](https://github.com/Gusto/apollo-federation-ruby/compare/v2.0.1...v2.0.2) (2022-01-31)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * Use `bundle install` to avoid `bundle check` that changes our lockfiles ([#170](https://github.com/Gusto/apollo-federation-ruby/issues/170)) ([5c89ff1](https://github.com/Gusto/apollo-federation-ruby/commit/5c89ff1545dd1e6668fcdcf5b6fa89188cbb3ab4))
21
+
22
+ ## [2.0.1](https://github.com/Gusto/apollo-federation-ruby/compare/v2.0.0...v2.0.1) (2022-01-27)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * Update to latest Ruby 2.6 image ([#167](https://github.com/Gusto/apollo-federation-ruby/issues/167)) ([f57d523](https://github.com/Gusto/apollo-federation-ruby/commit/f57d523c36274d5f729bc724ab0f86474f7c0f73))
28
+
1
29
  # [2.0.0](https://github.com/Gusto/apollo-federation-ruby/compare/v1.1.5...v2.0.0) (2022-01-27)
2
30
 
3
31
 
data/README.md CHANGED
@@ -105,10 +105,20 @@ Call `key` within your class definition:
105
105
 
106
106
  ```ruby
107
107
  class User < BaseObject
108
- key fields: 'id'
108
+ key fields: :id
109
109
  end
110
110
  ```
111
111
 
112
+ Compound keys are also supported:
113
+
114
+ ```ruby
115
+ class User < BaseObject
116
+ key fields: [:id, { organization: :id }]
117
+ end
118
+ ```
119
+
120
+ See [field set syntax](#field-set-syntax) for more details on the format of the `fields` option.
121
+
112
122
  ### The `@external` directive
113
123
 
114
124
  [Apollo documentation](https://www.apollographql.com/docs/apollo-server/federation/core-concepts/#referencing-external-types)
@@ -131,10 +141,12 @@ Pass the `requires:` option to your field definition:
131
141
  class Product < BaseObject
132
142
  field :price, Int, null: true, external: true
133
143
  field :weight, Int, null: true, external: true
134
- field :shipping_estimate, Int, null: true, requires: { fields: "price weight"}
144
+ field :shipping_estimate, Int, null: true, requires: { fields: [:price, :weight] }
135
145
  end
136
146
  ```
137
147
 
148
+ See [field set syntax](#field-set-syntax) for more details on the format of the `fields` option.
149
+
138
150
  ### The `@provides` directive
139
151
 
140
152
  [Apollo documentation](https://www.apollographql.com/docs/apollo-server/federation/advanced-features/#using-denormalized-data)
@@ -143,9 +155,25 @@ Pass the `provides:` option to your field definition:
143
155
 
144
156
  ```ruby
145
157
  class Review < BaseObject
146
- field :author, 'User', null: true, provides: { fields: 'username' }
158
+ field :author, 'User', null: true, provides: { fields: :username }
147
159
  end
148
160
  ```
161
+ See [field set syntax](#field-set-syntax) for more details on the format of the `fields` option.
162
+
163
+ ### Field set syntax
164
+
165
+ Field sets can be either strings encoded with the Apollo Field Set [syntax]((https://www.apollographql.com/docs/apollo-server/federation/federation-spec/#scalar-_fieldset)) or arrays, hashes and snake case symbols that follow the graphql-ruby conventions:
166
+
167
+ ```ruby
168
+ # Equivalent to the "organizationId" field set
169
+ :organization_id
170
+
171
+ # Equivalent to the "price weight" field set
172
+ [:price, :weight]
173
+
174
+ # Equivalent to the "id organization { id }" field set
175
+ [:id, { organization: :id }]
176
+ ```
149
177
 
150
178
  ### Reference resolvers
151
179
 
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'apollo-federation/field_set_serializer'
3
4
  require 'apollo-federation/has_directives'
4
5
 
5
6
  module ApolloFederation
@@ -15,7 +16,7 @@ module ApolloFederation
15
16
  name: 'requires',
16
17
  arguments: [
17
18
  name: 'fields',
18
- values: requires[:fields],
19
+ values: ApolloFederation::FieldSetSerializer.serialize(requires[:fields]),
19
20
  ],
20
21
  )
21
22
  end
@@ -24,7 +25,7 @@ module ApolloFederation
24
25
  name: 'provides',
25
26
  arguments: [
26
27
  name: 'fields',
27
- values: provides[:fields],
28
+ values: ApolloFederation::FieldSetSerializer.serialize(provides[:fields]),
28
29
  ],
29
30
  )
30
31
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'graphql'
4
+
5
+ module ApolloFederation
6
+ module FieldSetSerializer
7
+ extend self
8
+
9
+ def serialize(fields)
10
+ case fields
11
+ when Hash
12
+ fields.map do |field, nested_selections|
13
+ "#{camelize(field)} { #{serialize(nested_selections)} }"
14
+ end.join(' ')
15
+ when Array
16
+ fields.map do |field|
17
+ serialize(field)
18
+ end.join(' ')
19
+ when String
20
+ fields
21
+ when Symbol
22
+ camelize(fields)
23
+ else
24
+ raise ArgumentError, "Unexpected field set type: #{fields.class}"
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def camelize(field)
31
+ GraphQL::Schema::Member::BuildType.camelize(field.to_s)
32
+ end
33
+ end
34
+ end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'apollo-federation/field_set_serializer'
3
4
  require 'apollo-federation/has_directives'
4
5
 
5
6
  module ApolloFederation
@@ -22,7 +23,7 @@ module ApolloFederation
22
23
  name: 'key',
23
24
  arguments: [
24
25
  name: 'fields',
25
- values: fields,
26
+ values: ApolloFederation::FieldSetSerializer.serialize(fields),
26
27
  ],
27
28
  )
28
29
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'apollo-federation/field_set_serializer'
3
4
  require 'apollo-federation/has_directives'
4
5
 
5
6
  module ApolloFederation
@@ -20,7 +21,7 @@ module ApolloFederation
20
21
  name: 'key',
21
22
  arguments: [
22
23
  name: 'fields',
23
- values: fields,
24
+ values: ApolloFederation::FieldSetSerializer.serialize(fields),
24
25
  ],
25
26
  )
26
27
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ApolloFederation
4
- VERSION = '2.0.0'
4
+ VERSION = '2.1.0'
5
5
  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: 2.0.0
4
+ version: 2.1.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: 2022-01-27 00:00:00.000000000 Z
12
+ date: 2022-02-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: graphql
@@ -31,14 +31,14 @@ dependencies:
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 3.13.0
34
+ version: '3.19'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 3.13.0
41
+ version: '3.19'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: actionpack
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -198,6 +198,7 @@ files:
198
198
  - lib/apollo-federation/entity.rb
199
199
  - lib/apollo-federation/federated_document_from_schema_definition.rb
200
200
  - lib/apollo-federation/field.rb
201
+ - lib/apollo-federation/field_set_serializer.rb
201
202
  - lib/apollo-federation/has_directives.rb
202
203
  - lib/apollo-federation/interface.rb
203
204
  - lib/apollo-federation/object.rb
@@ -234,7 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
235
  - !ruby/object:Gem::Version
235
236
  version: '0'
236
237
  requirements: []
237
- rubygems_version: 3.0.3.1
238
+ rubygems_version: 3.2.32
238
239
  signing_key:
239
240
  specification_version: 4
240
241
  summary: A Ruby implementation of Apollo Federation