rswag-specs 2.3.1 → 2.5.0.rc1

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
  SHA256:
3
- metadata.gz: dbd72991a0a570bfd0ea282f3706381c7fc0ccdee68547da8de08eb0d61ff35e
4
- data.tar.gz: b40c90193b97e244358e6a18890b60c353b96561a8ea12e9942d4ebce82e1a6d
3
+ metadata.gz: 0337b822234111d51e0497b909b48a516359c377d60281fca510757737d4ec5b
4
+ data.tar.gz: efbab52e3fde30f2b29861c03b1ccc7aaeece2a6ed4136e87f0240fbcb257a30
5
5
  SHA512:
6
- metadata.gz: abecdd7712ea7396ef8dc8f5eba91e78f2b9191b4c8c65cf44f5b7cfdcd47fb842708221c102a3e887a5ddf6da115a782c2cc70df965e450b7cf04843884e1b7
7
- data.tar.gz: 64a92513ed2f01fb302b1da82877311760a5ed62daa3d63a1f4644df87e7e0bfd4018ec4e549ccf66f6d8fc6ca4366d88c02de2149ff668d0e616080979b7606
6
+ metadata.gz: cd6b56b9d346ae29af299a02cbe48dc7bc308fc136b89fa973d56f89fbabab3e5f2910ff701097f3869be539c0b4592106a42b6e052351387694efeede956bae
7
+ data.tar.gz: e92f2795b54cdf75c5a70d547c11a60872456b0f88d929908a553014435950f2c6a1b0201eaac44b9b73e92ede8e75111d31e3822df8dbc44b086e36d6f1a4fd
@@ -19,7 +19,11 @@ RSpec.describe '<%= controller_path %>', type: :request do
19
19
  <% end -%>
20
20
 
21
21
  after do |example|
22
- example.metadata[:response][:examples] = { 'application/json' => JSON.parse(response.body, symbolize_names: true) }
22
+ example.metadata[:response][:content] = {
23
+ 'application/json' => {
24
+ example: JSON.parse(response.body, symbolize_names: true)
25
+ }
26
+ }
23
27
  end
24
28
  run_test!
25
29
  end
@@ -11,7 +11,7 @@ module Rswag
11
11
  def routes
12
12
  ::Rails.application.routes.routes.select do |route|
13
13
  route.defaults[:controller] == controller
14
- end.each_with_object({}) do |tree, route|
14
+ end.each_with_object({}) do |route, tree|
15
15
  path = path_from(route)
16
16
  verb = verb_from(route)
17
17
  tree[path] ||= { params: params_from(route), actions: {} }
@@ -28,9 +28,11 @@ module Rswag
28
28
  end
29
29
 
30
30
  def swagger_dry_run
31
- @swagger_dry_run ||= begin
32
- @rspec_config.swagger_dry_run.nil? || @rspec_config.swagger_dry_run
31
+ return @swagger_dry_run if defined? @swagger_dry_run
32
+ if ENV.key?('SWAGGER_DRY_RUN')
33
+ @rspec_config.swagger_dry_run = ENV['SWAGGER_DRY_RUN'] == '1'
33
34
  end
35
+ @swagger_dry_run = @rspec_config.swagger_dry_run.nil? || @rspec_config.swagger_dry_run
34
36
  end
35
37
 
36
38
  def swagger_format
@@ -72,7 +72,10 @@ module Rswag
72
72
  def examples(example = nil)
73
73
  return super() if example.nil?
74
74
 
75
- metadata[:response][:examples] = example
75
+ metadata[:response][:content] =
76
+ example.each_with_object({}) do |(mime, example_object), memo|
77
+ memo[mime] = { example: example_object }
78
+ end
76
79
  end
77
80
 
78
81
  def run_test!(&block)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
-
2
+ require "active_support"
3
3
  require 'active_support/core_ext/hash/slice'
4
4
  require 'active_support/core_ext/hash/conversions'
5
5
  require 'json'
@@ -118,7 +118,8 @@ module Rswag
118
118
 
119
119
  def build_query_string_part(param, value)
120
120
  name = param[:name]
121
- return "#{name}=#{value}" unless param[:type].to_sym == :array
121
+ type = param[:type] || param.dig(:schema, :type)
122
+ return "#{name}=#{value}" unless type&.to_sym == :array
122
123
 
123
124
  case param[:collectionFormat]
124
125
  when :ssv
@@ -193,12 +194,36 @@ module Rswag
193
194
 
194
195
  def build_json_payload(parameters, example)
195
196
  body_param = parameters.select { |p| p[:in] == :body }.first
196
- body_param ? example.send(body_param[:name]).to_json : nil
197
+
198
+ return nil unless body_param
199
+
200
+ raise(MissingParameterError, body_param[:name]) unless example.respond_to?(body_param[:name])
201
+
202
+ example.send(body_param[:name]).to_json
197
203
  end
198
204
 
199
205
  def doc_version(doc)
200
206
  doc[:openapi] || doc[:swagger] || '3'
201
207
  end
202
208
  end
