diplomat 1.0.0 → 1.1.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: 9a3ab874e23af2f1bb2b948042ad44f7d2e5f8b0
4
- data.tar.gz: e1475ee44c0a29db12fe3aef0d3b315db42f0b63
3
+ metadata.gz: 781ef66fd58770259245d9d3624499232db1cdbe
4
+ data.tar.gz: cffd83536d1936f5f1189129fbf1d238a1555c8b
5
5
  SHA512:
6
- metadata.gz: ada6d5c84b4499c4c8578cd435a6c5eb33462a3216a9869f5c6f6910d9c5b3a0213ac29723e6fbc7617bab7940c6654d707b83ade1b60e56b7c582c72d187801
7
- data.tar.gz: e412d9cfdb1177412c186295573362dd58c6c94dd2904c593cdb2fcabb01ff629af03e31bb3d182f9311db256e71464595fd615f304c168b5b0935bb77e167a5
6
+ metadata.gz: b5b01504b9b8c7f8aac4f08e13837a36018ea7005a198e4d0dfba97568ff65f3417ed8ef33d061f2a2a2ba5adb421ad7ef691018f0e7883a714a798e0a823f1d
7
+ data.tar.gz: 38034ad0d2add4cbb6368ba65af19c6ee066daa56b39fa8a3f12674d269240527e75765fd4648c17b2ca3b4de556299ed556e55d27475e6e72dc59a30b26e21e
data/README.md CHANGED
@@ -39,10 +39,12 @@ production:
39
39
 
40
40
  [See here](http://www.consul.io/intro/). I managed to roll it out on my production machines with the help of [Ansible](http://www.ansible.com/) in one working day.
41
41
 
42
- ### Which versions of Ruby does Diplomat support?
42
+ ### Which versions of Ruby does Diplomat support? Where did my ruby 1.9 compatibility go?
43
43
 
44
44
  Check out [Travis](https://travis-ci.org/WeAreFarmGeek/diplomat) to see which versions of ruby we currently test when we're making builds.
45
45
 
46
+ We've dropped ruby 1.9 support. You can still depend on Diplomat by directly using the `ruby-1.9-compatible` branch on github, although be advised it's not actively maintained anymore.
47
+
46
48
  ## Usage
47
49
 
48
50
  [The most up to date place to read about the API is here.](http://rubydoc.info/github/WeAreFarmGeek/diplomat)
@@ -76,7 +78,6 @@ foo = Diplomat::Kv.get('foo', :dc => 'dc-west')
76
78
  ```
77
79
 
78
80
  You can also retrieve values recursively:
79
-
80
81
  ```ruby
81
82
  Diplomat::Kv.put('foo/a', 'lorem')
82
83
  Diplomat::Kv.put('foo/b', 'ipsum')
@@ -86,11 +87,21 @@ Diplomat::Kv.get('foo/', recurse: true)
86
87
  # => [{:key=>"foo/a", :value=>"lorem"}, {:key=>"foo/b", :value=>"ipsum"}, {:key=>"foo/c", :value=>"dolor"}]
87
88
  ```
88
89
 
90
+
89
91
  Or list all available keys:
90
92
 
91
93
  ```ruby
92
94
  Diplomat::Kv.get('/', :keys => true) # => ['foo/a', 'foo/b']
93
95
  ```
96
+ You can convert the consul data to a ruby hash
97
+ ```ruby
98
+ Diplomat::Kv.put('foo/a', 'lorem')
99
+ Diplomat::Kv.put('foo/b', 'ipsum')
100
+ Diplomat::Kv.put('foo/c', 'dolor')
101
+
102
+ Diplomat::Kv.get('foo/', recurse: true, convert_to_hash: true)
103
+ # => {"foo"=>{"a"=>"lorem", "b"=>"ipsum", "c"=>"dolor"}}
104
+ ```
94
105
 
95
106
  ### Nodes
96
107
 
@@ -46,11 +46,13 @@ module Diplomat
46
46
  # @param s [String] the service
47
47
  # @param options [Hash] :dc string for dc specific query
48
48
  # @param options [Hash] :state string for specific service state
49
+ # @param options [Hash] :tag string for specific tag
49
50
  # @return [OpenStruct] all data associated with the node
50
51
  def service s, options=nil
51
52
  url = ["/v1/health/service/#{s}"]
52
53
  url << use_named_parameter('dc', options[:dc]) if options and options[:dc]
53
54
  url << options[:state] if options and options[:state]
55
+ url << use_named_parameter('tag', options[:tag]) if options and options[:tag]
54
56
 
55
57
  # If the request fails, it's probably due to a bad path
56
58
  # so return a PathNotFound error.
data/lib/diplomat/kv.rb CHANGED
@@ -20,6 +20,7 @@ module Diplomat
20
20
  # @option options [Boolean] :decode_values Return consul response with decoded values.
21
21
  # @option options [String] :separator List only up to a given separator. Only applies when combined with :keys option.
22
22
  # @option options [Boolean] :nil_values If to return keys/dirs with nil values
23
+ # @option options [Boolean] :convert_to_hash Take the data returned from consul and build a hash
23
24
  # @option options [Callable] :transformation funnction to invoke on keys values
24
25
  # @param not_found [Symbol] behaviour if the key doesn't exist;
25
26
  # :reject with exception, :return degenerate value, or :wait for it to appear
@@ -81,6 +82,9 @@ module Diplomat
81
82
  if @options and @options[:decode_values]
82
83
  return decode_values
83
84
  end
85
+ if @options and @options[:convert_to_hash]
86
+ return convert_to_hash(return_value(return_nil_values, transformation))
87
+ end
84
88
  return return_value(return_nil_values, transformation)
85
89
  when :wait
86
90
  index = raw.headers["x-consul-index"]
@@ -127,11 +131,13 @@ module Diplomat
127
131
  # @param key [String] the key
128
132
  # @param options [Hash] the query params
129
133
  # @option options [String] :dc Target datacenter
134
+ # @option options [Boolean] :recurse If to make recursive get or not
130
135
  # @return [OpenStruct]
131
136
  def delete key, options=nil
132
137
  @key = key
133
138
  @options = options
134
139
  url = ["/v1/kv/#{@key}"]
140
+ url += recurse_get(@options)
135
141
  url += check_acl_token
136
142
  url += dc(@options)
137
143
  @raw = @conn.delete concat_url url
data/lib/diplomat/node.rb CHANGED
@@ -25,7 +25,7 @@ module Diplomat
25
25
  rescue Faraday::ClientError
26
26
  raise Diplomat::PathNotFound
27
27
  end
28
- return JSON.parse(ret.body)
28
+ return OpenStruct.new JSON.parse(ret.body)
29
29
  end
30
30
 
31
31
  # Get all the nodes
@@ -43,9 +43,35 @@ module Diplomat
43
43
  # @param *args Arguments list
44
44
  # @return [Boolean]
45
45
  def method_missing(meth_id, *args)
46
- access_method?(meth_id) ? new.send(meth_id, *args) : super
46
+ if access_method?(meth_id)
47
+ new.send(meth_id, *args)
48
+ else
49
+
50
+ # See https://bugs.ruby-lang.org/issues/10969
51
+ begin
52
+ super
53
+ rescue NameError => err
54
+ raise NoMethodError, err
55
+ end
56
+ end
57
+ end
58
+
59
+ # Make `respond_to?` aware of method short-cuts.
60
+ #
61
+ # @param meth_id [Symbol] the tested method
62
+ # @oaram with_private if private methods should be tested too
63
+ def respond_to?(meth_id, with_private = false)
64
+ access_method?(meth_id) || super
47
65
  end
48
66
 
67
+ # Make `respond_to_missing` aware of method short-cuts. This is needed for
68
+ # {#method} to work on these, which is helpful for testing purposes.
69
+ #
70
+ # @param meth_id [Symbol] the tested method
71
+ # @oaram with_private if private methods should be tested too
72
+ def respond_to_missing?(meth_id, with_private = false)
73
+ access_method?(meth_id) || super
74
+ end
49
75
  end
50
76
 
51
77
  private
@@ -69,6 +95,44 @@ module Diplomat
69
95
  end
70
96
  end
71
97
 
98
+ #Converts k/v data into ruby hash
99
+ def convert_to_hash(data)
100
+ collection = []
101
+ master = {}
102
+ data.each do |item|
103
+ split_up = item[:key].split ?/
104
+ sub_hash = {}
105
+ temp = nil
106
+ real_size = split_up.size - 1
107
+ for i in 0..real_size do
108
+ if i == 0
109
+ temp = {}
110
+ sub_hash[split_up[i]] = temp
111
+ next
112
+ end
113
+ if i == real_size
114
+ temp[split_up[i]] = item[:value]
115
+ else
116
+ new_h = {}
117
+ temp[split_up[i]] = new_h
118
+ temp = new_h
119
+ end
120
+ end
121
+ collection << sub_hash
122
+ end
123
+
124
+ collection.each do |h|
125
+ n = deep_merge(master, h)
126
+ master = n
127
+ end
128
+ master
129
+ end
130
+
131
+ def deep_merge(first, second)
132
+ merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
133
+ first.merge(second, &merger)
134
+ end
135
+
72
136
  # Parse the body, apply it to the raw attribute
73
137
  def parse_body
74
138
  return JSON.parse(@raw.body) if @raw.status == 200
@@ -1,3 +1,3 @@
1
1
  module Diplomat
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diplomat
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hamelink
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-08 00:00:00.000000000 Z
11
+ date: 2016-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler