faraday_middleware-openapi 0.0.1 → 0.0.2
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 +4 -1
- data/Gemfile.lock +15 -1
- data/README.md +3 -0
- data/faraday_middleware-openapi.gemspec +3 -2
- data/lib/faraday_middleware/openapi.rb +2 -0
- data/lib/faraday_middleware/openapi/request_validator.rb +68 -18
- data/lib/faraday_middleware/openapi/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dfb34ee30b7b4e177eaba4234981418f9c217f8e6a5d270f61f2d39ff18ac8af
|
4
|
+
data.tar.gz: fe0e7c176b712505d14a301966aa67a0118867473940c3450e727a4e5835d838
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ef0e5294688a1cb5d1afdb90e3e18eb973e72ce1a5bb94e2d1d93c046ac26a0068bbe245de22d20998de0310bb16807351a3b49d036f15df8aae83e2105e472
|
7
|
+
data.tar.gz: 296e07aed246abe7728199c281c4685f7920e3c47107968dafb55a73c3b2cdf51c02a1009de9c7f25acaa8a51a0ec7fcee019896ed696c5ab1a603c0f1d9606e
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,19 +1,30 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
faraday_middleware-openapi (0.0.
|
4
|
+
faraday_middleware-openapi (0.0.2)
|
5
|
+
activesupport
|
5
6
|
faraday (>= 1.0)
|
6
7
|
openapi_parser
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
10
11
|
specs:
|
12
|
+
activesupport (6.1.2.1)
|
13
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
14
|
+
i18n (>= 1.6, < 2)
|
15
|
+
minitest (>= 5.1)
|
16
|
+
tzinfo (~> 2.0)
|
17
|
+
zeitwerk (~> 2.3)
|
18
|
+
concurrent-ruby (1.1.8)
|
11
19
|
diff-lcs (1.4.4)
|
12
20
|
faraday (1.3.0)
|
13
21
|
faraday-net_http (~> 1.0)
|
14
22
|
multipart-post (>= 1.2, < 3)
|
15
23
|
ruby2_keywords
|
16
24
|
faraday-net_http (1.0.1)
|
25
|
+
i18n (1.8.8)
|
26
|
+
concurrent-ruby (~> 1.0)
|
27
|
+
minitest (5.14.3)
|
17
28
|
multipart-post (2.1.1)
|
18
29
|
openapi_parser (0.12.1)
|
19
30
|
rake (13.0.3)
|
@@ -31,6 +42,9 @@ GEM
|
|
31
42
|
rspec-support (~> 3.10.0)
|
32
43
|
rspec-support (3.10.2)
|
33
44
|
ruby2_keywords (0.0.4)
|
45
|
+
tzinfo (2.0.4)
|
46
|
+
concurrent-ruby (~> 1.0)
|
47
|
+
zeitwerk (2.4.2)
|
34
48
|
|
35
49
|
PLATFORMS
|
36
50
|
ruby
|
data/README.md
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ["meganemura"]
|
9
9
|
spec.email = ["meganemura@users.noreply.github.com"]
|
10
10
|
|
11
|
-
spec.summary = ""
|
12
|
-
spec.description =
|
11
|
+
spec.summary = "Faraday middleware for validation by OpenAPI"
|
12
|
+
spec.description = spec.summary
|
13
13
|
spec.homepage = "https://github.com/meganemura/faraday_middleware-openapi"
|
14
14
|
spec.license = "MIT"
|
15
15
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
|
@@ -29,4 +29,5 @@ Gem::Specification.new do |spec|
|
|
29
29
|
|
30
30
|
spec.add_dependency "faraday", ">= 1.0"
|
31
31
|
spec.add_dependency "openapi_parser"
|
32
|
+
spec.add_dependency "activesupport"
|
32
33
|
end
|
@@ -4,20 +4,7 @@ module FaradayMiddleware
|
|
4
4
|
module OpenAPI
|
5
5
|
class RequestValidator < Faraday::Middleware
|
6
6
|
def on_request(env)
|
7
|
-
|
8
|
-
operation = request_operation(env.method, env.url.path)
|
9
|
-
operation.validate_request_parameter(env.params || {}, {})
|
10
|
-
request_body = case content_type
|
11
|
-
when 'application/json' # Use regexp
|
12
|
-
begin
|
13
|
-
JSON.parse(env.request_body)
|
14
|
-
rescue
|
15
|
-
nil
|
16
|
-
end
|
17
|
-
end
|
18
|
-
operation.validate_request_body(content_type, request_body)
|
19
|
-
rescue OpenAPIParser::NotExistRequiredKey, OpenAPIParser::NotNullError => e
|
20
|
-
raise ::FaradayMiddleware::OpenAPI::Error.new(e.message)
|
7
|
+
validate(env)
|
21
8
|
end
|
22
9
|
|
23
10
|
def initialize(app, options = {})
|
@@ -30,12 +17,75 @@ module FaradayMiddleware
|
|
30
17
|
|
31
18
|
attr_reader :schema_path
|
32
19
|
|
33
|
-
def
|
34
|
-
|
20
|
+
def validate(env)
|
21
|
+
request_operation = RequestOperation.new(env: env, schema_path: schema_path)
|
22
|
+
request_operation.validate_request_parameter
|
23
|
+
request_operation.validate_request_body
|
35
24
|
end
|
36
25
|
|
37
|
-
def request_operation(
|
38
|
-
|
26
|
+
def request_operation(env:, schema_path:)
|
27
|
+
RequestOperation.new(env: env, schema_path: schema_path)
|
28
|
+
end
|
29
|
+
|
30
|
+
class RequestOperation
|
31
|
+
def initialize(env:, schema_path:)
|
32
|
+
@env = env
|
33
|
+
@schema_path = schema_path
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate_request_parameter
|
37
|
+
request_operation.validate_request_parameter(env.params || {}, {})
|
38
|
+
rescue OpenAPIParser::OpenAPIError => e
|
39
|
+
raise ::FaradayMiddleware::OpenAPI::Error.new(e.message)
|
40
|
+
end
|
41
|
+
|
42
|
+
def validate_request_body
|
43
|
+
request_operation.validate_request_body(content_type, request_body)
|
44
|
+
rescue OpenAPIParser::OpenAPIError => e
|
45
|
+
raise ::FaradayMiddleware::OpenAPI::Error.new(e.message)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
attr_reader :env
|
51
|
+
attr_reader :schema_path
|
52
|
+
|
53
|
+
def content_type
|
54
|
+
env.request_headers['Content-Type']
|
55
|
+
end
|
56
|
+
|
57
|
+
def request_body
|
58
|
+
case content_type
|
59
|
+
when 'application/json' # Use regexp
|
60
|
+
begin
|
61
|
+
JSON.parse(env.request_body)
|
62
|
+
rescue
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
when "multipart/form-data"
|
66
|
+
validatablize_multipart_form_data(env.request_body)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def validatablize_multipart_form_data(request_body)
|
71
|
+
body = request_body.deep_stringify_keys
|
72
|
+
body.deep_transform_values do |value|
|
73
|
+
case value
|
74
|
+
when Faraday::FilePart
|
75
|
+
value.yield_self {|x| v = x.read; x.rewind; v }
|
76
|
+
else
|
77
|
+
value
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def request_operation
|
83
|
+
openapi_parser.request_operation(env.method, env.url.path)
|
84
|
+
end
|
85
|
+
|
86
|
+
def openapi_parser
|
87
|
+
@openapi_parser ||= OpenAPIParser.parse(YAML.load_file(schema_path), coerce_value: false)
|
88
|
+
end
|
39
89
|
end
|
40
90
|
end
|
41
91
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday_middleware-openapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- meganemura
|
@@ -38,7 +38,21 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Faraday middleware for validation by OpenAPI
|
42
56
|
email:
|
43
57
|
- meganemura@users.noreply.github.com
|
44
58
|
executables: []
|
@@ -86,5 +100,5 @@ requirements: []
|
|
86
100
|
rubygems_version: 3.1.2
|
87
101
|
signing_key:
|
88
102
|
specification_version: 4
|
89
|
-
summary:
|
103
|
+
summary: Faraday middleware for validation by OpenAPI
|
90
104
|
test_files: []
|