zk-eventmachine 0.1.1

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.
@@ -0,0 +1,104 @@
1
+ require 'spec_helper'
2
+
3
+ module ZK::ZKEventMachine
4
+ describe 'EventHandlerEM' do
5
+ include EventedSpec::SpecHelper
6
+ default_timeout 2.0
7
+
8
+ before do
9
+ @zk = ::ZK.new
10
+ @base_path = '/zk-em-testing'
11
+ @zk.rm_rf(@base_path)
12
+ @zk.mkdir_p(@base_path)
13
+ @zkem = ZK::ZKEventMachine::Client.new('localhost:2181')
14
+ end
15
+
16
+ after do
17
+ @zk.rm_rf(@base_path)
18
+ @zk.close!
19
+ end
20
+
21
+
22
+ # this is a test of event delivery in general, not just of the
23
+ # EventHandlerEM implementation
24
+
25
+ describe 'data event' do
26
+ include EventedSpec::EMSpec
27
+
28
+ before do
29
+ @path = "#{@base_path}/blah"
30
+ @data = "this is data"
31
+ @new_data = "this is other data"
32
+
33
+ @child_path = [@path, 'child'].join('/')
34
+ end
35
+
36
+ it %[should call the callback when the data of a watched node changes] do
37
+ @zkem.connect do
38
+ @zkem.event_handler.register(@path) do |event|
39
+ EM.reactor_thread?.should be_true
40
+ event.should be_node_changed
41
+ @zkem.close! { done }
42
+ end
43
+
44
+ common_eb = lambda { |exc| raise exc }
45
+
46
+ @zkem.create(@path, @data) do |exc,path|
47
+ raise exc if exc
48
+
49
+ @zkem.stat(@path, :watch => true) do |e,*a|
50
+ raise e if e
51
+
52
+ @zkem.set(@path, @new_data) { |e| raise e if e }
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ it %[should call the callback when the children of the watched node change] do
59
+ @zkem.connect do
60
+ @zkem.event_handler.register(@path) do |event|
61
+ EM.reactor_thread?.should be_true
62
+ event.should be_node_child
63
+ @zkem.close! { done }
64
+ end
65
+
66
+ eb_raise = lambda { |e| raise e if e }
67
+
68
+ @zkem.create(@path, @data).callback { |*|
69
+ @zkem.children(@path, :watch => true).callback { |ary,stat|
70
+ logger.debug { "called back with: #{ary.inspect}" }
71
+ ary.should be_empty
72
+ stat.should be_kind_of(ZookeeperStat::Stat)
73
+
74
+ @zkem.create(@child_path, '') { |p|
75
+ p.should == @path
76
+
77
+ }.errback(&eb_raise)
78
+ }.errback(&eb_raise)
79
+ }.errback(&eb_raise)
80
+ end
81
+ end # it
82
+
83
+ it %[should call back the registered block when the node is deleted] do
84
+ @zkem.connect do
85
+ @zkem.event_handler.register(@path) do |event|
86
+ EM.reactor_thread?.should be_true
87
+ event.should be_node_deleted
88
+ @zkem.close! { done }
89
+ end
90
+
91
+ eb_raise = lambda { |e| raise e if e }
92
+
93
+ @zkem.create(@path, @data).callback do |*|
94
+ @zkem.stat(@path, :watch => true).callback do |*|
95
+ @zkem.delete(@path).errback(&eb_raise)
96
+
97
+ end.errback(&eb_raise)
98
+ end.errback(&eb_raise)
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+
@@ -0,0 +1,122 @@
1
+ require 'spec_helper'
2
+
3
+ module ZK::ZKEventMachine
4
+ describe 'Unixisms' do
5
+ include EventedSpec::SpecHelper
6
+ default_timeout 2.0
7
+
8
+ before do
9
+ @zk = ::ZK.new
10
+ @base_path = '/zk-em-testing'
11
+ @zk.rm_rf(@base_path)
12
+ @zk.mkdir_p(@base_path)
13
+ @zkem = ZK::ZKEventMachine::Client.new('localhost:2181')
14
+ end
15
+
16
+ after do
17
+ @zk.rm_rf(@base_path)
18
+ @zk.close!
19
+ end
20
+
21
+ def close_and_done!
22
+ @zkem.close! { done }
23
+ end
24
+
25
+ describe 'mkdir_p' do
26
+ before do
27
+ @bogus_paths = [
28
+ [@base_path, 'bogus', 'path', 'to', 'qwer'].join('/'),
29
+ [@base_path, 'bogus', 'path', 'to', 'somethingelse'].join('/')
30
+ ]
31
+ end
32
+
33
+ it %[should create the path recursively] do
34
+ @zk.exists?(@bogus_paths.first).should be_false
35
+
36
+ em do
37
+ @zkem.connect do
38
+ @zkem.mkdir_p(@bogus_paths.first).callback do |p|
39
+ p.first.should == @bogus_paths.first
40
+ close_and_done!
41
+ end.errback do |e|
42
+ raise e
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ it %[should not error on a path that already exists] do
49
+ @zk.mkdir_p(@bogus_paths.first)
50
+
51
+ em do
52
+ @zkem.connect do
53
+ @zkem.mkdir_p(@bogus_paths.first) do |exc,p|
54
+ exc.should be_nil
55
+ p.first.should == @bogus_paths.first
56
+ close_and_done!
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ it %[should take an array of paths] do
63
+ @bogus_paths.each do |p|
64
+ @zk.exists?(p).should be_false
65
+ end
66
+
67
+ em do
68
+ @zkem.connect do
69
+ @zkem.mkdir_p(@bogus_paths) do |exc,paths|
70
+ exc.should be_nil
71
+ paths.should be_kind_of(Array)
72
+ @bogus_paths.each { |p| paths.should include(p) }
73
+ close_and_done!
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ describe 'rm_rf' do
81
+ em_before do
82
+ @relpaths = ['disco/foo', 'prune/bar', 'fig/bar/one', 'apple/bar/two', 'orange/quux/c/d/e']
83
+
84
+ @roots = @relpaths.map { |p| File.join(@base_path, p.split('/').first) }.uniq
85
+ @paths = @relpaths.map { |n| File.join(@base_path, n) }
86
+
87
+ @paths.each { |n| @zk.mkdir_p(n) }
88
+ end
89
+
90
+ it %[should remove the paths recursively] do
91
+ em do
92
+ @zkem.connect do
93
+ @zkem.rm_rf(@roots).callback do
94
+ @roots.each { |p| @zk.exists?(p).should be_false }
95
+ close_and_done!
96
+ end.errback do |exc|
97
+ raise exc
98
+ end
99
+ end
100
+ end
101
+ end # it
102
+
103
+ it %[should use the nodejs style if a block is given] do
104
+ em do
105
+ @zkem.connect do
106
+ @zkem.rm_rf(@roots) do |exc|
107
+ if exc.nil?
108
+ @roots.each { |p| @zk.exists?(p).should be_false }
109
+ close_and_done!
110
+ else
111
+ raise exc
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
120
+
121
+
122
+
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "z_k/z_k_event_machine/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "zk-eventmachine"
7
+ s.version = ZK::ZKEventMachine::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Jonathan D. Simms"]
10
+ s.email = ["slyphon@hp.com"]
11
+ s.homepage = "https://github.com/slyphon/zk-eventmachine"
12
+ s.summary = %q{ZK client for EventMachine-based (async) applications}
13
+ s.description = s.description
14
+
15
+ s.add_dependency('zk', '~> 0.8.1')
16
+ s.add_dependency('eventmachine', '= 0.12.10')
17
+
18
+ s.add_development_dependency('rspec', '~> 2.5.0')
19
+ s.add_development_dependency('yard', '~> 0.7.0')
20
+ s.add_development_dependency('autotest', '>= 4.4.0')
21
+ s.add_development_dependency('flexmock', '~> 0.8.10')
22
+ s.add_development_dependency('evented-spec', '~> 0.4.1')
23
+
24
+ s.files = `git ls-files`.split("\n")
25
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
27
+ s.require_paths = ["lib"]
28
+ end
metadata ADDED
@@ -0,0 +1,212 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zk-eventmachine
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
+ platform: ruby
12
+ authors:
13
+ - Jonathan D. Simms
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-06-17 00:00:00 +00:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: zk
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 61
30
+ segments:
31
+ - 0
32
+ - 8
33
+ - 1
34
+ version: 0.8.1
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: eventmachine
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - "="
44
+ - !ruby/object:Gem::Version
45
+ hash: 59
46
+ segments:
47
+ - 0
48
+ - 12
49
+ - 10
50
+ version: 0.12.10
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ hash: 27
62
+ segments:
63
+ - 2
64
+ - 5
65
+ - 0
66
+ version: 2.5.0
67
+ type: :development
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ - 7
81
+ - 0
82
+ version: 0.7.0
83
+ type: :development
84
+ version_requirements: *id004
85
+ - !ruby/object:Gem::Dependency
86
+ name: autotest
87
+ prerelease: false
88
+ requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ hash: 47
94
+ segments:
95
+ - 4
96
+ - 4
97
+ - 0
98
+ version: 4.4.0
99
+ type: :development
100
+ version_requirements: *id005
101
+ - !ruby/object:Gem::Dependency
102
+ name: flexmock
103
+ prerelease: false
104
+ requirement: &id006 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ hash: 43
110
+ segments:
111
+ - 0
112
+ - 8
113
+ - 10
114
+ version: 0.8.10
115
+ type: :development
116
+ version_requirements: *id006
117
+ - !ruby/object:Gem::Dependency
118
+ name: evented-spec
119
+ prerelease: false
120
+ requirement: &id007 !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ hash: 13
126
+ segments:
127
+ - 0
128
+ - 4
129
+ - 1
130
+ version: 0.4.1
131
+ type: :development
132
+ version_requirements: *id007
133
+ description: ""
134
+ email:
135
+ - slyphon@hp.com
136
+ executables: []
137
+
138
+ extensions: []
139
+
140
+ extra_rdoc_files: []
141
+
142
+ files:
143
+ - .dev_extras/README
144
+ - .dev_extras/rspec
145
+ - .dev_extras/rvmrc
146
+ - .dev_extras/slyphon-project.vimrc
147
+ - .gitignore
148
+ - Gemfile
149
+ - LICENSE
150
+ - README.markdown
151
+ - Rakefile
152
+ - lib/z_k/z_k_event_machine.rb
153
+ - lib/z_k/z_k_event_machine/callback.rb
154
+ - lib/z_k/z_k_event_machine/client.rb
155
+ - lib/z_k/z_k_event_machine/deferred.rb
156
+ - lib/z_k/z_k_event_machine/event_handler_e_m.rb
157
+ - lib/z_k/z_k_event_machine/iterator.rb
158
+ - lib/z_k/z_k_event_machine/unixisms.rb
159
+ - lib/z_k/z_k_event_machine/version.rb
160
+ - lib/zk-eventmachine.rb
161
+ - spec/spec_helper.rb
162
+ - spec/support/extensions.rb
163
+ - spec/support/logging.rb
164
+ - spec/support/logging_progress_bar_formatter.rb
165
+ - spec/z_k/z_k_event_machine/callback_spec.rb
166
+ - spec/z_k/z_k_event_machine/client_spec.rb
167
+ - spec/z_k/z_k_event_machine/event_handler_e_m_spec.rb
168
+ - spec/z_k/z_k_event_machine/unixisms_spec.rb
169
+ - zk-eventmachine.gemspec
170
+ has_rdoc: true
171
+ homepage: https://github.com/slyphon/zk-eventmachine
172
+ licenses: []
173
+
174
+ post_install_message:
175
+ rdoc_options: []
176
+
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ hash: 3
185
+ segments:
186
+ - 0
187
+ version: "0"
188
+ required_rubygems_version: !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ hash: 3
194
+ segments:
195
+ - 0
196
+ version: "0"
197
+ requirements: []
198
+
199
+ rubyforge_project:
200
+ rubygems_version: 1.6.2
201
+ signing_key:
202
+ specification_version: 3
203
+ summary: ZK client for EventMachine-based (async) applications
204
+ test_files:
205
+ - spec/spec_helper.rb
206
+ - spec/support/extensions.rb
207
+ - spec/support/logging.rb
208
+ - spec/support/logging_progress_bar_formatter.rb
209
+ - spec/z_k/z_k_event_machine/callback_spec.rb
210
+ - spec/z_k/z_k_event_machine/client_spec.rb
211
+ - spec/z_k/z_k_event_machine/event_handler_e_m_spec.rb
212
+ - spec/z_k/z_k_event_machine/unixisms_spec.rb