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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e41cd473bab30a829372fc6edf2f638e834d857ab865761c2e393771fef55700
4
- data.tar.gz: b9a3a5c4bb6005de564292011cc33b651c3c5099cb7fe9aca522ed56288fc22a
3
+ metadata.gz: 571ee2451eee11277b3645a3851a4738791b94272326bbe36a320a4bf75d79d1
4
+ data.tar.gz: 77cf157de1852b404718d1f6cd482a13e2512133faa606fa4200040151e296a5
5
5
  SHA512:
6
- metadata.gz: 0e5bc74395489346a44cb5104522b114b18e87d97e534569bbaeaf0e7915a55ee830f6a4c47e2cf20dd07ec9b27cc375f9c881c95115c8bacc383422a13596ed
7
- data.tar.gz: 4aa000125ce9e034c1d379eb4fc96fe33bd26061bbbadbc26f40a50cad6a416ae92166b11e88336e24f8016855ece8d90321fe9b566807150b650daeb478f08d
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
- You can disable all middlewares in this gem globally, which you probably want to do on production.
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) or [Github](https://github.com/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
 
@@ -13,5 +13,7 @@ module Faraday
13
13
 
14
14
  class AlreadyRegisteredError < Error; end
15
15
  class NotRegisteredError < Error; end
16
+
17
+ class FileNotFoundError < Error; end
16
18
  end
17
19
  end
@@ -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: true)
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
- raise ResponseInvalidError, e.message
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
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Faraday
4
4
  module Openapi
5
- VERSION = '0.4.0'
5
+ VERSION = '0.6.0'
6
6
  end
7
7
  end
@@ -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.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: 2025-05-04 00:00:00.000000000 Z
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: '2.7'
38
+ version: 3.0.1
39
39
  - - "<"
40
40
  - !ruby/object:Gem::Version
41
- version: '3'
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: '2.7'
48
+ version: 3.0.1
49
49
  - - "<"
50
50
  - !ruby/object:Gem::Version
51
- version: '3'
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.4.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.5
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: []