nonnative 1.89.0 → 1.90.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 +4 -0
- data/Gemfile.lock +1 -1
- data/README.md +73 -8
- data/lib/nonnative/grpc_server.rb +2 -2
- data/lib/nonnative/http_proxy_server.rb +49 -0
- data/lib/nonnative/http_server.rb +4 -3
- data/lib/nonnative/version.rb +1 -1
- data/lib/nonnative.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 231f496f293109d5d19911d7b34663105c97e2c5221706998b40a6eebccd2257
|
4
|
+
data.tar.gz: 96f6c3137a4b206dde98e9d27e76a6b9ee62d92b57864261304f5e73e2797f33
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3dd070da1a8c7c85086b5044142e14375281b340a463e59cc5f671fd1b69e6ee57aa04bf06be30bea1029f58097010c48c1d0272c0fbd1f7b5968050808b194
|
7
|
+
data.tar.gz: d9d15761a5fdbb23e178dc8b5cc01f3e9d71ff7c5e2fbe78cc11be1b1b9681a9387695d116e4de8b817c58ae674c34ef79ad952305c0f4482724ea408e164bac
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
|
7
7
|
## Unreleased
|
8
8
|
|
9
|
+
## [v1.90.0](https://github.com/alexfalkowski/nonnative/releases/tag/v1.90.0) - 2025-01-28
|
10
|
+
|
11
|
+
- [`3842ebe`](https://github.com/alexfalkowski/nonnative/commit/3842ebe97f00fc7f522a53e7421def15d952e775) feat(proxy): add http proxy server (#497)
|
12
|
+
|
9
13
|
## [v1.89.0](https://github.com/alexfalkowski/nonnative/releases/tag/v1.89.0) - 2025-01-27
|
10
14
|
|
11
15
|
- [`e31d54e`](https://github.com/alexfalkowski/nonnative/commit/e31d54e2ebeec01a56974897f40679ca86fb2006) feat(http_client): add ability to retry (#496)
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -231,18 +231,20 @@ Define your server:
|
|
231
231
|
module Nonnative
|
232
232
|
module Features
|
233
233
|
class Application < Sinatra::Application
|
234
|
-
configure do
|
235
|
-
set :logging, false
|
236
|
-
end
|
237
|
-
|
238
234
|
get '/hello' do
|
239
235
|
'Hello World!'
|
240
236
|
end
|
241
237
|
end
|
242
238
|
|
243
239
|
class HTTPServer < Nonnative::HTTPServer
|
244
|
-
def
|
245
|
-
Application
|
240
|
+
def initialize(service)
|
241
|
+
app = Sinatra.new(Application) do
|
242
|
+
configure do
|
243
|
+
set :logging, false
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
super(app, service)
|
246
248
|
end
|
247
249
|
end
|
248
250
|
end
|
@@ -292,6 +294,67 @@ Nonnative.configure do |config|
|
|
292
294
|
end
|
293
295
|
```
|
294
296
|
|
297
|
+
##### Proxy
|
298
|
+
|
299
|
+
The system allows you to define a http proxy for external systems, e.g api.github.com
|
300
|
+
|
301
|
+
Define your server:
|
302
|
+
|
303
|
+
```ruby
|
304
|
+
module Nonnative
|
305
|
+
module Features
|
306
|
+
class HTTPProxyServer < Nonnative::HTTPProxyServer
|
307
|
+
def initialize(service)
|
308
|
+
super('www.afalkowski.com', service)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
312
|
+
end
|
313
|
+
```
|
314
|
+
|
315
|
+
Setup it up programmatically:
|
316
|
+
|
317
|
+
```ruby
|
318
|
+
require 'nonnative'
|
319
|
+
|
320
|
+
Nonnative.configure do |config|
|
321
|
+
config.version = '1.0'
|
322
|
+
config.url = 'http://localhost:4567'
|
323
|
+
|
324
|
+
config.server do |s|
|
325
|
+
s.name = 'http_server_proxy'
|
326
|
+
s.klass = Nonnative::Features::HTTPProxyServer
|
327
|
+
s.timeout = 1
|
328
|
+
s.port = 4567
|
329
|
+
s.log = 'http_server_proxy.log'
|
330
|
+
end
|
331
|
+
end
|
332
|
+
```
|
333
|
+
|
334
|
+
Setup it up through configuration:
|
335
|
+
|
336
|
+
```yaml
|
337
|
+
version: "1.0"
|
338
|
+
url: http://localhost:4567
|
339
|
+
servers:
|
340
|
+
-
|
341
|
+
name: http_server_proxy
|
342
|
+
class: Nonnative::Features::HTTPProxyServer
|
343
|
+
timeout: 1
|
344
|
+
port: 4567
|
345
|
+
log: http_server_proxy.log
|
346
|
+
```
|
347
|
+
|
348
|
+
Then load the file with:
|
349
|
+
|
350
|
+
```ruby
|
351
|
+
require 'nonnative'
|
352
|
+
|
353
|
+
Nonnative.configure do |config|
|
354
|
+
config.load_file('configuration.yml')
|
355
|
+
end
|
356
|
+
```
|
357
|
+
|
295
358
|
#### gRPC
|
296
359
|
|
297
360
|
Define your server:
|
@@ -306,8 +369,10 @@ module Nonnative
|
|
306
369
|
end
|
307
370
|
|
308
371
|
class GRPCServer < Nonnative::GRPCServer
|
309
|
-
def
|
310
|
-
Greeter.new
|
372
|
+
def initialize(service)
|
373
|
+
svc = Greeter.new
|
374
|
+
|
375
|
+
super(svc, service)
|
311
376
|
end
|
312
377
|
end
|
313
378
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Nonnative
|
4
4
|
class GRPCServer < Nonnative::Server
|
5
|
-
def initialize(service)
|
5
|
+
def initialize(svc, service)
|
6
6
|
@server = GRPC::RpcServer.new
|
7
7
|
server.handle(svc)
|
8
8
|
|
@@ -11,7 +11,7 @@ module Nonnative
|
|
11
11
|
@logger ||= Logger.new(service.log)
|
12
12
|
end
|
13
13
|
|
14
|
-
super
|
14
|
+
super(service)
|
15
15
|
end
|
16
16
|
|
17
17
|
protected
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Adapted from https://gist.github.com/RaVbaker/d9ead3c92b915f997dab25c7f0c0ab65
|
4
|
+
module Nonnative
|
5
|
+
class HTTPProxyApplication < Sinatra::Application
|
6
|
+
def retrieve_headers(request)
|
7
|
+
headers = request.env.map do |header, value|
|
8
|
+
[header[5..].split('_').map(&:capitalize).join('-'), value] if header.start_with?('HTTP_')
|
9
|
+
end
|
10
|
+
headers = headers.compact.to_h
|
11
|
+
|
12
|
+
headers.except('Host', 'Accept-Encoding', 'Version')
|
13
|
+
end
|
14
|
+
|
15
|
+
def build_url(request, settings)
|
16
|
+
URI::HTTPS.build(host: settings.host, path: request.path_info, query: request.query_string).to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
def api_response(verb, uri, opts)
|
20
|
+
client = RestClient::Resource.new(uri, opts)
|
21
|
+
|
22
|
+
client.send(verb)
|
23
|
+
end
|
24
|
+
|
25
|
+
%w[get post put patch delete].each do |verb|
|
26
|
+
send(verb, /.*/) do
|
27
|
+
uri = build_url(request, settings)
|
28
|
+
opts = { headers: retrieve_headers(request) }
|
29
|
+
res = api_response(verb, uri, opts)
|
30
|
+
|
31
|
+
status res.code
|
32
|
+
res.body
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class HTTPProxyServer < Nonnative::HTTPServer
|
38
|
+
def initialize(host, service)
|
39
|
+
app = Sinatra.new(Nonnative::HTTPProxyApplication) do
|
40
|
+
configure do
|
41
|
+
set :logging, false
|
42
|
+
set :host, host
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
super(app, service)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -2,10 +2,11 @@
|
|
2
2
|
|
3
3
|
module Nonnative
|
4
4
|
class HTTPServer < Nonnative::Server
|
5
|
-
def initialize(service)
|
5
|
+
def initialize(app, service)
|
6
6
|
@server = ::Rackup::Handler.get('webrick')
|
7
|
+
@app = app
|
7
8
|
|
8
|
-
super
|
9
|
+
super(service)
|
9
10
|
end
|
10
11
|
|
11
12
|
protected
|
@@ -27,6 +28,6 @@ module Nonnative
|
|
27
28
|
|
28
29
|
private
|
29
30
|
|
30
|
-
attr_reader :queue, :server
|
31
|
+
attr_reader :queue, :server, :app
|
31
32
|
end
|
32
33
|
end
|
data/lib/nonnative/version.rb
CHANGED
data/lib/nonnative.rb
CHANGED
@@ -40,6 +40,7 @@ require 'nonnative/service'
|
|
40
40
|
require 'nonnative/pool'
|
41
41
|
require 'nonnative/http_client'
|
42
42
|
require 'nonnative/http_server'
|
43
|
+
require 'nonnative/http_proxy_server'
|
43
44
|
require 'nonnative/grpc_server'
|
44
45
|
require 'nonnative/observability'
|
45
46
|
require 'nonnative/proxy_factory'
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nonnative
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.90.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alejandro Falkowski
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-01-
|
10
|
+
date: 2025-01-28 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: concurrent-ruby
|
@@ -305,6 +305,7 @@ files:
|
|
305
305
|
- lib/nonnative/grpc_server.rb
|
306
306
|
- lib/nonnative/header.rb
|
307
307
|
- lib/nonnative/http_client.rb
|
308
|
+
- lib/nonnative/http_proxy_server.rb
|
308
309
|
- lib/nonnative/http_server.rb
|
309
310
|
- lib/nonnative/invalid_data_socket_pair.rb
|
310
311
|
- lib/nonnative/no_proxy.rb
|