openapi_contracts 0.10.0 → 0.12.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: 5891083b3cb25419145aab30a963c61f28973c40b8a4a74ea080b63bc970670b
4
- data.tar.gz: 5febe1b938ba77edef2e6955e3b8cf8a161f40e5b5f828c6cc39f5105ed734d7
3
+ metadata.gz: 7fa5c81703e10335348cefdfdf14ada22c1a66a4017c71e0fd74e2499e95cd75
4
+ data.tar.gz: ef6ab8b10609f9e048f9ee61cdd017883a4a9c8b7a8f3166ac3891e5e6d51e52
5
5
  SHA512:
6
- metadata.gz: 87441e69b4caa9ac627e82c27e3d0b0e15162da1587c3bdb7ed4f5c2102fdda02f583df01652676d056b60af24fa9c67dedf38e38b1dfed346211f439de640c2
7
- data.tar.gz: a725d1696dc0e7a3ee19bc3c46c1248f0ada9185bb492f44ea5c571944d98dbb6eb0f69625f68169ed931717782438524bbdc337014ea83116ad60a2d565b545
6
+ metadata.gz: fb69135e230360714f93b9285efa0fa7cd1cc4b2ab524b5dac1a1bf925ef2cf98a92475b6c7d5528892f2208ba42ee0f71366280808914bb6976ec91db5d3df7
7
+ data.tar.gz: 71fc02b108dae2bdcf2bcbc40ef7faca01acee5c772a57ec155426ca4aec42b5317e89f828624b2126f658f276261762ccc8eb29b6be2c1cd6f5c9f90663996f
@@ -25,10 +25,10 @@ module OpenapiContracts
25
25
 
26
26
  def path_regexp
27
27
  @path_regexp ||= begin
28
- re = /\{(\S+)\}/
28
+ re = /\{([^\}]+)\}/
29
29
  @path.gsub(re) { |placeholder|
30
30
  placeholder.match(re) { |m| "(?<#{m[1]}>[^/]*)" }
31
- }.then { |str| Regexp.new(str) }
31
+ }.then { |str| Regexp.new("^#{str}$") }
32
32
  end
33
33
  end
34
34
 
@@ -35,20 +35,20 @@ module OpenapiContracts
35
35
  end
36
36
 
37
37
  # Returns an Enumerator over all Operations
38
- def operations(&block)
38
+ def operations(&block) # rubocop:disable Naming/BlockForwarding
39
39
  return enum_for(:operations) unless block_given?
40
40
 
41
41
  paths.each do |path|
42
- path.operations.each(&block)
42
+ path.operations.each(&block) # rubocop:disable Naming/BlockForwarding
43
43
  end
44
44
  end
45
45
 
46
46
  # Returns an Enumerator over all Responses
47
- def responses(&block)
47
+ def responses(&block) # rubocop:disable Naming/BlockForwarding
48
48
  return enum_for(:responses) unless block_given?
49
49
 
50
50
  operations.each do |operation|
51
- operation.responses.each(&block)
51
+ operation.responses.each(&block) # rubocop:disable Naming/BlockForwarding
52
52
  end
53
53
  end
54
54
 
@@ -36,7 +36,7 @@ module OpenapiContracts
36
36
  def matchers
37
37
  env = Env.new(
38
38
  options: @options,
39
- operation: operation,
39
+ operation:,
40
40
  request: @request,
41
41
  response: @response
42
42
  )
@@ -1,13 +1,25 @@
1
1
  module OpenapiContracts::Parser::Transformers
2
2
  class Pointer < Base
3
3
  def call(object)
4
+ transform_discriminator(object)
5
+ transform_refs(object)
6
+ end
7
+
8
+ private
9
+
10
+ def transform_discriminator(object)
11
+ mappings = object.dig('discriminator', 'mapping')
12
+ return unless mappings.present?
13
+
14
+ mappings.transform_values! { |p| transform_pointer(p) }
15
+ end
16
+
17
+ def transform_refs(object)
4
18
  return unless object['$ref'].present?
5
19
 
6
20
  object['$ref'] = transform_pointer(object['$ref'])
7
21
  end
8
22
 
9
- private
10
-
11
23
  def transform_pointer(target)
12
24
  if %r{^#/(?<pointer>.*)} =~ target
13
25
  # A JSON Pointer
@@ -1,5 +1,4 @@
1
1
  module OpenapiContracts::Parser::Transformers
2
2
  autoload :Base, 'openapi_contracts/parser/transformers/base'
3
- autoload :Nullable, 'openapi_contracts/parser/transformers/nullable'
4
3
  autoload :Pointer, 'openapi_contracts/parser/transformers/pointer'
5
4
  end
@@ -29,6 +29,9 @@ module OpenapiContracts::Validators
29
29
  validation_schemer(schema).validate(data).map do |err|
30
30
  error_to_message(err)
31
31
  end
32
+ rescue JSONSchemer::UnknownRef => e
33
+ # This usually happens when discriminators encounter unknown types
34
+ ["Could not resolve pointer #{e.message.inspect}"]
32
35
  end
33
36
  end
34
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openapi_contracts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mkon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-22 00:00:00.000000000 Z
11
+ date: 2024-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -34,16 +34,22 @@ dependencies:
34
34
  name: json_schemer
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 2.0.0
39
+ version: '2'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.2'
40
43
  type: :runtime
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - "~>"
47
+ - - ">="
45
48
  - !ruby/object:Gem::Version
46
- version: 2.0.0
49
+ version: '2'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.2'
47
53
  - !ruby/object:Gem::Dependency
48
54
  name: rack
49
55
  requirement: !ruby/object:Gem::Requirement
@@ -92,28 +98,28 @@ dependencies:
92
98
  requirements:
93
99
  - - '='
94
100
  - !ruby/object:Gem::Version
95
- version: 1.56.1
101
+ version: 1.57.2
96
102
  type: :development
97
103
  prerelease: false
98
104
  version_requirements: !ruby/object:Gem::Requirement
99
105
  requirements:
100
106
  - - '='
101
107
  - !ruby/object:Gem::Version
102
- version: 1.56.1
108
+ version: 1.57.2
103
109
  - !ruby/object:Gem::Dependency
104
110
  name: rubocop-rspec
105
111
  requirement: !ruby/object:Gem::Requirement
106
112
  requirements:
107
113
  - - '='
108
114
  - !ruby/object:Gem::Version
109
- version: 2.23.2
115
+ version: 2.25.0
110
116
  type: :development
111
117
  prerelease: false
112
118
  version_requirements: !ruby/object:Gem::Requirement
113
119
  requirements:
114
120
  - - '='
115
121
  - !ruby/object:Gem::Version
116
- version: 2.23.2
122
+ version: 2.25.0
117
123
  - !ruby/object:Gem::Dependency
118
124
  name: simplecov
119
125
  requirement: !ruby/object:Gem::Requirement
@@ -180,17 +186,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
180
186
  requirements:
181
187
  - - ">="
182
188
  - !ruby/object:Gem::Version
183
- version: '3.0'
189
+ version: '3.1'
184
190
  - - "<"
185
191
  - !ruby/object:Gem::Version
186
- version: '3.3'
192
+ version: '3.4'
187
193
  required_rubygems_version: !ruby/object:Gem::Requirement
188
194
  requirements:
189
195
  - - ">="
190
196
  - !ruby/object:Gem::Version
191
197
  version: '0'
192
198
  requirements: []
193
- rubygems_version: 3.4.18
199
+ rubygems_version: 3.4.22
194
200
  signing_key:
195
201
  specification_version: 4
196
202
  summary: Openapi schemas as API contracts