imperium 0.1.0 → 0.1.1

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: '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: