rswag-specs 2.13.0 → 2.15.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
2
  SHA256:
3
- metadata.gz: a4cbdf31d7dbcce5ecc58c58544873479a159a78e54b08717a32c17a246e017a
4
- data.tar.gz: d136dbe25d2ad3abebaa9f25c54788d989ad77e060c7777dbde1a007831701cc
3
+ metadata.gz: 3d0a717ee80be6c37b90e1fc7ea402139c0e07d2972e6548c2aeffd1a1f86f07
4
+ data.tar.gz: ad12167354bfde937b5315657362adfb4d4930b76fb40ef3468c7fd08e2dbce7
5
5
  SHA512:
6
- metadata.gz: 123ca088b4c0bf69c45c399c61b29af122631111cc22c3e83965521fc36561f076e90f94b6ee53eeea56625a6ee5d432939dbd31494fb4e66f5ceefebd077752
7
- data.tar.gz: 155f8b3dbbc824751ae8e82e1ba25da43253aa40f76aff419473f1f97faa64026ffde966d5a23c7b01c98e577e4f4a183d4f4e9b6b04c585fe054103ce00d76e
6
+ metadata.gz: f725ad91cb4982da4ee8ce87c86b1677e4aefbb01727963cb9b847c6788cf00a6d62beda51af391a35d242ab5d54ea2201531792c522a2dd71ff295934040901
7
+ data.tar.gz: c3039e9a8176812533fdfa8564d2796b0273a2ad5f6d3ae0007054c5a3fb5be8199609a38b3a5a7397eb8eb8d95f764f5f62de8badfe9fddfa2bcfec346acad9
@@ -61,6 +61,14 @@ module Rswag
61
61
  def openapi_strict_schema_validation
62
62
  @rspec_config.openapi_strict_schema_validation || false
63
63
  end
64
+
65
+ def openapi_all_properties_required
66
+ @rspec_config.openapi_all_properties_required || false
67
+ end
68
+
69
+ def openapi_no_additional_properties
70
+ @rspec_config.openapi_no_additional_properties || false
71
+ end
64
72
  end
65
73
 
66
74
  class ConfigurationError < StandardError; end
@@ -174,7 +174,7 @@ module Rswag
174
174
  return "#{escaped_name}=" + value.to_a.flatten.map{|v| CGI.escape(v.to_s) }.join(separator)
175
175
  end
176
176
  else
177
- return "#{name}=#{value}"
177
+ return "#{escaped_name}=#{CGI.escape(value.to_s)}"
178
178
  end
179
179
  end
180
180
 
@@ -242,11 +242,13 @@ module Rswag
242
242
  content_type = request[:headers]['CONTENT_TYPE']
243
243
  return if content_type.nil?
244
244
 
245
- if ['application/x-www-form-urlencoded', 'multipart/form-data'].include?(content_type)
246
- request[:payload] = build_form_payload(parameters, example)
247
- else
248
- request[:payload] = build_json_payload(parameters, example)
249
- end
245
+ request[:payload] = if ['application/x-www-form-urlencoded', 'multipart/form-data'].include?(content_type)
246
+ build_form_payload(parameters, example)
247
+ elsif content_type =~ /\Aapplication\/([0-9A-Za-z._-]+\+json\z|json\z)/
248
+ build_json_payload(parameters, example)
249
+ else
250
+ build_raw_payload(parameters, example)
251
+ end
250
252
  end
251
253
 
252
254
  def build_form_payload(parameters, example)
@@ -260,14 +262,17 @@ module Rswag
260
262
  Hash[tuples]
261
263
  end
262
264
 
263
- def build_json_payload(parameters, example)
265
+ def build_raw_payload(parameters, example)
264
266
  body_param = parameters.select { |p| p[:in] == :body }.first
265
-
266
267
  return nil unless body_param
267
268
 
268
269
  raise(MissingParameterError, body_param[:name]) unless example.respond_to?(body_param[:name])
269
270
 
270
- example.send(body_param[:name]).to_json
271
+ example.send(body_param[:name])
272
+ end
273
+
274
+ def build_json_payload(parameters, example)
275
+ build_raw_payload(parameters, example)&.to_json
271
276
  end
272
277
 
273
278
  def doc_version(doc)
@@ -73,14 +73,24 @@ module Rswag
73
73
  end
74
74
 
75
75
  def validation_options_from(metadata)
76
+ is_strict = @config.openapi_strict_schema_validation
77
+
76
78
  if metadata.key?(:swagger_strict_schema_validation)
77
- Rswag::Specs.deprecator.warn('Rswag::Specs: WARNING: This option will be renamed to "openapi_strict_schema_validation" in v3.0')
79
+ Rswag::Specs.deprecator.warn('Rswag::Specs: WARNING: This option will be removed in v3.0 please use openapi_all_properties_required and openapi_no_additional_properties set to true')
78
80
  is_strict = !!metadata[:swagger_strict_schema_validation]
79
- else
80
- is_strict = !!metadata.fetch(:openapi_strict_schema_validation, @config.openapi_strict_schema_validation)
81
+ elsif metadata.key?(:openapi_strict_schema_validation)
82
+ Rswag::Specs.deprecator.warn('Rswag::Specs: WARNING: This option will be removed in v3.0 please use openapi_all_properties_required and openapi_no_additional_properties set to true')
83
+ is_strict = !!metadata[:openapi_strict_schema_validation]
81
84
  end
82
85
 
