imperium 0.2.4 → 0.3.0

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: 0f8ec25d8bf0eabed10730fd5f3b7e0816e46755
4
- data.tar.gz: e18d19959119ac246651320b0e98d4e28be48ab9
3
+ metadata.gz: 5bd55423ed578c5f67828e03fa2f543650b45ee4
4
+ data.tar.gz: 6ad6505a0763f99f72d4dbdf0cb59da6cfa47371
5
5
  SHA512:
6
- metadata.gz: a071a3d5c661f65cb0bd7a985658907c6a7b04f176a4e72f50b8bbe4bbf540ed76f14a9ce9ddc0a4ec0d1e2bbc1215e1dbb35ff8fe9bb1fd72a4f6278107d39b
7
- data.tar.gz: 3fed32e141babe6ff5e1de09534efce75c0e92ebf9aca32ffbba87460dfbb1d62aa8bf38c0778cee66331e9d8de577bfc6c977a258db987b5db3685fa862e09e
6
+ metadata.gz: e6907eb064bcb3e1b4ef97c1baa871b6e983f4fd94b408a88d45e5e13e49bd87262630e57f90d85ebfcb4801c2090f4fed83f0297b9042aa639f2d548a9521f7
7
+ data.tar.gz: 8fa3313caa6f2ae61f83049b49fea64ea132c87286d57a3d2d72117ef4f0804ca8d4ea151c743f010cbef9bc698139aa1b967d40972085e9c08672c861a263fd
data/README.md CHANGED
@@ -44,13 +44,13 @@ Configure:
44
44
  Imperium.configure do |config|
45
45
  # Connection values can be specified separately
46
46
  config.host = 'consul.example.com'
47
- config.port = 8585
47
+ config.port = 8585
48
48
  config.ssl = false
49
49
 
50
50
  # Or, as a url (this is equivilant to the example above).
51
51
  config.url = 'http://consul.example.com:8585'
52
52
 
53
- confg.token = 'super-sekret-value'
53
+ config.token = 'super-sekret-value'
54
54
  end
55
55
 
56
56
  # If you want a client that uses some other configuration values without altering
@@ -58,17 +58,17 @@ end
58
58
 
59
59
  config = Imperium::Configuration.new(url: 'https://other-consul.example.com', token: 'foobar')
60
60
  # This client will contact other-consul.example.com rather than the one configured above.
61
- kv_client = Imperium::KV.new(config)
61
+ kv_client = Imperium::KV.new(config)
62
62
  ```
63
63
 
64
64
  GET values from the KV store:
65
65
  ```
66
66
  # Get a single value
67
- response = Imperium::KV.get('config/single-value', :stale)
67
+ response = Imperium::KV.get('config/single-value', :stale)
68
68
  response.values # => 'qux'
69
69
 
70
70
  # Get a set of nested values
71
- response = Imperium::KV.get('config/complex-value', :recurse)
71
+ response = Imperium::KV.get('config/complex-value', :recurse)
72
72
  response.values # => {first: 'value', second: 'value'}
