swagger-diff 1.0.3 → 1.0.4

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
  SHA1:
3
- metadata.gz: 7ae6fdf94f4dc25c8bfbf9f42bb07ff0ebba67af
4
- data.tar.gz: 9e8f57a36a415c6b4fc81d0cb3c78d141aa99e8b
3
+ metadata.gz: 8152e95fa05dcd25376b7f726edab41888836072
4
+ data.tar.gz: 752d5db3f0c6410341336930e1b70a28ac524862
5
5
  SHA512:
6
- metadata.gz: c00e84cc7383e90c6ef54c58b6f0223148bd7aed155fe5abaf8501620eea913fc8232cf51decf13fdbf05b309dba541db89e4d65b33cbf9a1c731b2cba78423a
7
- data.tar.gz: fd40d8875ffd46534e3b1780290c8bef4beeb9f21280b862636225ccf954ac541c139d4286210b91653b7ac2e6c29f30a948a2defe68567c08d8c0b48bf6333e
6
+ metadata.gz: c3e70c465faaf5936d41ff58e6765ad841dd36c10037050fd3b6e274bf7c8cad23ad302400cf21468b8bb747eaaef0cf13e63831b72689a2e6ae34643fb6c0f4
7
+ data.tar.gz: d6456a1a767e7bcace9da7cda0f8de1b0c1542ab93b24ee977a846e5d2441f5c1ae43e680f540f9e9cc2d3a8e6d96bd0271fa2a2c36207d140f07877f20f8bf7
@@ -1,2 +1,5 @@
1
1
  language: ruby
2
2
  cache: bundler
3
+ branches:
4
+ only:
5
+ - master
@@ -1,5 +1,14 @@
1
1
  # Change Log
2
2
 
3
+ ## 1.0.4 (2015-11-11)
4
+
5
+ ### Bugs Fixed
6
+
7
+ * [#14](https://github.com/civisanalytics/swagger-diff/pull/14)
8
+ allow schema definitions without properties
9
+ * [#15](https://github.com/civisanalytics/swagger-diff/pull/15)
10
+ parse non-ref response schemas (`allOf`, `properties`, and `items`)
11
+
3
12
  ## 1.0.3 (2015-11-04)
4
13
 
5
14
  ### Changes
data/README.md CHANGED
@@ -57,8 +57,8 @@ Specifications can be any
57
57
  `http://host.domain/swagger.yml`)
58
58
  - a Hash containing a parsed Swagger specification (*e.g.*, the output of
59
59
  `JSON.parse`)
60
- - a string of JSON containing Swagger specification
61
- - a string of YAML containing Swagger specification
60
+ - a string of JSON containing a Swagger specification
61
+ - a string of YAML containing a Swagger specification
62
62
 
63
63
  ### RSpec
64
64
 
@@ -85,14 +85,14 @@ request parameters, and response attributes; *e.g.*,
85
85
  ```ruby
86
86
  { endpoints: ['put /a/{}'],
87
87
  request_params: {
88
- 'get /a/' => ['missing request param: limit (type: integer)'],
88
+ 'get /a/' => ['missing request param: limit (in: query, type: integer)'],
89
89
  'post /a/' => ['new required request param: extra'],
90
90
  'put /b/{}' => ['new required request param: extra']
91
91
  },
92
92
  response_attributes: {
93
- 'post /a/' => ['missing attribute from 200 response: description (type: string)'],
94
- 'get /a/{}' => ['missing attribute from 200 response: description (type: string)'],
95
- 'put /b/{}' => ['missing attribute from 200 response: description (type: string)']
93
+ 'post /a/' => ['missing attribute from 200 response: description (in: body, type: string)'],
94
+ 'get /a/{}' => ['missing attribute from 200 response: description (in: body, type: string)'],
95
+ 'put /b/{}' => ['missing attribute from 200 response: description (in: body, type: string)']
96
96
  }
97
97
  }
98
98
  ```
@@ -13,3 +13,17 @@ OAUTH2_PARAMS = [:flow, :authorizationUrl, :scopes]
13
13
  Swagger::V2::SecurityScheme.required_properties.reject! do |k, _|
14
14
  OAUTH2_PARAMS.include?(k)
15
15
  end
16
+
17
+ # Workaround for Swagger::V2::Operation[1] not including deprecated. Patching
18
+ # pending a merge/release of #11[2].
19
+ #
20
+ # [1] https://github.com/swagger-rb/swagger-rb/blob/master/lib/swagger/v2/operation.rb
21
+ # [2] https://github.com/swagger-rb/swagger-rb/pull/12/files
22
+
23
+ module Swagger
24
+ module V2
25
+ class Operation
26
+ field :deprecated, String
27
+ end
28
+ end
29
+ end
@@ -84,22 +84,40 @@ module Swagger
84
84
  # parameter definitions (i.e., all parameters, including nested
85
85
  # parameters, are included in a single set).
86
86
  def refs(ref, prefix = '')
87
- definitions = @parsed.definitions
88
87
  idx = ref.rindex('/')
89
88
  key = ref[idx + 1..-1]
90
- ret = {}
91
- if definitions[key].allOf
92
- definitions[key].allOf.each do |schema|
93
- if schema['$ref']
94
- merge_refs!(ret, refs(schema['$ref'], prefix))
95
- else
96
- merge_refs!(ret, properties(schema.properties, schema.required, prefix))
97
- end
89
+ schema(@parsed.definitions[key], prefix)
90
+ end
91
+
92
+ def all_of!(definitions, prefix, ret)
93
+ definitions.each do |s|
94
+ if s['$ref']
95
+ merge_refs!(ret, refs(s['$ref'], prefix))
96
+ else
97
+ merge_refs!(ret, schema(s, prefix))
98
98
  end
99
- else
99
+ end
100
+ ret
101
+ end
102
+
103
+ def array?(definition)
104
+ definition.type && definition.type == 'array' && definition.items
105
+ end
106
+
107
+ def schema(definition, prefix = '')
108
+ ret = { required: Set.new, all: Set.new }
109
+ if definition.allOf
110
+ all_of!(definition.allOf, prefix, ret)
111
+ elsif definition['$ref']
112
+ merge_refs!(ret, refs(definition['$ref'], prefix))
113
+ elsif definition.properties
100
114
  merge_refs!(ret,
101
- properties(definitions[key].properties,
102
- definitions[key].required, prefix))
115
+ properties(definition.properties,
116
+ definition.required, prefix))
117
+ elsif array?(definition)
118
+ merge_refs!(ret, schema(definition.items, "#{prefix}[]/"))
119
+ elsif definition.type == 'object'
120
+ ret[:all].add(hash_property(definition, prefix))
103
121
  end
