em-jack 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -26,25 +26,24 @@ are no available jobs.
26
26
  r = jack.reserve
27
27
  r.callback do |job|
28
28
  puts job.jobid
29
- process(job)
30
-
31
- r2 = jack.delete(job)
32
- r2.callback { puts "Successfully deleted" }
29
+
30
+ r2 = jack.delete(job) { puts "Successfully deleted" }
33
31
  end
34
32
 
35
- r = jack.put("my message", :ttr => 300)
36
- r.callback { |jobid| puts "put successful #{jobid}" }
33
+ r = jack.put("my message", :ttr => 300) { |jobid| puts "put successful #{jobid}" }
37
34
 
38
35
  r = jack.stats
39
- r.callback { |stats| puts "Server up for #{stats['uptime']} seconds" "}
36
+ r.callback { |stats| puts "Server up for #{stats['uptime']} seconds" }
40
37
 
41
38
  r = jack.stats(:tube, "mytube")
42
39
  r.callback { |stats| puts "Total jobs #{stats['total-jobs']}" }
43
40
 
44
- r = jack.list(:tubes)
41
+ r = jack.list(:used)
45
42
  r.callback { |tubes| puts "There are #{tubes.length} tubes defined" }
46
43
  }
47
44
 
45
+ Each of the Jack commands allows an optional block to be provided. If the block is given
46
+ it will be setup as the callback on the deferrable.
48
47
 
49
48
  EMJack#each_job is useful for scenarios where the client is a job worker
50
49
  and intended to process jobs continuously as they become available. Once
@@ -77,4 +76,6 @@ contact me by email at dj2 at everburning dot com.
77
76
 
78
77
 
79
78
  = Contributors
