imperium 0.1.0 → 0.1.1

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
2
  SHA1:
3
- metadata.gz: '0843f656e4b5c634136bdcddd59a8a81528ca45b'
4
- data.tar.gz: 85309c76a17789e23090a36c8d076c119755d1c9
3
+ metadata.gz: f59bdee1b6ac9ba26ac29376201e2287dc2a0d40
4
+ data.tar.gz: 607de30419fe22615ff7449c70e27f8757520278
5
5
  SHA512:
6
- metadata.gz: 1e2acf912515f5ebd12282d4f7f6f13a164b386741a0578c8a2180d21f8828552c1ed6c480396ce057486fa7fb8d56e5315be11fc08b306eeaa0c8317e516c7f
7
- data.tar.gz: 2538b80f19905a4b360252681615fce837b4f28e5c4a9e59c3b42914454e2e303756fe67818aaf1882c9dc82d2812b2a3cf0e5d513599a75e113b6b33d80efe2
6
+ metadata.gz: f14950628947bcf8e279b07d6ad39d3cf812347d5899962fbfef983c03a461434ceca309eb17973c0d3e9917d31252cd44ae762774d0f99cf828c982b542c45e
7
+ data.tar.gz: 99ce04ef3f3cf342bcf51b0566acfee85b6f7daa97b99e902bffe04670377de1b536c22bac5217cba571cc6329920574fabd8396673acc7567b77aa138d6e63c
@@ -1,5 +1,18 @@
1
1
 
2
2
  module Imperium
3
3
  class Error < StandardError; end
4
+
4
5
  class InvalidConsistencySpecification < Error; end
6
+
7
+ # Generic Network timeout error
8
+ class TimeoutError < Error; end
9
+
10
+ # Raised when opening the TCP socket times out
11
+ class ConnectTimeout < TimeoutError; end
12
+
13
+ # Raised when sending the request body took too long
14
+ class SendTimeout < TimeoutError; end
15
+
16
+ # Raised when the remote server took too long to respond.
17
+ class ReceiveTimeout < TimeoutError; end
5
18
  end
@@ -13,19 +13,25 @@ module Imperium
13
13
  end
14
14
 
15
15
  def delete(path)
16
- url = config.url.join(path)
17
- @driver.delete(url)
16
+ wrapping_timeouts do
17
+ url = config.url.join(path)
18
+ @driver.delete(url)
19
+ end
18
20
  end
19
21
 
20
22
  def get(path, query: {})
21
- url = config.url.join(path)
22
- url.query_values = query
23
- @driver.get(url, header: build_request_headers)
23
+ wrapping_timeouts do
24
+ url = config.url.join(path)
25
+ url.query_values = query
26
+ @driver.get(url, header: build_request_headers)
27
+ end
24
28
  end
25
29
 
26
30
  def put(path, value)
27
- url = config.url.join(path)
28
- @driver.put(url, body: value)
31
+ wrapping_timeouts do
32
+ url = config.url.join(path)
33
+ @driver.put(url, body: value)
34
+ end
29
35
  end
30
36
 
31
37
  private
@@ -37,5 +43,17 @@ module Imperium
37
43
  {}
38
44
  end
39
45
  end
46
+
47
+ # We're doing this wrap and re-raise dance to give a more consistent set of
48
+ # exceptions that can come from us.
49
+ def wrapping_timeouts
50
+ yield
51
+ rescue HTTPClient::ConnectTimeout => ex
52
+ raise Imperium::ConnectTimeout, ex.message
53
+ rescue HTTPClient::SendTimeout => ex
54
+ raise Imperium::SendTimeout, ex.message
55
+ rescue HTTPClient::ReceiveTimeout => ex
56
+ raise Imperium::ReceiveTimeout, ex.message
57
+ end
40
58
  end
41
59
  end
@@ -0,0 +1,37 @@
1
+ require 'imperium'
2
+
3
+ module Imperium
4
+ # A collection of functions to build responses for use in tests needing mock
5
+ # responses.
6
+ module Testing
7
+ class Client < Imperium::Client
8
+ def initialize
9
+ end
10
+ public :hashify_options
11
+ end
12
+ private_constant :Client
13
+
14
+ MockResponse = Struct.new(:content, :status, :headers)
15
+
16
+ @client = Client.new
17
+ def self.kv_get_response(body: '[]', status: 200, headers: {}, prefix: '', options: [])
18
+ expanded_options = @client.hashify_options(options)
19
+ string_body = if String === body
20
+ body
21
+ else
22
+ body.map { |obj|
23
+ obj['Value'] = Base64.encode64(obj['Value']) if obj['Value']
24
+ obj[:Value] = Base64.encode64(obj[:Value]) if obj[:Value]
25
+ obj
26
+ }.to_json
27
+ end
28
+
29
+ response = MockResponse.new(string_body, status, headers)
30
+ KVGETResponse.new(response, prefix: prefix, options: expanded_options)
31
+ end
32
+
33
+ def self.kv_not_found_response(headers: {}, options: [])
34
+ kv_get_response(body: '', status: 404, headers: headers, options: options)
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module Imperium
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imperium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Pickett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-29 00:00:00.000000000 Z
11
+ date: 2017-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -165,6 +165,7 @@ files:
165
165
  - lib/imperium/kv_get_response.rb
166
166
  - lib/imperium/kv_pair.rb
167
167
  - lib/imperium/response.rb
168
+ - lib/imperium/testing.rb
168
169
  - lib/imperium/version.rb
169
170
  homepage: https://github.com/instructure/imperium
170
171
  licenses: