swagger-diff 1.0.3 → 1.0.4

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
  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: