offline_consul-client 0.1.2 → 0.2.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: 7947f2ad814dbf05831a6e0fc0550ba4a0ec26c9
4
- data.tar.gz: 9c7e5bd38424bbf61b6ec9a86ced4ac04e4428a9
3
+ metadata.gz: 7a224f7ff4d5849b3da62357983eff37d340dd34
4
+ data.tar.gz: e81df1790630c58fbe9351895be6e3e01f66c2b9
5
5
  SHA512:
6
- metadata.gz: 3f4a33326b230a8304e504c27c8411c7f39a78e19234c36baadbd15d0f58ecfe2514ff404b9f3b97e6feb3bd8732a3730433d8c48769cdc42563c4cac27460b4
7
- data.tar.gz: a56ec50d30dafc28a65c81fe9f1867050bf9d2ad59b06628902008b71a3d14304cc29e2107fd5699307eb99e39c26cf7e3ecd6454e8c69a598f58ea7f0d21b85
6
+ metadata.gz: 76b3156624259716fd1f1716fbc519b3470f4ea62a66b45c18ae77dededac9af5a7ce10374d0145882db441ed70de977e4ce4883551cfe18ce118265f1198a9a
7
+ data.tar.gz: b06c3496e34238d6aa3ddd024285c9fc4ef454396638e94880627129943862318ef995ae0268eb412e7f2d474d2187c6889979e829b61c68038f948cac8a1592
@@ -1,5 +1,5 @@
1
1
  module Consul
2
2
  module Client
3
- VERSION = "0.1.2"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
data/lib/consul/client.rb CHANGED
@@ -14,38 +14,52 @@ module Consul
14
14
  @@config ||= Config.new
15
15
  end
16
16
 
17
- def self.online_read(keypath, recurse=false)
18
- response = http.get("/kv" + path(keypath) + (recurse ? '?recurse' : ''))
19
- keyname = File.basename(keypath)
20
- if response.length == 1 && response.keys.first == keyname
21
- response = response.data[keyname]
22
- end
23
- decode_r(response)
17
+ def self.online_read(keypath, opts={})
18
+ response = http.get("/kv" + path(keypath) + (opts[:recursive] ? '?recurse' : ''))
24
19
  end
25
20
 
26
- def self.offline_read(keypath, recurse=false)
27
- files = if recurse
21
+ def self.offline_read(keypath, opts={})
22
+ files = if opts[:recursive]
28
23
  Dir.glob(File.join(local_path, path(keypath) + '*'))
29
24
  else
30
25
  [File.join(local_path, path(keypath) + ".yaml")]
31
26
  end
32
27
 
33
- response = Hash[files.map do |filename|
34
- [File.basename(filename).sub(/\.yaml$/, ''), File.open(filename){ |f| Consul::Data.new('Value' => Base64.encode64(f.read) )}]
35
- end]
36
- keyname = File.basename(keypath)
37
- if response.length == 1 && response.keys.first == keyname
38
- response = response[keyname]
28
+ key_data = files.map do |filename|
29
+ {}.tap do |data|
30
+ data['LockIndex'] = 0
31
+ data['Key'] = File.basename(filename).sub(/\.yaml$/, '')
32
+ data['Flags'] = 0
33
+ data['Value'] = Base64.encode64(File.read(filename))
34
+ data['CreateIndex'] = 0
35
+ data['ModifyIndex'] = 0
36
+ end
39
37
  end
40
- decode_r(response)
38
+
39
+ response = Response.new(FakeNetHttpResponse.new(Psych.dump(key_data)))
41
40
  end
42
41
 
43
- def self.read(keypath, recurse=false)
44
- if is_online?
45
- online_read(keypath, recurse)
42
+ def self.read(keypath, opts={})
43
+ obj = read_obj(keypath, opts)
44
+ if obj.respond_to?(:value)
45
+ obj.value
46
46
  else
47
- offline_read(keypath, recurse)
47
+ Hash[obj.map{|k,v| [k, v.value] }]
48
+ end
49
+ end
50
+
51
+ def self.read_obj(keypath, opts={})
52
+ response = if is_online?
53
+ online_read(keypath, opts)
54
+ else
55
+ offline_read(keypath, opts)
56
+ end
57
+
58
+ keyname = File.basename(keypath)
59
+ if response.length == 1 && response.keys.first == keyname
60
+ response = response[keyname]
48
61
  end
62
+ response
49
63
  end
50
64
 
51
65
  def self.online_write(keypath,data=nil,path_mimic=false)
data/lib/consul/data.rb CHANGED
@@ -1,22 +1,31 @@
1
1
  require 'base64'
2
+ require 'forwardable'
2
3
 
3
4
  module Consul
4
5
  class Data
6
+ extend Forwardable
7
+
8
+ def_delegators :value, :to_a, :to_h, :to_i, :to_f, :to_s
5
9
 
6
10
  def initialize(response_hash)
7
11
  @response = response_hash
8
12
  end
9
13
 
10
14
  def value
11
- Base64.decode64(hash_map('Value'))
15
+ text = Base64.decode64(hash_map('Value'))
16
+ begin
17
+ decoded = Consul::Client.decode(text)
18
+ rescue Psych::DisallowedClass, Psych::SyntaxError
19
+ end
20
+ decoded || text
12
21
  end
13
22
 
14
23
  def flags
15
24
  hash_map(__callee__)
16
25
  end
17
- [:lock_index, :create_index, :modify_index, :session].each{ |a| alias_method a, :flags }
26
+ [:key, :lock_index, :create_index, :modify_index, :session].each{ |a| alias_method a, :flags }
18
27
 
19
- private
28
+ private
20
29
  def hash_map(key)
21
30
  @response[key.to_s.split('_').map{ |w| w.capitalize }.join]
22
31
  end
@@ -9,7 +9,8 @@ module Consul
9
9
 
10
10
  attr_reader :response, :data
11
11
  def_delegators :response, :body, :code, :code_type
12
- def_delegators :data, :keys, :values, :each, :to_a, :length
12
+ def_delegators :data, :keys, :values, :each, :to_a, :length, :map, :[]
13
+ def_delegators :to_ruby, :to_h, :to_a
13
14
 
14
15
  class KeyError < RuntimeError; end
15
16
 
@@ -47,7 +48,7 @@ module Consul
47
48
  elsif response.code_type == Net::HTTPNotFound
48
49
  raise KeyError, "Requested key not found"
49
50
  else
50
- raise "Requeste failed"
51
+ raise "Request failed"
51
52
  end
52
53
  end
53
54
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: offline_consul-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Scholl
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-10 00:00:00.000000000 Z
11
+ date: 2016-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler