openapi_contracts 0.15.1 → 0.16.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: f3d35b6a9db16d44567007f7d9ac3c9494b673e81429e17447379e68a8f39d64
4
- data.tar.gz: 31469c4e5c0118cea88e299ce7d3af89cb67953d7145db4bea0d75faebbe327e
3
+ metadata.gz: 93de30085796380ba48bc3ac5e1919a80ba7d073d29a43484391d1769772a442
4
+ data.tar.gz: c6849b72002e53d9d33c5ca9036bd528a45d52e6bef4802cbe5f08ba28887c25
5
5
  SHA512:
6
- metadata.gz: 4d93a067e1d946c9bccd8feae46a00f32284143bd38f14d72221dd8119caecf4add8fe82da2afc0968e31b001a48826fb79f94571bd340bab236e254a8bc587f
7
- data.tar.gz: 1e992cdb3834af4ad4998c164d325fe0cd559ea75c5cc57d6dcb7fbaca482576668de099cba0f9e18203fe2652418a492544c449c6a5294d34f838dbb66de150
6
+ metadata.gz: 9c1ce0325629f3e05e4226eac870b00c25a6f10de41525a9a43290d84d12876c6dd77a5954e84150bf3321923bf3a87f3f264a7a9586c33cc4b7edd8feb4e9b2
7
+ data.tar.gz: 4f4d8380e11632c13c28c3fa626eda40b73e6c5da7a3cf14256159753bb012a4a48ede962a73e322494fc9227bb3d2d54884d38fab290e536c1abbf3b6eae119
@@ -1,3 +1,5 @@
1
+ require 'rspec/matchers'
2
+
1
3
  RSpec::Matchers.define :match_openapi_doc do |doc, options = {}| # rubocop:disable Metrics/BlockLength
2
4
  include OpenapiContracts::Helper
3
5
 
@@ -9,12 +9,35 @@ module OpenapiContracts::Validators
9
9
  def validate
10
10
  spec.headers.each do |header|
11
11
  value = response.headers[header.name]
12
+
13
+ # Rack 3.0.0 returns an Array for multi-value headers. OpenAPI doesn't
14
+ # support multi-value headers, so we join them into a single string.
15
+ #
16
+ # @see https://github.com/rack/rack/issues/1598
17
+ value = value.join("\n") if value.is_a?(Array)
18
+
12
19
  if value.blank?
13
20
  @errors << "Missing header #{header.name}" if header.required?
14
- elsif !JSONSchemer.schema(header.schema).valid?(value)
15
- @errors << "Header #{header.name} does not match"
21
+ else
22
+ schemer = JSONSchemer.schema(header.schema)
23
+ unless schemer.valid?(value)
24
+ validation_errors = schemer.validate(value).to_a
25
+ @errors << validation_error_message(header, value, validation_errors)
26
+ end
16
27
  end
17
28
  end
18
29
  end
30
+
31
+ def validation_error_message(header, value, error_array)
32
+ if error_array.empty?
33
+ "Header #{header.name} does not match schema"
34
+ else
35
+ error_array.map { |error|
36
+ error_message = "Header #{header.name} validation error: #{error['error']}"
37
+ truncated_value = value.to_s.truncate(100)
38
+ error_message + " (value: #{truncated_value})"
39
+ }.join("\n")
40
+ end
41
+ end
19
42
  end
20
43
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openapi_contracts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.1
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mkon
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-11-29 00:00:00.000000000 Z
10
+ date: 2025-04-03 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -36,7 +35,7 @@ dependencies:
36
35
  requirements:
37
36
  - - ">="
38
37
  - !ruby/object:Gem::Version
39
- version: '2'
38
+ version: '2.1'
40
39
  - - "<"
41
40
  - !ruby/object:Gem::Version
42
41
  version: '2.4'
@@ -46,7 +45,7 @@ dependencies:
46
45
  requirements:
47
46
  - - ">="
48
47
  - !ruby/object:Gem::Version
49
- version: '2'
48
+ version: '2.1'
50
49
  - - "<"
51
50
  - !ruby/object:Gem::Version
52
51
  version: '2.4'
@@ -154,7 +153,6 @@ dependencies:
154
153
  - - "~>"
155
154
  - !ruby/object:Gem::Version
156
155
  version: 0.22.0
157
- description:
158
156
  email:
159
157
  - konstantin@munteanu.de
160
158
  executables: []
@@ -199,7 +197,6 @@ licenses:
199
197
  - MIT
200
198
  metadata:
201
199
  rubygems_mfa_required: 'true'
202
- post_install_message:
203
200
  rdoc_options: []
204
201
  require_paths:
205
202
  - lib
@@ -210,15 +207,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
210
207
  version: '3.2'
211
208
  - - "<"
212
209
  - !ruby/object:Gem::Version
213
- version: '3.4'
210
+ version: '3.5'
214
211
  required_rubygems_version: !ruby/object:Gem::Requirement
215
212
  requirements:
216
213
  - - ">="
217
214
  - !ruby/object:Gem::Version
218
215
  version: '0'
219
216
  requirements: []
220
- rubygems_version: 3.5.11
221
- signing_key:
217
+ rubygems_version: 3.6.2
222
218
  specification_version: 4
223
219
  summary: Openapi schemas as API contracts
224
220
  test_files: []