jn_services 1.0.1 → 1.0.2

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: 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