rack-delegate 0.2.0 → 0.3.0

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
  SHA1:
3
- metadata.gz: 635459c3a9a6f8fdfef399b29e6a8a8958be8b59
4
- data.tar.gz: 244bba8c0cdd81896e6bebdcb9e537638e45d50d
3
+ metadata.gz: 856faf0870ee7daa0433a674f87dfc8380947c53
4
+ data.tar.gz: 094fb2e6ff4307150a05f097a4c3326f26a240b8
5
5
  SHA512:
6
- metadata.gz: 1bae04109174577d7ace0e5af0c6e65d04a4d4bbe8e2d5a93bd634862511600d7c2228f2654e67753df1424102b1b22090321a6a30bfb8f4044616f18b5cafa5
7
- data.tar.gz: ba625dcc76877fcff011d0db4896477ddd1e74d98bb723ff5f5210ec09fba57f9398b8c8c18ee2174b3af6fadbac789b02e9067e0c1dc89d1838d45222b3fd5f
6
+ metadata.gz: 5cc3a14a4943c56ca31ca1cfe407daf203983da252b7502d8125bff3b84694add043caa452b13a17386551ac93275b1d81a167589e431dfb5af299338a5cab01
7
+ data.tar.gz: ee3c816bd192adfab66012420a8bfe8932066f6e627da59fd1e276ffc56b78b99a06d3e4735419e9dd61bcf6f8cbe951f75469eadab31e0667e9863b71562bbc
data/README.md CHANGED
@@ -6,7 +6,7 @@ Heroku's, and what-not-fancy-cloud-services, without a bit of complications.
6
6
 
7
7
  The proxy can sit after the request authentication, or before it, depending on
8
8
  the services you have to route requests to. You can rewrite requests URLs, and
9
- even the whole `Net::HTTP::Reqest` to be sent out.
9
+ the whole `Net::HTTPRequest` to be sent out.
10
10
 
11
11
  ## Installation
12
12
 
@@ -48,6 +48,31 @@ module Macro
48
48
  end
49
49
  ```
50
50
 
51
+ ---
52
+
53
+ Wait, what happened? `Rack::Delegate.configure` created a class, we can use as
54
+ an middleware. The configuration is based on a DSL, you can check it out
55
+ [here][DSL].
56
+
57
+ In the example above, we said:
58
+
59
+ * Rewrite the incoming requests URL and strip the leading `/api` out of them,
60
+ before sending them off to the service that will handle them. The block of
61
+ `rewrite` is an `instance_eval` of an `URI` object. You can call all the
62
+ methods on `URI`.
63
+
64
+ * Don't proxy requests which don't match a constraint. A constraint is any
65
+ object that responds to `matches?` (you can reuse your Rails constraints, for
66
+ example), `call`, or `===`. The method is called with a plain `Rack::Request`
67
+ as an input. If you pass it a block, that block becomes a constraint.
68
+
69
+ * Proxy requests matching a path of `/api/users` to
70
+ `http://users-service.intern`. Because we have setup a rewrite rule, we
71
+ will hit `http://users-service.intern/users` and not
72
+ `http://users-service.intern/api/users`
73
+
74
+ ---
75
+
51
76
  Yes, you can insert multiple `Rack::Delegate` middleware instances in your
52
77
  stack. Say, one for requests that don't require authentication and one for
53
78
  requests that do.
@@ -56,14 +81,10 @@ _(Given that the request authentication is a middleware itself.)_
56
81
 
57
82
  ```ruby
58
83
  Macro::UnauthenticatedGateway = Rack::Delegate.configure do
59
- rewrite { path.gsub!(%r{\A/api}, '') }
60
-
61
84
  from %r{\A/registration}, to: 'http://registration-service.intern'
62
85
  end
63
86
 
64
87
  Macro::AuthenticatedGateway = Rack::Delegate.configure do
65
- rewrite { path.gsub!(%r{\A/api}, '') }
66
-
67
88
  from %r{\A/api/users}, to: 'http://users-service.intern'
68
89
  from %r{\A/api/payments}, to: 'http://payments-service.intern'
69
90
  end
@@ -71,7 +92,7 @@ end
71
92
  module Macro
72
93
  class Appplication
73
94
  middleware.insert_before "Auth", UnauthenticatedGateway
74
- middleware.insert_after "Auth", AuthenticatedGateway
95
+ middleware.insert_after "Auth", AuthenticatedGateway
75
96
  end
76
97
  end
77
98
  ```
@@ -80,13 +101,9 @@ end
80
101
 
81
102
  ![but](https://raw.githubusercontent.com/gsamokovarov/rack-delegate/master/.but.jpg)
82
103
 
83
- A question well asked, dear sir! Going micro-services early may bite you. Going
84
- micro-services for the sake of it may bite you. Going micro-services, because
85
- you can't manage that shitty app, well... may result in shitty services as
86
- well.
87
-
88
- Anyway, if you wanna go that route, you can do it quickly with Ruby and
89
- prototype. And if you do, you may as well need a better API gateway than this
90
- one. [OpenResty] may be useful for you.
104
+ If you wanna go the (micro) services route, you can do it quickly with Ruby and
105
+ prototype. If you need the speed, you can check out [OpenResty].
91
106
 
92
107
  [OpenResty]: https://openresty.org/
108
+ [DSL]: https://github.com/gsamokovarov/rack-delegate/blob/v0.2.0/lib/rack/delegate/configuration.rb
109
+ [URI]: http://ruby-doc.org/stdlib-2.3.0/libdoc/uri/rdoc/URI.html
@@ -3,6 +3,11 @@ require 'net/http'
3
3
  module Rack
4
4
  module Delegate
5
5
  class NetHttpRequestBuilder < Struct.new(:rack_request, :uri_rewriter, :net_http_request_rewriter)
6
+ CONTENT_HEADERS = %w(
7
+ CONTENT_LENGTH
8
+ CONTENT_TYPE
9
+ ).freeze
10
+
6
11
  def build
7
12
  net_http_request_class.new(url).tap do |net_http_request|
8
13
  delegate_rack_headers_to(net_http_request)
@@ -46,7 +51,7 @@ module Rack
46
51
 
47
52
  def headers_from_rack_request(rack_request)
48
53
  rack_request.env
49
- .select { |key, _| key.start_with?('HTTP_') }
54
+ .select { |key, _| key.start_with?('HTTP_') || CONTENT_HEADERS.include?(key) }
50
55
  .collect { |key, value| [key.sub(/^HTTP_/, '').tr('_', '-'), value] }
51
56
  end
52
57
  end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  module Delegate
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-delegate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genadi Samokovarov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-03 00:00:00.000000000 Z
11
+ date: 2016-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack