api_valve 1.1.0 → 1.2.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/lib/api_valve/error_responder.rb +2 -2
- data/lib/api_valve/forwarder/location_converter.rb +38 -0
- data/lib/api_valve/forwarder/response.rb +9 -3
- data/lib/api_valve/forwarder.rb +3 -2
- data/lib/api_valve/middleware/error_handling.rb +5 -1
- data/lib/api_valve/proxy.rb +2 -2
- data/lib/api_valve.rb +2 -1
- metadata +40 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 06a97139becbc8072fd7a530580b48ca5b5ba0ea13321524833d470fd868d175
|
|
4
|
+
data.tar.gz: 0abefffd5835c0c2eabd3c8095b75dc9d529815992f1bc0449bea9d96ad6d2dd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6fb2949969a28eb1c05fec05d936b91af13124a0e6a0d7e7c4cfaae40f8cf7e2abb3737e23f5d5e036ceab2f89dae1d273fcdaef04513c6d4890d8dacae4d0cc
|
|
7
|
+
data.tar.gz: 633b4057742e3271366a241103a6afa80278ec1f384b68da01a57974c7d116c0310f852dc1d1413b800dc9ffecb46d25d321b211cfd63cc98197c9260b920e08
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module ApiValve
|
|
2
|
+
class Forwarder::LocationConverter
|
|
3
|
+
def initialize(location, options)
|
|
4
|
+
@location = location
|
|
5
|
+
@options = options
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def call
|
|
9
|
+
if other_host? || same_prefix?
|
|
10
|
+
@location.to_s
|
|
11
|
+
else
|
|
12
|
+
convert_location
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def local_prefix
|
|
19
|
+
@options[:local_prefix].presence
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def other_host?
|
|
23
|
+
@location.host && @options[:response_uri].host != @location.host
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def same_prefix?
|
|
27
|
+
local_prefix == target_prefix
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def target_prefix
|
|
31
|
+
@options[:target_prefix].presence
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def convert_location
|
|
35
|
+
@location.to_s.gsub(/^#{@options[:target_prefix]}/, @options[:local_prefix])
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -26,7 +26,7 @@ module ApiValve
|
|
|
26
26
|
|
|
27
27
|
# Must return a rack compatible response array of status code, headers and body
|
|
28
28
|
def rack_response
|
|
29
|
-
|
|
29
|
+
Rack::Response.new(body, status, headers)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
protected
|
|
@@ -56,9 +56,15 @@ module ApiValve
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
def adjust_location(location)
|
|
59
|
-
return location
|
|
59
|
+
return unless location
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
Forwarder::LocationConverter.new(
|
|
62
|
+
URI(location),
|
|
63
|
+
@options.slice(:local_prefix, :target_prefix).merge(
|
|
64
|
+
request_uri: URI(@original_request.url),
|
|
65
|
+
response_uri: @original_response.env.url # already a URI
|
|
66
|
+
)
|
|
67
|
+
).call
|
|
62
68
|
end
|
|
63
69
|
|
|
64
70
|
def body
|
data/lib/api_valve/forwarder.rb
CHANGED
|
@@ -4,8 +4,9 @@ module ApiValve
|
|
|
4
4
|
# options, and called from the router.
|
|
5
5
|
|
|
6
6
|
class Forwarder
|
|
7
|
-
autoload :
|
|
8
|
-
autoload :
|
|
7
|
+
autoload :LocationConverter, 'api_valve/forwarder/location_converter'
|
|
8
|
+
autoload :Request, 'api_valve/forwarder/request'
|
|
9
|
+
autoload :Response, 'api_valve/forwarder/response'
|
|
9
10
|
|
|
10
11
|
include Benchmarking
|
|
11
12
|
|
|
@@ -8,7 +8,7 @@ class ApiValve::Middleware
|
|
|
8
8
|
@app.call(env)
|
|
9
9
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
10
10
|
log_error e
|
|
11
|
-
|
|
11
|
+
render_error(e).to_a
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
private
|
|
@@ -17,5 +17,9 @@ class ApiValve::Middleware
|
|
|
17
17
|
ApiValve.logger.error { "#{error.class}: #{error.message}" }
|
|
18
18
|
ApiValve.logger.error { error.backtrace.join("\n") }
|
|
19
19
|
end
|
|
20
|
+
|
|
21
|
+
def render_error(error)
|
|
22
|
+
self.class.const_get(ApiValve.error_responder).new(error).call
|
|
23
|
+
end
|
|
20
24
|
end
|
|
21
25
|
end
|
data/lib/api_valve/proxy.rb
CHANGED
data/lib/api_valve.rb
CHANGED
|
@@ -10,8 +10,9 @@ require 'active_support/notifications'
|
|
|
10
10
|
require 'active_support/rescuable'
|
|
11
11
|
require 'benchmark'
|
|
12
12
|
require 'faraday'
|
|
13
|
-
require '
|
|
13
|
+
require 'json'
|
|
14
14
|
require 'logger'
|
|
15
|
+
require 'rack'
|
|
15
16
|
|
|
16
17
|
module ApiValve
|
|
17
18
|
autoload :Benchmarking, 'api_valve/benchmarking'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: api_valve
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- mkon
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-11-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -37,9 +37,9 @@ dependencies:
|
|
|
37
37
|
- - ">="
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
39
|
version: '0.14'
|
|
40
|
-
- - "
|
|
40
|
+
- - "<"
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
|
-
version: 2.
|
|
42
|
+
version: '2.7'
|
|
43
43
|
type: :runtime
|
|
44
44
|
prerelease: false
|
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -47,37 +47,43 @@ dependencies:
|
|
|
47
47
|
- - ">="
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
49
|
version: '0.14'
|
|
50
|
-
- - "
|
|
50
|
+
- - "<"
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
|
-
version: 2.
|
|
52
|
+
version: '2.7'
|
|
53
53
|
- !ruby/object:Gem::Dependency
|
|
54
|
-
name:
|
|
54
|
+
name: json
|
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
|
56
56
|
requirements:
|
|
57
|
-
- - "
|
|
57
|
+
- - ">="
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: '
|
|
59
|
+
version: '2.0'
|
|
60
60
|
type: :runtime
|
|
61
61
|
prerelease: false
|
|
62
62
|
version_requirements: !ruby/object:Gem::Requirement
|
|
63
63
|
requirements:
|
|
64
|
-
- - "
|
|
64
|
+
- - ">="
|
|
65
65
|
- !ruby/object:Gem::Version
|
|
66
|
-
version: '
|
|
66
|
+
version: '2.0'
|
|
67
67
|
- !ruby/object:Gem::Dependency
|
|
68
68
|
name: rack
|
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
|
70
70
|
requirements:
|
|
71
|
-
- - "
|
|
71
|
+
- - ">="
|
|
72
72
|
- !ruby/object:Gem::Version
|
|
73
73
|
version: '2'
|
|
74
|
+
- - "<"
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '4'
|
|
74
77
|
type: :runtime
|
|
75
78
|
prerelease: false
|
|
76
79
|
version_requirements: !ruby/object:Gem::Requirement
|
|
77
80
|
requirements:
|
|
78
|
-
- - "
|
|
81
|
+
- - ">="
|
|
79
82
|
- !ruby/object:Gem::Version
|
|
80
83
|
version: '2'
|
|
84
|
+
- - "<"
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '4'
|
|
81
87
|
- !ruby/object:Gem::Dependency
|
|
82
88
|
name: json_spec
|
|
83
89
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -98,14 +104,28 @@ dependencies:
|
|
|
98
104
|
requirements:
|
|
99
105
|
- - "~>"
|
|
100
106
|
- !ruby/object:Gem::Version
|
|
101
|
-
version: '
|
|
107
|
+
version: '2.0'
|
|
102
108
|
type: :development
|
|
103
109
|
prerelease: false
|
|
104
110
|
version_requirements: !ruby/object:Gem::Requirement
|
|
105
111
|
requirements:
|
|
106
112
|
- - "~>"
|
|
107
113
|
- !ruby/object:Gem::Version
|
|
108
|
-
version: '
|
|
114
|
+
version: '2.0'
|
|
115
|
+
- !ruby/object:Gem::Dependency
|
|
116
|
+
name: rackup
|
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
|
118
|
+
requirements:
|
|
119
|
+
- - ">="
|
|
120
|
+
- !ruby/object:Gem::Version
|
|
121
|
+
version: '0'
|
|
122
|
+
type: :development
|
|
123
|
+
prerelease: false
|
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
125
|
+
requirements:
|
|
126
|
+
- - ">="
|
|
127
|
+
- !ruby/object:Gem::Version
|
|
128
|
+
version: '0'
|
|
109
129
|
- !ruby/object:Gem::Dependency
|
|
110
130
|
name: rspec
|
|
111
131
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -126,28 +146,28 @@ dependencies:
|
|
|
126
146
|
requirements:
|
|
127
147
|
- - '='
|
|
128
148
|
- !ruby/object:Gem::Version
|
|
129
|
-
version: 1.
|
|
149
|
+
version: 1.37.1
|
|
130
150
|
type: :development
|
|
131
151
|
prerelease: false
|
|
132
152
|
version_requirements: !ruby/object:Gem::Requirement
|
|
133
153
|
requirements:
|
|
134
154
|
- - '='
|
|
135
155
|
- !ruby/object:Gem::Version
|
|
136
|
-
version: 1.
|
|
156
|
+
version: 1.37.1
|
|
137
157
|
- !ruby/object:Gem::Dependency
|
|
138
158
|
name: rubocop-rspec
|
|
139
159
|
requirement: !ruby/object:Gem::Requirement
|
|
140
160
|
requirements:
|
|
141
161
|
- - '='
|
|
142
162
|
- !ruby/object:Gem::Version
|
|
143
|
-
version: 2.
|
|
163
|
+
version: 2.13.2
|
|
144
164
|
type: :development
|
|
145
165
|
prerelease: false
|
|
146
166
|
version_requirements: !ruby/object:Gem::Requirement
|
|
147
167
|
requirements:
|
|
148
168
|
- - '='
|
|
149
169
|
- !ruby/object:Gem::Version
|
|
150
|
-
version: 2.
|
|
170
|
+
version: 2.13.2
|
|
151
171
|
- !ruby/object:Gem::Dependency
|
|
152
172
|
name: simplecov
|
|
153
173
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -204,6 +224,7 @@ files:
|
|
|
204
224
|
- lib/api_valve/error.rb
|
|
205
225
|
- lib/api_valve/error_responder.rb
|
|
206
226
|
- lib/api_valve/forwarder.rb
|
|
227
|
+
- lib/api_valve/forwarder/location_converter.rb
|
|
207
228
|
- lib/api_valve/forwarder/request.rb
|
|
208
229
|
- lib/api_valve/forwarder/response.rb
|
|
209
230
|
- lib/api_valve/logger.rb
|