73
73
  ```
74
74
 
data/build.sh CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/bin/bash
2
2
  set -e
3
3
 
4
- docker-compose build
4
+ docker-compose build --pull
5
5
  docker-compose run --rm app $@
@@ -13,6 +13,7 @@ require 'imperium/kv'
13
13
  require 'imperium/kv_pair'
14
14
  require 'imperium/kv_get_response'
15
15
  require 'imperium/kv_put_response'
16
+ require 'imperium/kv_delete_response'
16
17
  require 'imperium/response'
17
18
  require 'imperium/service'
18
19
  require 'imperium/service_check'
@@ -12,10 +12,11 @@ module Imperium
12
12
  @driver.receive_timeout = @config.receive_timeout
13
13
  end
14
14
 
15
- def delete(path)
15
+ def delete(path, query: {})
16
16
  wrapping_exceptions do
17
17
  url = config.url.join(path)
18
- @driver.delete(url)
18
+ url.query_values = query
19
+ @driver.delete(url, header: build_request_headers)
19
20
  end
20
21
  end
21
22
 
@@ -32,9 +33,9 @@ module Imperium
32
33
  url = config.url.join(path)
33
34
  url.query_values = query
34
35
  if value.is_a?(String)
35
- @driver.put(url, body: value)
36
+ @driver.put(url, body: value, header: build_request_headers)
36
37
  else
37
- @driver.put(url, body: JSON.generate(value))
38
+ @driver.put(url, body: JSON.generate(value), header: build_request_headers)
38
39
  end
39
40
  end
40
41
  end
@@ -15,20 +15,10 @@ module Imperium
15
15
  default_client.put(key, value, *options)
16
16
  end
17
17
 
18
- # Delete the specified key
19
- # @note This is really a stub of this method, it will delete the key but
20
- # you'll get back a raw
21
- # {http://www.rubydoc.info/gems/httpclient/HTTP/Message HTTP::Message}
22
- # object. If you're really serious about using this we'll probably want
23
- # to build a wrapper around the response with some logic to simplify
24
- # interpreting the response.
25
- #
26
- # @param key [String] The key to be deleted
27
- # @param options [Array] Un-used, only here to prevent changing the method
28
- # signature when we actually implement more advanced functionality.
29
- # @return [HTTP::Message]
30
- def delete(key, *options)
31
- @http_client.delete(prefix_path(key))
18
+ # {#delete DELETE} a key using the {.default_client}
19
+ # @see #delete
20
+ def self.delete(key, *options)
21
+ default_client.delete(key, *options)
32
22
  end
33
23
 
34
24
  GET_ALLOWED_OPTIONS = %i{consistent stale recurse keys separator raw}.freeze
@@ -37,6 +27,9 @@ module Imperium
37
27
  PUT_ALLOWED_OPTIONS = %i{flags cas acquire release}.freeze
38
28
  private_constant :PUT_ALLOWED_OPTIONS
39
29
 
30
+ DELETE_ALLOWED_OPTIONS = %i{cas}.freeze
31
+ private_constant :DELETE_ALLOWED_OPTIONS
32
+
40
33
  # Get the specified key/prefix using the supplied options.
41
34
  #
42
35
  # @example Fetching a key that is allowed to be stale.
@@ -111,6 +104,29 @@ module Imperium
111
104
  KVPUTResponse.new(response, options: expanded_options)
112
105
  end
113
106
 
107
+ # Delete the specified key
108
+ #
109
+ # @todo Decide whether to support recursive deletion by accepting the
110
+ # :recurse parameter
111
+ #
112
+ # @param key [String] The key to be created or updated.
113
+ # @param [Array<Symbol,String,Hash>] options The options for constructing
114
+ # the request
115
+ # @option options [String] :dc Specify the datacenter to use for the request
116
+ # @option options [Integer] :cas Specifies to use a Check-And-Set operation.
117
+ # This is very useful as a building block for more complex synchronization
118
+ # primitives. Unlike PUT, the index must be greater than 0 for Consul to
119
+ # take any action: a 0 index will not delete the key. If the index is
120
+ # non-zero, the key is only deleted if the index matches the ModifyIndex
121
+ # of that key.
122
+ # @return [KVDELETEResponse]
123
+ def delete(key, *options)
124
+ expanded_options = hashify_options(options)
125
+ query_params = extract_query_params(expanded_options, allowed_params: DELETE_ALLOWED_OPTIONS)
126
+ response = @http_client.delete(prefix_path(key), query: query_params)
127
+ KVDELETEResponse.new(response, options: expanded_options)
128
+ end
129
+
114
130
  private
115
131
 
116
132
  def construct_nested_hash(key_parts, value)
@@ -0,0 +1,34 @@
1
+ require_relative 'response'
2
+
3
+ module Imperium
4
+ # KVDELETEResponse is a wrapper for the raw HTTP::Message response from the API
5
+ #
6
+ # @note This class doesn't really make sense to be instantiated outside of
7
+ # {KV#delete}
8
+ #
9
+ # @!attribute [rw] options
10
+ # @return [Hash<Symbol, Object>] The options for the get request after being
11
+ # coerced from an array to hash.
12
+ class KVDELETEResponse < Response
13
+ attr_accessor :options
14
+
15
+ def initialize(message, options: {})
16
+ super message
17
+ @options = options
18
+ end
19
+
20
+ if RUBY_VERSION < "2.4"
21
+ def success?
22
+ return @success if defined? @success
23
+ @success = (body.chomp == "true")
24
+ end
25
+ else
26
+ def success?
27
+ return @success if defined? @success
28
+ @success = JSON.parse(body)
29
+ rescue JSON::ParserError
30
+ body.empty? ? @success = false : raise
31
+ end
32
+ end
33
+ end
34
+ end
@@ -9,9 +9,6 @@ module Imperium
9
9
  # @!attribute [rw] options
10
10
  # @return [Hash<Symbol, Object>] The options for the get request after being
11
11
  # coerced from an array to hash.
12
- # @attribute [rw] prefix
13
- # @return [String] The key prefix requested from the api, used to coerce the
14
- # returned values from the API into their various shapes.
15
12
  class KVPUTResponse < Response
16
13
  attr_accessor :options
17
14
 
@@ -1,3 +1,3 @@
1
1
  module Imperium
2
- VERSION = "0.2.4"
2
+ VERSION = "0.3.0"
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.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Pickett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-19 00:00:00.000000000 Z
11
+ date: 2018-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -170,6 +170,7 @@ files:
170
170
  - lib/imperium/events.rb
171
171
  - lib/imperium/http_client.rb
172
172
  - lib/imperium/kv.rb
173
+ - lib/imperium/kv_delete_response.rb
173
174
  - lib/imperium/kv_get_response.rb
174
175
  - lib/imperium/kv_pair.rb
175
176
  - lib/imperium/kv_put_response.rb