etre-client 0.8.1 → 0.8.6
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 +5 -5
- data/.travis.yml +2 -0
- data/README.md +18 -1
- data/lib/etre-client/client.rb +50 -32
- data/lib/etre-client/version.rb +1 -1
- data/spec/client_spec.rb +2 -2
- metadata +13 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4a00b1a3963aabc7289f9c3bc6b5a26ae0c1184aaa068ce44f999fb238b41366
|
4
|
+
data.tar.gz: 0344444b0a5bea0596a3b8ccbcd9031c0b67d0f589508c1633d196785f82f0a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b19650c25db22a5d501753900441eddca53f0a3322b51a60450e75c173fd9c605cb27b3e31e57841e6f2ea2f50d4c54764ed1950bd5283cf1d58e40f5d4a67f
|
7
|
+
data.tar.gz: 8457352ca44a551d2e2fb62f63ff9d8946d02d8c510aac905a11c23bb6a0d6a605a1512767b68b3fff9481755ee8432a33ec700bea9bdd64f4791d9232ffe7b8
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -21,7 +21,19 @@ require 'etre-client'
|
|
21
21
|
|
22
22
|
Create a new client
|
23
23
|
```
|
24
|
-
|
24
|
+
# Create a standard client.
|
25
|
+
e = Etre::Client.new(entity_type: "node", url: "http://127.0.0.1:8080")
|
26
|
+
|
27
|
+
# Create a client with advanced HTTP options. These are passed down to the rest-client within the Etre Client.
|
28
|
+
# See https://github.com/rest-client/rest-client#passing-advanced-options for more details.
|
29
|
+
options = {
|
30
|
+
:ssl_client_cert => OpenSSL::X509::Certificate.new(File.read("path_to_ssl_cert")),
|
31
|
+
:ssl_client_key => OpenSSL::PKey::RSA.new(File.read("path_to_ssl_key")),
|
32
|
+
:ssl_ca_file => "path_to_ssl_ca",
|
33
|
+
:verify_ssl => OpenSSL::SSL::VERIFY_PEER,
|
34
|
+
:cookies => {:foo => "bar"},
|
35
|
+
}
|
36
|
+
e = Etre::Client.new(entity_type: "node", url: "http://127.0.0.1:8080", options: options)
|
25
37
|
```
|
26
38
|
|
27
39
|
Insert entities
|
@@ -90,6 +102,11 @@ Run the tests
|
|
90
102
|
bundle exec rake spec
|
91
103
|
```
|
92
104
|
|
105
|
+
Publish a new version of the gem:
|
106
|
+
1. Bump the version in lib/etre-client/version.rb
|
107
|
+
2. Build the gem with `gem build etre-client.gemspec`
|
108
|
+
3. Publish the new gem with `gem push etre-client-#{GEM_VERSION}.gem`
|
109
|
+
|
93
110
|
## License
|
94
111
|
|
95
112
|
Copyright (c) 2017 Square Inc. Distributed under the Apache 2.0 License.
|
data/lib/etre-client/client.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'etre-client/errors'
|
2
|
+
require 'logger'
|
2
3
|
require 'rest-client'
|
3
4
|
require 'json'
|
4
5
|
|
@@ -10,14 +11,15 @@ module Etre
|
|
10
11
|
META_LABEL_ID = "_id"
|
11
12
|
META_LABEL_TYPE = "_type"
|
12
13
|
|
13
|
-
def initialize(entity_type:, url:,
|
14
|
+
def initialize(entity_type:, url:, query_timeout: '5s', retry_count: 0, retry_wait: 1, options: {})
|
14
15
|
@entity_type = entity_type
|
15
16
|
@url = url
|
17
|
+
@query_timeout = query_timeout # http request timeout in seconds
|
18
|
+
@retry_count = retry_count # retry count on network or API error
|
19
|
+
@retry_wait = retry_wait # wait time between retries in seconds
|
20
|
+
@options = options
|
16
21
|
|
17
|
-
@
|
18
|
-
@ssl_key = ssl_key
|
19
|
-
@ssl_ca = ssl_ca
|
20
|
-
@insecure = insecure
|
22
|
+
@logger = Logger.new(STDOUT)
|
21
23
|
end
|
22
24
|
|
23
25
|
# query returns an array of entities that satisfy a query.
|
@@ -240,33 +242,44 @@ module Etre
|
|
240
242
|
private
|
241
243
|
|
242
244
|
def etre_get(route)
|
243
|
-
|
244
|
-
|
245
|
-
|
245
|
+
rest_retry {
|
246
|
+
resource_for_route(route).get(
|
247
|
+
get_headers,
|
248
|
+
)
|
249
|
+
}
|
246
250
|
end
|
247
251
|
|
248
252
|
def etre_post(route, params = nil)
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
+
rest_retry {
|
254
|
+
resource_for_route(route).post(
|
255
|
+
params.to_json,
|
256
|
+
post_headers,
|
257
|
+
)
|
258
|
+
}
|
253
259
|
end
|
254
260
|
|
255
261
|
def etre_put(route, params = nil)
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
262
|
+
rest_retry {
|
263
|
+
resource_for_route(route).put(
|
264
|
+
params.to_json,
|
265
|
+
put_headers,
|
266
|
+
)
|
267
|
+
}
|
260
268
|
end
|
261
269
|
|
262
270
|
def etre_delete(route)
|
263
|
-
|
264
|
-
|
265
|
-
|
271
|
+
rest_retry {
|
272
|
+
resource_for_route(route).delete(
|
273
|
+
delete_headers,
|
274
|
+
)
|
275
|
+
}
|
266
276
|
end
|
267
277
|
|
268
278
|
def get_headers
|
269
|
-
{
|
279
|
+
{
|
280
|
+
:accept => 'application/json',
|
281
|
+
:x_etre_query_timeout => @query_timeout
|
282
|
+
}
|
270
283
|
end
|
271
284
|
|
272
285
|
def post_headers
|
@@ -282,25 +295,30 @@ module Etre
|
|
282
295
|
end
|
283
296
|
|
284
297
|
def resource_for_route(route)
|
285
|
-
opts = {}
|
286
|
-
opts.merge!(ssl_options) unless @insecure
|
287
298
|
RestClient::Resource.new(
|
288
299
|
@url + API_ROOT + route,
|
289
|
-
|
300
|
+
@options
|
290
301
|
)
|
291
302
|
end
|
292
303
|
|
293
|
-
def ssl_options
|
294
|
-
{
|
295
|
-
:ssl_client_cert => OpenSSL::X509::Certificate.new(File.read(@ssl_cert)),
|
296
|
-
:ssl_client_key => OpenSSL::PKey::RSA.new(File.read(@ssl_key)),
|
297
|
-
:ssl_ca_file => @ssl_ca,
|
298
|
-
:verify_ssl => OpenSSL::SSL::VERIFY_PEER,
|
299
|
-
}
|
300
|
-
end
|
301
|
-
|
302
304
|
def parse_response(response)
|
303
305
|
JSON.parse(response)
|
304
306
|
end
|
307
|
+
|
308
|
+
def rest_retry(&block)
|
309
|
+
retries = 0
|
310
|
+
|
311
|
+
begin
|
312
|
+
yield
|
313
|
+
rescue => e
|
314
|
+
if (retries += 1) <= @retry_count
|
315
|
+
@logger.warn("Error querying etre (#{e}). Sleeping for #{@retry_wait} seconds before trying again (attmept #{retries}/#{@retry_count}).")
|
316
|
+
sleep(@retry_wait)
|
317
|
+
retry
|
318
|
+
else
|
319
|
+
raise
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
305
323
|
end
|
306
324
|
end
|
data/lib/etre-client/version.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -2,8 +2,8 @@ require 'etre-client'
|
|
2
2
|
require 'ostruct'
|
3
3
|
|
4
4
|
describe Etre::Client do
|
5
|
-
let(:etre_client) { Etre::Client.new(entity_type: "node", url: "http://localhost:3000"
|
6
|
-
let(:get_headers) { {:accept => "application/json"} }
|
5
|
+
let(:etre_client) { Etre::Client.new(entity_type: "node", url: "http://localhost:3000") }
|
6
|
+
let(:get_headers) { {:accept => "application/json", :x_etre_query_timeout => '5s'} }
|
7
7
|
let(:post_headers) { get_headers.merge({:content_type => "application/json"}) }
|
8
8
|
let(:put_headers) { post_headers }
|
9
9
|
let(:delete_headers) { get_headers }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: etre-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Finch
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -42,22 +42,22 @@ dependencies:
|
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '12.2'
|
48
45
|
- - ">="
|
49
46
|
- !ruby/object:Gem::Version
|
50
47
|
version: 12.2.0
|
48
|
+
- - "~>"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '12.2'
|
51
51
|
type: :development
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
|
-
- - "~>"
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '12.2'
|
58
55
|
- - ">="
|
59
56
|
- !ruby/object:Gem::Version
|
60
57
|
version: 12.2.0
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '12.2'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rspec
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,7 +72,7 @@ dependencies:
|
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '3.0'
|
75
|
-
description:
|
75
|
+
description:
|
76
76
|
email:
|
77
77
|
- mfinch@squareup.com
|
78
78
|
executables: []
|
@@ -98,7 +98,7 @@ homepage: https://github.com/square/etre-client-ruby
|
|
98
98
|
licenses:
|
99
99
|
- Apache-2.0
|
100
100
|
metadata: {}
|
101
|
-
post_install_message:
|
101
|
+
post_install_message:
|
102
102
|
rdoc_options: []
|
103
103
|
require_paths:
|
104
104
|
- lib
|
@@ -113,9 +113,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
113
|
- !ruby/object:Gem::Version
|
114
114
|
version: '0'
|
115
115
|
requirements: []
|
116
|
-
|
117
|
-
|
118
|
-
signing_key:
|
116
|
+
rubygems_version: 3.0.6
|
117
|
+
signing_key:
|
119
118
|
specification_version: 4
|
120
119
|
summary: Client gem for interacting with Etre
|
121
120
|
test_files:
|