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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9a9a7c0360d700dabbe48fc8572a362ec8f2eae8
4
- data.tar.gz: 73f22ebd75fd9621c33e72fa4fe10be856b368a5
2
+ SHA256:
3
+ metadata.gz: 4a00b1a3963aabc7289f9c3bc6b5a26ae0c1184aaa068ce44f999fb238b41366
4
+ data.tar.gz: 0344444b0a5bea0596a3b8ccbcd9031c0b67d0f589508c1633d196785f82f0a7
5
5
  SHA512:
6
- metadata.gz: f66a61bb2b27da32951328b2bbe2da2f29d7579fee33d780223f7af2a4dfc3ba0de7d38c6bbf7411625086ac4c684e60c72371652f4c8567d59a4da2857b464e
7
- data.tar.gz: 7f9e30e3707341914aaad1a1adcaac4290c5a9f7b5572db162831f239ea1d3880dedfd727797481ea048167ed5eb1e0f10589b30567c672d505265397a06c853
6
+ metadata.gz: 4b19650c25db22a5d501753900441eddca53f0a3322b51a60450e75c173fd9c605cb27b3e31e57841e6f2ea2f50d4c54764ed1950bd5283cf1d58e40f5d4a67f
7
+ data.tar.gz: 8457352ca44a551d2e2fb62f63ff9d8946d02d8c510aac905a11c23bb6a0d6a605a1512767b68b3fff9481755ee8432a33ec700bea9bdd64f4791d9232ffe7b8
data/.travis.yml CHANGED
@@ -1,4 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.3
4
+ - 2.4
5
+ - 2.5
4
6
  script: bundle exec rake spec
data/README.md CHANGED
@@ -21,7 +21,19 @@ require 'etre-client'
21
21
 
22
22
  Create a new client
23
23
  ```
24
- e = Etre::Client.new(entity_type: "node", url: "http://127.0.0.1:8080", ssl_cert: nil, ssl_key: nil, ssl_ca: nil, insecure: true)
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.
@@ -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:, ssl_cert: nil, ssl_key: nil, ssl_ca: nil, insecure: true)
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
- @ssl_cert = ssl_cert
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
- resource_for_route(route).get(
244
- get_headers,
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
- resource_for_route(route).post(
250
- params.to_json,
251
- post_headers,
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
- resource_for_route(route).put(
257
- params.to_json,
258
- put_headers,
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
- resource_for_route(route).delete(
264
- delete_headers,
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
- {:accept => 'application/json'}
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
- opts
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
@@ -1,5 +1,5 @@
1
1
  module Etre
2
2
  class Client
3
- VERSION = "0.8.1"
3
+ VERSION = "0.8.6"
4
4
  end
5
5
  end
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", insecure: true) }
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.1
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: 2017-11-03 00:00:00.000000000 Z
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
- rubyforge_project:
117
- rubygems_version: 2.5.2
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: