apollo-federation 1.1.2 → 1.1.3

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: 2363ab0739ef4119e0c16d88151e575f664c33d9a66eb2a3c6aa6756770d759c
4
- data.tar.gz: 8ed8b3c011adcecdaaed0f5aebe7a159079c56ea2296878c6c18a93a04f257d4
3
+ metadata.gz: 8eef314d1457da9e7bd70ac5fe92c3d1168dfe340a3ba43a9d0e96475e44f027
4
+ data.tar.gz: 675b88c92096f8d73e240b8c8ab8dc2a5429b0c5d3249c50c74f98f50839a9bf
5
5
  SHA512:
6
- metadata.gz: 5f54f342bb56723f70550b1b0748de3c14191281f3bc1a8d496cc9b893d2c8bbb278bdf58d11f70141fd59ef1710d48d2a8de5b4b98940124edf253d688bf3fa
7
- data.tar.gz: a762847991cda4b9526ca56686991a752fc24d33a5cbeea1a01f2b863ea2667b823fd2f750ac3c40052627c647b1bc70b9395a1e4dae58a25594b0e7f70233ad
6
+ metadata.gz: a5fb6b967baeeb09c89f60d52e7d25bff87966c20abb6f2577487316b3edd96afae6d400de968ecb92a3fd97ae0f06c057c1985e9f8d9a83fadc99392a0c8cc4
7
+ data.tar.gz: 6b4574b0c718229d0b7ae717bddffdc1347d1d678e63ac3afdae54f58c1d4d5973ac76641c22129cb2ec5d661ce902f56bc43f06baf433739ac364303c816876
@@ -1,3 +1,10 @@
1
+ ## [1.1.3](https://github.com/Gusto/apollo-federation-ruby/compare/v1.1.2...v1.1.3) (2020-07-16)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **tracing:** Properly handle tracing fields that resolve an array of lazy values ([#87](https://github.com/Gusto/apollo-federation-ruby/issues/87)) ([a9eed77](https://github.com/Gusto/apollo-federation-ruby/commit/a9eed77bbe5859456f93be00fbcafa02142ad5ed))
7
+
1
8
  ## [1.1.2](https://github.com/Gusto/apollo-federation-ruby/compare/v1.1.1...v1.1.2) (2020-06-09)
2
9
 
3
10
 
@@ -10,7 +10,7 @@ def set_version
10
10
  end
11
11
 
12
12
  def bundle_install
13
- system('bundle install')
13
+ system('bundle exec appraisal install')
14
14
  end
15
15
 
