imperium 0.3.0 → 0.4.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
- SHA1:
3
- metadata.gz: 5bd55423ed578c5f67828e03fa2f543650b45ee4
4
- data.tar.gz: 6ad6505a0763f99f72d4dbdf0cb59da6cfa47371
2
+ SHA256:
3
+ metadata.gz: f7231972c5ebe74723a4eeb085545b3e04829d9b090350dc4768544b432f55f9
4
+ data.tar.gz: 3e7213cb2b41cacacad8124e232142b48906df5632b8d0e74e99b8d8387e5992
5
5
  SHA512:
6
- metadata.gz: e6907eb064bcb3e1b4ef97c1baa871b6e983f4fd94b408a88d45e5e13e49bd87262630e57f90d85ebfcb4801c2090f4fed83f0297b9042aa639f2d548a9521f7
7
- data.tar.gz: 8fa3313caa6f2ae61f83049b49fea64ea132c87286d57a3d2d72117ef4f0804ca8d4ea151c743f010cbef9bc698139aa1b967d40972085e9c08672c861a263fd
6
+ metadata.gz: eb0f038f9476123ce5287d26095c7aa9fb6980a2349e063c1d9bdd284d2043a78776c79d036703c75e20573209a9ad7121263ea80d89d3101eabe01d75fe5b9b
7
+ data.tar.gz: 487de77a4b1fcebff0b021cb0ba80233a4b3d4d759886bf044142bfdea64f6f4a7dada9ee17726e3232d16fff16121dd97367ca1dc9818bf009f3364cf284b8e
data/lib/imperium.rb CHANGED
@@ -17,6 +17,8 @@ require 'imperium/kv_delete_response'
17
17
  require 'imperium/response'
18
18
  require 'imperium/service'
19
19
  require 'imperium/service_check'
20
+ require 'imperium/transaction'
21
+ require 'imperium/transaction_response'
20
22
  require 'imperium/version'
21
23
 
22
24
  module Imperium
data/lib/imperium/kv.rb CHANGED
@@ -127,6 +127,21 @@ module Imperium
127
127
  KVDELETEResponse.new(response, options: expanded_options)
128
128
  end
129
129
 
130
+ # Perform operation in the transaction
131
+ #
132
+ # This is useful when having a number of statements that must be executed
133
+ # together or not at all.
134
+ #
135
+ # @yieldparam [Transaction] a Transaction instance that can be used to
136
+ # perform operations in the transaction
137
+ # @return [TransactionResponse]
138
+ def transaction
139
+ tx = Imperium::Transaction.new
140
+ yield tx
141
+ response = @http_client.put('v1/txn', tx.body)
142
+ Imperium::TransactionResponse.new(response)
143
+ end
144
+
130
145
  private
131
146
 
132
147
  def construct_nested_hash(key_parts, value)
@@ -0,0 +1,48 @@
1
+ module Imperium
2
+ # A Transaction support for KV API
3
+ class Transaction
4
+ # Initializa a new transaction containing an array of
5
+ # operations
6
+ def initialize
7
+ @operations = []
8
+ end
9
+
10
+ # {#set Set or Put} a key value pair
11
+ # @see #set
12
+ def set(key, value, flags: nil)
13
+ add_operation('set', key, value: value, flags: flags)
14
+ end
15
+
16
+ # Get JSON object for operations
17
+ #
18
+ # @return JSON KV object
19
+ def body
20
+ @operations.to_json
21
+ end
22
+
23
+ # Add operation to a Transaction
24
+
25
+ # @param verb [string] Specifies the type of operation to perform
26
+ # @param key [string] Specifies the full path of the entry
27
+ # @param value [string] Specifies a base64-encoded blob of data.
28
+ # Values cannot be larger than 512kB.
29
+ # @param flags [int] Specifies an opaque unsigned integer that
30
+ # can be attached to each entry. Clients can choose to use this
31
+ # however makes sense for their application.
32
+ # @param index [int] Specifies an index.
33
+ # @param session [string] Specifies a session.
34
+ #
35
+ # @return list of operations to perform inside the atomic transaction
36
+ def add_operation(verb, key, value: nil, flags: nil, index: nil, session_id: nil)
37
+ kv = {
38
+ 'Verb' => verb,
39
+ 'Key' => key
40
+ }
41
+ kv['Value'] = Base64.encode64(value) if value
42
+ kv['Flags'] = flags if flags
43
+ kv['Index'] = index if index
44
+ kv['Session'] = session_id if session_id
45
+ @operations << { 'KV' => kv }
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,25 @@
1
+ module Imperium
2
+ # A Response is a decorator around the
3
+ # {http://www.rubydoc.info/gems/httpclient/HTTP/Message HTTP::Message} object
4
+ # returned when a transaction is made.
5
+ #
6
+ # It exposes, through a convenient API, headers common to all interactions
7
+ # with the Consul HTTP API
8
+ class TransactionResponse < Response
9
+ # Add Results as a KVPair to the response coerced body
10
+ #
11
+ # @return Imperium::KVPair
12
+ def results
13
+ coerced_body['Results'].map do |result|
14
+ KVPair.new(result['KV']) if result['KV']
15
+ end
16
+ end
17
+
18
+ # Add Errors to the response coerced body
19
+ #
20
+ # @return the error
21
+ def errors
22
+ coerced_body['Errors']
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Imperium
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.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.3.0
4
+ version: 0.4.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-31 00:00:00.000000000 Z
11
+ date: 2018-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -179,6 +179,8 @@ files:
179
179
  - lib/imperium/service.rb
180
180
  - lib/imperium/service_check.rb
181
181
  - lib/imperium/testing.rb
182
+ - lib/imperium/transaction.rb
183
+ - lib/imperium/transaction_response.rb
182
184
  - lib/imperium/version.rb
183
185
  homepage: https://github.com/instructure/imperium
184
186
  licenses:
@@ -200,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
202
  version: '0'
201
203
  requirements: []
202
204
  rubyforge_project:
203
- rubygems_version: 2.6.13
205
+ rubygems_version: 2.7.6
204
206
  signing_key:
205
207
  specification_version: 4
206
208
  summary: A powerful, easy to use, Consul client