elasticgraph-query_registry 1.1.0 → 1.2.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: b33134934c160d200ddf228b73aeba0e88debbcd80cf0c9511daabbc21ec620d
4
- data.tar.gz: 9eb08a0c9151aae6cd7f03ecb27c8e634b0d280464205a3cdcdf911e57c55ce8
3
+ metadata.gz: c7df1c6ca657161900e9163a1372f38dd466110b49137f759ea2b1533ab581cf
4
+ data.tar.gz: 271cee62f53605b4eaa083a01a709eefa54ce7867accdc60c048afff5214f72b
5
5
  SHA512:
6
- metadata.gz: a2c231c5261def56818080074082e1577cba8f7864188358a3ed237ec3e5b39e9cc4e247a5fbd35047fea82e57af9e7fdf7cd471d935a273e4a619f1b93b4cae
7
- data.tar.gz: 0f2eb71c1237b17fd57e09a8e5f5f081179665c468e4236127ceba23bb2eaf62cab28ea7a0046eb62d480b3aede99d1bbabb738a1d57fd6064e486b1bee72321
6
+ metadata.gz: fe764144f5cfc78549631066fc402c6a47b2234e1397b5a4fa322b7d1bed5e1bfe3dbe3d29c6705c30b5bf9dec5c573af4971bfe89ef62546ff8302046310fd8
7
+ data.tar.gz: 4b0c06b543f54f9e533a5c20fe7031cc7990952c039fd96cb669de530455678eeefd605370fd0bc7985fb9c06076c049138f689a93c48eb754c4da8321f96efd
data/README.md CHANGED
@@ -20,10 +20,12 @@ Query registration provides a few key benefits:
20
20
  allowed to, you can choose not to approve the query. Once setup and
21
21
  configured, this library will block clients from submitting queries
22
22
  that have not been registered.
23
- * Your GraphQL endpoint will be a bit more efficient. Parsing large
24
- GraphQL queries can be a bit slow (in our testing, a 10 KB query
25
- string takes about ~10ms to parse), and the registry will cache and
26
- reuse the parsed form of registered queries.
23
+ * Your GraphQL endpoint will be a bit more efficient. Parsing and
24
+ statically validating large GraphQL queries can be a bit slow (in our
25
+ testing, parsing a 10 KB query string takes about ~10ms and statically
26
+ validating it takes another ~25ms), and the registry will cache and
27
+ reuse the parsed form of registered queries while also skipping
28
+ redundant runtime static validation for them.
27
29
 
28
30
  Importantly, once installed, registered clients who send unregistered
29
31
  queries will get errors. Unregistered clients can similarly be blocked
@@ -47,14 +49,10 @@ graph LR;
47
49
  graphql["graphql"];
48
50
  elasticgraph-query_registry --> graphql;
49
51
  class graphql externalGemStyle;
50
- graphql-c_parser["graphql-c_parser"];
51
- elasticgraph-query_registry --> graphql-c_parser;
52
- class graphql-c_parser externalGemStyle;
53
52
  rake["rake"];
54
53
  elasticgraph-query_registry --> rake;
55
54
  class rake externalGemStyle;
56
55
  click graphql href "https://rubygems.org/gems/graphql" "Open on RubyGems.org" _blank;
57
- click graphql-c_parser href "https://rubygems.org/gems/graphql-c_parser" "Open on RubyGems.org" _blank;
58
56
  click rake href "https://rubygems.org/gems/rake" "Open on RubyGems.org" _blank;
59
57
  ```
60
58
 
@@ -145,3 +143,8 @@ bundle exec rake "query_registry:dump_variables[client_name, query_name]"
145
143
 
146
144
  Don't worry about if you forget this, though--the `query_registry:validate_queries`
147
145
  task will also fail and give you instructions anytime a variables file is not up-to-date.
146
+
147
+ You should also run `query_registry:validate_queries` as part of CI for any application that
148
+ uses this gem. At runtime, `elasticgraph-query_registry` skips GraphQL static validation for
149
+ registered queries since it assumes they have already been validated on CI. Unregistered
150
+ queries, materially different queries, and variable values still go through runtime validation.
@@ -8,8 +8,9 @@
8
8
 
9
9
  require "elastic_graph/query_registry/variable_backward_incompatibility_detector"
10
10
  require "elastic_graph/query_registry/variable_dumper"
11
- require "graphql"
12
- require "graphql/c_parser"
11
+ require "elastic_graph/support/graphql_gem_loader"
12
+
13
+ ElasticGraph::Support::GraphQLGemLoader.load
13
14
 
14
15
  module ElasticGraph
15
16
  module QueryRegistry
@@ -90,7 +90,9 @@ module ElasticGraph
90
90
  (_ = cached_client_data).with_updated_last_query(query_string, cachable_query)
91
91
  end
92
92
 
93
- [query, [], registration_status]
93
+ prepared_query = prepare_query_for_execution(query, variables: variables, operation_name: operation_name, context: context)
94
+
95
+ [prepared_query, [], registration_status]
94
96
  end
95
97
 
96
98
  private
@@ -128,7 +130,14 @@ module ElasticGraph
128
130
  document: query.document,
129
131
  variables: variables,
130
132
  operation_name: operation_name,
131
- context: context
133
+ context: context,
134
+ # Registered queries are validated at CI time (via the QueryValidator Rake task),
135
+ # so re-validating at runtime is redundant. Skipping it avoids the cost of running
136
+ # graphql-ruby's StaticValidation pipeline on every request for known-good queries.
137
+ # Note: `validate: false` only disables static (query-string) validation; variable
138
+ # validation still runs via `GraphQL::Query#variables`, so invalid variable values
139
+ # are still reported as errors on every request.
140
+ validate: false
132
141
  )
133
142
  end
134
143
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticgraph-query_registry
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Myron Marston
@@ -17,110 +17,90 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 1.1.0
20
+ version: 1.2.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 1.1.0
27
+ version: 1.2.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: elasticgraph-support
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - '='
33
33
  - !ruby/object:Gem::Version
34
- version: 1.1.0
34
+ version: 1.2.0
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: 1.1.0
41
+ version: 1.2.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: graphql
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 2.5.18
48
+ version: 2.6.2
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 2.5.18
56
- - !ruby/object:Gem::Dependency
57
- name: graphql-c_parser
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '1.1'
63
- - - ">="
64
- - !ruby/object:Gem::Version
65
- version: 1.1.3
66
- type: :runtime
67
- prerelease: false
68
- version_requirements: !ruby/object:Gem::Requirement
69
- requirements:
70
- - - "~>"
71
- - !ruby/object:Gem::Version
72
- version: '1.1'
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: 1.1.3
55
+ version: 2.6.2
76
56
  - !ruby/object:Gem::Dependency
77
57
  name: rake
78
58
  requirement: !ruby/object:Gem::Requirement
79
59
  requirements:
80
60
  - - "~>"
81
61
  - !ruby/object:Gem::Version
82
- version: '13.3'
62
+ version: '13.4'
83
63
  - - ">="
84
64
  - !ruby/object:Gem::Version
85
- version: 13.3.1
65
+ version: 13.4.2
86
66
  type: :runtime
87
67
  prerelease: false
88
68
  version_requirements: !ruby/object:Gem::Requirement
89
69
  requirements:
90
70
  - - "~>"
91
71
  - !ruby/object:Gem::Version
92
- version: '13.3'
72
+ version: '13.4'
93
73
  - - ">="
94
74
  - !ruby/object:Gem::Version
95
- version: 13.3.1
75
+ version: 13.4.2
96
76
  - !ruby/object:Gem::Dependency
97
77
  name: elasticgraph-elasticsearch
98
78
  requirement: !ruby/object:Gem::Requirement
99
79
  requirements:
100
80
  - - '='
101
81
  - !ruby/object:Gem::Version
102
- version: 1.1.0
82
+ version: 1.2.0
103
83
  type: :development
104
84
  prerelease: false
105
85
  version_requirements: !ruby/object:Gem::Requirement
106
86
  requirements:
107
87
  - - '='
108
88
  - !ruby/object:Gem::Version
109
- version: 1.1.0
89
+ version: 1.2.0
110
90
  - !ruby/object:Gem::Dependency
111
91
  name: elasticgraph-opensearch
112
92
  requirement: !ruby/object:Gem::Requirement
113
93
  requirements:
114
94
  - - '='
115
95
  - !ruby/object:Gem::Version
116
- version: 1.1.0
96
+ version: 1.2.0
117
97
  type: :development
118
98
  prerelease: false
119
99
  version_requirements: !ruby/object:Gem::Requirement
120
100
  requirements:
121
101
  - - '='
122
102
  - !ruby/object:Gem::Version
123
- version: 1.1.0
103
+ version: 1.2.0
124
104
  email:
125
105
  - myron@squareup.com
126
106
  executables: []
@@ -145,10 +125,10 @@ licenses:
145
125
  - MIT
146
126
  metadata:
147
127
  bug_tracker_uri: https://github.com/block/elasticgraph/issues
148
- changelog_uri: https://github.com/block/elasticgraph/releases/tag/v1.1.0
149
- documentation_uri: https://block.github.io/elasticgraph/api-docs/v1.1.0/
128
+ changelog_uri: https://github.com/block/elasticgraph/releases/tag/v1.2.0
129
+ documentation_uri: https://block.github.io/elasticgraph/api-docs/v1.2.0/
150
130
  homepage_uri: https://block.github.io/elasticgraph/
151
- source_code_uri: https://github.com/block/elasticgraph/tree/v1.1.0/elasticgraph-query_registry
131
+ source_code_uri: https://github.com/block/elasticgraph/tree/v1.2.0/elasticgraph-query_registry
152
132
  gem_category: extension
153
133
  rdoc_options: []
154
134
  require_paths:
@@ -167,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
147
  - !ruby/object:Gem::Version
168
148
  version: '0'
169
149
  requirements: []
170
- rubygems_version: 4.0.3
150
+ rubygems_version: 4.0.6
171
151
  specification_version: 4
172
152
  summary: Provides a source-controlled query registry for ElasticGraph applications.
173
153
  test_files: []