104
122
  ret
105
123
  end
@@ -129,6 +147,28 @@ module Swagger
129
147
  ret
130
148
  end
131
149
 
150
+ def hash_property(definition, prefix, name = '')
151
+ # Swagger 2.0 doesn't appear to support non-string keys[1]. If
152
+ # this changes, this will need to be updated.
153
+ # [1] https://github.com/swagger-api/swagger-spec/issues/299
154
+ # TODO: this doesn't handle hashes of objects.
155
+ key = if name == ''
156
+ # Remove the trailing slash, if present and no name was
157
+ # specified (a prefix will always either be blank or end in a
158
+ # trailing slash).
159
+ prefix[0..-2]
160
+ else
161
+ "#{prefix}#{name}"
162
+ end
163
+ type = if definition.additionalProperties &&
164
+ definition.additionalProperties.type
165
+ definition.additionalProperties.type
166
+ else
167
+ '*'
168
+ end
169
+ "#{key} (in: body, type: Hash[string, #{type}])"
170
+ end
171
+
132
172
  def properties(properties, required, prefix = '')
133
173
  ret = { required: Set.new, all: Set.new }
134
174
  properties.each do |name, schema|
@@ -138,17 +178,7 @@ module Swagger
138
178
  if schema.allOf
139
179
  # TODO: handle nested allOfs.
140
180
  else
141
- # Swagger 2.0 doesn't appear to support non-string keys[1]. If
142
- # this changes, this will need to be updated.
143
- # [1] https://github.com/swagger-api/swagger-spec/issues/299
144
- # TODO: this doesn't handle hashes of objects.
145
- type = if schema.additionalProperties &&
146
- schema.additionalProperties.type
147
- schema.additionalProperties.type
148
- else
149
- '*'
150
- end
151
- ret[:all].add("#{prefix}#{name} (in: body, type: Hash[string, #{type}])")
181
+ ret[:all].add(hash_property(schema, prefix, name))
152
182
  end
153
183
  else
154
184
  merge_refs!(ret, properties_for_ref(prefix, name, schema, required))
@@ -175,14 +205,7 @@ module Swagger
175
205
  ret = {}
176
206
  endpoint.responses.each do |code, response|
177
207
  if response.schema
178
- if response.schema.include?('type') && response.schema.type == 'array'
179
- ref = response.schema.items['$ref']
180
- prefix = '[]/'
181
- else
182
- ref = response.schema['$ref']
183
- prefix = ''
184
- end
185
- ret[code] = refs(ref, prefix)[:all]
208
+ ret[code] = schema(response.schema)[:all]
186
209
  else
187
210
  ret[code] = Set.new
188
211
  end
@@ -1,5 +1,5 @@
1
1
  module Swagger
2
2
  module Diff
3
- VERSION = '1.0.3'
3
+ VERSION = '1.0.4'
4
4
  end
5
5
  end
@@ -28,7 +28,7 @@ and helper functions that can be used directly.'
28
28
  spec.add_development_dependency 'rake', '~> 10.4'
29
29
  spec.add_development_dependency 'rspec', '~> 3.3'
30
30
  spec.add_development_dependency 'pry', '~> 0.10.1'
31
- spec.add_development_dependency 'rubocop', '~> 0.34.0'
32
- spec.add_development_dependency 'vcr', '~> 2.9'
31
+ spec.add_development_dependency 'rubocop', '~> 0.35.0'
32
+ spec.add_development_dependency 'vcr', '~> 3.0'
33
33
  spec.add_development_dependency 'webmock', '~> 1.21'
34
34
  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: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Cousens
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-04 00:00:00.000000000 Z
11
+ date: 2015-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: swagger-core
@@ -100,28 +100,28 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.34.0
103
+ version: 0.35.0
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: 0.34.0
110
+ version: 0.35.0
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: '2.9'
117
+ version: '3.0'
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: '2.9'
124
+ version: '3.0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: webmock
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -195,4 +195,3 @@ signing_key:
195
195
  specification_version: 4
196
196
  summary: Utility for comparing two Swagger specifications.
197
197
  test_files: []
198
- has_rdoc: