faraday_middleware-openapi 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5af0efe250b2afc8f1a0bdedfa76feed9dc6e8c6d75283eae30e9de8c97b1593
4
- data.tar.gz: 183c3a1e0202fc982310b4c57c2b992ce4ba7048706eeda01ca283953cbe9ebc
3
+ metadata.gz: dfb34ee30b7b4e177eaba4234981418f9c217f8e6a5d270f61f2d39ff18ac8af
4
+ data.tar.gz: fe0e7c176b712505d14a301966aa67a0118867473940c3450e727a4e5835d838
5
5
  SHA512:
6
- metadata.gz: 517ef8d5de5309d76ea613ec2518bf70774d65c8ee46bf3fed0019641d1d1efa827c04ae8e1d038b948e9312ee3e30c63d79ff2718e5d4e2d324d7a980802b26
7
- data.tar.gz: df07b15c091a34883b941f15ee17392b5fc57c825ffb032a00295f53c6effe08fcac2e3e7b4be3313e4934f959efb7d87d2d15ce8eb6865b0649fa8ed33b1358
6
+ metadata.gz: 9ef0e5294688a1cb5d1afdb90e3e18eb973e72ce1a5bb94e2d1d93c046ac26a0068bbe245de22d20998de0310bb16807351a3b49d036f15df8aae83e2105e472
7
+ data.tar.gz: 296e07aed246abe7728199c281c4685f7920e3c47107968dafb55a73c3b2cdf51c02a1009de9c7f25acaa8a51a0ec7fcee019896ed696c5ab1a603c0f1d9606e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  ## [Unreleased]
2
2
 
3
- ## [0.1.0] - 2021-02-20
3
+ ## [0.0.2] - 2021-02-20
4
+
5
+ - Support multipart/form-data in RequestValidator (#2)
6
+ ## [0.0.1] - 2021-02-20
4
7
 
5
8
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,19 +1,30 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- faraday_middleware-openapi (0.0.1)
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
@@ -11,6 +11,9 @@ gem 'faraday_middleware-openapi'
11
11
  ```ruby
12
12
  Faraday.new(...) do |conn|
13
13
  conn.request :openapi, "/path/to/openapi_schema.yaml"
14
+
15
+ # if using :multipart, it must be defined after :openapi
16
+ conn.request(:multipart)
14
17
  end
15
18
  ```
16
19
 
@@ -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
@@ -3,6 +3,8 @@
3
3
  require "faraday"
4
4
  require "yaml"
5
5
  require "openapi_parser"
6
+ require "active_support/core_ext/hash/keys"
7
+ require "active_support/core_ext/hash/deep_transform_values"
6
8
  require_relative "openapi/request_validator"
7
9
  require_relative "openapi/version"
8
10
 
@@ -4,20 +4,7 @@ module FaradayMiddleware
4
4
  module OpenAPI
5
5
  class RequestValidator < Faraday::Middleware
6
6
  def on_request(env)
7
- content_type = env.request_headers['Content-Type']
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 openapi_parser
34
- @openapi_parser ||= OpenAPIParser.parse(YAML.load_file(schema_path), coerce_value: false)
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(method, path)
38
- openapi_parser.request_operation(method, path)
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module FaradayMiddleware
4
4
  module OpenAPI
5
- VERSION = "0.0.1"
5
+ VERSION = "0.0.2"
6
6
  end
7
7
  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.1
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
- description: ''
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: []