routemaster-drain 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,224 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ routemaster-drain (1.1.0)
5
+ faraday (>= 0.9.0)
6
+ faraday_middleware
7
+ hashie
8
+ net-http-persistent (< 3)
9
+ rack (>= 1.4.5)
10
+ redis-namespace
11
+ thread
12
+ wisper (~> 1.6.1)
13
+
14
+ GEM
15
+ remote: https://rubygems.org/
16
+ specs:
17
+ actionmailer (4.0.0)
18
+ actionpack (= 4.0.0)
19
+ mail (~> 2.5.3)
20
+ actionpack (4.0.0)
21
+ activesupport (= 4.0.0)
22
+ builder (~> 3.1.0)
23
+ erubis (~> 2.7.0)
24
+ rack (~> 1.5.2)
25
+ rack-test (~> 0.6.2)
26
+ activemodel (4.0.0)
27
+ activesupport (= 4.0.0)
28
+ builder (~> 3.1.0)
29
+ activerecord (4.0.0)
30
+ activemodel (= 4.0.0)
31
+ activerecord-deprecated_finders (~> 1.0.2)
32
+ activesupport (= 4.0.0)
33
+ arel (~> 4.0.0)
34
+ activerecord-deprecated_finders (1.0.4)
35
+ activesupport (4.0.0)
36
+ i18n (~> 0.6, >= 0.6.4)
37
+ minitest (~> 4.2)
38
+ multi_json (~> 1.3)
39
+ thread_safe (~> 0.1)
40
+ tzinfo (~> 0.3.37)
41
+ addressable (2.5.0)
42
+ public_suffix (~> 2.0, >= 2.0.2)
43
+ appraisal (2.1.0)
44
+ bundler
45
+ rake
46
+ thor (>= 0.14.0)
47
+ arel (4.0.2)
48
+ builder (3.1.4)
49
+ byebug (9.0.6)
50
+ codeclimate-test-reporter (1.0.3)
51
+ simplecov
52
+ coderay (1.1.1)
53
+ concurrent-ruby (1.0.2)
54
+ connection_pool (2.2.1)
55
+ crack (0.4.3)
56
+ safe_yaml (~> 1.0.0)
57
+ diff-lcs (1.2.5)
58
+ docile (1.1.5)
59
+ dotenv (2.1.1)
60
+ erubis (2.7.0)
61
+ faraday (0.10.0)
62
+ multipart-post (>= 1.2, < 3)
63
+ faraday_middleware (0.10.1)
64
+ faraday (>= 0.7.4, < 1.0)
65
+ ffi (1.9.14)
66
+ formatador (0.2.5)
67
+ guard (2.14.0)
68
+ formatador (>= 0.2.4)
69
+ listen (>= 2.7, < 4.0)
70
+ lumberjack (~> 1.0)
71
+ nenv (~> 0.1)
72
+ notiffany (~> 0.0)
73
+ pry (>= 0.9.12)
74
+ shellany (~> 0.0)
75
+ thor (>= 0.18.1)
76
+ guard-compat (1.2.1)
77
+ guard-rspec (4.7.3)
78
+ guard (~> 2.1)
79
+ guard-compat (~> 1.1)
80
+ rspec (>= 2.99.0, < 4.0)
81
+ hashdiff (0.3.1)
82
+ hashie (3.4.6)
83
+ hike (1.2.3)
84
+ i18n (0.7.0)
85
+ json (2.0.2)
86
+ listen (3.1.5)
87
+ rb-fsevent (~> 0.9, >= 0.9.4)
88
+ rb-inotify (~> 0.9, >= 0.9.7)
89
+ ruby_dep (~> 1.2)
90
+ lumberjack (1.0.10)
91
+ mail (2.5.4)
92
+ mime-types (~> 1.16)
93
+ treetop (~> 1.4.8)
94
+ method_source (0.8.2)
95
+ mime-types (1.25.1)
96
+ minitest (4.7.5)
97
+ mono_logger (1.1.0)
98
+ multi_json (1.12.1)
99
+ multipart-post (2.0.0)
100
+ nenv (0.3.0)
101
+ net-http-persistent (2.9.4)
102
+ notiffany (0.1.1)
103
+ nenv (~> 0.1)
104
+ shellany (~> 0.0)
105
+ polyglot (0.3.5)
106
+ pry (0.10.4)
107
+ coderay (~> 1.1.0)
108
+ method_source (~> 0.8.1)
109
+ slop (~> 3.4)
110
+ pry-byebug (3.4.2)
111
+ byebug (~> 9.0)
112
+ pry (~> 0.10)
113
+ psych (2.2.1)
114
+ public_suffix (2.0.4)
115
+ rack (1.5.5)
116
+ rack-protection (1.5.3)
117
+ rack
118
+ rack-test (0.6.3)
119
+ rack (>= 1.0)
120
+ rails (4.0.0)
121
+ actionmailer (= 4.0.0)
122
+ actionpack (= 4.0.0)
123
+ activerecord (= 4.0.0)
124
+ activesupport (= 4.0.0)
125
+ bundler (>= 1.3.0, < 2.0)
126
+ railties (= 4.0.0)
127
+ sprockets-rails (~> 2.0.0)
128
+ railties (4.0.0)
129
+ actionpack (= 4.0.0)
130
+ activesupport (= 4.0.0)
131
+ rake (>= 0.8.7)
132
+ thor (>= 0.18.1, < 2.0)
133
+ rake (12.0.0)
134
+ rb-fsevent (0.9.8)
135
+ rb-inotify (0.9.7)
136
+ ffi (>= 0.5.0)
137
+ redis (3.3.2)
138
+ redis-namespace (1.5.2)
139
+ redis (~> 3.0, >= 3.0.4)
140
+ resque (1.26.0)
141
+ mono_logger (~> 1.0)
142
+ multi_json (~> 1.0)
143
+ redis-namespace (~> 1.3)
144
+ sinatra (>= 0.9.2)
145
+ vegas (~> 0.1.2)
146
+ rspec (3.5.0)
147
+ rspec-core (~> 3.5.0)
148
+ rspec-expectations (~> 3.5.0)
149
+ rspec-mocks (~> 3.5.0)
150
+ rspec-core (3.5.4)
151
+ rspec-support (~> 3.5.0)
152
+ rspec-expectations (3.5.0)
153
+ diff-lcs (>= 1.2.0, < 2.0)
154
+ rspec-support (~> 3.5.0)
155
+ rspec-mocks (3.5.0)
156
+ diff-lcs (>= 1.2.0, < 2.0)
157
+ rspec-support (~> 3.5.0)
158
+ rspec-support (3.5.0)
159
+ ruby_dep (1.5.0)
160
+ safe_yaml (1.0.4)
161
+ shellany (0.0.1)
162
+ sidekiq (4.2.7)
163
+ concurrent-ruby (~> 1.0)
164
+ connection_pool (~> 2.2, >= 2.2.0)
165
+ rack-protection (>= 1.5.0)
166
+ redis (~> 3.2, >= 3.2.1)
167
+ simplecov (0.12.0)
168
+ docile (~> 1.1.0)
169
+ json (>= 1.8, < 3)
170
+ simplecov-html (~> 0.10.0)
171
+ simplecov-html (0.10.0)
172
+ sinatra (1.4.7)
173
+ rack (~> 1.5)
174
+ rack-protection (~> 1.4)
175
+ tilt (>= 1.3, < 3)
176
+ slop (3.6.0)
177
+ sprockets (2.12.4)
178
+ hike (~> 1.2)
179
+ multi_json (~> 1.0)
180
+ rack (~> 1.0)
181
+ tilt (~> 1.1, != 1.3.0)
182
+ sprockets-rails (2.0.1)
183
+ actionpack (>= 3.0)
184
+ activesupport (>= 3.0)
185
+ sprockets (~> 2.8)
186
+ thor (0.19.4)
187
+ thread (0.2.2)
188
+ thread_safe (0.3.5)
189
+ tilt (1.4.1)
190
+ treetop (1.4.15)
191
+ polyglot
192
+ polyglot (>= 0.3.1)
193
+ tzinfo (0.3.52)
194
+ vegas (0.1.11)
195
+ rack (>= 1.0.0)
196
+ webmock (2.3.1)
197
+ addressable (>= 2.3.6)
198
+ crack (>= 0.3.2)
199
+ hashdiff
200
+ wisper (1.6.1)
201
+
202
+ PLATFORMS
203
+ ruby
204
+
205
+ DEPENDENCIES
206
+ appraisal
207
+ bundler
208
+ codeclimate-test-reporter
209
+ dotenv
210
+ guard-rspec
211
+ pry-byebug
212
+ psych
213
+ rack-test
214
+ rails (= 4.0.0)
215
+ rake
216
+ resque
217
+ routemaster-drain!
218
+ rspec
219
+ sidekiq
220
+ simplecov
221
+ webmock
222
+
223
+ BUNDLED WITH
224
+ 1.13.6
@@ -0,0 +1,24 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "psych", :require => false
6
+ gem "bundler", :require => false
7
+ gem "rake", :require => false
8
+ gem "webmock", :require => false
9
+ gem "rack-test", :require => false
10
+ gem "dotenv", :require => false
11
+ gem "codeclimate-test-reporter", :require => false
12
+ gem "simplecov"
13
+ gem "resque"
14
+ gem "sidekiq"
15
+ gem "rails", "5.0.0"
16
+
17
+ group :development, :test do
18
+ gem "guard-rspec", :require => false
19
+ gem "pry-byebug", :require => false
20
+ gem "rspec"
21
+ gem "appraisal"
22
+ end
23
+
24
+ gemspec :path => "../"
@@ -0,0 +1,250 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ routemaster-drain (1.1.0)
5
+ faraday (>= 0.9.0)
6
+ faraday_middleware
7
+ hashie
8
+ net-http-persistent (< 3)
9
+ rack (>= 1.4.5)
10
+ redis-namespace
11
+ thread
12
+ wisper (~> 1.6.1)
13
+
14
+ GEM
15
+ remote: https://rubygems.org/
16
+ specs:
17
+ actioncable (5.0.0)
18
+ actionpack (= 5.0.0)
19
+ nio4r (~> 1.2)
20
+ websocket-driver (~> 0.6.1)
21
+ actionmailer (5.0.0)
22
+ actionpack (= 5.0.0)
23
+ actionview (= 5.0.0)
24
+ activejob (= 5.0.0)
25
+ mail (~> 2.5, >= 2.5.4)
26
+ rails-dom-testing (~> 2.0)
27
+ actionpack (5.0.0)
28
+ actionview (= 5.0.0)
29
+ activesupport (= 5.0.0)
30
+ rack (~> 2.0)
31
+ rack-test (~> 0.6.3)
32
+ rails-dom-testing (~> 2.0)
33
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
34
+ actionview (5.0.0)
35
+ activesupport (= 5.0.0)
36
+ builder (~> 3.1)
37
+ erubis (~> 2.7.0)
38
+ rails-dom-testing (~> 2.0)
39
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
40
+ activejob (5.0.0)
41
+ activesupport (= 5.0.0)
42
+ globalid (>= 0.3.6)
43
+ activemodel (5.0.0)
44
+ activesupport (= 5.0.0)
45
+ activerecord (5.0.0)
46
+ activemodel (= 5.0.0)
47
+ activesupport (= 5.0.0)
48
+ arel (~> 7.0)
49
+ activesupport (5.0.0)
50
+ concurrent-ruby (~> 1.0, >= 1.0.2)
51
+ i18n (~> 0.7)
52
+ minitest (~> 5.1)
53
+ tzinfo (~> 1.1)
54
+ addressable (2.5.0)
55
+ public_suffix (~> 2.0, >= 2.0.2)
56
+ appraisal (2.1.0)
57
+ bundler
58
+ rake
59
+ thor (>= 0.14.0)
60
+ arel (7.1.4)
61
+ builder (3.2.2)
62
+ byebug (9.0.6)
63
+ codeclimate-test-reporter (1.0.3)
64
+ simplecov
65
+ coderay (1.1.1)
66
+ concurrent-ruby (1.0.2)
67
+ connection_pool (2.2.1)
68
+ crack (0.4.3)
69
+ safe_yaml (~> 1.0.0)
70
+ diff-lcs (1.2.5)
71
+ docile (1.1.5)
72
+ dotenv (2.1.1)
73
+ erubis (2.7.0)
74
+ faraday (0.10.0)
75
+ multipart-post (>= 1.2, < 3)
76
+ faraday_middleware (0.10.1)
77
+ faraday (>= 0.7.4, < 1.0)
78
+ ffi (1.9.14)
79
+ formatador (0.2.5)
80
+ globalid (0.3.7)
81
+ activesupport (>= 4.1.0)
82
+ guard (2.14.0)
83
+ formatador (>= 0.2.4)
84
+ listen (>= 2.7, < 4.0)
85
+ lumberjack (~> 1.0)
86
+ nenv (~> 0.1)
87
+ notiffany (~> 0.0)
88
+ pry (>= 0.9.12)
89
+ shellany (~> 0.0)
90
+ thor (>= 0.18.1)
91
+ guard-compat (1.2.1)
92
+ guard-rspec (4.7.3)
93
+ guard (~> 2.1)
94
+ guard-compat (~> 1.1)
95
+ rspec (>= 2.99.0, < 4.0)
96
+ hashdiff (0.3.1)
97
+ hashie (3.4.6)
98
+ i18n (0.7.0)
99
+ json (2.0.2)
100
+ listen (3.1.5)
101
+ rb-fsevent (~> 0.9, >= 0.9.4)
102
+ rb-inotify (~> 0.9, >= 0.9.7)
103
+ ruby_dep (~> 1.2)
104
+ loofah (2.0.3)
105
+ nokogiri (>= 1.5.9)
106
+ lumberjack (1.0.10)
107
+ mail (2.6.4)
108
+ mime-types (>= 1.16, < 4)
109
+ method_source (0.8.2)
110
+ mime-types (3.1)
111
+ mime-types-data (~> 3.2015)
112
+ mime-types-data (3.2016.0521)
113
+ mini_portile2 (2.1.0)
114
+ minitest (5.9.1)
115
+ mono_logger (1.1.0)
116
+ multi_json (1.12.1)
117
+ multipart-post (2.0.0)
118
+ nenv (0.3.0)
119
+ net-http-persistent (2.9.4)
120
+ nio4r (1.2.1)
121
+ nokogiri (1.6.8.1)
122
+ mini_portile2 (~> 2.1.0)
123
+ notiffany (0.1.1)
124
+ nenv (~> 0.1)
125
+ shellany (~> 0.0)
126
+ pry (0.10.4)
127
+ coderay (~> 1.1.0)
128
+ method_source (~> 0.8.1)
129
+ slop (~> 3.4)
130
+ pry-byebug (3.4.2)
131
+ byebug (~> 9.0)
132
+ pry (~> 0.10)
133
+ psych (2.2.1)
134
+ public_suffix (2.0.4)
135
+ rack (2.0.1)
136
+ rack-protection (1.5.3)
137
+ rack
138
+ rack-test (0.6.3)
139
+ rack (>= 1.0)
140
+ rails (5.0.0)
141
+ actioncable (= 5.0.0)
142
+ actionmailer (= 5.0.0)
143
+ actionpack (= 5.0.0)
144
+ actionview (= 5.0.0)
145
+ activejob (= 5.0.0)
146
+ activemodel (= 5.0.0)
147
+ activerecord (= 5.0.0)
148
+ activesupport (= 5.0.0)
149
+ bundler (>= 1.3.0, < 2.0)
150
+ railties (= 5.0.0)
151
+ sprockets-rails (>= 2.0.0)
152
+ rails-dom-testing (2.0.1)
153
+ activesupport (>= 4.2.0, < 6.0)
154
+ nokogiri (~> 1.6.0)
155
+ rails-html-sanitizer (1.0.3)
156
+ loofah (~> 2.0)
157
+ railties (5.0.0)
158
+ actionpack (= 5.0.0)
159
+ activesupport (= 5.0.0)
160
+ method_source
161
+ rake (>= 0.8.7)
162
+ thor (>= 0.18.1, < 2.0)
163
+ rake (12.0.0)
164
+ rb-fsevent (0.9.8)
165
+ rb-inotify (0.9.7)
166
+ ffi (>= 0.5.0)
167
+ redis (3.3.2)
168
+ redis-namespace (1.5.2)
169
+ redis (~> 3.0, >= 3.0.4)
170
+ resque (1.26.0)
171
+ mono_logger (~> 1.0)
172
+ multi_json (~> 1.0)
173
+ redis-namespace (~> 1.3)
174
+ sinatra (>= 0.9.2)
175
+ vegas (~> 0.1.2)
176
+ rspec (3.5.0)
177
+ rspec-core (~> 3.5.0)
178
+ rspec-expectations (~> 3.5.0)
179
+ rspec-mocks (~> 3.5.0)
180
+ rspec-core (3.5.4)
181
+ rspec-support (~> 3.5.0)
182
+ rspec-expectations (3.5.0)
183
+ diff-lcs (>= 1.2.0, < 2.0)
184
+ rspec-support (~> 3.5.0)
185
+ rspec-mocks (3.5.0)
186
+ diff-lcs (>= 1.2.0, < 2.0)
187
+ rspec-support (~> 3.5.0)
188
+ rspec-support (3.5.0)
189
+ ruby_dep (1.5.0)
190
+ safe_yaml (1.0.4)
191
+ shellany (0.0.1)
192
+ sidekiq (4.2.7)
193
+ concurrent-ruby (~> 1.0)
194
+ connection_pool (~> 2.2, >= 2.2.0)
195
+ rack-protection (>= 1.5.0)
196
+ redis (~> 3.2, >= 3.2.1)
197
+ simplecov (0.12.0)
198
+ docile (~> 1.1.0)
199
+ json (>= 1.8, < 3)
200
+ simplecov-html (~> 0.10.0)
201
+ simplecov-html (0.10.0)
202
+ sinatra (1.0)
203
+ rack (>= 1.0)
204
+ slop (3.6.0)
205
+ sprockets (3.7.0)
206
+ concurrent-ruby (~> 1.0)
207
+ rack (> 1, < 3)
208
+ sprockets-rails (3.2.0)
209
+ actionpack (>= 4.0)
210
+ activesupport (>= 4.0)
211
+ sprockets (>= 3.0.0)
212
+ thor (0.19.4)
213
+ thread (0.2.2)
214
+ thread_safe (0.3.5)
215
+ tzinfo (1.2.2)
216
+ thread_safe (~> 0.1)
217
+ vegas (0.1.11)
218
+ rack (>= 1.0.0)
219
+ webmock (2.3.1)
220
+ addressable (>= 2.3.6)
221
+ crack (>= 0.3.2)
222
+ hashdiff
223
+ websocket-driver (0.6.4)
224
+ websocket-extensions (>= 0.1.0)
225
+ websocket-extensions (0.1.2)
226
+ wisper (1.6.1)
227
+
228
+ PLATFORMS
229
+ ruby
230
+
231
+ DEPENDENCIES
232
+ appraisal
233
+ bundler
234
+ codeclimate-test-reporter
235
+ dotenv
236
+ guard-rspec
237
+ pry-byebug
238
+ psych
239
+ rack-test
240
+ rails (= 5.0.0)
241
+ rake
242
+ resque
243
+ routemaster-drain!
244
+ rspec
245
+ sidekiq
246
+ simplecov
247
+ webmock
248
+
249
+ BUNDLED WITH
250
+ 1.13.6
@@ -3,21 +3,15 @@ require 'faraday'
3
3
  require 'faraday_middleware'
4
4
  require 'hashie'
5
5
  require 'routemaster/config'
6
- require 'routemaster/middleware/caching'
6
+ require 'routemaster/middleware/response_caching'
7
+ require 'routemaster/middleware/error_handling'
7
8
 
8
9
  module Routemaster
9
- class Fetcher
10
- DEFAULT_MIDDLEWARE = Routemaster::Middleware::Caching
11
-
12
- #
13
- # Usage:
14
- #
15
- # You can extend Fetcher with custom middlewares like:
16
- # Fetcher.new(middlewares: [[MyCustomMiddleWare, option1, option2]])
17
- #
18
- def initialize(middlewares: [], listener: nil)
10
+ class APIClient
11
+ def initialize(middlewares: [], listener: nil, response_class: nil)
19
12
  @listener = listener
20
- @middlewares = generate_middlewares(middlewares)
13
+ @middlewares = middlewares
14
+ @response_class = response_class
21
15
  end
22
16
 
23
17
  # Performs a GET HTTP request for the `url`, with optional
@@ -28,30 +22,50 @@ module Routemaster
28
22
  # string otherwise.
29
23
  def get(url, params: {}, headers: {})
30
24
  host = URI.parse(url).host
31
- connection.get(url, params, headers.merge(auth_header(host)))
25
+ response_wrapper do
26
+ connection.get(url, params, headers.merge(auth_header(host)))
27
+ end
28
+ end
29
+
30
+ def post(url, body: {}, headers: {})
31
+ host = URI.parse(url).host
32
+ response_wrapper do
33
+ connection.post do |req|
34
+ req.url url
35
+ req.headers = headers.merge(auth_header(host))
36
+ req.body = body.to_json
37
+ end
38
+ end
39
+ end
40
+
41
+ def discover(url)
42
+ get(url)
32
43
  end
33
44
 
34
45
  private
35
46
 
36
- def generate_middlewares(middlewares)
37
- default_middleware = [DEFAULT_MIDDLEWARE, listener: @listener]
38
- middlewares.unshift(default_middleware)
47
+ def response_wrapper(&block)
48
+ response = block.call
49
+ @response_class ? @response_class.new(response, client: self) : response
39
50
  end
40
51
 
41
52
  def connection
42
53
  @connection ||= Faraday.new do |f|
54
+ f.request :json
43
55
  f.request :retry, max: 2, interval: 100e-3, backoff_factor: 2
44
56
  f.response :mashify
45
57
  f.response :json, content_type: /\bjson/
58
+ f.use Routemaster::Middleware::ResponseCaching, listener: @listener
46
59
  f.adapter :net_http_persistent
47
-
48
- f.options.timeout = ENV.fetch('ROUTEMASTER_CACHE_TIMEOUT', 1).to_f
49
- f.options.open_timeout = ENV.fetch('ROUTEMASTER_CACHE_TIMEOUT', 1).to_f
50
- f.ssl.verify = ENV.fetch('ROUTEMASTER_CACHE_VERIFY_SSL', 'false') == 'true'
60
+ f.use Routemaster::Middleware::ErrorHandling
51
61
 
52
62
  @middlewares.each do |middleware|
53
63
  f.use(*middleware)
54
64
  end
65
+
66
+ f.options.timeout = ENV.fetch('ROUTEMASTER_CACHE_TIMEOUT', 1).to_f
67
+ f.options.open_timeout = ENV.fetch('ROUTEMASTER_CACHE_TIMEOUT', 1).to_f
68
+ f.ssl.verify = ENV.fetch('ROUTEMASTER_CACHE_VERIFY_SSL', 'false') == 'true'
55
69
  end
56
70
  end
57
71
 
@@ -1,4 +1,4 @@
1
- require 'routemaster/fetcher'
1
+ require 'routemaster/api_client'
2
2
  require 'thread/pool'
3
3
  require 'thread/future'
4
4
  require 'singleton'
@@ -11,7 +11,7 @@ module Routemaster
11
11
  #
12
12
  # Emits `cache_bust`, `cache_hit`, and `cache_miss` events.
13
13
  #
14
- # The requests themselves are handled by {Fetcher}.
14
+ # The requests themselves are handled by {APIClient}.
15
15
  # Note that `Cache-Control` headers are intentionally ignored, as it is
16
16
  # assumed one will call {#bust} when the cache becomes stale.
17
17
  #
@@ -60,9 +60,9 @@ module Routemaster
60
60
  delegate %i(status headers body) => :value
61
61
  end
62
62
 
63
- def initialize(redis:nil, fetcher:nil)
63
+ def initialize(redis:nil, client:nil)
64
64
  @redis = redis || Config.cache_redis
65
- @fetcher = fetcher || Fetcher.new(listener: self)
65
+ @client = client || APIClient.new(listener: self)
66
66
  end
67
67
 
68
68
  # Bust the cache for a given URL
@@ -93,7 +93,7 @@ module Routemaster
93
93
  "application/json"
94
94
  }
95
95
  headers['Accept-Language'] = locale if locale
96
- @fetcher.get(url, headers: headers)
96
+ @client.get(url, headers: headers)
97
97
  end
98
98
 
99
99
  # Like {#get}, but schedules any request in the background using a thread
@@ -24,6 +24,20 @@ module Routemaster
24
24
  RedisBroker.instance.get(ENV.fetch('ROUTEMASTER_CACHE_REDIS'))
25
25
  end
26
26
 
27
+ #
28
+ # Given an ENV format of service:service_root_url,other_service:other_service_root_url
29
+ # Generate a hash of { service => service_root_url, other_service => other_service_root_url }
30
+ #
31
+ def hosts
32
+ @hosts ||= begin
33
+ hosts = ENV['ROUTEMASTER_DRAIN_HOSTS'].split(',')
34
+ hosts.inject({}) do |res, host|
35
+ key, val = host.split(':')
36
+ res.merge(key => val)
37
+ end
38
+ end
39
+ end
40
+
27
41
  def cache_expiry
28
42
  Integer(ENV.fetch('ROUTEMASTER_CACHE_EXPIRY', 86_400 * 365))
29
43
  end
@@ -1,5 +1,5 @@
1
1
  module Routemaster
2
2
  module Drain
3
- VERSION = '1.1.0'
3
+ VERSION = '2.0.0'
4
4
  end
5
5
  end