em-jack 0.0.3 → 0.0.4

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/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