zk-eventmachine 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "releaseops"]
2
+ path = releaseops
3
+ url = git://github.com/slyphon/releaseops.git
data/Rakefile CHANGED
@@ -1,62 +1,47 @@
1
- require 'bundler'
2
- Bundler::GemHelper.install_tasks
1
+ gemset_name = 'zk-em'
3
2
 
4
- task :yard do
5
- Bundler.setup
6
- require 'yard'
3
+ release_ops_path = File.expand_path('../releaseops/lib', __FILE__)
7
4
 
8
- YARD::Rake::YardocTask.new(:run_yardoc) do |t|
9
- t.files = ['lib/**/*.rb']
10
- end
5
+ # if the special submodule is availabe, use it
6
+ # we use a submodule because it doesn't depend on anything else (*cough* bundler)
7
+ # and can be shared across projects
8
+ #
9
+ if File.exists?(release_ops_path)
10
+ require File.join(release_ops_path, 'releaseops')
11
+
12
+ # sets up the multi-ruby zk:test_all rake tasks
13
+ ReleaseOps::TestTasks.define_for(*%w[1.8.7 1.9.2 jruby ree 1.9.3])
11
14
 
12
- Rake::Task[:run_yardoc].invoke
13
- end
15
+ # sets up the task :default => 'spec:run' and defines a simple
16
+ # "run the specs with the current rvm profile" task
17
+ ReleaseOps::TestTasks.define_simple_default_for_travis
14
18
 
15
- gemset_name = 'zk-em'
19
+ # Define a task to run code coverage tests
20
+ ReleaseOps::TestTasks.define_simplecov_tasks
16
21
 
17
- %w[1.8.7 1.9.2 jruby rbx 1.9.3].each do |ns_name|
18
- rvm_ruby = (ns_name == 'rbx') ? "rbx-2.0.testing" : ns_name
22
+ # set up yard:server, yard:gems, and yard:clean tasks
23
+ # for doing documentation stuff
24
+ ReleaseOps::YardTasks.define
19
25
 
20
- ruby_with_gemset = "#{rvm_ruby}@#{gemset_name}"
21
- create_gemset_task_name = "mb:#{ns_name}:create_gemset"
22
- bundle_task_name = "mb:#{ns_name}:bundle_install"
23
- rspec_task_name = "mb:#{ns_name}:run_rspec"
24
-
25
- phony_gemfile_link_name = "Gemfile.#{ns_name}"
26
- phony_gemfile_lock_name = "#{phony_gemfile_link_name}.lock"
26
+ ReleaseOps::GemTasks.define('zk-eventmachine.gemspec')
27
+ end
27
28
 
28
- file phony_gemfile_link_name do
29
- # apparently, rake doesn't deal with symlinks intelligently :P
30
- ln_s('Gemfile', phony_gemfile_link_name) unless File.symlink?(phony_gemfile_link_name)
31
- end
29
+ task 'mb:test_all' => 'zk:test_all'
32
30
 
31
+ namespace :yard do
33
32
  task :clean do
34
- rm_rf [phony_gemfile_lock_name, phony_gemfile_lock_name]
33
+ rm_rf '.yardoc'
35
34
  end
36
35
 
37
- task create_gemset_task_name do
38
- sh "rvm #{rvm_ruby} do rvm gemset create #{gemset_name}"
36
+ task :server => :clean do
37
+ sh "yard server --reload --port=8810"
39
38
  end
40
39
 
41
- task bundle_task_name => [phony_gemfile_link_name, create_gemset_task_name] do
42
- sh "rvm #{ruby_with_gemset} do bundle install --gemfile #{phony_gemfile_link_name}"
40
+ task :gems do
41
+ sh 'yard server --gems --port=8811'
43
42
  end
44
-
45
- task rspec_task_name => bundle_task_name do
46
- sh "rvm #{ruby_with_gemset} do env BUNDLE_GEMFILE=#{phony_gemfile_link_name} bundle exec rspec spec --fail-fast"
47
- end
48
-
49
- task "mb:#{ns_name}" => rspec_task_name
50
-
51
- task "mb:test_all_rubies" => rspec_task_name
52
43
  end
53
44
 
54
- task 'mb:test_all' do
55
- require 'benchmark'
56
- tm = Benchmark.realtime do
57
- Rake::Task['mb:test_all_rubies'].invoke
58
- end
45
+ task :clean => 'yard:clean'
59
46
 
60
- $stderr.puts "Test run took: #{tm}"
61
- end
62
47
 
@@ -1,5 +1,29 @@
1
1
  module ZK
2
2
  module ZKEventMachine
3
+ # @example use of on_connecting
4
+ #
5
+ # def handle_connecting_event(event=nil)
6
+ #
7
+ # # this (re-)registers this hook for the next time this event is called
8
+ # @zkem.on_connecting(&:handle_connecting_event)
9
+ #
10
+ # return unless event # nil is the initial registration case
11
+ #
12
+ # logger.warn { "Oh no! got a connecting event, taking evasive action!" }
13
+ #
14
+ # # do stuff
15
+ # end
16
+ #
17
+ #
18
+ # # your setup method would then look like
19
+ # def run
20
+ # @zkem.connect do
21
+ # handle_connecting_event
22
+ #
23
+ # do_the_rest_of_your_stuff
24
+ # end
25
+ # end
26
+ #
3
27
  class Client < ZK::Client::Base
4
28
  include Deferred::Accessors
5
29
  include ZK::Logging
@@ -14,6 +38,10 @@ module ZK
14
38
  # once this deferred has been fired, it will be replaced with a new
15
39
  # deferred, so callbacks must be re-registered, and *should* be
16
40
  # re-registered *within* the callback to avoid missing events
41
+ #
42
+ # @note if you want to be notified when the connection state has not
43
+ # become *invalid* but you are in a possibly recoverable state, then
44
+ # you should hook the {#on_connecting} method
17
45
  #
18
46
  # @method on_connection_lost
19
47
  # @return [Deferred::Default]
@@ -43,8 +71,18 @@ module ZK
43
71
  #
44
72
  # This event is triggered when we have become disconnected from the
45
73
  # cluster and are in the process of reconnecting.
74
+ #
75
+ # @note this would more accurately be called `on_disconnection`, but because
76
+ # it's fired also when the client is starting up, it has the name it does.
77
+ # there's an alias for this `on_disconnection`. (It's not `on_disconnected`
78
+ # because the '-ion' seems to indicate that the condition may be temporary)
79
+ #
80
+ # @method on_connecting
81
+ # @return [Deferred::Default]
46
82
  deferred_event :connecting
47
83
 
84
+ alias :on_disconnection :on_connecting
85
+
48
86
  # called back once the connection has been closed.
49
87
  #
50
88
  # @method on_close
@@ -1,5 +1,5 @@
1
1
  module ZK
2
2
  module ZKEventMachine
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
@@ -22,7 +22,7 @@ module SpecGlobalLogger
22
22
  # sets the log level to FATAL for the duration of the block
23
23
  def mute_logger
24
24
  orig_level, ZK.logger.level = ZK.logger.level, Logger::FATAL
25
- orig_zk_level, Zookeeper.debug_level = Zookeeper.debug_level, ZookeeperConstants::ZOO_LOG_LEVEL_ERROR
25
+ orig_zk_level, Zookeeper.debug_level = Zookeeper.debug_level, Zookeeper::Constants::ZOO_LOG_LEVEL_ERROR
26
26
  yield
27
27
  ensure
28
28
  ZK.logger.level = orig_level
@@ -70,7 +70,7 @@ module ZK::ZKEventMachine
70
70
  logger.debug { "got callback with #{a.inspect}" }
71
71
  a.should_not be_empty
72
72
  a.first.should == @data
73
- a.last.should be_instance_of(ZookeeperStat::Stat)
73
+ a.last.should be_instance_of(Zookeeper::Stat)
74
74
  EM.reactor_thread?.should be_true
75
75
  @zkem.close! { done }
76
76
  end
@@ -88,7 +88,7 @@ module ZK::ZKEventMachine
88
88
  @zkem.get(@path) do |exc,data,stat|
89
89
  exc.should be_nil
90
90
  data.should == @data
91
- stat.should be_instance_of(ZookeeperStat::Stat)
91
+ stat.should be_instance_of(Zookeeper::Stat)
92
92
  EM.reactor_thread?.should be_true
93
93
  @zkem.close! { done }
94
94
  end
@@ -253,7 +253,7 @@ module ZK::ZKEventMachine
253
253
  dfr = @zkem.set(@path, @new_data)
254
254
 
255
255
  dfr.callback do |stat|
256
- stat.should be_instance_of(ZookeeperStat::Stat)
256
+ stat.should be_instance_of(Zookeeper::Stat)
257
257
  stat.version.should > @orig_stat.version
258
258
  EM.reactor_thread?.should be_true
259
259
 
@@ -275,7 +275,7 @@ module ZK::ZKEventMachine
275
275
  @zkem.connect do
276
276
  @zkem.set(@path, @new_data) do |exc,stat|
277
277
  exc.should be_nil
278
- stat.should be_instance_of(ZookeeperStat::Stat)
278
+ stat.should be_instance_of(Zookeeper::Stat)
279
279
  EM.reactor_thread?.should be_true
280
280
 
281
281
  @zkem.get(@path) do |_,data|
@@ -386,7 +386,7 @@ module ZK::ZKEventMachine
386
386
  dfr.callback do |stat|
387
387
  stat.should_not be_nil
388
388
  stat.should == @orig_stat
389
- stat.should be_instance_of(ZookeeperStat::Stat)
389
+ stat.should be_instance_of(Zookeeper::Stat)
390
390
  EM.reactor_thread?.should be_true
391
391
  @zkem.close! { done }
392
392
  end
@@ -403,7 +403,7 @@ module ZK::ZKEventMachine
403
403
  @zkem.connect do
404
404
  @zkem.stat(@path) do |exc,stat|
405
405
  exc.should be_nil
406
- stat.should be_instance_of(ZookeeperStat::Stat)
406
+ stat.should be_instance_of(Zookeeper::Stat)
407
407
  EM.reactor_thread?.should be_true
408
408
  @zkem.close! { done }
409
409
  end
@@ -426,7 +426,7 @@ module ZK::ZKEventMachine
426
426
  dfr.callback do |stat|
427
427
  stat.should_not be_nil
428
428
  stat.exists?.should be_false
429
- stat.should be_instance_of(ZookeeperStat::Stat)
429
+ stat.should be_instance_of(Zookeeper::Stat)
430
430
  EM.reactor_thread?.should be_true
431
431
  @zkem.close! { done }
432
432
  end
@@ -539,7 +539,7 @@ module ZK::ZKEventMachine
539
539
  children.should include('child_1')
540
540
  children.should include('child_2')
541
541
 
542
- stat.should be_instance_of(ZookeeperStat::Stat)
542
+ stat.should be_instance_of(Zookeeper::Stat)
543
543
 
544
544
  EM.reactor_thread?.should be_true
545
545
  @zkem.close! { done }
@@ -561,7 +561,7 @@ module ZK::ZKEventMachine
561
561
  children.length.should == 2
562
562
  children.should include('child_1')
563
563
  children.should include('child_2')
564
- stat.should be_instance_of(ZookeeperStat::Stat)
564
+ stat.should be_instance_of(Zookeeper::Stat)
565
565
  EM.reactor_thread?.should be_true
566
566
  @zkem.close! { done }
567
567
  end
@@ -621,8 +621,8 @@ module ZK::ZKEventMachine
621
621
 
622
622
  dfr.callback do |acls,stat|
623
623
  acls.should be_kind_of(Array)
624
- acls.first.should be_kind_of(ZookeeperACLs::ACL)
625
- stat.should be_instance_of(ZookeeperStat::Stat)
624
+ acls.first.should be_kind_of(Zookeeper::ACLs::ACL)
625
+ stat.should be_instance_of(Zookeeper::Stat)
626
626
 
627
627
  EM.reactor_thread?.should be_true
628
628
  @zkem.close! { done }
@@ -641,8 +641,8 @@ module ZK::ZKEventMachine
641
641
  @zkem.get_acl(@path) do |exc,acls,stat|
642
642
  exc.should be_nil
643
643
  acls.should be_kind_of(Array)
644
- acls.first.should be_kind_of(ZookeeperACLs::ACL)
645
- stat.should be_instance_of(ZookeeperStat::Stat)
644
+ acls.first.should be_kind_of(Zookeeper::ACLs::ACL)
645
+ stat.should be_instance_of(Zookeeper::Stat)
646
646
  EM.reactor_thread?.should be_true
647
647
  @zkem.close! { done }
648
648
  end
@@ -811,6 +811,35 @@ module ZK::ZKEventMachine
811
811
  end
812
812
  end
813
813
  end
814
+
815
+ it %[should re-register when the hook in the documentation is used] do
816
+
817
+ @perform_count = 0
818
+
819
+ hook = proc do |ev|
820
+ @zkem.on_connecting(&hook)
821
+
822
+ if ev
823
+ @perform_count += 1
824
+ end
825
+
826
+ if @perform_count == 2
827
+ @zkem.close! { done }
828
+ end
829
+ end
830
+
831
+ em do
832
+ hook.call(nil)
833
+
834
+ @zkem.connect do
835
+ event = event_mock(:connecting_event).tap do |ev|
836
+ ev.should_receive(:state).and_return(Zookeeper::ZOO_CONNECTING_STATE)
837
+ end
838
+
839
+ 2.times { EM.next_tick { @zkem.event_handler.process(event) } }
840
+ end
841
+ end
842
+ end
814
843
  end # on_connecting
815
844
  end # Client
816
845
 
@@ -72,7 +72,7 @@ module ZK::ZKEventMachine
72
72
  @zkem.children(@path, :watch => true).callback { |ary,stat|
73
73
  logger.debug { "called back with: #{ary.inspect}" }
74
74
  ary.should be_empty
75
- stat.should be_kind_of(ZookeeperStat::Stat)
75
+ stat.should be_kind_of(Zookeeper::Stat)
76
76
 
77
77
  @zkem.create(@child_path, '').callback { |p|
78
78
  p.should == @child_path
@@ -12,10 +12,10 @@ Gem::Specification.new do |s|
12
12
  s.summary = %q{ZK client for EventMachine-based (async) applications}
13
13
  s.description = s.description
14
14
 
15
- s.add_dependency 'zk', '~> 1.0.0'
15
+ s.add_dependency 'zk', '~> 1.4.1'
16
16
 
17
17
  # zk depends on slyphon-zookeeper, but we need at least this version
18
- s.add_dependency 'slyphon-zookeeper', '~> 0.9.2'
18
+ s.add_dependency 'zookeeper', '~> 1.1.0'
19
19
  s.add_dependency 'eventmachine', '~> 1.0.0.beta.4'
20
20
  s.add_dependency 'deferred', '~> 0.5.3'
21
21
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zk-eventmachine
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 0
10
- version: 1.0.0
9
+ - 1
10
+ version: 1.0.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jonathan D. Simms
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-30 00:00:00 Z
18
+ date: 2012-05-14 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: zk
@@ -25,28 +25,28 @@ dependencies:
25
25
  requirements:
26
26
  - - ~>
27
27
  - !ruby/object:Gem::Version
28
- hash: 23
28
+ hash: 5
29
29
  segments:
30
30
  - 1
31
- - 0
32
- - 0
33
- version: 1.0.0
31
+ - 4
32
+ - 1
33
+ version: 1.4.1
34
34
  type: :runtime
35
35
  version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
- name: slyphon-zookeeper
37
+ name: zookeeper
38
38
  prerelease: false
39
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
43
43
  - !ruby/object:Gem::Version
44
- hash: 63
44
+ hash: 19
45
45
  segments:
46
+ - 1
47
+ - 1
46
48
  - 0
47
- - 9
48
- - 2
49
- version: 0.9.2
49
+ version: 1.1.0
50
50
  type: :runtime
51
51
  version_requirements: *id002
52
52
  - !ruby/object:Gem::Dependency
@@ -57,7 +57,7 @@ dependencies:
57
57
  requirements:
58
58
  - - ~>
59
59
  - !ruby/object:Gem::Version
60
- hash: 2603058889
60
+ hash: 3300709603
61
61
  segments:
62
62
  - 1
63
63
  - 0
@@ -98,6 +98,7 @@ files:
98
98
  - .dev_extras/rvmrc
99
99
  - .dev_extras/slyphon-project.vimrc
100
100
  - .gitignore
101
+ - .gitmodules
101
102
  - .yardopts
102
103
  - Gemfile
103
104
  - LICENSE