209
+
210
+ class MissingParameterError < StandardError
211
+ attr_reader :body_param
212
+
213
+ def initialize(body_param)
214
+ @body_param = body_param
215
+ end
216
+
217
+ def message
218
+ <<~MSG
219
+ Missing parameter '#{body_param}'
220
+
221
+ Please check your spec. It looks like you defined a body parameter,
222
+ but did not declare usage via let. Try adding:
223
+
224
+ let(:#{body_param}) {}
225
+ MSG
226
+ end
227
+ end
203
228
  end
204
229
  end
@@ -50,7 +50,11 @@ module Rswag
50
50
  .merge(schemas)
51
51
 
52
52
  errors = JSON::Validator.fully_validate(validation_schema, body)
53
- raise UnexpectedResponse, "Expected response body to match schema: #{errors[0]}" if errors.any?
53
+ return unless errors.any?
54
+
55
+ raise UnexpectedResponse,
56
+ "Expected response body to match schema: #{errors[0]}\n" \
57
+ "Response body: #{JSON.pretty_generate(JSON.parse(body))}"
54
58
  end
55
59
 
56
60
  def definitions_or_component_schemas(swagger_doc, version)
@@ -62,7 +66,7 @@ module Rswag
62
66
  swagger_doc.slice(:definitions)
63
67
  else
64
68
  components = swagger_doc[:components] || {}
65
- { components: { schemas: components[:schemas] } }
69
+ { components: components }
66
70
  end
67
71
  end
68
72
  end
@@ -56,9 +56,10 @@ module Rswag
56
56
  is_hash = value.is_a?(Hash)
57
57
  if is_hash && value.dig(:parameters)
58
58
  schema_param = value.dig(:parameters)&.find { |p| (p[:in] == :body || p[:in] == :formData) && p[:schema] }
59
- mime_list = value.dig(:consumes)
59
+ mime_list = value.dig(:consumes) || doc[:consumes]
60
60
  if value && schema_param && mime_list
61
61
  value[:requestBody] = { content: {} } unless value.dig(:requestBody, :content)
62
+ value[:requestBody][:required] = true if schema_param[:required]
62
63
  mime_list.each do |mime|
63
64
  value[:requestBody][:content][mime] = { schema: schema_param[:schema] }
64
65
  end
@@ -129,13 +130,13 @@ module Rswag
129
130
  end
130
131
 
131
132
  def upgrade_content!(mime_list, target_node)
132
- target_node.merge!(content: {})
133
133
  schema = target_node[:schema]
134
134
  return if mime_list.empty? || schema.nil?
135
135
 
136
+ target_node[:content] ||= {}
136
137
  mime_list.each do |mime_type|
137
138
  # TODO upgrade to have content-type specific schema
138
- target_node[:content][mime_type] = { schema: schema }
139
+ (target_node[:content][mime_type] ||= {}).merge!(schema: schema)
139
140
  end
140
141
  end
141
142
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rswag-specs
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.5.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richie Morris
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-04-08 00:00:00.000000000 Z
13
+ date: 2022-02-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '3.1'
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
- version: '7.0'
24
+ version: '7.1'
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -31,7 +31,7 @@ dependencies:
31
31
  version: '3.1'
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
- version: '7.0'
34
+ version: '7.1'
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: railties
37
37
  requirement: !ruby/object:Gem::Requirement
@@ -41,7 +41,7 @@ dependencies:
41
41
  version: '3.1'
42
42
  - - "<"
43
43
  - !ruby/object:Gem::Version
44
- version: '7.0'
44
+ version: '7.1'
45
45
  type: :runtime
46
46
  prerelease: false
47
47
  version_requirements: !ruby/object:Gem::Requirement
@@ -51,7 +51,7 @@ dependencies:
51
51
  version: '3.1'
52
52
  - - "<"
53
53
  - !ruby/object:Gem::Version
54
- version: '7.0'
54
+ version: '7.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: json-schema
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,8 +66,9 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.2'
69
- description: Simplify API integration testing with a succinct rspec DSL and generate
70
- Swagger files directly from your rspecs
69
+ description: 'Simplify API integration testing with a succinct rspec DSL and generate
70
+ OpenAPI specification files directly from your rspecs. More about the OpenAPI initiative
71
+ here: http://spec.openapis.org/'
71
72
  email:
72
73
  - domaindrivendev@gmail.com
73
74
  executables: []
@@ -108,13 +109,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
108
109
  version: '0'
109
110
  required_rubygems_version: !ruby/object:Gem::Requirement
110
111
  requirements:
111
- - - ">="
112
+ - - ">"
112
113
  - !ruby/object:Gem::Version
113
- version: '0'
114
+ version: 1.3.1
114
115
  requirements: []
115
- rubygems_version: 3.0.6
116
+ rubygems_version: 3.3.3
116
117
  signing_key:
117
118
  specification_version: 4
118
- summary: A Swagger-based DSL for rspec-rails & accompanying rake task for generating
119
- Swagger files
119
+ summary: An OpenAPI-based (formerly called Swagger) DSL for rspec-rails & accompanying
120
+ rake task for generating OpenAPI specification files
120
121
  test_files: []