jn_services 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7eff6fbc1693bbfb1e88fa15649d128c8d28a493
4
- data.tar.gz: 19aa9ff94044ade2a6b5bbcb0186a7de1d8f925b
3
+ metadata.gz: feed0dad1b87bef9a88b9d0a796d8cefadbf9206
4
+ data.tar.gz: 3043657e5671623245ff93888584c81a86fdb039
5
5
  SHA512:
6
- metadata.gz: 9c8a7ffb2ecf2292d9572d6c90cee57a12bd5037cc208fbc9ea7bc6ca628d5d5c1b3139d876541f96720d60ac9c22f7024ddcb45879a280663334c87a6361dc2
7
- data.tar.gz: d816ec5c038c7396651c55b95fb572f71c7dbfdea72ee70acbcba3739197dca712af9c049124de0ab7056ea0cf2dc250dd67af9f4a00e61484ce4895d4a8e496
6
+ metadata.gz: 66ef578629746a992b58400c69cf990f510811b262a0020bef7ad72df91712abf04c562e5ca2a1cfbb6e93125d2f3eabe8a6b2df549825381f235bbad4b0b8f5
7
+ data.tar.gz: 7deb2dc8215e67f1fcd63484a88ce0013886fe74f2bf2d871b383ca65c2111eda2815995dda31786db085f1f75b3b4aa3f3ac30c10b4d9c842eadc0dec801735
data/Guardfile ADDED
@@ -0,0 +1,9 @@
1
+ # vim: set ft=ruby:
2
+ require 'guard/guard'
3
+ require 'guard/rake'
4
+
5
+ guard 'rake', :task => 'test:quick' do
6
+ watch(%r{^spec/.+_spec\.rb$})
7
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
8
+ watch('spec/spec_helper.rb') { "spec" }
9
+ end
data/jn_services.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "etcd"
22
+ spec.add_runtime_dependency "etcd", "~> 0.2.0.alpha"
23
23
  spec.add_development_dependency "bundler"
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "rspec"
@@ -27,5 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "systemu"
28
28
  spec.add_development_dependency "uuid"
29
29
  spec.add_development_dependency "rubocop"
30
+ spec.add_development_dependency 'guard'
31
+ spec.add_development_dependency 'guard-rake'
30
32
  spec.add_development_dependency 'simplecov'
31
33
  end
@@ -53,19 +53,16 @@ module Services
53
53
  return unless valid_path
54
54
  to_hash.each do |k, v|
55
55
  next if k == 'name'
56
- value = Services.get("#{KEY}/#{path}/#{k}").value
57
- instance_variable_set "@#{k}", value
56
+ if Services.exists? "#{KEY}/#{path}/#{k}"
57
+ value = Services.get("#{KEY}/#{path}/#{k}").value
58
+ instance_variable_set "@#{k}", value
59
+ end
58
60
  end
59
61
  self
60
62
  end
61
63
 
62
64
  def valid_path
63
- begin
64
- Services.get("#{KEY}/#{path}")
65
- rescue
66
- return false
67
- end
68
- true
65
+ Services.exists?("#{KEY}/#{path}")
69
66
  end
70
67
  end
71
68
  end
@@ -18,14 +18,9 @@ module Services
18
18
  private
19
19
 
20
20
  def validate
21
- unless @service
22
- fail ArgumentError,
23
- "#{self.class} requires service: argument"
24
- end
25
-
26
- unless name
21
+ unless name && @service
27
22
  fail ARgumentError,
28
- "#{self.class} requires name argument"
23
+ "#{self.class} requires name and service argument"
29
24
  end
30
25
  end
31
26
  end
@@ -28,9 +28,7 @@ module Services
28
28
  private
29
29
 
30
30
  def create_if_missing
31
- Services.get "#{KEY}/#{name}"
32
- rescue Net::HTTPServerException => e
33
- Services.set "#{KEY}/#{name}/_created", Time.now if e.message.match 'Not Found'
31
+ Services.set "#{KEY}/#{name}/_created", Time.now unless Services.exists? "#{KEY}/#{name}"
34
32
  end
35
33
 
36
34
  def load_endpoint
@@ -38,17 +36,20 @@ module Services
38
36
  endpoint
39
37
  end
40
38
 
41
- # rubocop:disable MethodLength
42
- def load_members
43
- begin
44
- etcd_members = Services.get "#{KEY}/#{name}/members"
45
- rescue Net::HTTPServerException => e
46
- etcd_members = nil if e.message.match 'Not Found'
39
+ def fetch_members
40
+ if Services.exists? "#{KEY}/#{name}/members"
41
+ Services.get("#{KEY}/#{name}/members").children
42
+ else
43
+ nil
47
44
  end
45
+ end
48
46
 
47
+ # rubocop:disable MethodLength
48
+ def load_members
49
+ etcd_members = fetch_members
49
50
  unless etcd_members.nil? || etcd_members.empty?
50
- etcd_members.node.nodes.each do |m|
51
- m_name = File.basename m['key']
51
+ etcd_members.each do |m|
52
+ m_name = File.basename m.key
52
53
  m1 = Services::Member.new(m_name, service: name)
53
54
  m1.load
54
55
  @members.push m1
@@ -1,4 +1,4 @@
1
1
  # setup the version here
2
2
  module Services
3
- VERSION = '1.0.1'
3
+ VERSION = '1.0.2'
4
4
  end
data/lib/services.rb CHANGED
@@ -20,22 +20,28 @@ module Services
20
20
  class << self
21
21
  attr_accessor :connection, :run_context
22
22
 
23
+ # proxy method to Etcd::Client.get
23
24
  def get(*args)
24
25
  Chef::Log.debug "connection.get args #{args}" unless run_context.nil?
25
- connection.get(*args)
26
+ connection.get(*args) if exists?(*args)
26
27
  end
27
28
 
29
+ # proxy method to Etcd::Client.set
28
30
  def set(*args)
29
31
  Chef::Log.debug "connection.set args #{args}" unless run_context.nil?
30
32
  connection.set(*args)
31
33
  end
32
34
 
35
+ # proxy method to Etcd::Client.exists?
36
+ def exists?(*args)
37
+ connection.exists?(*args)
38
+ end
39
+
33
40
  # return a list of all services
34
41
  def all
35
42
  services = []
36
- get(KEY).each do |s|
43
+ get(KEY).node.children.each do |s|
37
44
  name = File.basename s.key
38
- puts "loading #{name}"
39
45
  services << Services::Service.new(name)
40
46
  end
41
47
  services
@@ -44,9 +50,11 @@ module Services
44
50
  # return all services a node is subscribed to
45
51
  def subscribed(f = nil)
46
52
  fail 'param and run_context can not both be nil' if f.nil? && run_context.nil?
47
-
48
- fqdn = f.nil? ? rteraun_context.node.fqdn : f
49
- services = all.map { |s| s.members.include?(fqdn) ? s : nil }
53
+ fqdn = f.nil? ? run_context.node.fqdn : f
54
+ services = []
55
+ all.each do |s|
56
+ services.concat s.members.map { |m| m.name == fqdn ? s.name : nil }
57
+ end
50
58
  services.compact
51
59
  end
52
60
  end
data/spec/member_spec.rb CHANGED
@@ -6,8 +6,12 @@ describe 'Services::Member' do
6
6
  @m2 = Services::Member.new 'test_member2', service: 'test', ip: '127.0.0.3', port: 80, weight: 20
7
7
  end
8
8
 
9
+ it 'should raise without a service' do
10
+ expect { Services::Member.new }.to raise_error
11
+ end
12
+
9
13
  it 'should raise without a service name' do
10
- expect { Services::Member.new 'foo' }.to raise_error
14
+ expect { Services::Member.new 'test_member' }.to raise_error
11
15
  end
12
16
 
13
17
  describe '#to_hash' do
data/spec/service_spec.rb CHANGED
@@ -13,6 +13,7 @@ describe 'Services::Service' do
13
13
  end
14
14
 
15
15
  it 'should handle non-existant services' do
16
- expect { Services::Service.new 'should_not_exist' }.to_not raise_error
16
+ a = Services::Service.new 'should_not_exist'
17
+ a.name.should eql 'should_not_exist'
17
18
  end
18
19
  end
@@ -27,11 +27,28 @@ describe 'Services' do
27
27
  end
28
28
 
29
29
  it 'can set' do
30
- Services.set '/test/1', 1
30
+ s = Services.set('/test/1', 1)
31
+ s.node.key.should eql '/test/1'
32
+ s.node.value.should eql '1'
31
33
  end
32
34
 
33
35
  it 'can get' do
34
- Services.get '/_etcd/machines'
36
+ Services.get('/test/1').value.should eql '1'
37
+ end
38
+
39
+ it 'handles unknown keys on get' do
40
+ Services.get('/BLARGH!@#@!').should eql nil
41
+ end
42
+
43
+ it 'gets all services' do
44
+ a = Services.all
45
+ a.count.should eql 2
46
+ a[0].members.map { |m| m.name }.sort.should eql %w{test_member test_member2}
47
+ end
48
+
49
+ it 'lists subscribed services' do
50
+ Services.subscribed('test').should eql []
51
+ Services.subscribed('test_member').should eql ['test']
35
52
  end
36
53
 
37
54
  describe '::Entity' do
data/spec/spec_helper.rb CHANGED
@@ -90,14 +90,16 @@ end
90
90
 
91
91
  RSpec.configure do |config|
92
92
 
93
- config.include Etcd::SpecHelper
93
+ unless ENV['ETCD_SKIP']
94
+ config.include Etcd::SpecHelper
94
95
 
95
- config.before(:suite) do
96
- Etcd::SpecHelper.start_etcd_servers
97
- end
96
+ config.before(:suite) do
97
+ Etcd::SpecHelper.start_etcd_servers
98
+ end
98
99
 
99
- config.after(:suite) do
100
- Etcd::SpecHelper.stop_etcd_servers
100
+ config.after(:suite) do
101
+ Etcd::SpecHelper.stop_etcd_servers
102
+ end
101
103
  end
102
104
  # Use color in STDOUT
103
105
  config.color_enabled = true
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jn_services
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jesse Nelson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-20 00:00:00.000000000 Z
11
+ date: 2014-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: etcd
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.2.0.alpha
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.2.0.alpha
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,34 @@ dependencies:
108
108
  - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: guard-rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: simplecov
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +162,7 @@ files:
134
162
  - .travis.yml
135
163
  - CHANGELOG.md
136
164
  - Gemfile
165
+ - Guardfile
137
166
  - LICENSE.txt
138
167
  - README.md
139
168
  - Rakefile