faraday-openapi 0.4.0 → 0.6.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 +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +10 -5
- data/lib/faraday/openapi/errors.rb +2 -0
- data/lib/faraday/openapi/middleware.rb +17 -4
- data/lib/faraday/openapi/version.rb +1 -1
- data/lib/faraday/openapi.rb +6 -2
- metadata +8 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 571ee2451eee11277b3645a3851a4738791b94272326bbe36a320a4bf75d79d1
|
|
4
|
+
data.tar.gz: 77cf157de1852b404718d1f6cd482a13e2512133faa606fa4200040151e296a5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a450a0755f226635c42101561ed97a9363133701b28e60d004101941280cf66f0fe262551b46659a676b9acb0d341f95015759101557cb49330e1f4db86ecb6d
|
|
7
|
+
data.tar.gz: c2eb79c33c7449b07bc369bf9c13e94ef4acec4b02e2d0bd5d7e2318a117a70a40335ead528f784b5619cb4f6896080174936fd107996ffa6b89d968f8bcdacf
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.6.0
|
|
6
|
+
|
|
7
|
+
- Added `allow_partial_responses` option to allow skipping required properties in response body validation:
|
|
8
|
+
```ruby
|
|
9
|
+
Faraday::Openapi.register('openapi.yaml', allow_partial_responses: true)
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
This can be useful if you would have to mock very large response bodies, but your consumer just needs a few fields.
|
|
13
|
+
|
|
14
|
+
## 0.5.0
|
|
15
|
+
|
|
16
|
+
- Update openapi_first from version 2 to 3
|
|
17
|
+
|
|
5
18
|
## 0.4.0
|
|
6
19
|
|
|
7
20
|
- Fix setting request content-type header
|
data/README.md
CHANGED
|
@@ -39,9 +39,6 @@ register your API description (OAD) globally and reference it via a Symbol in yo
|
|
|
39
39
|
|
|
40
40
|
require 'faraday/openapi'
|
|
41
41
|
Faraday::Openapi.register 'dice-openapi.yaml', as: :dice_api
|
|
42
|
-
|
|
43
|
-
# Only activate in test env
|
|
44
|
-
Faraday::Openapi.enabled = ENV['RACK_ENV'] == 'test'
|
|
45
42
|
```
|
|
46
43
|
|
|
47
44
|
```ruby
|
|
@@ -63,7 +60,15 @@ conn = Faraday.new do |f|
|
|
|
63
60
|
end
|
|
64
61
|
```
|
|
65
62
|
|
|
66
|
-
|
|
63
|
+
## Configuration
|
|
64
|
+
|
|
65
|
+
Allow partial response bodies via `allow_partial_responses: true` (default: false). This can be useful if you would have to mock very large response bodies in tests where your consumer just uses a few fields.
|
|
66
|
+
|
|
67
|
+
```ruby
|
|
68
|
+
Faraday::Openapi.register 'dice-openapi.yaml', as: :dice_api, allow_partial_responses: true
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
You can disable all middlewares in this gem globally, which you want to do on production.
|
|
67
72
|
|
|
68
73
|
```ruby
|
|
69
74
|
Faraday::Openapi.enabled = false
|
|
@@ -83,7 +88,7 @@ See how it works [here](https://bundler.io/guides/creating_gem.html#releasing-th
|
|
|
83
88
|
|
|
84
89
|
## Contributing
|
|
85
90
|
|
|
86
|
-
Bug reports and pull requests are welcome on [Codeberg](https://codeberg.org/ahx/faraday-openapi)
|
|
91
|
+
Bug reports and pull requests are welcome on [Codeberg](https://codeberg.org/ahx/faraday-openapi).
|
|
87
92
|
|
|
88
93
|
## License
|
|
89
94
|
|
|
@@ -14,6 +14,7 @@ module Faraday
|
|
|
14
14
|
return unless Openapi.enabled
|
|
15
15
|
|
|
16
16
|
@oad = path.is_a?(Symbol) ? Faraday::Openapi[path] : OpenapiFirst.load(path)
|
|
17
|
+
@configuration = Faraday::Openapi.configurations[path]
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
def call(env)
|
|
@@ -50,11 +51,23 @@ module Faraday
|
|
|
50
51
|
def on_complete(env)
|
|
51
52
|
request = Request.from_env(env)
|
|
52
53
|
response = Response.from_env(env)
|
|
53
|
-
@oad.validate_response(request, response, raise_error:
|
|
54
|
-
rescue OpenapiFirst::ResponseInvalidError, OpenapiFirst::ResponseNotFoundError => e
|
|
55
|
-
return if e.is_a?(OpenapiFirst::ResponseNotFoundError) && (response.status >= 401)
|
|
54
|
+
validated_response = @oad.validate_response(request, response, raise_error: false)
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
return if validated_response.valid?
|
|
57
|
+
return if !validated_response.known? && (validated_response.status >= 401)
|
|
58
|
+
return if ignore_error?(validated_response)
|
|
59
|
+
|
|
60
|
+
raise ResponseInvalidError, validated_response.error.message
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def ignore_error?(validated_response)
|
|
66
|
+
partial_mocking_enabled? && validated_response.error.errors.all? { |err| err.type == 'required' }
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def partial_mocking_enabled?
|
|
70
|
+
@configuration && @configuration[:allow_partial_responses]
|
|
58
71
|
end
|
|
59
72
|
end
|
|
60
73
|
|
data/lib/faraday/openapi.rb
CHANGED
|
@@ -20,18 +20,22 @@ module Faraday
|
|
|
20
20
|
Faraday::Response.register_middleware(openapi: Faraday::Openapi::ResponseMiddleware)
|
|
21
21
|
|
|
22
22
|
@registry = {}
|
|
23
|
+
@configurations = {}
|
|
23
24
|
@enabled = true
|
|
24
25
|
|
|
25
26
|
class << self
|
|
26
|
-
attr_reader :registry
|
|
27
|
+
attr_reader :registry, :configurations
|
|
27
28
|
attr_accessor :enabled
|
|
28
29
|
end
|
|
29
30
|
|
|
30
|
-
def self.register(filepath, as: :default)
|
|
31
|
+
def self.register(filepath, as: :default, allow_partial_responses: false)
|
|
31
32
|
raise AlreadyRegisteredError, "API description #{as} is already registered" if registry.key?(as)
|
|
32
33
|
|
|
33
34
|
oad = filepath.is_a?(Hash) ? OpenapiFirst.parse(filepath) : OpenapiFirst.load(filepath)
|
|
34
35
|
registry[as] = oad
|
|
36
|
+
configurations[as] = { allow_partial_responses: }
|
|
37
|
+
rescue OpenapiFirst::FileNotFoundError => e
|
|
38
|
+
raise Faraday::Openapi::FileNotFoundError, e.message
|
|
35
39
|
end
|
|
36
40
|
|
|
37
41
|
def self.[](key)
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: faraday-openapi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andreas Haller
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: faraday
|
|
@@ -35,20 +35,20 @@ dependencies:
|
|
|
35
35
|
requirements:
|
|
36
36
|
- - ">="
|
|
37
37
|
- !ruby/object:Gem::Version
|
|
38
|
-
version:
|
|
38
|
+
version: 3.0.1
|
|
39
39
|
- - "<"
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: '
|
|
41
|
+
version: '4'
|
|
42
42
|
type: :runtime
|
|
43
43
|
prerelease: false
|
|
44
44
|
version_requirements: !ruby/object:Gem::Requirement
|
|
45
45
|
requirements:
|
|
46
46
|
- - ">="
|
|
47
47
|
- !ruby/object:Gem::Version
|
|
48
|
-
version:
|
|
48
|
+
version: 3.0.1
|
|
49
49
|
- - "<"
|
|
50
50
|
- !ruby/object:Gem::Version
|
|
51
|
-
version: '
|
|
51
|
+
version: '4'
|
|
52
52
|
- !ruby/object:Gem::Dependency
|
|
53
53
|
name: rack
|
|
54
54
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -93,7 +93,7 @@ licenses:
|
|
|
93
93
|
metadata:
|
|
94
94
|
bug_tracker_uri: https://codeberg.org/ahx/faraday-openapi/issues
|
|
95
95
|
changelog_uri: https://codeberg.org/ahx/faraday-openapi/src/branch/main/CHANGELOG.md
|
|
96
|
-
documentation_uri: http://www.rubydoc.info/gems/faraday-openapi/0.
|
|
96
|
+
documentation_uri: http://www.rubydoc.info/gems/faraday-openapi/0.6.0
|
|
97
97
|
homepage_uri: https://codeberg.org/ahx/faraday-openapi
|
|
98
98
|
rubygems_mfa_required: 'true'
|
|
99
99
|
source_code_uri: https://codeberg.org/ahx/faraday-openapi
|
|
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
114
114
|
- !ruby/object:Gem::Version
|
|
115
115
|
version: '0'
|
|
116
116
|
requirements: []
|
|
117
|
-
rubygems_version: 3.6.
|
|
117
|
+
rubygems_version: 3.6.7
|
|
118
118
|
specification_version: 4
|
|
119
119
|
summary: Validate requests/responses against OpenAPI API descriptions
|
|
120
120
|
test_files: []
|