graphql-schema_comparator 0.6.0 → 1.1.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
- SHA1:
3
- metadata.gz: 3b2c5111538092113b88552e2d85930eea51b4c0
4
- data.tar.gz: 3a3b4d43916961515caa915c51e0c0b0370c1395
2
+ SHA256:
3
+ metadata.gz: fbc98aaf530ce8c60dc291eac091f735180bedd7962f4229d6fc9ad19fcf02a9
4
+ data.tar.gz: e80de95b6b466297e8c69679cd2f4590f7bc77072573df004b0c8e266e06a9ef
5
5
  SHA512:
6
- metadata.gz: 00c6e2702e8bb9c1f34b1d9a777a3b63cc0cb6f56aa78f76bf14c04aee0997e6e690f79de956d46da31be9298a98ff72413d5cd77f18b514cd0b6b8a02021f76
7
- data.tar.gz: b74179eb8941cf2985f9dda75219b28b001e4c771db5db3d49e380cc98bc94c625d720dd7bf4cb88ddef6e51672b0a50b136b92da3e6dbfc6af3c13874e8c65f
6
+ metadata.gz: 22b0ef77facfe02f84f0d14004c4576d415d9b3c4b3fe46d06ed0a3750ea302180217c1aec1b54cdefd0517f66a0f89a61789643ad66031766205cc03e95459f
7
+ data.tar.gz: 4e2251295877a04cfa6e15654470db736a52bda927be70dc0d3846e358d6d6d7d11553a04bfff383eb460d62b466bcb7610d3bb84d16fb613418af8d7884df4c
@@ -0,0 +1,23 @@
1
+ name: Tests
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ ruby: [2.4, 2.7, '3.0']
14
+ gemfile: [graphql1.10, graphql1.13, graphql-head]
15
+ env:
16
+ BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
17
+ steps:
18
+ - uses: actions/checkout@v2
19
+ - uses: ruby/setup-ruby@v1
20
+ with:
21
+ bundler-cache: true
22
+ ruby-version: ${{ matrix.ruby }}
23
+ - run: bundle exec rake
data/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.0 (December 20 2021)
4
+
5
+ ### Bug Fix
6
+
7
+ - Adding non-null arguments with a default value should be non-breaking (#38)
8
+
9
+ ### New Features
10
+
11
+ - Remove legacy `graphql` gem API usage and support versions >= 1.13 (#46)
12
+
13
+ ## 1.0.1 (May 26 2021)
14
+
15
+ ### Bug Fix
16
+
17
+ - Fix comparing directives (#36)
18
+
19
+ ## 1.0.0 (January 23 2020)
20
+
21
+ ### Breaking Changes
22
+
23
+ - Add support for graphql-ruby 1.10.0+ (#28)
24
+ - Starting from 1.0.0 a minimum of graphql-ruby 1.10 is required
25
+
26
+ ## 0.6.1 (May 21rst 2019)
27
+
28
+ - Added a bunch of reasons to breaking changes (#17)
29
+ - Relaxed Thor Dependency
30
+ - Add `verify` task for CI usage which returns exit codes depending on breaking changes (#24)
31
+
3
32
  ## 0.6.0 (Feb 28th 2018)
4
33
 
5
34
  ### New Features
@@ -48,32 +77,32 @@ Added changes:
48
77
 
49
78
  ### Bug fixes
50
79
 
51
- Fix issue in Enum differ (https://github.com/xuorig/graphql-schema_comparator/issues/9)
80
+ - Fix issue in Enum differ (https://github.com/xuorig/graphql-schema_comparator/issues/9)
52
81
 
53
82
  ## 0.3.1 (Nov 13 2017)
54
83
 
55
84
  ### Bug Fixes
56
85
 
57
- - Fix no method breaking issue https://github.com/xuorig/graphql-schema_comparator/issues/8
86
+ - Fix no method breaking issue https://github.com/xuorig/graphql-schema_comparator/issues/8
58
87
 
59
88
  ## 0.3.0 (Oct 14 2017)
60
89
 
61
90
  ### New features
62
91
 
63
- - Top level Directive definitions are now diffed, but not directives used on definitions (Coming soon)
64
- - Base class for changes added.
92
+ - Top level Directive definitions are now diffed, but not directives used on definitions (Coming soon)
93
+ - Base class for changes added.
65
94
 
66
95
  ### breaking changes
67
96
 
68
- - `breaking` method on change objects has been renamed `breaking?` for style
97
+ - `breaking` method on change objects has been renamed `breaking?` for style
69
98
 
70
99
  ## 0.2.0 (Aug 18 2017)
71
100
 
72
101
  ### New features
73
102
 
74
- - Add `#non_breaking_changes` to get a list of non breaking changes from a comparison result. (#4)
75
- - CLI now Prints results sorted and grouped by breaking / non-breaking (#3)
103
+ - Add `#non_breaking_changes` to get a list of non breaking changes from a comparison result. (#4)
104
+ - CLI now Prints results sorted and grouped by breaking / non-breaking (#3)
76
105
 
77
106
  ### Bug fixes
78
107
 
79
- - Fix message for `EnumValueRemoved` (#5)
108
+ - Fix message for `EnumValueRemoved` (#5)
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2017 TODO: Write your name
3
+ Copyright (c) 2017 Marc-Andre Giroux
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # GraphQL::SchemaComparator
2
2
 
3
- [![Build Status](https://travis-ci.org/xuorig/graphql-schema_comparator.svg?branch=master)](https://travis-ci.org/xuorig/graphql-schema_comparator)
3
+ ![Build status](https://github.com/xuorig/graphql-schema_comparator/actions/workflows/ci.yml/badge.svg)
4
4
 
5
5
  `GraphQL::SchemaComparator` is a GraphQL Schema comparator. What does that mean? `GraphQL::SchemaComparator` takes
6
6
  two GraphQL schemas and outputs a list of changes between versions. This is useful for many things:
@@ -87,7 +87,7 @@ Possible changes are all found in [changes.rb](lib/graphql/schema_comparator/cha
87
87
 
88
88
  ### Change Criticality
89
89
 
90
- Each change object has a ``#criticality` method which returns a `Changes::Criticality` object.
90
+ Each change object has a `#criticality` method which returns a `Changes::Criticality` object.
91
91
  This objects defines how dangerous a change is to a schema.
92
92
 
93
93
  The different levels of criticality (non_breaking, dangerous, breaking) are explained here:
@@ -5,9 +5,23 @@ require "thor"
5
5
  require "graphql/schema_comparator"
6
6
 
7
7
  class GraphQLSchema < Thor
8
+ desc "verify OLD_SCHEMA NEW_SCHEMA", "Behaves exactly like `compare` but returns an exit code for CI purposes"
9
+
10
+ def verify(old_schema, new_schema)
11
+ result = run_compare(old_schema, new_schema)
12
+ exit_code = result.breaking? ? 1 : 0
13
+ exit(exit_code)
14
+ end
15
+
8
16
  desc "compare OLD_SCHEMA NEW_SCHEMA", "Compares OLD_SCHEMA with NEW_SCHEMA and returns a list of changes"
9
17
 
10
18
  def compare(old_schema, new_schema)
19
+ run_compare(old_schema, new_schema)
20
+ end
21
+
22
+ private
23
+
24
+ def run_compare(old_schema, new_schema)
11
25
  parsed_old = parse_schema(old_schema)
12
26
  parsed_new = parse_schema(new_schema)
13
27
 
@@ -22,10 +36,9 @@ class GraphQLSchema < Thor
22
36
  else
23
37
  print_changes(result)
24
38
  end
39
+ result
25
40
  end
26
41
 
27
- private
28
-
29
42
  def print_changes(result)
30
43
  say "Detected the following changes between schemas:"
31
44
  say "\n"
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "graphql", "~> 1.13", "< 3.0"
4
+
5
+ gemspec path: "../"
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "graphql", "~> 1.10.0"
4
+
5
+ gemspec path: "../"
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "graphql", "~> 1.13.0"
4
+
5
+ gemspec path: "../"
@@ -8,23 +8,28 @@ Gem::Specification.new do |spec|
8
8
  spec.version = GraphQL::SchemaComparator::VERSION
9
9
  spec.authors = ["Marc-Andre Giroux"]
10
10
  spec.email = ["mgiroux0@gmail.com"]
11
-
12
11
  spec.summary = %q{Compare GraphQL schemas and get the changes that happened.}
13
- spec.description = %q{GraphQL::SchemaComparator compares two GraphQL schemas given their IDL and returns a list of changes.}
14
- spec.homepage = "http://mgiroux.me"
12
+ spec.description = %q{GraphQL::SchemaComparator compares two GraphQL schemas given their SDL and returns a list of changes.}
13
+ spec.homepage = "https://github.com/xuorig/graphql-schema_comparator"
15
14
  spec.license = "MIT"
16
-
15
+ spec.metadata = {
16
+ "homepage_uri" => "https://github.com/xuorig/graphql-schema_comparator",
17
+ "changelog_uri" => "https://github.com/xuorig/graphql-schema_comparator/blob/master/CHANGELOG.md",
18
+ "source_code_uri" => "https://github.com/xuorig/graphql-schema_comparator",
19
+ "bug_tracker_uri" => "https://github.com/xuorig/graphql-schema_comparator/issues",
20
+ }
17
21
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
22
  f.match(%r{^(test|spec|features)/})
19
23
  end
24
+
20
25
  spec.bindir = "bin"
21
26
  spec.executables = ["graphql-schema", "schema_comparator"]
22
27
  spec.require_paths = ["lib"]
23
28
 
24
- spec.add_dependency "graphql", "~> 1.6"
25
- spec.add_dependency "thor", "~> 0.19"
29
+ spec.add_dependency "graphql", ">= 1.10", "< 3.0"
30
+ spec.add_dependency "thor", ">= 0.19", "< 2.0"
31
+ spec.add_dependency "bundler", ">= 1.14"
26
32
 
27
- spec.add_development_dependency "bundler", "~> 1.14"
28
33
  spec.add_development_dependency "rake", "~> 10.0"
29
34
  spec.add_development_dependency "minitest", "~> 5.10"
30
35
  spec.add_development_dependency "pry-byebug", "~> 3.4"
@@ -14,7 +14,7 @@ module GraphQL
14
14
  # these changes.
15
15
  DANGEROUS = 2
16
16
 
17
- # Breaking criticality are changes that immediatly impact
17
+ # Breaking criticality are changes that immediately impact
18
18
  # clients usually causing queries not to be valid anymore.
19
19
  BREAKING = 3
20
20
 
@@ -45,15 +45,17 @@ module GraphQL
45
45
 
46
46
  def initialize(removed_type)
47
47
  @removed_type = removed_type
48
- @criticality = Changes::Criticality.breaking
48
+ @criticality = Changes::Criticality.breaking(
49
+ reason: "Removing a type is a breaking change. It is preferable to deprecate and remove all references to this type first."
50
+ )
49
51
  end
50
52
 
51
53
  def message
52
- "Type `#{removed_type.name}` was removed"
54
+ "Type `#{removed_type.graphql_name}` was removed"
53
55
  end
54
56
 
55
57
  def path
56
- removed_type.name
58
+ removed_type.path
57
59
  end
58
60
  end
59
61
 
@@ -66,11 +68,11 @@ module GraphQL
66
68
  end
67
69
 
68
70
  def message
69
- "Directive `#{directive.name}` was removed"
71
+ "Directive `#{directive.graphql_name}` was removed"
70
72
  end
71
73
 
72
74
  def path
73
- "@#{directive.name}"
75
+ "@#{directive.graphql_name}"
74
76
  end
75
77
  end
76
78
 
@@ -80,15 +82,17 @@ module GraphQL
80
82
  def initialize(old_type, new_type)
81
83
  @old_type = old_type
82
84
  @new_type = new_type
83
- @criticality = Changes::Criticality.breaking
85
+ @criticality = Changes::Criticality.breaking(
86
+ reason: "Changing the kind of a type is a breaking change because it can cause existing queries to error. For example, turning an object type to a scalar type would break queries that define a selection set for this type."
87
+ )
84
88
  end
85
89
 
86
90
  def message
87
- "`#{old_type.name}` kind changed from `#{old_type.kind}` to `#{new_type.kind}`"
91
+ "`#{old_type.graphql_name}` kind changed from `#{old_type.kind}` to `#{new_type.kind}`"
88
92
  end
89
93
 
90
94
  def path
91
- old_type.name
95
+ old_type.path
92
96
  end
93
97
  end
94
98
 
@@ -98,15 +102,17 @@ module GraphQL
98
102
  def initialize(enum_type, enum_value)
99
103
  @enum_value = enum_value
100
104
  @enum_type = enum_type
101
- @criticality = Changes::Criticality.breaking
105
+ @criticality = Changes::Criticality.breaking(
106
+ reason: "Removing an enum value will cause existing queries that use this enum value to error."
107
+ )
102
108
  end
103
109
 
104
110
  def message
105
- "Enum value `#{enum_value.name}` was removed from enum `#{enum_type.name}`"
111
+ "Enum value `#{enum_value.graphql_name}` was removed from enum `#{enum_type.graphql_name}`"
106
112
  end
107
113
 
108
114
  def path
109
- [enum_type.name, enum_value.name].join('.')
115
+ enum_value.path
110
116
  end
111
117
  end
112
118
 
@@ -116,15 +122,17 @@ module GraphQL
116
122
  def initialize(union_type, union_member)
117
123
  @union_member = union_member
118
124
  @union_type = union_type
119
- @criticality = Changes::Criticality.breaking
125
+ @criticality = Changes::Criticality.breaking(
126
+ reason: "Removing a union member from a union can cause existing queries that use this union member in a fragment spread to error."
127
+ )
120
128
  end
121
129
 
122
130
  def message
123
- "Union member `#{union_member.name}` was removed from Union type `#{union_type.name}`"
131
+ "Union member `#{union_member.graphql_name}` was removed from Union type `#{union_type.graphql_name}`"
124
132
  end
125
133
 
126
134
  def path
127
- union_type.name
135
+ union_type.path
128
136
  end
129
137
  end
130
138
 
@@ -134,15 +142,17 @@ module GraphQL
134
142
  def initialize(input_object_type, field)
135
143
  @input_object_type = input_object_type
136
144
  @field = field
137
- @criticality = Changes::Criticality.breaking
145
+ @criticality = Changes::Criticality.breaking(
146
+ reason: "Removing an input field will cause existing queries that use this input field to error."
147
+ )
138
148
  end
139
149
 
140
150
  def message
141
- "Input field `#{field.name}` was removed from input object type `#{input_object_type.name}`"
151
+ "Input field `#{field.graphql_name}` was removed from input object type `#{input_object_type.graphql_name}`"
142
152
  end
143
153
 
144
154
  def path
145
- [input_object_type.name, field.name].join('.')
155
+ field.path
146
156
  end
147
157
  end
148
158
 
@@ -153,15 +163,17 @@ module GraphQL
153
163
  @object_type = object_type
154
164
  @field = field
155
165
  @argument = argument
156
- @criticality = Changes::Criticality.breaking
166
+ @criticality = Changes::Criticality.breaking(
167
+ reason: "Removing a field argument is a breaking change because it will cause existing queries that use this argument to error."
168
+ )
157
169
  end
158
170
 
159
171
  def message
160
- "Argument `#{argument.name}: #{argument.type}` was removed from field `#{object_type.name}.#{field.name}`"
172
+ "Argument `#{argument.graphql_name}: #{argument.type.graphql_name}` was removed from field `#{object_type.graphql_name}.#{field.graphql_name}`"
161
173
  end
162
174
 
163
175
  def path
164
- [object_type.name, field.name, argument.name].join('.')
176
+ argument.path
165
177
  end
166
178
  end
167
179
 
@@ -175,11 +187,11 @@ module GraphQL
175
187
  end
176
188
 
177
189
  def message
178
- "Argument `#{argument.name}` was removed from directive `#{directive.name}`"
190
+ "Argument `#{argument.graphql_name}` was removed from directive `#{directive.graphql_name}`"
179
191
  end
180
192
 
181
193
  def path
182
- ["@#{directive.name}", argument.name].join('.')
194
+ ["@#{directive.graphql_name}", argument.graphql_name].join('.')
183
195
  end
184
196
  end
185
197
 
@@ -193,7 +205,7 @@ module GraphQL
193
205
  end
194
206
 
195
207
  def message
196
- "Schema query root has changed from `#{old_schema.query.name}` to `#{new_schema.query.name}`"
208
+ "Schema query root has changed from `#{old_schema.query.graphql_name}` to `#{new_schema.query.graphql_name}`"
197
209
  end
198
210
 
199
211
  def path
@@ -207,15 +219,25 @@ module GraphQL
207
219
  def initialize(object_type, field)
208
220
  @object_type = object_type
209
221
  @field = field
210
- @criticality = Changes::Criticality.breaking
222
+
223
+ if field.deprecation_reason
224
+ @criticality = Changes::Criticality.breaking(
225
+ reason: "Removing a deprecated field is a breaking change. Before removing it, you may want" \
226
+ "to look at the field's usage to see the impact of removing the field."
227
+ )
228
+ else
229
+ @criticality = Changes::Criticality.breaking(
230
+ reason: "Removing a field is a breaking change. It is preferable to deprecate the field before removing it."
231
+ )
232
+ end
211
233
  end
212
234
 
213
235
  def message
214
- "Field `#{field.name}` was removed from object type `#{object_type.name}`"
236
+ "Field `#{field.graphql_name}` was removed from object type `#{object_type.graphql_name}`"
215
237
  end
216
238
 
217
239
  def path
218
- [object_type.name, field.name].join('.')
240
+ [object_type.graphql_name, field.graphql_name].join(".")
219
241
  end
220
242
  end
221
243
 
@@ -229,11 +251,11 @@ module GraphQL
229
251
  end
230
252
 
231
253
  def message
232
- "Location `#{location}` was removed from directive `#{directive.name}`"
254
+ "Location `#{location}` was removed from directive `#{directive.graphql_name}`"
233
255
  end
234
256
 
235
257
  def path
236
- "@#{directive.name}"
258
+ "@#{directive.graphql_name}"
237
259
  end
238
260
  end
239
261
 
@@ -243,15 +265,17 @@ module GraphQL
243
265
  def initialize(interface, object_type)
244
266
  @interface = interface
245
267
  @object_type = object_type
246
- @criticality = Changes::Criticality.breaking
268
+ @criticality = Changes::Criticality.breaking(
269
+ reason: "Removing an interface from an object type can cause existing queries that use this in a fragment spread to error."
270
+ )
247
271
  end
248
272
 
249
273
  def message
250
- "`#{object_type.name}` object type no longer implements `#{interface.name}` interface"
274
+ "`#{object_type.graphql_name}` object type no longer implements `#{interface.graphql_name}` interface"
251
275
  end
252
276
 
253
277
  def path
254
- object_type.name
278
+ object_type.path
255
279
  end
256
280
  end
257
281
 
@@ -267,19 +291,19 @@ module GraphQL
267
291
  end
268
292
 
269
293
  def message
270
- "Field `#{type}.#{old_field.name}` changed type from `#{old_field.type}` to `#{new_field.type}`"
294
+ "Field `#{old_field.path}` changed type from `#{old_field.type.to_type_signature}` to `#{new_field.type.to_type_signature}`"
271
295
  end
272
296
 
273
297
  def criticality
274
298
  if safe_change_for_field?(old_field.type, new_field.type)
275
299
  Changes::Criticality.non_breaking
276
300
  else
277
- Changes::Criticality.breaking
301
+ Changes::Criticality.breaking # TODO - Add reason
278
302
  end
279
303
  end
280
304
 
281
305
  def path
282
- [type.name, old_field.name].join('.')
306
+ old_field.path
283
307
  end
284
308
  end
285
309
 
@@ -294,7 +318,9 @@ module GraphQL
294
318
  reason: "Changing an input field from non-null to null is considered non-breaking"
295
319
  )
296
320
  else
297
- @criticality = Changes::Criticality.breaking
321
+ @criticality = Changes::Criticality.breaking(
322
+ reason: "Changing the type of an input field can cause existing queries that use this field to error."
323
+ )
298
324
  end
299
325
 
300
326
  @input_type = input_type
@@ -303,11 +329,11 @@ module GraphQL
303
329
  end
304
330
 
305
331
  def message
306
- "Input field `#{input_type}.#{old_input_field.name}` changed type from `#{old_input_field.type}` to `#{new_input_field.type}`"
332
+ "Input field `#{path}` changed type from `#{old_input_field.type.to_type_signature}` to `#{new_input_field.type.to_type_signature}`"
307
333
  end
308
334
 
309
335
  def path
310
- [input_type.name, old_input_field.name].join('.')
336
+ old_input_field.path
311
337
  end
312
338
  end
313
339
 
@@ -322,7 +348,9 @@ module GraphQL
322
348
  reason: "Changing an input field from non-null to null is considered non-breaking"
323
349
  )
324
350
  else
325
- @criticality = Changes::Criticality.breaking
351
+ @criticality = Changes::Criticality.breaking(
352
+ reason: "Changing the type of a field's argument can cause existing queries that use this argument to error."
353
+ )
326
354
  end
327
355
 
328
356
  @type = type
@@ -332,12 +360,12 @@ module GraphQL
332
360
  end
333
361
 
334
362
  def message
335
- "Type for argument `#{new_argument.name}` on field `#{type.name}.#{field.name}` changed"\
336
- " from `#{old_argument.type}` to `#{new_argument.type}`"
363
+ "Type for argument `#{new_argument.graphql_name}` on field `#{field.path}` changed"\
364
+ " from `#{old_argument.type.to_type_signature}` to `#{new_argument.type.to_type_signature}`"
337
365
  end
338
366
 
339
367
  def path
340
- [type.name, field.name, old_argument.name].join('.')
368
+ old_argument.path
341
369
  end
342
370
  end
343
371
 
@@ -361,12 +389,12 @@ module GraphQL
361
389
  end
362
390
 
363
391
  def message
364
- "Type for argument `#{new_argument.name}` on directive `#{directive.name}` changed"\
365
- " from `#{old_argument.type}` to `#{new_argument.type}`"
392
+ "Type for argument `#{new_argument.graphql_name}` on directive `#{directive.graphql_name}` changed"\
393
+ " from `#{old_argument.type.to_type_signature}` to `#{new_argument.type.to_type_signature}`"
366
394
  end
367
395
 
368
396
  def path
369
- ["@#{directive.name}", old_argument.name].join('.')
397
+ ["@#{directive.graphql_name}", old_argument.graphql_name].join('.')
370
398
  end
371
399
  end
372
400
 
@@ -423,16 +451,16 @@ module GraphQL
423
451
  end
424
452
 
425
453
  def message
426
- if old_argument.default_value.nil?
427
- "Default value `#{new_argument.default_value}` was added to argument `#{new_argument.name}` on field `#{type.name}.#{field.name}`"
454
+ if old_argument.default_value.nil? || old_argument.default_value == :__no_default__
455
+ "Default value `#{new_argument.default_value}` was added to argument `#{new_argument.graphql_name}` on field `#{field.path}`"
428
456
  else
429
- "Default value for argument `#{new_argument.name}` on field `#{type.name}.#{field.name}` changed"\
457
+ "Default value for argument `#{new_argument.graphql_name}` on field `#{field.path}` changed"\
430
458
  " from `#{old_argument.default_value}` to `#{new_argument.default_value}`"
431
459
  end
432
460
  end
433
461
 
434
462
  def path
435
- [type.name, field.name, old_argument.name].join('.')
463
+ old_argument.path
436
464
  end
437
465
  end
438
466
 
@@ -450,12 +478,12 @@ module GraphQL
450
478
  end
451
479
 
452
480
  def message
453
- "Input field `#{input_type.name}.#{old_field.name}` default changed"\
481
+ "Input field `#{path}` default changed"\
454
482
  " from `#{old_field.default_value}` to `#{new_field.default_value}`"
455
483
  end
456
484
 
457
485
  def path
458
- [input_type.name, old_field.name].join(".")
486
+ old_field.path
459
487
  end
460
488
  end
461
489
 
@@ -473,12 +501,12 @@ module GraphQL
473
501
  end
474
502
 
475
503
  def message
476
- "Default value for argument `#{new_argument.name}` on directive `#{directive.name}` changed"\
504
+ "Default value for argument `#{new_argument.graphql_name}` on directive `#{directive.graphql_name}` changed"\
477
505
  " from `#{old_argument.default_value}` to `#{new_argument.default_value}`"
478
506
  end
479
507
 
480
508
  def path
481
- ["@#{directive.name}", new_argument.name].join(".")
509
+ ["@#{directive.graphql_name}", new_argument.graphql_name].join(".")
482
510
  end
483
511
  end
484
512
 
@@ -495,11 +523,11 @@ module GraphQL
495
523
  end
496
524
 
497
525
  def message
498
- "Enum value `#{enum_value.name}` was added to enum `#{enum_type.name}`"
526
+ "Enum value `#{enum_value.graphql_name}` was added to enum `#{enum_type.graphql_name}`"
499
527
  end
500
528
 
501
529
  def path
502
- [enum_type.name, enum_value.name].join(".")
530
+ enum_value.path
503
531
  end
504
532
  end
505
533
 
@@ -516,11 +544,11 @@ module GraphQL
516
544
  end
517
545
 
518
546
  def message
519
- "Union member `#{union_member.name}` was added to Union type `#{union_type.name}`"
547
+ "Union member `#{union_member.graphql_name}` was added to Union type `#{union_type.graphql_name}`"
520
548
  end
521
549
 
522
550
  def path
523
- union_type.name
551
+ union_type.path
524
552
  end
525
553
  end
526
554
 
@@ -537,11 +565,11 @@ module GraphQL
537
565
  end
538
566
 
539
567
  def message
540
- "`#{object_type.name}` object implements `#{interface.name}` interface"
568
+ "`#{object_type.graphql_name}` object implements `#{interface.graphql_name}` interface"
541
569
  end
542
570
 
543
571
  def path
544
- object_type.name
572
+ object_type.path
545
573
  end
546
574
  end
547
575
 
@@ -551,8 +579,8 @@ module GraphQL
551
579
  attr_reader :input_object_type, :field, :criticality
552
580
 
553
581
  def initialize(input_object_type, field)
554
- @criticality = if field.type.non_null?
555
- Changes::Criticality.breaking
582
+ @criticality = if field.type.non_null? && !field.default_value?
583
+ Changes::Criticality.breaking(reason: "Adding a non-null input field without a default value to an existing input type will cause existing queries that use this input type to error because they will not provide a value for this new field.")
556
584
  else
557
585
  Changes::Criticality.non_breaking
558
586
  end
@@ -562,11 +590,11 @@ module GraphQL
562
590
  end
563
591
 
564
592
  def message
565
- "Input field `#{field.name}` was added to input object type `#{input_object_type.name}`"
593
+ "Input field `#{field.graphql_name}` was added to input object type `#{input_object_type.graphql_name}`"
566
594
  end
567
595
 
568
596
  def path
569
- [input_object_type.name, field.name].join(".")
597
+ field.path
570
598
  end
571
599
  end
572
600
 
@@ -574,8 +602,8 @@ module GraphQL
574
602
  attr_reader :type, :field, :argument, :criticality
575
603
 
576
604
  def initialize(type, field, argument)
577
- @criticality = if argument.type.non_null?
578
- Changes::Criticality.breaking
605
+ @criticality = if argument.type.non_null? && !argument.default_value?
606
+ Changes::Criticality.breaking(reason: "Adding a required argument without a default value to an existing field is a breaking change because it will cause existing uses of this field to error.")
579
607
  else
580
608
  Changes::Criticality.non_breaking
581
609
  end
@@ -586,11 +614,11 @@ module GraphQL
586
614
  end
587
615
 
588
616
  def message
589
- "Argument `#{argument.name}: #{argument.type}` added to field `#{type.name}.#{field.name}`"
617
+ "Argument `#{argument.graphql_name}: #{argument.type.graphql_name}` added to field `#{field.path}`"
590
618
  end
591
619
 
592
620
  def path
593
- [type.name, field.name, argument.name].join(".")
621
+ argument.path
594
622
  end
595
623
  end
596
624
 
@@ -603,11 +631,11 @@ module GraphQL
603
631
  end
604
632
 
605
633
  def message
606
- "Type `#{type.name}` was added"
634
+ "Type `#{type.graphql_name}` was added"
607
635
  end
608
636
 
609
637
  def path
610
- type.name
638
+ type.path
611
639
  end
612
640
  end
613
641
 
@@ -620,11 +648,11 @@ module GraphQL
620
648
  end
621
649
 
622
650
  def message
623
- "Directive `#{directive.name}` was added"
651
+ "Directive `#{directive.graphql_name}` was added"
624
652
  end
625
653
 
626
654
  def path
627
- "@#{directive.name}"
655
+ "@#{directive.graphql_name}"
628
656
  end
629
657
  end
630
658
 
@@ -638,11 +666,11 @@ module GraphQL
638
666
  end
639
667
 
640
668
  def message
641
- "Description `#{old_type.description}` on type `#{old_type.name}` has changed to `#{new_type.description}`"
669
+ "Description `#{old_type.description}` on type `#{old_type.graphql_name}` has changed to `#{new_type.description}`"
642
670
  end
643
671
 
644
672
  def path
645
- old_type.name
673
+ old_type.path
646
674
  end
647
675
  end
648
676
 
@@ -657,12 +685,12 @@ module GraphQL
657
685
  end
658
686
 
659
687
  def message
660
- "Description for enum value `#{enum.name}.#{new_enum_value.name}` changed from " \
688
+ "Description for enum value `#{new_enum_value.path}` changed from " \
661
689
  "`#{old_enum_value.description}` to `#{new_enum_value.description}`"
662
690
  end
663
691
 
664
692
  def path
665
- [enum.name, old_enum_value.name].join(".")
693
+ old_enum_value.path
666
694
  end
667
695
  end
668
696
 
@@ -678,16 +706,15 @@ module GraphQL
678
706
 
679
707
  def message
680
708
  if old_enum_value.deprecation_reason
681
- "Enum value `#{enum.name}.#{new_enum_value.name}` deprecation reason changed " \
709
+ "Enum value `#{new_enum_value.path}` deprecation reason changed " \
682
710
  "from `#{old_enum_value.deprecation_reason}` to `#{new_enum_value.deprecation_reason}`"
683
711
  else
684
- "Enum value `#{enum.name}.#{new_enum_value.name}` was deprecated with reason" \
685
- " `#{new_enum_value.deprecation_reason}`"
712
+ "Enum value `#{new_enum_value.path}` was deprecated with reason `#{new_enum_value.deprecation_reason}`"
686
713
  end
687
714
  end
688
715
 
689
716
  def path
690
- [enum.name, old_enum_value.name].join(".")
717
+ old_enum_value.path
691
718
  end
692
719
  end
693
720
 
@@ -702,12 +729,12 @@ module GraphQL
702
729
  end
703
730
 
704
731
  def message
705
- "Input field `#{input_type.name}.#{old_field.name}` description changed"\
732
+ "Input field `#{old_field.path}` description changed"\
706
733
  " from `#{old_field.description}` to `#{new_field.description}`"
707
734
  end
708
735
 
709
736
  def path
710
- [input_type.name, old_field.name].join(".")
737
+ old_field.path
711
738
  end
712
739
  end
713
740
 
@@ -721,12 +748,12 @@ module GraphQL
721
748
  end
722
749
 
723
750
  def message
724
- "Directive `#{new_directive.name}` description changed"\
751
+ "Directive `#{new_directive.graphql_name}` description changed"\
725
752
  " from `#{old_directive.description}` to `#{new_directive.description}`"
726
753
  end
727
754
 
728
755
  def path
729
- "@#{old_directive.name}"
756
+ "@#{old_directive.graphql_name}"
730
757
  end
731
758
  end
732
759
 
@@ -741,12 +768,12 @@ module GraphQL
741
768
  end
742
769
 
743
770
  def message
744
- "Field `#{type.name}.#{old_field.name}` description changed"\
771
+ "Field `#{old_field.path}` description changed"\
745
772
  " from `#{old_field.description}` to `#{new_field.description}`"
746
773
  end
747
774
 
748
775
  def path
749
- [type.name, old_field.name].join(".")
776
+ old_field.path
750
777
  end
751
778
  end
752
779
 
@@ -762,12 +789,12 @@ module GraphQL
762
789
  end
763
790
 
764
791
  def message
765
- "Description for argument `#{new_argument.name}` on field `#{type.name}.#{field.name}` changed"\
792
+ "Description for argument `#{new_argument.graphql_name}` on field `#{field.path}` changed"\
766
793
  " from `#{old_argument.description}` to `#{new_argument.description}`"
767
794
  end
768
795
 
769
796
  def path
770
- [type.name, field.name, old_argument.name].join(".")
797
+ old_argument.path
771
798
  end
772
799
  end
773
800
 
@@ -782,12 +809,12 @@ module GraphQL
782
809
  end
783
810
 
784
811
  def message
785
- "Description for argument `#{new_argument.name}` on directive `#{directive.name}` changed"\
812
+ "Description for argument `#{new_argument.graphql_name}` on directive `#{directive.graphql_name}` changed"\
786
813
  " from `#{old_argument.description}` to `#{new_argument.description}`"
787
814
  end
788
815
 
789
816
  def path
790
- ["@#{directive.name}", old_argument.name].join(".")
817
+ ["@#{directive.graphql_name}", old_argument.graphql_name].join(".")
791
818
  end
792
819
  end
793
820
 
@@ -802,12 +829,12 @@ module GraphQL
802
829
  end
803
830
 
804
831
  def message
805
- "Deprecation reason on field `#{type.name}.#{new_field.name}` has changed "\
832
+ "Deprecation reason on field `#{new_field.path}` has changed "\
806
833
  "from `#{old_field.deprecation_reason}` to `#{new_field.deprecation_reason}`"
807
834
  end
808
835
 
809
836
  def path
810
- [type.name, old_field.name].join(".")
837
+ old_field.path
811
838
  end
812
839
  end
813
840
 
@@ -821,11 +848,11 @@ module GraphQL
821
848
  end
822
849
 
823
850
  def message
824
- "Field `#{field.name}` was added to object type `#{object_type.name}`"
851
+ "Field `#{field.graphql_name}` was added to object type `#{object_type.graphql_name}`"
825
852
  end
826
853
 
827
854
  def path
828
- [object_type.name, field.name].join(".")
855
+ [object_type.graphql_name, field.graphql_name].join(".")
829
856
  end
830
857
  end
831
858
 
@@ -839,11 +866,11 @@ module GraphQL
839
866
  end
840
867
 
841
868
  def message
842
- "Location `#{location}` was added to directive `#{directive.name}`"
869
+ "Location `#{location}` was added to directive `#{directive.graphql_name}`"
843
870
  end
844
871
 
845
872
  def path
846
- "@#{directive.name}"
873
+ "@#{directive.graphql_name}"
847
874
  end
848
875
  end
849
876
 
@@ -1005,7 +1032,7 @@ module GraphQL
1005
1032
  end
1006
1033
 
1007
1034
  def message
1008
- "Argument `#{argument.name}` was added to directive `#{directive.name}`"
1035
+ "Argument `#{argument.graphql_name}` was added to directive `#{directive.graphql_name}`"
1009
1036
  end
1010
1037
  end
1011
1038
  end
@@ -21,7 +21,7 @@ module GraphQL
21
21
  changes << Changes::FieldArgumentDefaultChanged.new(type, field, old_arg, new_arg)
22
22
  end
23
23
 
24
- if old_arg.type != new_arg.type
24
+ if old_arg.type.to_type_signature != new_arg.type.to_type_signature
25
25
  changes << Changes::FieldArgumentTypeChanged.new(type, field, old_arg, new_arg)
26
26
  end
27
27
 
@@ -39,11 +39,11 @@ module GraphQL
39
39
  end
40
40
 
41
41
  def removed_arguments
42
- old_arguments.values.select { |arg| !new_arguments[arg.name] }
42
+ old_arguments.values.select { |arg| !new_arguments[arg.graphql_name] }
43
43
  end
44
44
 
45
45
  def added_arguments
46
- new_arguments.values.select { |arg| !old_arguments[arg.name] }
46
+ new_arguments.values.select { |arg| !old_arguments[arg.graphql_name] }
47
47
  end
48
48
 
49
49
  def each_common_argument(&block)
@@ -24,7 +24,7 @@ module GraphQL
24
24
  changes << Changes::FieldDeprecationChanged.new(new_type, old_field, new_field)
25
25
  end
26
26
 
27
- if old_field.type != new_field.type
27
+ if old_field.type.to_type_signature != new_field.type.to_type_signature
28
28
  changes << Changes::FieldTypeChanged.new(new_type, old_field, new_field)
29
29
  end
30
30
 
@@ -51,12 +51,12 @@ module GraphQL
51
51
  )
52
52
 
53
53
  def arg_removals
54
- removed = old_arguments.values.select { |arg| !new_arguments[arg.name] }
54
+ removed = old_arguments.values.select { |arg| !new_arguments[arg.graphql_name] }
55
55
  removed.map { |arg| Changes::FieldArgumentRemoved.new(new_type, old_field, arg) }
56
56
  end
57
57
 
58
58
  def arg_additions
59
- removed = new_arguments.values.select { |arg| !old_arguments[arg.name] }
59
+ removed = new_arguments.values.select { |arg| !old_arguments[arg.graphql_name] }
60
60
  removed.map { |arg| Changes::FieldArgumentAdded.new(new_type, new_field, arg) }
61
61
  end
62
62
 
@@ -21,7 +21,7 @@ module GraphQL
21
21
  changes << Changes::InputFieldDefaultChanged.new(old_type, old_field, new_field)
22
22
  end
23
23
 
24
- if old_field.type != new_field.type
24
+ if old_field.type.to_type_signature != new_field.type.to_type_signature
25
25
  changes << Changes::InputFieldTypeChanged.new(old_type, old_field, new_field)
26
26
  end
27
27
 
@@ -39,11 +39,11 @@ module GraphQL
39
39
  end
40
40
 
41
41
  def removed_fields
42
- old_fields.values.select { |field| !new_fields[field.name] }
42
+ old_fields.values.select { |field| !new_fields[field.graphql_name] }
43
43
  end
44
44
 
45
45
  def added_fields
46
- new_fields.values.select { |field| !old_fields[field.name] }
46
+ new_fields.values.select { |field| !old_fields[field.graphql_name] }
47
47
  end
48
48
  end
49
49
  end
@@ -2,12 +2,12 @@ module GraphQL
2
2
  module SchemaComparator
3
3
  module Diff
4
4
  class Interface
5
- def initialize(old_iface, new_iface)
6
- @old_iface = old_iface
7
- @new_iface = new_iface
5
+ def initialize(old_interface, new_interface)
6
+ @old_interface = old_interface
7
+ @new_interface = new_interface
8
8
 
9
- @old_fields = old_iface.fields
10
- @new_fields = new_iface.fields
9
+ @old_fields = old_interface.fields
10
+ @new_fields = new_interface.fields
11
11
  end
12
12
 
13
13
  def diff
@@ -16,7 +16,7 @@ module GraphQL
16
16
  changes += field_additions
17
17
 
18
18
  each_common_field do |old_field, new_field|
19
- changes += Diff::Field.new(old_iface, new_iface, old_field, new_field).diff
19
+ changes += Diff::Field.new(old_interface, new_interface, old_field, new_field).diff
20
20
  end
21
21
 
22
22
  changes
@@ -24,23 +24,23 @@ module GraphQL
24
24
 
25
25
  private
26
26
 
27
- attr_reader :old_iface, :new_iface, :old_fields, :new_fields
27
+ attr_reader :old_interface, :new_interface, :old_fields, :new_fields
28
28
 
29
29
  def field_removals
30
- removed = old_fields.values.select { |field| !new_fields[field.name] }
31
- removed.map { |field| Changes::FieldRemoved.new(old_iface, field) }
30
+ removed = old_fields.values.select { |field| !new_fields[field.graphql_name] }
31
+ removed.map { |field| Changes::FieldRemoved.new(old_interface, field) }
32
32
  end
33
33
 
34
34
  def field_additions
35
- added = new_fields.values.select { |field| !old_fields[field.name] }
36
- added.map { |field| Changes::FieldAdded.new(new_iface, field) }
35
+ added = new_fields.values.select { |field| !old_fields[field.graphql_name] }
36
+ added.map { |field| Changes::FieldAdded.new(new_interface, field) }
37
37
  end
38
38
 
39
39
  def each_common_field(&block)
40
40
  intersection = old_fields.keys & new_fields.keys
41
41
  intersection.each do |common_field|
42
- old_field = old_iface.fields[common_field]
43
- new_field = new_iface.fields[common_field]
42
+ old_field = old_interface.fields[common_field]
43
+ new_field = new_interface.fields[common_field]
44
44
 
45
45
  block.call(old_field, new_field)
46
46
  end
@@ -40,22 +40,26 @@ module GraphQL
40
40
  )
41
41
 
42
42
  def interface_removals
43
- removed = old_interfaces.select { |iface| !new_interfaces.include?(iface) }
44
- removed.map { |iface| Changes::ObjectTypeInterfaceRemoved.new(iface, old_type) }
43
+ removed = filter_interfaces(old_interfaces, new_interfaces)
44
+ removed.map { |interface| Changes::ObjectTypeInterfaceRemoved.new(interface, old_type) }
45
45
  end
46
46
 
47
47
  def interface_additions
48
- added = new_interfaces.select { |iface| !old_interfaces.include?(iface) }
49
- added.map { |iface| Changes::ObjectTypeInterfaceAdded.new(iface, new_type) }
48
+ added = filter_interfaces(new_interfaces, old_interfaces)
49
+ added.map { |interface| Changes::ObjectTypeInterfaceAdded.new(interface, new_type) }
50
+ end
51
+
52
+ def filter_interfaces(interfaces, excluded_interfaces)
53
+ interfaces.select { |interface| !excluded_interfaces.map(&:graphql_name).include?(interface.graphql_name) }
50
54
  end
51
55
 
52
56
  def field_removals
53
- removed = old_fields.values.select { |field| !new_fields[field.name] }
57
+ removed = old_fields.values.select { |field| !new_fields[field.graphql_name] }
54
58
  removed.map { |field| Changes::FieldRemoved.new(old_type, field) }
55
59
  end
56
60
 
57
61
  def field_additions
58
- added = new_fields.values.select { |field| !old_fields[field.name] }
62
+ added = new_fields.values.select { |field| !old_fields[field.graphql_name] }
59
63
  added.map { |field| Changes::FieldAdded.new(new_type, field) }
60
64
  end
61
65
 
@@ -40,16 +40,16 @@ module GraphQL
40
40
  if old_type.kind != new_type.kind
41
41
  changes << Changes::TypeKindChanged.new(old_type, new_type)
42
42
  else
43
- case old_type
44
- when GraphQL::EnumType
43
+ case old_type.kind.name
44
+ when "ENUM"
45
45
  changes += Diff::Enum.new(old_type, new_type).diff
46
- when GraphQL::UnionType
46
+ when "UNION"
47
47
  changes += Diff::Union.new(old_type, new_type).diff
48
- when GraphQL::InputObjectType
48
+ when "INPUT_OBJECT"
49
49
  changes += Diff::InputObject.new(old_type, new_type).diff
50
- when GraphQL::ObjectType
50
+ when "OBJECT"
51
51
  changes += Diff::ObjectType.new(old_type, new_type).diff
52
- when GraphQL::InterfaceType
52
+ when "INTERFACE"
53
53
  changes += Diff::Interface.new(old_type, new_type).diff
54
54
  end
55
55
  end
@@ -64,15 +64,15 @@ module GraphQL
64
64
  def changes_in_schema
65
65
  changes = []
66
66
 
67
- if old_schema.query != new_schema.query
67
+ if old_schema.query&.graphql_name != new_schema.query&.graphql_name
68
68
  changes << Changes::SchemaQueryTypeChanged.new(old_schema, new_schema)
69
69
  end
70
70
 
71
- if old_schema.mutation != new_schema.mutation
71
+ if old_schema.mutation&.graphql_name != new_schema.mutation&.graphql_name
72
72
  changes << Changes::SchemaMutationTypeChanged.new(old_schema, new_schema)
73
73
  end
74
74
 
75
- if old_schema.subscription != new_schema.subscription
75
+ if old_schema.subscription&.graphql_name != new_schema.subscription&.graphql_name
76
76
  changes << Changes::SchemaSubscriptionTypeChanged.new(old_schema, new_schema)
77
77
  end
78
78
 
@@ -26,11 +26,15 @@ module GraphQL
26
26
  attr_reader :old_type, :new_type, :old_possible_types, :new_possible_types
27
27
 
28
28
  def removed_possible_types
29
- old_possible_types.select { |type| !new_possible_types.include?(type) }
29
+ filter_types(old_possible_types, new_possible_types)
30
30
  end
31
31
 
32
32
  def added_possible_types
33
- new_possible_types.select { |type| !old_possible_types.include?(type) }
33
+ filter_types(new_possible_types, old_possible_types)
34
+ end
35
+
36
+ def filter_types(types, exclude_types)
37
+ types.select { |type| !exclude_types.map(&:graphql_name).include?(type.graphql_name) }
34
38
  end
35
39
  end
36
40
  end
@@ -1,5 +1,5 @@
1
1
  module GraphQL
2
2
  module SchemaComparator
3
- VERSION = "0.6.0"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
@@ -35,7 +35,7 @@ module GraphQL
35
35
  private
36
36
 
37
37
  def self.parse_schema(schema)
38
- if schema.is_a?(GraphQL::Schema)
38
+ if schema.respond_to?(:ancestors) && schema.ancestors.include?(GraphQL::Schema)
39
39
  schema
40
40
  elsif schema.is_a?(String)
41
41
  GraphQL::Schema.from_definition(schema)
metadata CHANGED
@@ -1,55 +1,67 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql-schema_comparator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marc-Andre Giroux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-28 00:00:00.000000000 Z
11
+ date: 2021-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: graphql
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: '1.6'
22
+ version: '3.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: '1.6'
29
+ version: '1.10'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: thor
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - "~>"
37
+ - - ">="
32
38
  - !ruby/object:Gem::Version
33
39
  version: '0.19'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.0'
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
- - - "~>"
47
+ - - ">="
39
48
  - !ruby/object:Gem::Version
40
49
  version: '0.19'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.0'
41
53
  - !ruby/object:Gem::Dependency
42
54
  name: bundler
43
55
  requirement: !ruby/object:Gem::Requirement
44
56
  requirements:
45
- - - "~>"
57
+ - - ">="
46
58
  - !ruby/object:Gem::Version
47
59
  version: '1.14'
48
- type: :development
60
+ type: :runtime
49
61
  prerelease: false
50
62
  version_requirements: !ruby/object:Gem::Requirement
51
63
  requirements:
52
- - - "~>"
64
+ - - ">="
53
65
  - !ruby/object:Gem::Version
54
66
  version: '1.14'
55
67
  - !ruby/object:Gem::Dependency
@@ -94,7 +106,7 @@ dependencies:
94
106
  - - "~>"
95
107
  - !ruby/object:Gem::Version
96
108
  version: '3.4'
97
- description: GraphQL::SchemaComparator compares two GraphQL schemas given their IDL
109
+ description: GraphQL::SchemaComparator compares two GraphQL schemas given their SDL
98
110
  and returns a list of changes.
99
111
  email:
100
112
  - mgiroux0@gmail.com
@@ -104,8 +116,8 @@ executables:
104
116
  extensions: []
105
117
  extra_rdoc_files: []
106
118
  files:
119
+ - ".github/workflows/ci.yml"
107
120
  - ".gitignore"
108
- - ".travis.yml"
109
121
  - CHANGELOG.md
110
122
  - CODE_OF_CONDUCT.md
111
123
  - Gemfile
@@ -116,6 +128,9 @@ files:
116
128
  - bin/graphql-schema
117
129
  - bin/schema_comparator
118
130
  - bin/setup
131
+ - gemfiles/graphql-head.gemfile
132
+ - gemfiles/graphql1.10.gemfile
133
+ - gemfiles/graphql1.13.gemfile
119
134
  - graphql-schema_comparator.gemspec
120
135
  - lib/graphql/schema_comparator.rb
121
136
  - lib/graphql/schema_comparator/changes.rb
@@ -126,7 +141,6 @@ files:
126
141
  - lib/graphql/schema_comparator/diff/directive_argument.rb
127
142
  - lib/graphql/schema_comparator/diff/enum.rb
128
143
  - lib/graphql/schema_comparator/diff/field.rb
129
- - lib/graphql/schema_comparator/diff/has_directives.rb
130
144
  - lib/graphql/schema_comparator/diff/input_field.rb
131
145
  - lib/graphql/schema_comparator/diff/input_object.rb
132
146
  - lib/graphql/schema_comparator/diff/interface.rb
@@ -136,10 +150,14 @@ files:
136
150
  - lib/graphql/schema_comparator/result.rb
137
151
  - lib/graphql/schema_comparator/version.rb
138
152
  - schema.graphql
139
- homepage: http://mgiroux.me
153
+ homepage: https://github.com/xuorig/graphql-schema_comparator
140
154
  licenses:
141
155
  - MIT
142
- metadata: {}
156
+ metadata:
157
+ homepage_uri: https://github.com/xuorig/graphql-schema_comparator
158
+ changelog_uri: https://github.com/xuorig/graphql-schema_comparator/blob/master/CHANGELOG.md
159
+ source_code_uri: https://github.com/xuorig/graphql-schema_comparator
160
+ bug_tracker_uri: https://github.com/xuorig/graphql-schema_comparator/issues
143
161
  post_install_message:
144
162
  rdoc_options: []
145
163
  require_paths:
@@ -155,8 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
173
  - !ruby/object:Gem::Version
156
174
  version: '0'
157
175
  requirements: []
158
- rubyforge_project:
159
- rubygems_version: 2.6.8
176
+ rubygems_version: 3.0.3.1
160
177
  signing_key:
161
178
  specification_version: 4
162
179
  summary: Compare GraphQL schemas and get the changes that happened.
data/.travis.yml DELETED
@@ -1,10 +0,0 @@
1
- ---
2
- language: ruby
3
- sudo: false
4
- cache: bundler
5
- before_install:
6
- - gem update --system --no-doc
7
- - gem install bundler
8
- rvm:
9
- - 2.3.4
10
- - 2.4.1
File without changes