swagger-diff 1.1.2 → 2.0.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 +5 -5
- data/.rubocop.yml +5 -4
- data/.ruby-version +1 -1
- data/.travis.yml +4 -5
- data/CHANGELOG.md +12 -1
- data/README.md +1 -2
- data/lib/swagger/diff/diff.rb +5 -1
- data/lib/swagger/diff/specification.rb +31 -31
- data/lib/swagger/diff/version.rb +1 -1
- data/swagger-diff.gemspec +9 -10
- metadata +24 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 77e08e6693a59f44f05a4e2afad7ac7e6050d7b3991e5321ab600562676850ad
|
4
|
+
data.tar.gz: 5637e276a82f0db237e75cef473115016992303d5d80e1f369428bd1be3e4050
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35005cdb5e4fd49a87573d18609cbc6dbdbd7ddcd3f7034fa54ef2fd259ad08ebaba9927adfc066afb9e2d5908461110ef4664d4df8adf30fea3062ed1bab9f3
|
7
|
+
data.tar.gz: 3b84d0a98e462afc139976b855bbfde692bf96cc5bbb54e186d4e2d7f57cc3de2892a6d0d117769924a5953118d53f0f621c2731a2d5a1ef739db01163540331
|
data/.rubocop.yml
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
AllCops:
|
2
|
-
TargetRubyVersion: 2.
|
2
|
+
TargetRubyVersion: 2.7
|
3
|
+
NewCops: enable
|
3
4
|
|
4
|
-
Layout/
|
5
|
+
Layout/HeredocIndentation:
|
5
6
|
Enabled: false
|
6
7
|
|
7
8
|
Metrics/AbcSize:
|
@@ -15,7 +16,7 @@ Metrics/BlockLength:
|
|
15
16
|
Metrics/ClassLength:
|
16
17
|
Max: 250
|
17
18
|
|
18
|
-
|
19
|
+
Layout/LineLength:
|
19
20
|
Max: 120
|
20
21
|
|
21
22
|
Metrics/MethodLength:
|
@@ -31,7 +32,7 @@ Security/YAMLLoad:
|
|
31
32
|
Style/Documentation:
|
32
33
|
Enabled: false
|
33
34
|
|
34
|
-
|
35
|
+
Naming/FileName:
|
35
36
|
Enabled: false
|
36
37
|
|
37
38
|
Style/FrozenStringLiteralComment:
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
3.2.1
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,17 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
5
5
|
|
6
6
|
## [Unreleased]
|
7
7
|
|
8
|
+
## [2.0.0]
|
9
|
+
|
10
|
+
### Changed
|
11
|
+
|
12
|
+
* Bumped the Ruby version for development to 2.7.7
|
13
|
+
* Bumped the RuboCop version for development to 1.48.0
|
14
|
+
* Bumped the Travis matrix to 2.7.7, 3.0.5, 3.1.3, 3.2.1
|
15
|
+
* Bumped the Pry version for development to 0.14.1
|
16
|
+
* Bumped the VCR version for development to 6.1
|
17
|
+
* RuboCop fixes
|
18
|
+
|
8
19
|
## [1.1.2] - 2017-09-13
|
9
20
|
|
10
21
|
### Fixed
|
@@ -104,7 +115,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
104
115
|
|
105
116
|
* Initial Release
|
106
117
|
|
107
|
-
[
|
118
|
+
[2.0.0]: https://github.com/civisanalytics/swagger-diff/compare/v1.1.2...v2.0.0
|
108
119
|
[1.1.2]: https://github.com/civisanalytics/swagger-diff/compare/v1.1.1...v1.1.2
|
109
120
|
[1.1.1]: https://github.com/civisanalytics/swagger-diff/compare/v1.1.0...v1.1.1
|
110
121
|
[1.1.0]: https://github.com/civisanalytics/swagger-diff/compare/v1.0.5...v1.1.0
|
data/README.md
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/civisanalytics/swagger-diff)
|
4
4
|
[](http://badge.fury.io/rb/swagger-diff)
|
5
|
-
[](https://gemnasium.com/civisanalytics/swagger-diff)
|
6
5
|
|
7
6
|

|
8
7
|
|
@@ -31,7 +30,7 @@ Specifications are considered backwards compatible if:
|
|
31
30
|
It can also be used to enumerate all changes between two specifications (*i.e.*,
|
32
31
|
to generate a changelog).
|
33
32
|
|
34
|
-
Read more on the [Civis Analytics blog](https://civisanalytics.com/blog/
|
33
|
+
Read more on the [Civis Analytics blog](https://www.civisanalytics.com/blog/if-it-loses-its-quack-does-it-still-talk-like-a-duck-using-swagger-to-detect-breaking-api-changes/).
|
35
34
|
|
36
35
|
## Installation
|
37
36
|
|
data/lib/swagger/diff/diff.rb
CHANGED
@@ -133,6 +133,7 @@ module Swagger
|
|
133
133
|
def new_child?(req, old)
|
134
134
|
idx = req.rindex('/')
|
135
135
|
return false unless idx
|
136
|
+
|
136
137
|
key = req[0..idx]
|
137
138
|
old.none? { |param| param.start_with?(key) }
|
138
139
|
end
|
@@ -142,8 +143,10 @@ module Swagger
|
|
142
143
|
from.request_params.each do |key, old_params|
|
143
144
|
new_params = to.request_params[key]
|
144
145
|
next if new_params.nil?
|
146
|
+
|
145
147
|
(new_params[:required] - old_params[:required]).each do |req|
|
146
148
|
next if new_child?(req, old_params[:all])
|
149
|
+
|
147
150
|
yielder << [key, format(req_msg, req: req)]
|
148
151
|
end
|
149
152
|
(old_params[:all] - new_params[:all]).each do |req|
|
@@ -181,7 +184,8 @@ module Swagger
|
|
181
184
|
from.response_attributes.each do |key, old_attributes|
|
182
185
|
new_attributes = to.response_attributes[key]
|
183
186
|
next if new_attributes.nil?
|
184
|
-
|
187
|
+
|
188
|
+
old_attributes.each_key do |code|
|
185
189
|
if new_attributes.key?(code)
|
186
190
|
(old_attributes[code] - new_attributes[code]).each do |resp|
|
187
191
|
yielder << [key, format(attr_msg, code: code, resp: resp)]
|
@@ -14,46 +14,48 @@ module Swagger
|
|
14
14
|
|
15
15
|
def request_params
|
16
16
|
@request_params ||= begin
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
ret = {}
|
18
|
+
@endpoint_hash.each do |key, endpoint|
|
19
|
+
ret[key] = request_params_inner(params_or_nil(endpoint))
|
20
|
+
end
|
21
|
+
ret
|
22
|
+
end
|
23
23
|
end
|
24
24
|
|
25
25
|
def response_attributes
|
26
26
|
@response_attributes ||= begin
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
ret = {}
|
28
|
+
@endpoint_hash.each do |key, endpoint|
|
29
|
+
ret[key] = response_attributes_inner(endpoint)
|
30
|
+
end
|
31
|
+
ret
|
32
|
+
end
|
33
33
|
end
|
34
34
|
|
35
35
|
private
|
36
36
|
|
37
|
-
def merge_refs!(
|
38
|
-
|
39
|
-
if
|
40
|
-
|
37
|
+
def merge_refs!(hash1, hash2)
|
38
|
+
hash2.each do |k, v|
|
39
|
+
if hash1.include?(k)
|
40
|
+
hash1[k] += hash1[k].merge(v)
|
41
41
|
else
|
42
|
-
|
42
|
+
hash1[k] = v
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
def params_or_nil(endpoint)
|
48
|
-
endpoint && endpoint['parameters'] || nil
|
48
|
+
(endpoint && endpoint['parameters']) || nil
|
49
49
|
end
|
50
50
|
|
51
51
|
def parse_swagger(swagger)
|
52
52
|
if swagger.is_a? Hash
|
53
53
|
swagger
|
54
54
|
else
|
55
|
-
if File.exist?(swagger)
|
56
|
-
swagger =
|
55
|
+
if File.exist?(swagger)
|
56
|
+
swagger = File.read(swagger)
|
57
|
+
elsif swagger[0..7] =~ %r{^https?://}
|
58
|
+
swagger = URI.parse(swagger).read
|
57
59
|
end
|
58
60
|
begin
|
59
61
|
JSON.parse(swagger)
|
@@ -104,7 +106,7 @@ module Swagger
|
|
104
106
|
{}
|
105
107
|
end
|
106
108
|
idx = ref.rindex('/')
|
107
|
-
key = ref[idx + 1
|
109
|
+
key = ref[idx + 1..]
|
108
110
|
schema(defs.fetch(key, {}), prefix)
|
109
111
|
end
|
110
112
|
|
@@ -150,7 +152,7 @@ module Swagger
|
|
150
152
|
# rubocop:enable Metrics/CyclomaticComplexity
|
151
153
|
# rubocop:enable Metrics/AbcSize
|
152
154
|
|
153
|
-
def nested(ref, prefix, name, list
|
155
|
+
def nested(ref, prefix, name, list: false)
|
154
156
|
# Check for cycles by testing whether name was already added to
|
155
157
|
# prefix.
|
156
158
|
key = "#{prefix}#{name}#{'[]' if list}"
|
@@ -175,20 +177,16 @@ module Swagger
|
|
175
177
|
# rubocop:disable Metrics/ParameterLists
|
176
178
|
def add_property(ret, prefix, name, schema, required, list)
|
177
179
|
key = "#{prefix}#{name}"
|
178
|
-
ret[:required].add(key) if required
|
179
|
-
loc =
|
180
|
-
schema['in']
|
181
|
-
else
|
182
|
-
'body'
|
183
|
-
end
|
180
|
+
ret[:required].add(key) if required&.include?(name)
|
181
|
+
loc = schema['in'] || 'body'
|
184
182
|
ret[:all].add("#{key} (in: #{loc}, type: #{schema['type']}#{'[]' if list})")
|
185
183
|
end
|
186
184
|
# rubocop:enable Metrics/ParameterLists
|
187
185
|
|
188
|
-
def properties_for_ref(prefix, name, schema, required, list
|
186
|
+
def properties_for_ref(prefix, name, schema, required, list: false)
|
189
187
|
ret = { required: Set.new, all: Set.new }
|
190
188
|
if schema['$ref']
|
191
|
-
merge_refs!(ret, nested(schema['$ref'], prefix, name, list))
|
189
|
+
merge_refs!(ret, nested(schema['$ref'], prefix, name, list: list))
|
192
190
|
elsif schema['properties']
|
193
191
|
prefix = "#{name}#{'[]' if list}/"
|
194
192
|
merge_refs!(ret, properties(schema['properties'], schema['required'], prefix))
|
@@ -224,7 +222,7 @@ module Swagger
|
|
224
222
|
ret = { required: Set.new, all: Set.new }
|
225
223
|
properties.each do |name, schema|
|
226
224
|
if schema['type'] == 'array'
|
227
|
-
merge_refs!(ret, properties_for_ref(prefix, name, schema['items'], required, true))
|
225
|
+
merge_refs!(ret, properties_for_ref(prefix, name, schema['items'], required, list: true))
|
228
226
|
elsif schema['type'] == 'object' || schema['properties']
|
229
227
|
if schema['allOf']
|
230
228
|
# TODO: handle nested allOfs.
|
@@ -243,6 +241,7 @@ module Swagger
|
|
243
241
|
def request_params_inner(params)
|
244
242
|
ret = { required: Set.new, all: Set.new }
|
245
243
|
return ret if params.nil?
|
244
|
+
|
246
245
|
params.each do |param|
|
247
246
|
if param['in'] == 'body'
|
248
247
|
merge_refs!(ret, schema(param['schema']))
|
@@ -287,6 +286,7 @@ module Swagger
|
|
287
286
|
JSON::Validator.add_schema(json_schema)
|
288
287
|
errors = JSON::Validator.fully_validate(schema_for('oai'), JSON.dump(@parsed))
|
289
288
|
return if errors.empty?
|
289
|
+
|
290
290
|
spec = if @spec.to_s.length > 80
|
291
291
|
"#{@spec.to_s[0..74]} ..."
|
292
292
|
else
|
data/lib/swagger/diff/version.rb
CHANGED
data/swagger-diff.gemspec
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
lib = File.expand_path('../lib', __FILE__)
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
4
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
require 'swagger/diff/version'
|
6
4
|
|
@@ -27,15 +25,16 @@ Gem::Specification.new do |spec|
|
|
27
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
26
|
spec.require_paths = ['lib']
|
29
27
|
|
30
|
-
spec.required_ruby_version = '
|
28
|
+
spec.required_ruby_version = '>= 2.7'
|
31
29
|
|
32
|
-
spec.add_dependency 'json-schema', '~>
|
30
|
+
spec.add_dependency 'json-schema', '~> 3.0'
|
33
31
|
spec.add_dependency 'rspec-expectations', '~> 3.3'
|
34
|
-
spec.add_development_dependency 'bundler', '~>
|
35
|
-
spec.add_development_dependency '
|
32
|
+
spec.add_development_dependency 'bundler', '~> 2.4.9'
|
33
|
+
spec.add_development_dependency 'pry', '~> 0.14.1'
|
34
|
+
spec.add_development_dependency 'rake', '~> 12.3'
|
36
35
|
spec.add_development_dependency 'rspec', '~> 3.3'
|
37
|
-
spec.add_development_dependency '
|
38
|
-
spec.add_development_dependency '
|
39
|
-
spec.add_development_dependency 'vcr', '~> 3.0'
|
36
|
+
spec.add_development_dependency 'rubocop', '~> 1.48.1'
|
37
|
+
spec.add_development_dependency 'vcr', '~> 6.1'
|
40
38
|
spec.add_development_dependency 'webmock', '~> 3.0'
|
39
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
41
40
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swagger-diff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Cousens
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json-schema
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '3.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '3.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec-expectations
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,84 +44,84 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.4.9
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.4.9
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.14.1
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.14.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '12.3'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '12.3'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: '3.3'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: '3.3'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rubocop
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 1.48.1
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 1.48.1
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: vcr
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '6.1'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '6.1'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: webmock
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,24 +176,24 @@ files:
|
|
176
176
|
homepage: https://github.com/civisanalytics/swagger-diff
|
177
177
|
licenses:
|
178
178
|
- BSD 3-Clause
|
179
|
-
metadata:
|
179
|
+
metadata:
|
180
|
+
rubygems_mfa_required: 'true'
|
180
181
|
post_install_message:
|
181
182
|
rdoc_options: []
|
182
183
|
require_paths:
|
183
184
|
- lib
|
184
185
|
required_ruby_version: !ruby/object:Gem::Requirement
|
185
186
|
requirements:
|
186
|
-
- - "
|
187
|
+
- - ">="
|
187
188
|
- !ruby/object:Gem::Version
|
188
|
-
version: '2.
|
189
|
+
version: '2.7'
|
189
190
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
191
|
requirements:
|
191
192
|
- - ">="
|
192
193
|
- !ruby/object:Gem::Version
|
193
194
|
version: '0'
|
194
195
|
requirements: []
|
195
|
-
|
196
|
-
rubygems_version: 2.6.13
|
196
|
+
rubygems_version: 3.4.6
|
197
197
|
signing_key:
|
198
198
|
specification_version: 4
|
199
199
|
summary: Utility for comparing two OAI (fka Swagger) specifications.
|