16
16
  def build_gem
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rspec' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require 'pathname'
12
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
13
+ Pathname.new(__FILE__).realpath,)
14
+
15
+ bundle_binstub = File.expand_path('bundle', __dir__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require 'rubygems'
27
+ require 'bundler/setup'
28
+
29
+ load Gem.bin_path('rspec-core', 'rspec')
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'graphql'
4
4
  require 'apollo-federation/any'
5
- require 'apollo-federation/entity_type_resolution_extension'
6
5
 
7
6
  module ApolloFederation
8
7
  module EntitiesField
@@ -23,7 +22,6 @@ module ApolloFederation
23
22
 
24
23
  field(:_entities, [entity_type, null: true], null: false) do
25
24
  argument :representations, [Any], required: true
26
- extension(EntityTypeResolutionExtension)
27
25
  end
28
26
  end
29
27
  end
@@ -47,7 +45,14 @@ module ApolloFederation
47
45
  result = reference
48
46
  end
49
47
 
50
- [type, result]
48
+ context.schema.after_lazy(result) do |resolved_value|
49
+ # TODO: This isn't 100% correct: if (for some reason) 2 different resolve_reference calls
50
+ # return the same object, it might not have the right type
51
+ # Right now, apollo-federation just adds a __typename property to the result,
52
+ # but I don't really like the idea of modifying the resolved object
53
+ context[resolved_value] = type
54
+ resolved_value
55
+ end
51
56
  end
52
57
  end
53
58
  end
@@ -27,6 +27,8 @@ Add `use ApolloFederation::Tracing` to your schema.'
27
27
  return result unless result.context[:tracing_enabled]
28
28
 
29
29
  trace = result.context.namespace(KEY)
30
+ # TODO: If there are errors during query validation, that could also cause a missing
31
+ # start_time
30
32
  raise NotInstalledError unless trace[:start_time]
31
33
 
32
34
  result['errors']&.each do |error|
@@ -159,17 +159,27 @@ module ApolloFederation
159
159
 
160
160
  end_time_nanos = Process.clock_gettime(Process::CLOCK_MONOTONIC, :nanosecond)
161
161
 
162
- # interpreter runtime
162
+ # legacy runtime
163
163
  if data.include?(:context)
164
- context = data.fetch(:context)
165
164
  path = context.path
166
- else # legacy runtime
167
- context = data.fetch(:query).context
165
+ field = context.field
166
+ else # interpreter runtime
168
167
  path = data.fetch(:path)
168
+ field = data.fetch(:field)
169
169
  end
170
170
 
171
171
  trace = context.namespace(ApolloFederation::Tracing::KEY)
172
172
 
173
+ # When a field is resolved with an array of lazy values, the interpreter fires an
174
+ # `execute_field` for the resolution of the field and then a `execute_field_lazy` event for
175
+ # each lazy value in the array. Since the path here will contain an index (indicating which
176
+ # lazy value we're executing: e.g. ['arrayOfLazies', 0]), we won't have a node for the path.
177
+ # We only care about the end of the parent field (e.g. ['arrayOfLazies']), so we get the
178
+ # node for that path. What ends up happening is we update the end_time for the parent node
179
+ # for each of the lazy values. The last one that's executed becomes the final end time.
180
+ if field.type.list? && path.last.is_a?(Integer)
181
+ path = path[0...-1]
182
+ end
173
183
  node = trace[:node_map].node_for_path(path)
174
184
  node.end_time = end_time_nanos - trace[:start_time_nanos]
175
185
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ApolloFederation
4
- VERSION = '1.1.2'
4
+ VERSION = '1.1.3'
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: 1.1.2
4
+ version: 1.1.3
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: 2020-06-09 00:00:00.000000000 Z
12
+ date: 2020-07-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: graphql
@@ -53,6 +53,34 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: appraisal
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: debase
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
56
84
  - !ruby/object:Gem::Dependency
57
85
  name: pry-byebug
58
86
  requirement: !ruby/object:Gem::Requirement
@@ -137,6 +165,20 @@ dependencies:
137
165
  - - ">="
138
166
  - !ruby/object:Gem::Version
139
167
  version: '0'
168
+ - !ruby/object:Gem::Dependency
169
+ name: ruby-debug-ide
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
140
182
  description: A Ruby implementation of Apollo Federation
141
183
  email:
142
184
  - noa.elad@gusto.com
@@ -151,11 +193,11 @@ files:
151
193
  - bin/generate-protos.sh
152
194
  - bin/prepare.rb
153
195
  - bin/publish.rb
196
+ - bin/rspec
154
197
  - lib/apollo-federation.rb
155
198
  - lib/apollo-federation/any.rb
156
199
  - lib/apollo-federation/entities_field.rb
157
200
  - lib/apollo-federation/entity.rb
158
- - lib/apollo-federation/entity_type_resolution_extension.rb
159
201
  - lib/apollo-federation/federated_document_from_schema_definition.rb
160
202
  - lib/apollo-federation/field.rb
161
203
  - lib/apollo-federation/has_directives.rb
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class EntityTypeResolutionExtension < GraphQL::Schema::FieldExtension
4
- def after_resolve(value:, context:, **_rest)
5
- value.map do |type, result|
6
- context.schema.after_lazy(result) do |resolved_value|
7
- # TODO: This isn't 100% correct: if (for some reason) 2 different resolve_reference calls
8
- # return the same object, it might not have the right type
9
- # Right now, apollo-federation just adds a __typename property to the result,
10
- # but I don't really like the idea of modifying the resolved object
11
- context[resolved_value] = type
12
- resolved_value
13
- end
14
- end
15
- end
16
- end