80
- Peter Kieltyka (EMJack#each_job)
79
+ Charles Melbye (cmelbye)
80
+ Peter Kieltyka (pkieltyka)
81
+ Martyn Loughran (mloughran)
data/lib/em-jack.rb CHANGED
@@ -7,6 +7,6 @@ require 'em-jack/connection'
7
7
 
8
8
  module EMJack
9
9
  module VERSION
10
- STRING = '0.0.3'
10
+ STRING = '0.0.4'
11
11
  end
12
12
  end
@@ -30,86 +30,87 @@ module EMJack
30
30
  end
31
31
  end
32
32
 
33
- def use(tube)
33
+ def use(tube, &blk)
34
34
  return if @used_tube == tube
35
35
  @used_tube = tube
36
36
  @conn.send(:use, tube)
37
- add_deferrable
37
+ add_deferrable(&blk)
38
38
  end
39
39
 
40
- def watch(tube)
40
+ def watch(tube, &blk)
41
41
  return if @watched_tubes.include?(tube)
42
- @watched_tubes.push(tube)
43
42
  @conn.send(:watch, tube)
44
- add_deferrable
43
+ df = add_deferrable(&blk)
44
+ df.callback { @watched_tubes.push(tube) }
45
+ df
45
46
  end
46
47
 
47
- def ignore(tube)
48
- return if not @watched_tubes.include?(tube)
49
- @watched_tubes.delete(tube)
48
+ def ignore(tube, &blk)
49
+ return unless @watched_tubes.include?(tube)
50
50
  @conn.send(:ignore, tube)
51
- add_deferrable
51
+ df = add_deferrable(&blk)
52
+ df.callback { @watched_tubes.delete(tube) }
53
+ df
52
54
  end
53
55
 
54
- def reserve(timeout = nil)
56
+ def reserve(timeout = nil, &blk)
55
57
  if timeout
56
58
  @conn.send(:'reserve-with-timeout', timeout)
57
59
  else
58
60
  @conn.send(:reserve)
59
61
  end
60
- add_deferrable
62
+ add_deferrable(&blk)
61
63
  end
62
64
 
63
- def each_job(&block)
65
+ def each_job(&blk)
64
66
  work = Proc.new do
65
67
  r = reserve
66
68
  r.callback do |job|
67
- block.call(job)
69
+ blk.call(job)
70
+
68
71
  EM.next_tick { work.call }
69
72
  end
70
73
  end
71
74
  work.call
72
75
  end
73
76
 
74
- def stats(type = nil, val = nil)
77
+ def stats(type = nil, val = nil, &blk)
75
78
  case(type)
76
79
  when nil then @conn.send(:stats)
77
80
  when :tube then @conn.send(:'stats-tube', val)
78
81
  when :job then @conn.send(:'stats-job', val.jobid)
79
82
  else raise EMJack::InvalidCommand.new
80
83
  end
81
- add_deferrable
84
+ add_deferrable(&blk)
82
85
  end
83
86
 
84
- def list(type = nil)
87
+ def list(type = nil, &blk)
85
88
  case(type)
86
89
  when nil then @conn.send(:'list-tubes')
87
90
  when :used then @conn.send(:'list-tube-used')
88
91
  when :watched then @conn.send(:'list-tubes-watched')
89
92
  else raise EMJack::InvalidCommand.new
90
93
  end
91
- add_deferrable
94
+ add_deferrable(&blk)
92
95
  end
93
96
 
94
- def delete(job)
97
+ def delete(job, &blk)
95
98
  return if job.nil?
96
99
  @conn.send(:delete, job.jobid)
97
- add_deferrable
100
+ add_deferrable(&blk)
98
101
  end
99
102
 
100
- def release(job)
103
+ def release(job, &blk)
101
104
  return if job.nil?
102
105
  @conn.send(:release, job.jobid, 0, 0)
103
- add_deferrable
106
+ add_deferrable(&blk)
104
107
  end
105
-
106
- def put(msg, opts = {})
108
+
109
+ def put(msg, opts = nil, &blk)
110
+ opts = {} if opts.nil?
107
111
  pri = (opts[:priority] || 65536).to_i
108
- if pri< 0
109
- pri = 65536
110
- elsif pri > (2 ** 32)
111
- pri = 2 ** 32
112
- end
112
+ pri = 65536 if pri< 0
113
+ pri = 2 ** 32 if pri > (2 ** 32)
113
114
 
114
115
  delay = (opts[:delay] || 0).to_i
115
116
  delay = 0 if delay < 0
@@ -120,7 +121,7 @@ module EMJack
120
121
  m = msg.to_s
121
122
 
122
123
  @conn.send_with_data(:put, m, pri, delay, ttr, m.length)
123
- add_deferrable
124
+ add_deferrable(&blk)
124
125
  end
125
126
 
126
127
  def connected
@@ -136,14 +137,26 @@ module EMJack
136
137
  EM.add_timer(1) { @conn.reconnect(@host, @port) }
137
138
  end
138
139
 
139
- def add_deferrable
140
+ def add_deferrable(&blk)
140
141
  df = EM::DefaultDeferrable.new
141
- df.errback { |err| puts "ERROR: #{err}" }
142
+ df.errback do |err|
143
+ if @error_callback
144
+ @error_callback.call(err)
145
+ else
146
+ puts "ERROR: #{err}"
147
+ end
148
+ end
142
149
 
150
+ df.callback &blk if block_given?
151
+
143
152
  @deferrables.push(df)
144
153
  df
145
154
  end
146
155
 
156
+ def on_error(&blk)
157
+ @error_callback = blk
158
+ end
159
+
147
160
  def received(data)
148
161
  @data << data
149
162
 
@@ -176,6 +189,10 @@ module EMJack
176
189
  df = @deferrables.shift
177
190
  df.succeed($1.to_i)
178
191
 
192
+ when /^RELEASED\r\n/ then
193
+ df = @deferrables.shift
194
+ df.succeed
195
+
179
196
  when /^BURIED\s+(\d+)\r\n/ then
180
197
  df = @deferrables.shift
181
198
  df.fail(:buried, $1.to_i)
@@ -188,6 +205,10 @@ module EMJack
188
205
  df = @deferrables.shift
189
206
  df.succeed($1.to_i)
190
207
 
208
+ when /^NOT_IGNORED\r\n/ then
209
+ df = @deferrables.shift
210
+ df.fail("Can't ignore only watched tube")
211
+
191
212
  when /^OK\s+(\d+)\r\n/ then
192
213
  bytes = $1.to_i
193
214
 
@@ -222,9 +243,11 @@ module EMJack
222
243
  def extract_body(bytes, data)
223
244
  rem = data[(data.index(/\r\n/) + 2)..-1]
224
245
  return [nil, data] if rem.length < bytes
246
+
225
247
  body = rem[0..(bytes - 1)]
226
248
  data = rem[(bytes + 2)..-1]
227
249
  data = "" if data.nil?
250
+
228
251
  [body, data]
229
252
  end
230
253
  end
data/lib/em-jack/job.rb CHANGED
@@ -8,12 +8,12 @@ module EMJack
8
8
  @body = body
9
9
  end
10
10
 
11
- def delete
12
- @conn.delete(self)
11
+ def delete(&blk)
12
+ @conn.delete(self, &blk)
13
13
  end
14
14
 
15
- def stats
16
- @conn.stats(:job, self)
15
+ def stats(&blk)
16
+ @conn.stats(:job, self, &blk)
17
17
  end
18
18
 
19
19
  def to_s
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-jack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - dan sinclair
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-11 00:00:00 -06:00
12
+ date: 2009-11-17 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency