zk-eventmachine 0.2.0.beta.3 → 0.9.0
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/.dev_extras/rvmrc +1 -1
- data/.gitignore +2 -1
- data/.yardopts +8 -0
- data/Gemfile +14 -2
- data/Rakefile +35 -0
- data/lib/z_k/z_k_event_machine/callback.rb +15 -5
- data/lib/z_k/z_k_event_machine/client.rb +100 -44
- data/lib/z_k/z_k_event_machine/iterator.rb +229 -0
- data/lib/z_k/z_k_event_machine/unixisms.rb +8 -3
- data/lib/z_k/z_k_event_machine/version.rb +1 -1
- data/lib/z_k/z_k_event_machine.rb +2 -3
- data/spec/spec_helper.rb +6 -4
- data/spec/support/logging.rb +23 -6
- data/spec/support/logging_progress_bar_formatter.rb +1 -1
- data/spec/support/wait_watchers.rb +34 -0
- data/spec/z_k/z_k_event_machine/client_spec.rb +181 -61
- data/spec/z_k/z_k_event_machine/event_handler_e_m_spec.rb +6 -5
- data/zk-eventmachine.gemspec +4 -10
- metadata +95 -111
- data/lib/z_k/z_k_event_machine/deferred.rb +0 -39
- data/lib/z_k/z_k_event_machine/synchrony_client.rb +0 -135
- data/spec/z_k/z_k_event_machine/synchrony_client_spec.rb +0 -342
metadata
CHANGED
@@ -1,127 +1,104 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: zk-eventmachine
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 59
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 9
|
9
|
+
- 0
|
10
|
+
version: 0.9.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Jonathan D. Simms
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
|
18
|
+
date: 2012-04-23 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: zk
|
16
|
-
requirement: &2153417580 !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 0.8.5
|
22
|
-
type: :runtime
|
23
22
|
prerelease: false
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: slyphon-zookeeper
|
27
|
-
requirement: &2153416980 !ruby/object:Gem::Requirement
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
28
24
|
none: false
|
29
|
-
requirements:
|
25
|
+
requirements:
|
30
26
|
- - ~>
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 59
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 9
|
32
|
+
- 0
|
33
|
+
version: 0.9.0
|
33
34
|
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: slyphon-zookeeper
|
34
38
|
prerelease: false
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: eventmachine
|
38
|
-
requirement: &2153416460 !ruby/object:Gem::Requirement
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
40
|
none: false
|
40
|
-
requirements:
|
41
|
+
requirements:
|
41
42
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 61
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 8
|
48
|
+
- 1
|
49
|
+
version: 0.8.1
|
44
50
|
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: eventmachine
|
45
54
|
prerelease: false
|
46
|
-
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: em-synchrony
|
49
|
-
requirement: &2153416000 !ruby/object:Gem::Requirement
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
56
|
none: false
|
51
|
-
requirements:
|
57
|
+
requirements:
|
52
58
|
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: -1649268254
|
61
|
+
segments:
|
62
|
+
- 1
|
63
|
+
- 0
|
64
|
+
- 0
|
65
|
+
- beta
|
66
|
+
- 4
|
67
|
+
version: 1.0.0.beta.4
|
55
68
|
type: :runtime
|
69
|
+
version_requirements: *id003
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: deferred
|
56
72
|
prerelease: false
|
57
|
-
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: rspec
|
60
|
-
requirement: &2153415040 !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
|
-
requirements:
|
63
|
-
- - ~>
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
version: 2.5.0
|
66
|
-
type: :development
|
67
|
-
prerelease: false
|
68
|
-
version_requirements: *2153415040
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: yard
|
71
|
-
requirement: &2153414480 !ruby/object:Gem::Requirement
|
73
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
72
74
|
none: false
|
73
|
-
requirements:
|
75
|
+
requirements:
|
74
76
|
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: 4.4.0
|
88
|
-
type: :development
|
89
|
-
prerelease: false
|
90
|
-
version_requirements: *2153413980
|
91
|
-
- !ruby/object:Gem::Dependency
|
92
|
-
name: flexmock
|
93
|
-
requirement: &2153413520 !ruby/object:Gem::Requirement
|
94
|
-
none: false
|
95
|
-
requirements:
|
96
|
-
- - ~>
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version: 0.8.10
|
99
|
-
type: :development
|
100
|
-
prerelease: false
|
101
|
-
version_requirements: *2153413520
|
102
|
-
- !ruby/object:Gem::Dependency
|
103
|
-
name: evented-spec
|
104
|
-
requirement: &2153409460 !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 0.4.1
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: *2153409460
|
113
|
-
description: ''
|
114
|
-
email:
|
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
|
+
description: ""
|
87
|
+
email:
|
115
88
|
- slyphon@hp.com
|
116
89
|
executables: []
|
90
|
+
|
117
91
|
extensions: []
|
92
|
+
|
118
93
|
extra_rdoc_files: []
|
119
|
-
|
94
|
+
|
95
|
+
files:
|
120
96
|
- .dev_extras/README
|
121
97
|
- .dev_extras/rspec
|
122
98
|
- .dev_extras/rvmrc
|
123
99
|
- .dev_extras/slyphon-project.vimrc
|
124
100
|
- .gitignore
|
101
|
+
- .yardopts
|
125
102
|
- Gemfile
|
126
103
|
- LICENSE
|
127
104
|
- README.markdown
|
@@ -129,9 +106,8 @@ files:
|
|
129
106
|
- lib/z_k/z_k_event_machine.rb
|
130
107
|
- lib/z_k/z_k_event_machine/callback.rb
|
131
108
|
- lib/z_k/z_k_event_machine/client.rb
|
132
|
-
- lib/z_k/z_k_event_machine/deferred.rb
|
133
109
|
- lib/z_k/z_k_event_machine/event_handler_e_m.rb
|
134
|
-
- lib/z_k/z_k_event_machine/
|
110
|
+
- lib/z_k/z_k_event_machine/iterator.rb
|
135
111
|
- lib/z_k/z_k_event_machine/unixisms.rb
|
136
112
|
- lib/z_k/z_k_event_machine/version.rb
|
137
113
|
- lib/zk-eventmachine.rb
|
@@ -139,44 +115,52 @@ files:
|
|
139
115
|
- spec/support/extensions.rb
|
140
116
|
- spec/support/logging.rb
|
141
117
|
- spec/support/logging_progress_bar_formatter.rb
|
118
|
+
- spec/support/wait_watchers.rb
|
142
119
|
- spec/z_k/z_k_event_machine/callback_spec.rb
|
143
120
|
- spec/z_k/z_k_event_machine/client_spec.rb
|
144
121
|
- spec/z_k/z_k_event_machine/event_handler_e_m_spec.rb
|
145
|
-
- spec/z_k/z_k_event_machine/synchrony_client_spec.rb
|
146
122
|
- spec/z_k/z_k_event_machine/unixisms_spec.rb
|
147
123
|
- zk-eventmachine.gemspec
|
148
124
|
homepage: https://github.com/slyphon/zk-eventmachine
|
149
125
|
licenses: []
|
126
|
+
|
150
127
|
post_install_message:
|
151
128
|
rdoc_options: []
|
152
|
-
|
129
|
+
|
130
|
+
require_paths:
|
153
131
|
- lib
|
154
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
155
133
|
none: false
|
156
|
-
requirements:
|
157
|
-
- -
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
|
160
|
-
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
hash: 3
|
138
|
+
segments:
|
139
|
+
- 0
|
140
|
+
version: "0"
|
141
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
142
|
none: false
|
162
|
-
requirements:
|
163
|
-
- -
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
hash: 3
|
147
|
+
segments:
|
148
|
+
- 0
|
149
|
+
version: "0"
|
166
150
|
requirements: []
|
151
|
+
|
167
152
|
rubyforge_project:
|
168
|
-
rubygems_version: 1.8.
|
153
|
+
rubygems_version: 1.8.15
|
169
154
|
signing_key:
|
170
155
|
specification_version: 3
|
171
156
|
summary: ZK client for EventMachine-based (async) applications
|
172
|
-
test_files:
|
157
|
+
test_files:
|
173
158
|
- spec/spec_helper.rb
|
174
159
|
- spec/support/extensions.rb
|
175
160
|
- spec/support/logging.rb
|
176
161
|
- spec/support/logging_progress_bar_formatter.rb
|
162
|
+
- spec/support/wait_watchers.rb
|
177
163
|
- spec/z_k/z_k_event_machine/callback_spec.rb
|
178
164
|
- spec/z_k/z_k_event_machine/client_spec.rb
|
179
165
|
- spec/z_k/z_k_event_machine/event_handler_e_m_spec.rb
|
180
|
-
- spec/z_k/z_k_event_machine/synchrony_client_spec.rb
|
181
166
|
- spec/z_k/z_k_event_machine/unixisms_spec.rb
|
182
|
-
has_rdoc:
|
@@ -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
|
-
|
@@ -1,135 +0,0 @@
|
|
1
|
-
module ZK
|
2
|
-
module ZKEventMachine
|
3
|
-
class SynchronyEventHandlerWrapper
|
4
|
-
include ZK::Logging
|
5
|
-
|
6
|
-
def initialize(event_handler)
|
7
|
-
@event_handler = event_handler
|
8
|
-
end
|
9
|
-
|
10
|
-
# registers a block to be called back within a fiber context
|
11
|
-
def register(path, &block)
|
12
|
-
new_block = proc do |*a|
|
13
|
-
Fiber.new { block.call(*a) }.resume
|
14
|
-
end
|
15
|
-
|
16
|
-
@event_handler.register(path, &new_block)
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
def method_missing(meth, *a, &b)
|
21
|
-
@event_handler.__send__(meth, *a, &b)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
# This class is an EM::Synchrony wrapper around a ZK::ZKEventMachine::Client
|
26
|
-
#
|
27
|
-
# It should behave exactly like a ZK::Client instance (when called in a
|
28
|
-
# synchronous fashion), and one should look there for documentation about
|
29
|
-
# the various methods
|
30
|
-
#
|
31
|
-
# @note this class is implemented as a wrapper instead of a subclass of Client
|
32
|
-
# so that it can support the unixisms like rm_rf and mkdir_p. The
|
33
|
-
# synchrony pattern of aliasing the base class methods and specializing for
|
34
|
-
# synchrony didn't work in this case.
|
35
|
-
#
|
36
|
-
class SynchronyClient
|
37
|
-
include ZK::Logging
|
38
|
-
|
39
|
-
attr_reader :event_handler, :client
|
40
|
-
|
41
|
-
# @overload new(client_instance)
|
42
|
-
# Wrap an existing ZK::ZKEventMachine::Client instance in an
|
43
|
-
# EM::Synchrony compatible way
|
44
|
-
# @param [ZK::ZKEventMachine::Client] client_instance an instance of Client to wrap
|
45
|
-
# @overload new(host, opts={})
|
46
|
-
# Creates a new ZK::ZKEventMachine::Client instance to manage
|
47
|
-
# takes the same arguments as ZK::Client::Base
|
48
|
-
def initialize(host, opts={})
|
49
|
-
case host
|
50
|
-
when Client
|
51
|
-
@client = host
|
52
|
-
when String
|
53
|
-
@client = Client.new(host, opts)
|
54
|
-
else
|
55
|
-
raise ArgumentError, "argument must be either a ZK::ZKEventMachine::Client instance or a hostname:port string"
|
56
|
-
end
|
57
|
-
|
58
|
-
@client.synchrony_client = self
|
59
|
-
|
60
|
-
@event_handler = SynchronyEventHandlerWrapper.new(@client.event_handler)
|
61
|
-
end
|
62
|
-
|
63
|
-
%w[connect get set create stat delete children get_acl set_acl mkdir_p rm_rf].each do |meth|
|
64
|
-
class_eval(<<-EOMETH, __FILE__, __LINE__ + 1)
|
65
|
-
def #{meth}(*args,&blk)
|
66
|
-
sync!(@client.#{meth}(*args, &blk))
|
67
|
-
end
|
68
|
-
EOMETH
|
69
|
-
end
|
70
|
-
|
71
|
-
# it is *crucially* important that close and close! be wrapped in a fiber.
|
72
|
-
# it's possible under very odd corner cases with the 1.9.3 GC to cause a
|
73
|
-
# '[BUG] cfp consistency error - send'
|
74
|
-
#
|
75
|
-
%w[close close!].each do |meth|
|
76
|
-
class_eval(<<-EOMETH, __FILE__, __LINE__ + 1)
|
77
|
-
def #{meth}(*args,&blk)
|
78
|
-
Fiber.new { sync!(@client.#{meth}(*args, &blk)) }.resume
|
79
|
-
end
|
80
|
-
EOMETH
|
81
|
-
end
|
82
|
-
|
83
|
-
# @deprecated for backwards compatibility only
|
84
|
-
def watcher
|
85
|
-
event_handler
|
86
|
-
end
|
87
|
-
|
88
|
-
def exists?(path, opts={})
|
89
|
-
stat(path, opts={}).exists?
|
90
|
-
end
|
91
|
-
|
92
|
-
# returns self
|
93
|
-
def to_synchrony
|
94
|
-
self
|
95
|
-
end
|
96
|
-
|
97
|
-
# returns the wrapped async client
|
98
|
-
def to_async
|
99
|
-
@client
|
100
|
-
end
|
101
|
-
|
102
|
-
protected
|
103
|
-
# a modification of EM::Synchrony.sync to handle multiple callback arguments properly
|
104
|
-
def sync(df)
|
105
|
-
f = Fiber.current
|
106
|
-
|
107
|
-
xback = proc do |*args|
|
108
|
-
if f == Fiber.current
|
109
|
-
return *args
|
110
|
-
else
|
111
|
-
f.resume(*args)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
df.callback(&xback)
|
116
|
-
df.errback(&xback)
|
117
|
-
|
118
|
-
Fiber.yield
|
119
|
-
end
|
120
|
-
|
121
|
-
# like sync, but if the deferred returns an exception instance, re-raises
|
122
|
-
def sync!(deferred)
|
123
|
-
rval = sync(deferred)
|
124
|
-
raise rval if rval.kind_of?(Exception)
|
125
|
-
rval
|
126
|
-
end
|
127
|
-
|
128
|
-
private
|
129
|
-
def method_missing(meth, *a, &b)
|
130
|
-
@client.__send__(meth, *a, &b)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|