83
- { strict: is_strict }
86
+ all_properties_required = metadata.fetch(:openapi_all_properties_required, @config.openapi_all_properties_required)
87
+ no_additional_properties = metadata.fetch(:openapi_no_additional_properties, @config.openapi_no_additional_properties)
88
+
89
+ {
90
+ strict: is_strict,
91
+ allPropertiesRequired: all_properties_required,
92
+ noAdditionalProperties: no_additional_properties
93
+ }
84
94
  end
85
95
 
86
96
  def definitions_or_component_schemas(swagger_doc, version)
@@ -74,6 +74,11 @@ module Rswag
74
74
  end
75
75
  end
76
76
 
77
+ enum_param = value.dig(:parameters).find{|p| p[:enum]}
78
+ if enum_param && enum_param.is_a?(Hash)
79
+ enum_param[:description] = generate_enum_description(enum_param)
80
+ end
81
+
77
82
  value[:parameters].reject! { |p| p[:in] == :body || p[:in] == :formData }
78
83
  end
79
84
  remove_invalid_operation_keys!(value)
@@ -211,6 +216,14 @@ module Rswag
211
216
  value.delete(:request_examples) if value[:request_examples]
212
217
  value[:parameters].each { |p| p.delete(:getter) } if value[:parameters]
213
218
  end
219
+
220
+ def generate_enum_description(param)
221
+ enum_description = "#{param[:description]}:\n "
222
+ param[:enum].each do |k,v|
223
+ enum_description += "* `#{k}` #{v}\n "
224
+ end
225
+ enum_description
226
+ end
214
227
  end
215
228
  end
216
229
  end
data/lib/rswag/specs.rb CHANGED
@@ -12,8 +12,7 @@ module Rswag
12
12
  swagger_root: :openapi_root,
13
13
  swagger_docs: :openapi_specs,
14
14
  swagger_dry_run: :rswag_dry_run,
15
- swagger_format: :openapi_format,
16
- swagger_strict_schema_validation: :openapi_strict_schema_validation
15
+ swagger_format: :openapi_format
17
16
  }.freeze
18
17
  private_constant :RENAMED_METHODS
19
18
 
@@ -24,6 +23,8 @@ module Rswag
24
23
  c.add_setting :rswag_dry_run
25
24
  c.add_setting :openapi_format, default: :json
26
25
  c.add_setting :openapi_strict_schema_validation
26
+ c.add_setting :openapi_all_properties_required
27
+ c.add_setting :openapi_no_additional_properties
27
28
  c.extend ExampleGroupHelpers, type: :request
28
29
  c.include ExampleHelpers, type: :request
29
30
  end
@@ -46,6 +47,10 @@ module Rswag
46
47
  public_send("#{new_name}=", *args, &block)
47
48
  end
48
49
  end
50
+
51
+ define_method('swagger_strict_schema_validation=') do |*args, &block|
52
+ public_send('openapi_strict_schema_validation=', *args, &block)
53
+ end
49
54
  end
50
55
 
51
56
  Specs.deprecator.deprecate_methods(
@@ -53,6 +58,11 @@ module Rswag
53
58
  RENAMED_METHODS.to_h { |old_name, new_name| ["#{old_name}=".to_sym, "#{new_name}=".to_sym] }
54
59
  )
55
60
 
61
+ Specs.deprecator.deprecate_methods(
62
+ RSpec::Core::Configuration,
63
+ :openapi_strict_schema_validation= => 'use openapi_all_properties_required and openapi_no_additional_properties set to true'
64
+ )
65
+
56
66
  if RUBY_VERSION.start_with? '2.6'
57
67
  Specs.deprecator.warn('Rswag::Specs: WARNING: Support for Ruby 2.6 will be dropped in v3.0')
58
68
  end
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.13.0
4
+ version: 2.15.0
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: 2023-11-29 00:00:00.000000000 Z
13
+ date: 2024-10-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -18,20 +18,20 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '3.1'
21
+ version: '5.2'
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
- version: '7.2'
24
+ version: '8.0'
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
28
28
  requirements:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
- version: '3.1'
31
+ version: '5.2'
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
- version: '7.2'
34
+ version: '8.0'
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: json-schema
37
37
  requirement: !ruby/object:Gem::Requirement
@@ -41,7 +41,7 @@ dependencies:
41
41
  version: '2.2'
42
42
  - - "<"
43
43
  - !ruby/object:Gem::Version
44
- version: '5.0'
44
+ version: '6.0'
45
45
  type: :runtime
46
46
  prerelease: false
47
47
  version_requirements: !ruby/object:Gem::Requirement
@@ -51,27 +51,27 @@ dependencies:
51
51
  version: '2.2'
52
52
  - - "<"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.0'
54
+ version: '6.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: railties
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '3.1'
61
+ version: '5.2'
62
62
  - - "<"
63
63
  - !ruby/object:Gem::Version
64
- version: '7.2'
64
+ version: '8.0'
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
- version: '3.1'
71
+ version: '5.2'
72
72
  - - "<"
73
73
  - !ruby/object:Gem::Version
74
- version: '7.2'
74
+ version: '8.0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rspec-core
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -148,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
148
  - !ruby/object:Gem::Version
149
149
  version: '0'
150
150
  requirements: []
151
- rubygems_version: 3.3.3
151
+ rubygems_version: 3.5.11
152
152
  signing_key:
153
153
  specification_version: 4
154
154
  summary: An OpenAPI-based (formerly called Swagger) DSL for rspec-rails & accompanying