zk-eventmachine 0.1.11 → 0.1.12
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.
- data/.gitignore +1 -0
- data/.yardopts +8 -0
- data/Rakefile +35 -0
- data/lib/z_k/z_k_event_machine.rb +1 -2
- data/lib/z_k/z_k_event_machine/callback.rb +1 -1
- data/lib/z_k/z_k_event_machine/client.rb +75 -24
- data/lib/z_k/z_k_event_machine/unixisms.rb +5 -0
- data/lib/z_k/z_k_event_machine/version.rb +1 -1
- data/spec/z_k/z_k_event_machine/client_spec.rb +99 -59
- data/zk-eventmachine.gemspec +2 -0
- metadata +47 -15
- data/lib/z_k/z_k_event_machine/deferred.rb +0 -39
data/.gitignore
CHANGED
data/.yardopts
ADDED
data/Rakefile
CHANGED
@@ -1,2 +1,37 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
task :yard do
|
5
|
+
Bundler.setup
|
6
|
+
require 'yard'
|
7
|
+
|
8
|
+
YARD::Rake::YardocTask.new(:run_yardoc) do |t|
|
9
|
+
t.files = ['lib/**/*.rb']
|
10
|
+
end
|
11
|
+
|
12
|
+
Rake::Task[:run_yardoc].invoke
|
13
|
+
end
|
14
|
+
|
15
|
+
%w[1.8.7 1.9.2 1.9.3 jruby].each do |rvm_ruby|
|
16
|
+
gemset_name = 'zk-em'
|
17
|
+
ruby_with_gemset = "#{rvm_ruby}@#{gemset_name}"
|
18
|
+
create_gemset_name = "mb:#{rvm_ruby}:create_gemset"
|
19
|
+
bundle_task_name = "mb:#{rvm_ruby}:bundle_install"
|
20
|
+
rspec_task_name = "mb:#{rvm_ruby}:run_rspec"
|
21
|
+
|
22
|
+
task create_gemset_name do
|
23
|
+
sh "rvm #{rvm_ruby} && rvm gemset create #{gemset_name}"
|
24
|
+
end
|
25
|
+
|
26
|
+
task bundle_task_name => create_gemset_name do
|
27
|
+
rm_f 'Gemfile.lock'
|
28
|
+
sh "rvm #{ruby_with_gemset} do bundle install"
|
29
|
+
end
|
30
|
+
|
31
|
+
task rspec_task_name => bundle_task_name do
|
32
|
+
sh "rvm #{ruby_with_gemset} do bundle exec rspec spec"
|
33
|
+
end
|
34
|
+
|
35
|
+
task 'mb:test_all' => rspec_task_name
|
36
|
+
end
|
37
|
+
|
@@ -4,7 +4,7 @@ require 'zookeeper'
|
|
4
4
|
require 'zookeeper/em_client'
|
5
5
|
|
6
6
|
require 'zk'
|
7
|
-
|
7
|
+
require 'deferred'
|
8
8
|
|
9
9
|
module ZK
|
10
10
|
module ZKEventMachine
|
@@ -15,7 +15,6 @@ end
|
|
15
15
|
$LOAD_PATH.unshift(File.expand_path('../..', __FILE__)).uniq!
|
16
16
|
|
17
17
|
require 'z_k/z_k_event_machine/iterator'
|
18
|
-
require 'z_k/z_k_event_machine/deferred'
|
19
18
|
require 'z_k/z_k_event_machine/callback'
|
20
19
|
require 'z_k/z_k_event_machine/event_handler_e_m'
|
21
20
|
require 'z_k/z_k_event_machine/unixisms'
|
@@ -1,22 +1,63 @@
|
|
1
1
|
module ZK
|
2
2
|
module ZKEventMachine
|
3
3
|
class Client < ZK::Client::Base
|
4
|
+
include Deferred::Accessors
|
4
5
|
include ZK::Logging
|
5
6
|
include Unixisms
|
6
7
|
|
7
8
|
DEFAULT_TIMEOUT = 10
|
8
9
|
|
10
|
+
# If we get a ZK::Exceptions::ConnectionLoss exeption back from any call,
|
11
|
+
# or a EXPIRED_SESSION_STATE event, we will call back any handlers registered
|
12
|
+
# here with the exception instance as the argument.
|
13
|
+
#
|
14
|
+
# once this deferred has been fired, it will be replaced with a new
|
15
|
+
# deferred, so callbacks must be re-registered, and *should* be
|
16
|
+
# re-registered *within* the callback to avoid missing events
|
17
|
+
#
|
18
|
+
# @method on_connection_lost
|
19
|
+
# @return [Deferred::Default]
|
20
|
+
deferred_event :connection_lost
|
21
|
+
|
22
|
+
|
23
|
+
# Registers a one-shot callback for the ZOO_CONNECTED_STATE event.
|
24
|
+
#
|
25
|
+
# @note this is experimental currently. This may or may not fire for the *initial* connection.
|
26
|
+
# it's purpose is to warn an already-existing client with watches that a connection has been
|
27
|
+
# re-established (with session information saved). From the ZooKeeper Programmers' Guide:
|
28
|
+
#
|
29
|
+
# If you are using watches, you must look for the connected watch event.
|
30
|
+
# When a ZooKeeper client disconnects from a server, you will not receive
|
31
|
+
# notification of changes until reconnected. If you are watching for a
|
32
|
+
# znode to come into existance, you will miss the event if the znode is
|
33
|
+
# created and deleted while you are disconnected.
|
34
|
+
#
|
35
|
+
# once this deferred has been fired, it will be replaced with a new
|
36
|
+
# deferred, so callbacks must be re-registered, and *should* be
|
37
|
+
# re-registered *within* the callback to avoid missing events
|
38
|
+
#
|
39
|
+
# @method on_connected
|
40
|
+
# @return [Deferred::Default]
|
41
|
+
deferred_event :connected
|
42
|
+
|
43
|
+
# Registers a one-shot callback for the ZOO_CONNECTING_STATE event
|
44
|
+
#
|
45
|
+
# This event is triggered when we have become disconnected from the
|
46
|
+
# cluster and are in the process of reconnecting.
|
47
|
+
deferred_event :connecting
|
48
|
+
|
49
|
+
# called back once the connection has been closed.
|
50
|
+
#
|
51
|
+
# @method on_close
|
52
|
+
# @return [Deferred::Default]
|
53
|
+
deferred_event :close
|
54
|
+
|
9
55
|
# Takes same options as ZK::Client::Base
|
10
56
|
def initialize(host, opts={})
|
11
57
|
@host = host
|
12
|
-
@
|
13
|
-
@
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
def on_close(&blk)
|
18
|
-
@close_deferred.callback(&blk) if blk
|
19
|
-
@close_deferred
|
58
|
+
@event_handler = EventHandlerEM.new(self)
|
59
|
+
@closing = false
|
60
|
+
register_default_event_handlers!
|
20
61
|
end
|
21
62
|
|
22
63
|
# open a ZK connection, attach it to the reactor.
|
@@ -25,30 +66,20 @@ module ZK
|
|
25
66
|
def connect(&blk)
|
26
67
|
# XXX: maybe move this into initialize, need to figure out how to schedule it properly
|
27
68
|
@cnx ||= (
|
28
|
-
event_handler.register_state_handler(Zookeeper::ZOO_EXPIRED_SESSION_STATE, &method(:handle_expired_session_state_event!))
|
29
69
|
ZookeeperEM::Client.new(@host, DEFAULT_TIMEOUT, event_handler.get_default_watcher_block)
|
30
70
|
)
|
31
71
|
@cnx.on_attached(&blk)
|
32
72
|
end
|
33
73
|
|
34
|
-
#
|
35
|
-
# we will call back any handlers registered here with the exception
|
36
|
-
# instance as the argument
|
37
|
-
#
|
38
|
-
# once this deferred has been fired, it will be replaced with a new
|
39
|
-
# deferred, so callbacks must be re-registered
|
40
|
-
#
|
41
|
-
def on_connection_lost(&blk)
|
42
|
-
@connection_lost_deferred.callback(&blk) if blk
|
43
|
-
@connection_lost_deferred
|
44
|
-
end
|
45
|
-
|
74
|
+
# @private
|
46
75
|
def reopen(*a)
|
47
76
|
raise NotImplementedError, "reoopen is not implemented for the eventmachine version of the client"
|
48
77
|
end
|
49
78
|
|
50
79
|
def close!(&blk)
|
51
80
|
on_close(&blk)
|
81
|
+
return on_close if @closing
|
82
|
+
@closing = true
|
52
83
|
|
53
84
|
if @cnx
|
54
85
|
logger.debug { "#{self.class.name}: in close! clearing event_handler" }
|
@@ -70,7 +101,7 @@ module ZK
|
|
70
101
|
|
71
102
|
# get data at path, optionally enabling a watch on the node
|
72
103
|
#
|
73
|
-
# @
|
104
|
+
# @return [Callback] returns a Callback which is an EM::Deferred (so you
|
74
105
|
# can assign callbacks/errbacks) see Callback::Base for discussion
|
75
106
|
#
|
76
107
|
def get(path, opts={}, &block)
|
@@ -137,27 +168,47 @@ module ZK
|
|
137
168
|
end
|
138
169
|
end
|
139
170
|
|
171
|
+
# @return [Fixnum] The underlying connection's session_id
|
140
172
|
def session_id
|
141
173
|
return nil unless @cnx
|
142
174
|
@cnx.session_id
|
143
175
|
end
|
144
176
|
|
177
|
+
# @return [String] The underlying connection's session passwd (an opaque value)
|
145
178
|
def session_passwd
|
146
179
|
return nil unless @cnx
|
147
180
|
@cnx.session_passwd
|
148
181
|
end
|
149
182
|
|
150
183
|
protected
|
184
|
+
# @private
|
185
|
+
def register_default_event_handlers!
|
186
|
+
@event_handler.register_state_handler(Zookeeper::ZOO_EXPIRED_SESSION_STATE, &method(:handle_expired_session_state_event!))
|
187
|
+
@event_handler.register_state_handler(Zookeeper::ZOO_CONNECTED_STATE, &method(:handle_connected_state_event!))
|
188
|
+
@event_handler.register_state_handler(Zookeeper::ZOO_CONNECTING_STATE, &method(:handle_connecting_state_event!))
|
189
|
+
end
|
190
|
+
|
191
|
+
# @private
|
192
|
+
def handle_connected_state_event!(event)
|
193
|
+
reset_connected_event.succeed(event)
|
194
|
+
end
|
195
|
+
|
196
|
+
# @private
|
197
|
+
def handle_connecting_state_event!(event)
|
198
|
+
reset_connecting_event.succeed(event)
|
199
|
+
end
|
200
|
+
|
201
|
+
# @private
|
151
202
|
def handle_expired_session_state_event!(event)
|
152
203
|
exc = ZK::Exceptions::ConnectionLoss.new("Received EXPIRED_SESSION_STATE event: #{event.inspect}")
|
153
204
|
exc.set_backtrace(caller)
|
154
205
|
connection_lost_hook(exc)
|
155
206
|
end
|
156
207
|
|
208
|
+
# @private
|
157
209
|
def connection_lost_hook(exc)
|
158
210
|
if exc and exc.kind_of?(ZK::Exceptions::ConnectionLoss)
|
159
|
-
|
160
|
-
dfr.succeed(exc)
|
211
|
+
reset_connection_lost_event.succeed(exc)
|
161
212
|
end
|
162
213
|
end
|
163
214
|
end
|
@@ -31,15 +31,18 @@ module ZK
|
|
31
31
|
_handle_calling_convention(dfr, &blk)
|
32
32
|
end
|
33
33
|
|
34
|
+
# @private
|
34
35
|
def find(*paths, &block)
|
35
36
|
raise NotImplementedError, "Coming soon"
|
36
37
|
end
|
37
38
|
|
39
|
+
# @private
|
38
40
|
def block_until_node_deleted(abs_node_path)
|
39
41
|
raise NotImplementedError, "blocking does not make sense in EventMachine-land"
|
40
42
|
end
|
41
43
|
|
42
44
|
protected
|
45
|
+
# @private
|
43
46
|
def _handle_calling_convention(dfr, &blk)
|
44
47
|
return dfr unless blk
|
45
48
|
dfr.callback { |*a| blk.call(nil, *a) }
|
@@ -47,6 +50,7 @@ module ZK
|
|
47
50
|
dfr
|
48
51
|
end
|
49
52
|
|
53
|
+
# @private
|
50
54
|
def _rm_rf_dfr(path)
|
51
55
|
Deferred::Default.new.tap do |my_dfr|
|
52
56
|
delete(path) do |exc|
|
@@ -85,6 +89,7 @@ module ZK
|
|
85
89
|
end
|
86
90
|
end
|
87
91
|
|
92
|
+
# @private
|
88
93
|
def _mkdir_p_dfr(path)
|
89
94
|
Deferred::Default.new.tap do |my_dfr|
|
90
95
|
d = create(path, '')
|
@@ -18,6 +18,15 @@ module ZK::ZKEventMachine
|
|
18
18
|
@zk.close!
|
19
19
|
end
|
20
20
|
|
21
|
+
def event_mock(name=:event)
|
22
|
+
flexmock(name).tap do |ev|
|
23
|
+
ev.should_receive(:node_event?).and_return(false)
|
24
|
+
ev.should_receive(:state_event?).and_return(true)
|
25
|
+
ev.should_receive(:zk=).with_any_args
|
26
|
+
yield ev if block_given?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
21
30
|
describe 'connect' do
|
22
31
|
it %[should return a deferred that fires when connected and then close] do
|
23
32
|
em do
|
@@ -45,64 +54,6 @@ module ZK::ZKEventMachine
|
|
45
54
|
end
|
46
55
|
end
|
47
56
|
|
48
|
-
describe 'on_connection_loss' do
|
49
|
-
before do
|
50
|
-
@path = [@base_path, 'foo'].join('/')
|
51
|
-
@data = 'this is data'
|
52
|
-
@zk.create(@path, @data)
|
53
|
-
end
|
54
|
-
|
55
|
-
it %[should be called back if the connection is lost] do
|
56
|
-
em do
|
57
|
-
@zkem.on_connection_lost do |exc|
|
58
|
-
logger.debug { "WIN!" }
|
59
|
-
exc.should be_kind_of(ZK::Exceptions::ConnectionLoss)
|
60
|
-
@zkem.close! { done }
|
61
|
-
end
|
62
|
-
|
63
|
-
@zkem.connect do
|
64
|
-
flexmock(@zkem.cnx) do |m|
|
65
|
-
m.should_receive(:get).with(Hash).and_return do |hash|
|
66
|
-
logger.debug { "client received :get wtih #{hash.inspect}" }
|
67
|
-
@user_cb = hash[:callback]
|
68
|
-
|
69
|
-
EM.next_tick do
|
70
|
-
logger.debug { "calling back user cb with connection loss" }
|
71
|
-
@user_cb.call(:rc => ZK::Exceptions::CONNECTIONLOSS)
|
72
|
-
end
|
73
|
-
|
74
|
-
{ :rc => Zookeeper::ZOK }
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
@zkem.get(@path) do |exc,data|
|
79
|
-
exc.should be_kind_of(ZK::Exceptions::ConnectionLoss)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
it %[should be called if we get a session expired event] do
|
86
|
-
@zkem.on_connection_lost do |exc|
|
87
|
-
logger.debug { "WIN!" }
|
88
|
-
exc.should be_kind_of(ZK::Exceptions::ConnectionLoss)
|
89
|
-
@zkem.close! { done }
|
90
|
-
end
|
91
|
-
|
92
|
-
em do
|
93
|
-
@zkem.connect do
|
94
|
-
event = flexmock(:event).tap do |ev|
|
95
|
-
ev.should_receive(:node_event?).and_return(false)
|
96
|
-
ev.should_receive(:state_event?).and_return(true)
|
97
|
-
ev.should_receive(:zk=).with_any_args
|
98
|
-
ev.should_receive(:state).and_return(Zookeeper::ZOO_EXPIRED_SESSION_STATE)
|
99
|
-
end
|
100
|
-
|
101
|
-
EM.next_tick { @zkem.event_handler.process(event) }
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
57
|
|
107
58
|
describe 'get' do
|
108
59
|
describe 'success' do
|
@@ -288,7 +239,6 @@ module ZK::ZKEventMachine
|
|
288
239
|
end # failure
|
289
240
|
end # create
|
290
241
|
|
291
|
-
|
292
242
|
describe 'set' do
|
293
243
|
describe 'success' do
|
294
244
|
before do
|
@@ -775,6 +725,96 @@ module ZK::ZKEventMachine
|
|
775
725
|
end
|
776
726
|
end
|
777
727
|
end
|
728
|
+
|
729
|
+
describe 'on_connection_lost' do
|
730
|
+
before do
|
731
|
+
@path = [@base_path, 'foo'].join('/')
|
732
|
+
@data = 'this is data'
|
733
|
+
@zk.create(@path, @data)
|
734
|
+
end
|
735
|
+
|
736
|
+
it %[should be called back if the connection is lost] do
|
737
|
+
em do
|
738
|
+
@zkem.on_connection_lost do |exc|
|
739
|
+
logger.debug { "WIN!" }
|
740
|
+
exc.should be_kind_of(ZK::Exceptions::ConnectionLoss)
|
741
|
+
@zkem.close! { done }
|
742
|
+
end
|
743
|
+
|
744
|
+
@zkem.connect do
|
745
|
+
flexmock(@zkem.cnx) do |m|
|
746
|
+
m.should_receive(:get).with(Hash).and_return do |hash|
|
747
|
+
logger.debug { "client received :get wtih #{hash.inspect}" }
|
748
|
+
@user_cb = hash[:callback]
|
749
|
+
|
750
|
+
EM.next_tick do
|
751
|
+
logger.debug { "calling back user cb with connection loss" }
|
752
|
+
@user_cb.call(:rc => ZK::Exceptions::CONNECTIONLOSS)
|
753
|
+
end
|
754
|
+
|
755
|
+
{ :rc => Zookeeper::ZOK }
|
756
|
+
end
|
757
|
+
end
|
758
|
+
|
759
|
+
@zkem.get(@path) do |exc,data|
|
760
|
+
exc.should be_kind_of(ZK::Exceptions::ConnectionLoss)
|
761
|
+
end
|
762
|
+
end
|
763
|
+
end
|
764
|
+
end
|
765
|
+
|
766
|
+
it %[should be called if we get a session expired event] do
|
767
|
+
@zkem.on_connection_lost do |exc|
|
768
|
+
logger.debug { "WIN!" }
|
769
|
+
exc.should be_kind_of(ZK::Exceptions::ConnectionLoss)
|
770
|
+
@zkem.close! { done }
|
771
|
+
end
|
772
|
+
|
773
|
+
em do
|
774
|
+
@zkem.connect do
|
775
|
+
event = event_mock(:connection_loss_event).tap do |ev|
|
776
|
+
ev.should_receive(:state).and_return(Zookeeper::ZOO_EXPIRED_SESSION_STATE)
|
777
|
+
end
|
778
|
+
|
779
|
+
EM.next_tick { @zkem.event_handler.process(event) }
|
780
|
+
end
|
781
|
+
end
|
782
|
+
end
|
783
|
+
end # on_connection_lost
|
784
|
+
|
785
|
+
describe 'on_connected' do
|
786
|
+
it %[should be called back when a ZOO_CONNECTED_STATE event is received] do
|
787
|
+
em do
|
788
|
+
@zkem.on_connected do |event|
|
789
|
+
logger.debug { "WIN!" }
|
790
|
+
@zkem.close! { done }
|
791
|
+
end
|
792
|
+
|
793
|
+
@zkem.connect do
|
794
|
+
logger.debug { "we connected" }
|
795
|
+
end
|
796
|
+
end
|
797
|
+
end
|
798
|
+
end # on_connected
|
799
|
+
|
800
|
+
describe 'on_connecting' do
|
801
|
+
it %[should be called back when a ZOO_CONNECTING_STATE event is received] do
|
802
|
+
@zkem.on_connecting do |event|
|
803
|
+
logger.debug { "WIN!" }
|
804
|
+
@zkem.close! { done }
|
805
|
+
end
|
806
|
+
|
807
|
+
em do
|
808
|
+
@zkem.connect do
|
809
|
+
event = event_mock(:connecting_event).tap do |ev|
|
810
|
+
ev.should_receive(:state).and_return(Zookeeper::ZOO_CONNECTING_STATE)
|
811
|
+
end
|
812
|
+
|
813
|
+
EM.next_tick { @zkem.event_handler.process(event) }
|
814
|
+
end
|
815
|
+
end
|
816
|
+
end
|
817
|
+
end # on_connecting
|
778
818
|
end # Client
|
779
819
|
end # ZK::ZKEventMachine
|
780
820
|
|
data/zk-eventmachine.gemspec
CHANGED
@@ -17,12 +17,14 @@ Gem::Specification.new do |s|
|
|
17
17
|
# zk depends on slyphon-zookeeper, but we need at least this version
|
18
18
|
s.add_dependency('slyphon-zookeeper', '~> 0.2.8')
|
19
19
|
s.add_dependency('eventmachine', '~> 1.0.0.beta.3')
|
20
|
+
s.add_dependency('deferred', '~> 0.5.3')
|
20
21
|
|
21
22
|
s.add_development_dependency('rspec', '~> 2.5.0')
|
22
23
|
s.add_development_dependency('yard', '~> 0.7.0')
|
23
24
|
s.add_development_dependency('autotest', '>= 4.4.0')
|
24
25
|
s.add_development_dependency('flexmock', '~> 0.8.10')
|
25
26
|
s.add_development_dependency('evented-spec', '~> 0.4.1')
|
27
|
+
s.add_development_dependency('redcarpet', '~> 2.1.0')
|
26
28
|
|
27
29
|
s.files = `git ls-files`.split("\n")
|
28
30
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
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:
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 12
|
10
|
+
version: 0.1.12
|
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-01
|
18
|
+
date: 2012-02-01 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: zk
|
@@ -68,9 +68,25 @@ dependencies:
|
|
68
68
|
type: :runtime
|
69
69
|
version_requirements: *id003
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: deferred
|
72
72
|
prerelease: false
|
73
73
|
requirement: &id004 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ~>
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
hash: 13
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
- 5
|
82
|
+
- 3
|
83
|
+
version: 0.5.3
|
84
|
+
type: :runtime
|
85
|
+
version_requirements: *id004
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: rspec
|
88
|
+
prerelease: false
|
89
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
74
90
|
none: false
|
75
91
|
requirements:
|
76
92
|
- - ~>
|
@@ -82,11 +98,11 @@ dependencies:
|
|
82
98
|
- 0
|
83
99
|
version: 2.5.0
|
84
100
|
type: :development
|
85
|
-
version_requirements: *
|
101
|
+
version_requirements: *id005
|
86
102
|
- !ruby/object:Gem::Dependency
|
87
103
|
name: yard
|
88
104
|
prerelease: false
|
89
|
-
requirement: &
|
105
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
90
106
|
none: false
|
91
107
|
requirements:
|
92
108
|
- - ~>
|
@@ -98,11 +114,11 @@ dependencies:
|
|
98
114
|
- 0
|
99
115
|
version: 0.7.0
|
100
116
|
type: :development
|
101
|
-
version_requirements: *
|
117
|
+
version_requirements: *id006
|
102
118
|
- !ruby/object:Gem::Dependency
|
103
119
|
name: autotest
|
104
120
|
prerelease: false
|
105
|
-
requirement: &
|
121
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
106
122
|
none: false
|
107
123
|
requirements:
|
108
124
|
- - ">="
|
@@ -114,11 +130,11 @@ dependencies:
|
|
114
130
|
- 0
|
115
131
|
version: 4.4.0
|
116
132
|
type: :development
|
117
|
-
version_requirements: *
|
133
|
+
version_requirements: *id007
|
118
134
|
- !ruby/object:Gem::Dependency
|
119
135
|
name: flexmock
|
120
136
|
prerelease: false
|
121
|
-
requirement: &
|
137
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
122
138
|
none: false
|
123
139
|
requirements:
|
124
140
|
- - ~>
|
@@ -130,11 +146,11 @@ dependencies:
|
|
130
146
|
- 10
|
131
147
|
version: 0.8.10
|
132
148
|
type: :development
|
133
|
-
version_requirements: *
|
149
|
+
version_requirements: *id008
|
134
150
|
- !ruby/object:Gem::Dependency
|
135
151
|
name: evented-spec
|
136
152
|
prerelease: false
|
137
|
-
requirement: &
|
153
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
138
154
|
none: false
|
139
155
|
requirements:
|
140
156
|
- - ~>
|
@@ -146,7 +162,23 @@ dependencies:
|
|
146
162
|
- 1
|
147
163
|
version: 0.4.1
|
148
164
|
type: :development
|
149
|
-
version_requirements: *
|
165
|
+
version_requirements: *id009
|
166
|
+
- !ruby/object:Gem::Dependency
|
167
|
+
name: redcarpet
|
168
|
+
prerelease: false
|
169
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
170
|
+
none: false
|
171
|
+
requirements:
|
172
|
+
- - ~>
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
hash: 11
|
175
|
+
segments:
|
176
|
+
- 2
|
177
|
+
- 1
|
178
|
+
- 0
|
179
|
+
version: 2.1.0
|
180
|
+
type: :development
|
181
|
+
version_requirements: *id010
|
150
182
|
description: ""
|
151
183
|
email:
|
152
184
|
- slyphon@hp.com
|
@@ -162,6 +194,7 @@ files:
|
|
162
194
|
- .dev_extras/rvmrc
|
163
195
|
- .dev_extras/slyphon-project.vimrc
|
164
196
|
- .gitignore
|
197
|
+
- .yardopts
|
165
198
|
- Gemfile
|
166
199
|
- LICENSE
|
167
200
|
- README.markdown
|
@@ -169,7 +202,6 @@ files:
|
|
169
202
|
- lib/z_k/z_k_event_machine.rb
|
170
203
|
- lib/z_k/z_k_event_machine/callback.rb
|
171
204
|
- lib/z_k/z_k_event_machine/client.rb
|
172
|
-
- lib/z_k/z_k_event_machine/deferred.rb
|
173
205
|
- lib/z_k/z_k_event_machine/event_handler_e_m.rb
|
174
206
|
- lib/z_k/z_k_event_machine/iterator.rb
|
175
207
|
- lib/z_k/z_k_event_machine/unixisms.rb
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module ZK
|
2
|
-
module ZKEventMachine
|
3
|
-
module Deferred
|
4
|
-
include EM::Deferrable
|
5
|
-
|
6
|
-
# slight modification to EM::Deferrable,
|
7
|
-
#
|
8
|
-
# @returns [self] to allow for chaining
|
9
|
-
#
|
10
|
-
def callback(&block)
|
11
|
-
super(&block)
|
12
|
-
self
|
13
|
-
end
|
14
|
-
|
15
|
-
# @see #callback
|
16
|
-
def errback(&block)
|
17
|
-
super(&block)
|
18
|
-
self
|
19
|
-
end
|
20
|
-
|
21
|
-
# adds the block to both the callback and errback chains
|
22
|
-
def ensure_that(&block)
|
23
|
-
callback(&block)
|
24
|
-
errback(&block)
|
25
|
-
end
|
26
|
-
|
27
|
-
def chain_to(other_dfr, opts={})
|
28
|
-
other_dfr.callback { |*a| self.succeed(*a) }
|
29
|
-
other_dfr.errback { |*a| self.fail(*a) } unless opts[:ignore_errors]
|
30
|
-
self
|
31
|
-
end
|
32
|
-
|
33
|
-
class Default
|
34
|
-
include ZK::ZKEventMachine::Deferred
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|