openapi_first 1.1.1 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -3
- data/Gemfile.lock +14 -18
- data/Gemfile.rack2.lock +2 -6
- data/lib/openapi_first/body_parser.rb +2 -1
- data/lib/openapi_first/definition/operation.rb +1 -2
- data/lib/openapi_first/definition.rb +3 -3
- data/lib/openapi_first/failure.rb +15 -2
- data/lib/openapi_first/runtime_request.rb +2 -2
- data/lib/openapi_first/schema/validation_result.rb +0 -7
- data/lib/openapi_first/version.rb +1 -1
- data/lib/openapi_first.rb +13 -3
- data/openapi_first.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ee379d839bec13bd899f690b3275d761b7425461f2241da4ccb62de384f0c94
|
4
|
+
data.tar.gz: 6ea27d437c7cb443d5b5c84b8e6d0ef34782e4f5d8bb5ce7666acc78797ca523
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab20a8bcd7d61961f4a1d654a36291f295ee0d69c50829cd8f1965998ca9a480a0636e2b0ca62d220a53c62b60d8bedb934fc8a57bed39a8e45683796a5cee8a
|
7
|
+
data.tar.gz: 43206c1bf540193863bd1f02c14f79d172fff662974c8efbfd90dfd6334f11f23c0dee62c9c70c4bd45bbf202e68a76c9750a00aa4a45f5dd8682b6837a1177b
|
data/CHANGELOG.md
CHANGED
@@ -1,15 +1,20 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## 1.
|
3
|
+
## 1.2.0
|
4
4
|
|
5
|
-
-
|
5
|
+
- Added `OpenapiFirst.parse(hash)` to load ("parse") a resolved/de-referenced Hash
|
6
|
+
- Added support for unescaped special characters in the path params (https://github.com/ahx/openapi_first/pull/217)
|
7
|
+
- Added `operation` to `RuntimeRequest` by [@MrBananaLord](https://github.com/ahx/openapi_first/pull/216)
|
6
8
|
|
7
|
-
## 1.1.
|
9
|
+
## 1.1.1
|
8
10
|
|
11
|
+
- Fix reading response body for example when running Rails (`ActionDispatch::Response::RackBody`)
|
9
12
|
- Add `known?`, `status`, `body`, `headers`, `content_type` methods to inspect the parsed response (`RuntimeResponse`)
|
10
13
|
- Add `OpenapiFirst::ParseError` which is raised by low-level interfaces like `request.body` if the body could not be parsed.
|
11
14
|
- Add "code" field to errors in JSON:API error response
|
12
15
|
|
16
|
+
## 1.1.0 (yanked)
|
17
|
+
|
13
18
|
## 1.0.0
|
14
19
|
|
15
20
|
- Breaking: The default error uses application/problem+json content-type
|
data/Gemfile.lock
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
openapi_first (1.
|
4
|
+
openapi_first (1.2.1)
|
5
5
|
json_refs (~> 0.1, >= 0.1.7)
|
6
6
|
json_schemer (~> 2.1.0)
|
7
7
|
multi_json (~> 1.15)
|
8
|
-
mustermann
|
8
|
+
mustermann (~> 3.0.0)
|
9
9
|
openapi_parameters (>= 0.3.2, < 2.0)
|
10
10
|
rack (>= 2.2, < 4.0)
|
11
11
|
|
12
12
|
GEM
|
13
13
|
remote: https://rubygems.org/
|
14
14
|
specs:
|
15
|
-
actionpack (7.1.
|
16
|
-
actionview (= 7.1.
|
17
|
-
activesupport (= 7.1.
|
15
|
+
actionpack (7.1.3)
|
16
|
+
actionview (= 7.1.3)
|
17
|
+
activesupport (= 7.1.3)
|
18
18
|
nokogiri (>= 1.8.5)
|
19
19
|
racc
|
20
20
|
rack (>= 2.2.4)
|
@@ -22,13 +22,13 @@ GEM
|
|
22
22
|
rack-test (>= 0.6.3)
|
23
23
|
rails-dom-testing (~> 2.2)
|
24
24
|
rails-html-sanitizer (~> 1.6)
|
25
|
-
actionview (7.1.
|
26
|
-
activesupport (= 7.1.
|
25
|
+
actionview (7.1.3)
|
26
|
+
activesupport (= 7.1.3)
|
27
27
|
builder (~> 3.1)
|
28
28
|
erubi (~> 1.11)
|
29
29
|
rails-dom-testing (~> 2.2)
|
30
30
|
rails-html-sanitizer (~> 1.6)
|
31
|
-
activesupport (7.1.
|
31
|
+
activesupport (7.1.3)
|
32
32
|
base64
|
33
33
|
bigdecimal
|
34
34
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
@@ -40,9 +40,9 @@ GEM
|
|
40
40
|
tzinfo (~> 2.0)
|
41
41
|
ast (2.4.2)
|
42
42
|
base64 (0.2.0)
|
43
|
-
bigdecimal (3.1.
|
43
|
+
bigdecimal (3.1.6)
|
44
44
|
builder (3.2.4)
|
45
|
-
concurrent-ruby (1.2.
|
45
|
+
concurrent-ruby (1.2.3)
|
46
46
|
connection_pool (2.4.1)
|
47
47
|
crass (1.0.6)
|
48
48
|
diff-lcs (1.5.0)
|
@@ -51,7 +51,6 @@ GEM
|
|
51
51
|
ruby2_keywords
|
52
52
|
erubi (1.12.0)
|
53
53
|
hana (1.3.7)
|
54
|
-
hansi (0.2.1)
|
55
54
|
i18n (1.14.1)
|
56
55
|
concurrent-ruby (~> 1.0)
|
57
56
|
json (2.7.1)
|
@@ -65,13 +64,10 @@ GEM
|
|
65
64
|
loofah (2.22.0)
|
66
65
|
crass (~> 1.0.2)
|
67
66
|
nokogiri (>= 1.12.0)
|
68
|
-
minitest (5.21.
|
67
|
+
minitest (5.21.2)
|
69
68
|
multi_json (1.15.0)
|
70
69
|
mustermann (3.0.0)
|
71
70
|
ruby2_keywords (~> 0.0.1)
|
72
|
-
mustermann-contrib (3.0.0)
|
73
|
-
hansi (~> 0.2.0)
|
74
|
-
mustermann (= 3.0.0)
|
75
71
|
mutex_m (0.2.0)
|
76
72
|
nokogiri (1.16.0-arm64-darwin)
|
77
73
|
racc (~> 1.4)
|
@@ -81,7 +77,7 @@ GEM
|
|
81
77
|
rack (>= 2.2)
|
82
78
|
zeitwerk (~> 2.6)
|
83
79
|
parallel (1.24.0)
|
84
|
-
parser (3.3.0.
|
80
|
+
parser (3.3.0.5)
|
85
81
|
ast (~> 2.4.1)
|
86
82
|
racc
|
87
83
|
racc (1.7.3)
|
@@ -117,11 +113,11 @@ GEM
|
|
117
113
|
diff-lcs (>= 1.2.0, < 2.0)
|
118
114
|
rspec-support (~> 3.12.0)
|
119
115
|
rspec-support (3.12.1)
|
120
|
-
rubocop (1.
|
116
|
+
rubocop (1.60.1)
|
121
117
|
json (~> 2.3)
|
122
118
|
language_server-protocol (>= 3.17.0)
|
123
119
|
parallel (~> 1.10)
|
124
|
-
parser (>= 3.
|
120
|
+
parser (>= 3.3.0.2)
|
125
121
|
rainbow (>= 2.2.2, < 4.0)
|
126
122
|
regexp_parser (>= 1.8, < 3.0)
|
127
123
|
rexml (>= 3.2.5, < 4.0)
|
data/Gemfile.rack2.lock
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
openapi_first (1.
|
4
|
+
openapi_first (1.1.1)
|
5
5
|
json_refs (~> 0.1, >= 0.1.7)
|
6
6
|
json_schemer (~> 2.1.0)
|
7
7
|
multi_json (~> 1.15)
|
8
|
-
mustermann
|
8
|
+
mustermann (~> 3.0.0)
|
9
9
|
openapi_parameters (>= 0.3.2, < 2.0)
|
10
10
|
rack (>= 2.2, < 4.0)
|
11
11
|
|
@@ -15,7 +15,6 @@ GEM
|
|
15
15
|
ast (2.4.2)
|
16
16
|
diff-lcs (1.5.0)
|
17
17
|
hana (1.3.7)
|
18
|
-
hansi (0.2.1)
|
19
18
|
json (2.7.1)
|
20
19
|
json_refs (0.1.8)
|
21
20
|
hana
|
@@ -27,9 +26,6 @@ GEM
|
|
27
26
|
multi_json (1.15.0)
|
28
27
|
mustermann (3.0.0)
|
29
28
|
ruby2_keywords (~> 0.0.1)
|
30
|
-
mustermann-contrib (3.0.0)
|
31
|
-
hansi (~> 0.2.0)
|
32
|
-
mustermann (= 3.0.0)
|
33
29
|
openapi_parameters (0.3.2)
|
34
30
|
rack (>= 2.2)
|
35
31
|
zeitwerk (~> 2.6)
|
@@ -6,7 +6,8 @@ module OpenapiFirst
|
|
6
6
|
class BodyParser
|
7
7
|
def self.const_missing(const_name)
|
8
8
|
super unless const_name == :ParsingError
|
9
|
-
warn 'DEPRECATION WARNING: OpenapiFirst::BodyParser::ParsingError is deprecated.
|
9
|
+
warn 'DEPRECATION WARNING: OpenapiFirst::BodyParser::ParsingError is deprecated. ' \
|
10
|
+
'Use OpenapiFirst::ParseError instead.'
|
10
11
|
OpenapiFirst::ParseError
|
11
12
|
end
|
12
13
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'mustermann
|
3
|
+
require 'mustermann'
|
4
4
|
require_relative 'definition/path_item'
|
5
5
|
require_relative 'runtime_request'
|
6
6
|
|
@@ -9,7 +9,7 @@ module OpenapiFirst
|
|
9
9
|
class Definition
|
10
10
|
attr_reader :filepath, :paths, :openapi_version
|
11
11
|
|
12
|
-
def initialize(resolved, filepath)
|
12
|
+
def initialize(resolved, filepath = nil)
|
13
13
|
@filepath = filepath
|
14
14
|
@paths = resolved['paths']
|
15
15
|
@openapi_version = detect_version(resolved)
|
@@ -60,7 +60,7 @@ module OpenapiFirst
|
|
60
60
|
|
61
61
|
def search_for_path_item(request_path)
|
62
62
|
paths.find do |path, path_item_object|
|
63
|
-
template = Mustermann
|
63
|
+
template = Mustermann.new(path)
|
64
64
|
path_params = template.params(request_path)
|
65
65
|
next unless path_params
|
66
66
|
next unless path_params.size == template.names.size
|
@@ -47,9 +47,22 @@ module OpenapiFirst
|
|
47
47
|
|
48
48
|
# Raise an exception that fits the failure.
|
49
49
|
def raise!
|
50
|
-
exception,
|
50
|
+
exception, = TYPES.fetch(error_type)
|
51
|
+
raise exception, exception_message
|
52
|
+
end
|
53
|
+
|
54
|
+
def exception_message
|
55
|
+
_, message_prefix = TYPES.fetch(error_type)
|
56
|
+
|
57
|
+
"#{message_prefix} #{@message || generate_message}"
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
51
61
|
|
52
|
-
|
62
|
+
def generate_message
|
63
|
+
messages = errors&.take(4)&.map(&:error)
|
64
|
+
messages << "... (#{errors.size} errors total)" if errors && errors.size > 4
|
65
|
+
messages&.join('. ')
|
53
66
|
end
|
54
67
|
end
|
55
68
|
end
|
@@ -22,7 +22,7 @@ module OpenapiFirst
|
|
22
22
|
def_delegators :@operation, :operation_id, :request_method
|
23
23
|
def_delegator :@path_item, :path, :path_definition
|
24
24
|
|
25
|
-
attr_reader :path_item
|
25
|
+
attr_reader :path_item, :operation
|
26
26
|
|
27
27
|
def known?
|
28
28
|
known_path? && known_request_method?
|
@@ -90,6 +90,6 @@ module OpenapiFirst
|
|
90
90
|
|
91
91
|
private
|
92
92
|
|
93
|
-
attr_reader :request
|
93
|
+
attr_reader :request
|
94
94
|
end
|
95
95
|
end
|
data/lib/openapi_first.rb
CHANGED
@@ -28,10 +28,20 @@ module OpenapiFirst
|
|
28
28
|
# Key in rack to find instance of RuntimeRequest
|
29
29
|
REQUEST = 'openapi.request'
|
30
30
|
|
31
|
-
|
32
|
-
|
31
|
+
# Load and dereference an OpenAPI spec file
|
32
|
+
def self.load(filepath, only: nil)
|
33
|
+
resolved = bundle(filepath)
|
34
|
+
parse(resolved, only:, filepath:)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Parse a dereferenced Hash
|
38
|
+
def self.parse(resolved, only: nil, filepath: nil)
|
33
39
|
resolved['paths'].filter!(&->(key, _) { only.call(key) }) if only
|
34
|
-
Definition.new(resolved,
|
40
|
+
Definition.new(resolved, filepath)
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.bundle(filepath)
|
44
|
+
Bundle.resolve(filepath)
|
35
45
|
end
|
36
46
|
|
37
47
|
module Bundle
|
data/openapi_first.gemspec
CHANGED
@@ -41,7 +41,7 @@ Gem::Specification.new do |spec|
|
|
41
41
|
spec.add_runtime_dependency 'json_refs', '~> 0.1', '>= 0.1.7'
|
42
42
|
spec.add_runtime_dependency 'json_schemer', '~> 2.1.0'
|
43
43
|
spec.add_runtime_dependency 'multi_json', '~> 1.15'
|
44
|
-
spec.add_runtime_dependency 'mustermann
|
44
|
+
spec.add_runtime_dependency 'mustermann', '~> 3.0.0'
|
45
45
|
spec.add_runtime_dependency 'openapi_parameters', '>= 0.3.2', '< 2.0'
|
46
46
|
spec.add_runtime_dependency 'rack', '>= 2.2', '< 4.0'
|
47
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openapi_first
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Haller
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-01-
|
11
|
+
date: 2024-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json_refs
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '1.15'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
|
-
name: mustermann
|
62
|
+
name: mustermann
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|