disc 0.0.26 → 0.0.27

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68a355c65ac7b54ac4da0771e2b17af8b6b54899
4
- data.tar.gz: 994f4f7fae76906db3590c54f8be1e5705e7f721
3
+ metadata.gz: 176f77e62f7e6d5d3fb12160f104e6f9920829f4
4
+ data.tar.gz: 3f081fa1f1835c21d92c6b52d20650d09b697e5a
5
5
  SHA512:
6
- metadata.gz: 2c5a300f2a8d2c6d46901f4e3cf6a6ac2778abab5638dfa07caeeab807d3a701590c3d528e2557043ce15ac4e5d803088a36d81664ebed699fca433a2ae5c400
7
- data.tar.gz: 8ca93a43cafb8cb9420b260ae83124d27a09a9b45e371fa1af94e66ba2c8e49f53c5ca64c4c6d28acf6a50ae27b71d0c4dfe14be47e10faec05c705021e2b86f
6
+ metadata.gz: 285379b94730d7a5e1eec6a5d551dfd42403452f91289a1fbce88c49d7f26457b59d9e32be25eb16c8a137888756f6ed851666ff64fc07532e0494e8deee8ef2
7
+ data.tar.gz: ad8a5da1ea7ce655c093796186abd7eb292fd22b2f68e0e7f13c9473643e93c28345893283966196578058fa121bbce70a8971df7f57d2e20b0cb298eeff41f8
data/.gems CHANGED
@@ -1,5 +1,4 @@
1
1
  cutest:1.2.2
2
2
  byebug:5.0.0
3
3
  disque:0.0.6
4
- msgpack:0.6.2
5
4
  celluloid:0.17.0
data/README.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Disc fills the gap between your Ruby service objects and [antirez](http://antirez.com/)'s wonderful [Disque](https://github.com/antirez/disque) backend.
4
4
 
5
- <a href=https://www.flickr.com/photos/noodlefish/5321412234" target="blank_">
5
+ <a href="https://www.flickr.com/photos/noodlefish/5321412234" target="blank_">
6
6
  ![Disc Wars!](https://cloud.githubusercontent.com/assets/437/8634016/b63ee0f8-27e6-11e5-9a78-51921bd32c88.jpg)
7
7
  </a>
8
8
 
9
- ## Usage
9
+ ## Basic Usage
10
10
 
11
11
  1. Install the gem
12
12
 
@@ -35,36 +35,99 @@ Disc fills the gap between your Ruby service objects and [antirez](http://antire
35
35
  CreateGameGrid.enqueue('light_cycle')
36
36
  ```
37
37
 
38
+
39
+ 4. Create a file that requires anything needed for your jobs to run
40
+
41
+ ```ruby
42
+ # disc_init.rb
43
+ require 'disc/worker'
44
+ Dir['./jobs/**/*.rb'].each { |job| require job }
45
+ ```
46
+
47
+ 5. Run as many Disc Worker processes as you wish, requiring your `disc_init.rb` file
48
+
49
+ ```bash
50
+ $ QUEUES=urgent,default disc -r ./disc_init.rb
51
+ ```
52
+
38
53
  4. Or enqueue them to be performed at some time in the future, or on a queue other than it's default.
39
54
 
40
55
  ```ruby
41
56
  CreateGameGrid.enqueue(
42
57
  'disc_arena',
43
- at: DateTime.new(2015, 12, 31),
58
+ at: DateTime.new(2020, 12, 31),
44
59
  queue: 'not_so_important'
45
60
  )
46
61
  ```
47
62
 
48
- 5. Create a file that requires anything needed for your jobs to run
63
+ ## Disc Jobs
49
64
 
50
- ```ruby
51
- # disc_init.rb
52
- require 'ohm'
53
- Dir['./jobs/**/*.rb'].each { |job| require job }
54
- ```
65
+ `Disc::Job` is a module you can include in your Ruby classes, this allows a Disc worker process to execute the code in them by adding a class method (`#enqueue`) with the following signature:
55
66
 
56
- 6. Run as many Disc Worker processes as you wish, requiring your `disc_init.rb` file
67
+ ```Ruby
68
+ def enqueue(arguments, at: nil, queue: nil, **options)
69
+ end
70
+ ```
57
71
 
58
- ```bash
59
- $ QUEUES=urgent,default disc -r ./disc_init.rb
60
- ```
72
+ Signature documentation follows:
61
73
 
62
- ## Notes about Jobs
74
+ ```ruby
75
+ ## Disc's `#enqueue` is the main user-facing method of a Disc job, it
76
+ # enqueues a job with a given set of arguments in Disque, so it can be
77
+ # picked up by a Disc worker process.
78
+ #
79
+ ## Parameters:
80
+ #
81
+ ## `arguments` - an optional array of arguments with which to execute
82
+ # the job's #perform method.
83
+ #
84
+ # `at` - an optional named parameter specifying a moment in the
85
+ # future in which to run the job, must respond to
86
+ # `#to_time`.
87
+ #
88
+ ## `queue` - an optional named parameter specifying the name of the
89
+ # queue in which to store the job, defaults to the class
90
+ # Disc queue or to 'default' if no Disc queue is specified
91
+ # in the class.
92
+ #
93
+ ## `**options` - an optional hash of options to forward internally to
94
+ # [disque-rb](https://github.com/soveran/disque-rb)'s
95
+ # `#push` method, valid options are:
96
+ #
97
+ ## `replicate: <count>` - specifies the number of nodes the job should
98
+ # be replicated to.
99
+ #
100
+ ### `delay: <sec>` - specifies a delay time in seconds for the job
101
+ # to be delivered to a Disc worker, it is ignored
102
+ # if using the `at` parameter.
103
+ #
104
+ ### `ttl: <sec>` - specifies the job's time to live in seconds:
105
+ # after this time, the job is deleted even if
106
+ # it was not successfully delivered. If not
107
+ # specified, the default TTL is one day.
108
+ #
109
+ ### `maxlen: <count>` - specifies that if there are already <count>
110
+ # messages queued for the specified queue name,
111
+ # the message is refused.
112
+ #
113
+ ### `async: true` - asks the server to let the command return ASAP
114
+ # and replicate the job to other nodes in the background.
115
+ #
116
+ #
117
+ ### CAVEATS
118
+ #
119
+ ## For convenience, any object can be passed as the `arguments` parameter,
120
+ # `Array.wrap` will be used internally to preserve the array structure.
121
+ #
122
+ ## The `arguments` parameter is serialized for storage using `Disc.serialize`
123
+ # and Disc workers picking it up use `Disc.deserialize` on it, both methods
124
+ # use standard library json but can be overriden by the user
125
+ #
126
+ ```
63
127
 
64
- Jobs are fairly straightforward Ruby classes, internally Disc serializes them to MessagePack so they can be stored in Disque, this has a few implications:
128
+ You can see [Disque's ADDJOB documentation](https://github.com/antirez/disque#addjob-queue_name-job-ms-timeout-replicate-count-delay-sec-retry-sec-ttl-sec-maxlen-count-async) for more details
65
129
 
66
- * Don't enqueue complex objects! Instead of `user`, enqueue `user.id`!
67
- * If your job takes multiple arguments, you'll want to pass all those arguments in the first parameter of `#enqueue` as an array.
130
+ When a Disc worker process is assigned a job, it will create a new intance of the job's class and execute the `#perform` method with whatever arguments were previously passed to `#enqueue`.
68
131
 
69
132
  Example:
70
133
 
@@ -14,6 +14,5 @@ Gem::Specification.new do |s|
14
14
  s.executables.push('disc')
15
15
 
16
16
  s.add_dependency('disque', '~> 0.0.6')
17
- s.add_dependency('msgpack', '>= 0.5.6', '< 0.6.3')
18
17
  s.add_dependency('clap', '~> 1.0')
19
18
  end
@@ -1,5 +1,6 @@
1
1
  require 'date'
2
2
  require 'msgpack'
3
+ require 'disc/worker'
3
4
 
4
5
  module ActiveJob
5
6
  module QueueAdapters
@@ -11,10 +12,10 @@ module ActiveJob
11
12
  def self.enqueue_at(job, timestamp)
12
13
  Disc.disque.push(
13
14
  job.queue_name,
14
- {
15
+ Disc.serialize({
15
16
  class: job.class.name,
16
17
  arguments: job.arguments
17
- }.to_msgpack,
18
+ }),
18
19
  Disc.disque_timeout,
19
20
  delay: timestamp.nil? ? nil : (timestamp.to_time.to_i - DateTime.now.to_time.to_i)
20
21
  )
@@ -1,13 +1,8 @@
1
1
  require 'date'
2
2
  require 'disque'
3
- require 'msgpack'
4
-
5
- require_relative 'disc/version'
3
+ require 'json'
6
4
 
7
5
  class Disc
8
- attr_reader :disque,
9
- :disque_timeout
10
-
11
6
  def self.disque
12
7
  @disque ||= Disque.new(
13
8
  ENV.fetch('DISQUE_NODES', 'localhost:7711'),
@@ -21,7 +16,7 @@ class Disc
21
16
  end
22
17
 
23
18
  def self.disque_timeout
24
- @disque_timeout ||= 100
19
+ @disque_timeout ||= ENV.fetch('DISQUE_TIMEOUT', 100)
25
20
  end
26
21
 
27
22
  def self.disque_timeout=(timeout)
@@ -36,6 +31,10 @@ class Disc
36
31
  @default_queue = queue
37
32
  end
38
33
 
34
+ def self.qlen(queue)
35
+ disque.call('QLEN', queue)
36
+ end
37
+
39
38
  def self.flush
40
39
  Disc.disque.call('DEBUG', 'FLUSHALL')
41
40
  end
@@ -44,119 +43,15 @@ class Disc
44
43
  $stderr.puts exception
45
44
  end
46
45
 
47
- class Worker
48
- attr_reader :disque,
49
- :queues,
50
- :timeout,
51
- :count
52
-
53
- def self.current
54
- @current ||= new
55
- end
56
-
57
- def self.run
58
- current.run
59
- end
60
-
61
- def self.stop
62
- current.stop
63
- end
64
-
65
- def initialize(options = {})
66
- @disque = options.fetch(:disque, Disc.disque)
67
- @queues = options.fetch(
68
- :queues,
69
- ENV.fetch('QUEUES', Disc.default_queue)
70
- ).split(',')
71
- @count = Integer(
72
- options.fetch(
73
- :count,
74
- ENV.fetch('DISQUE_COUNT', '1')
75
- )
76
- )
77
- @timeout = Integer(
78
- options.fetch(
79
- :timeout,
80
- ENV.fetch('DISQUE_TIMEOUT', '2000')
81
- )
82
- )
83
-
84
- self.run if options[:run]
85
- self
86
- end
87
-
88
- def stop
89
- @stop = true
90
- end
91
-
92
- def run
93
- $stdout.puts("Disc::Worker listening in #{queues}")
94
- loop do
95
- jobs = disque.fetch(from: queues, timeout: timeout, count: count)
96
- Array(jobs).each do |queue, msgid, serialized_job|
97
- begin
98
- job = MessagePack.unpack(serialized_job)
99
- instance = Object.const_get(job['class']).new
100
- instance.perform(*job['arguments'])
101
- disque.call('ACKJOB', msgid)
102
- rescue => err
103
- Disc.on_error(err, job.update('id' => msgid, 'queue' => queue))
104
- end
105
- end
106
-
107
- break if @stop
108
- end
109
- ensure
110
- disque.quit
111
- end
46
+ def self.serialize(args)
47
+ JSON.dump(args)
112
48
  end
113
49
 
114
- module Job
115
- attr_reader :arguments,
116
- :disque,
117
- :disc_options
118
-
119
- def self.included(base)
120
- base.extend(ClassMethods)
121
- end
122
-
123
- module ClassMethods
124
- def disque
125
- defined?(@disque) ? @disque : Disc.disque
126
- end
127
-
128
- def disque=(disque)
129
- @disque = disque
130
- end
131
-
132
- def disc(queue: nil, **options)
133
- @queue = queue
134
- @disc_options = options
135
- end
136
-
137
- def disc_options
138
- @disc_options ||= {}
139
- end
140
-
141
- def queue
142
- @queue || Disc.default_queue
143
- end
144
-
145
- def enqueue(args = [], at: nil, queue: nil, **options)
146
- options = disc_options.merge(options).tap do |opt|
147
- opt[:delay] = at.to_time.to_i - DateTime.now.to_time.to_i unless at.nil?
148
- end
149
-
150
- disque.push(
151
- queue || self.queue,
152
- {
153
- class: self.name,
154
- arguments: Array(args)
155
- }.to_msgpack,
156
- Disc.disque_timeout,
157
- options
158
- )
159
- end
160
- end
50
+ def self.deserialize(data)
51
+ JSON.parse(data)
161
52
  end
162
53
  end
54
+
55
+ require_relative 'disc/job'
56
+ require_relative 'disc/version'
57
+
@@ -0,0 +1,127 @@
1
+ module Disc::Job
2
+ attr_accessor :disque_id,
3
+ :arguments
4
+
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+ def info
10
+ return nil if disque_id.nil?
11
+
12
+ Hash[*self.class.disque.call("SHOW", disque_id)]
13
+ end
14
+
15
+ def state
16
+ info.fetch('state')
17
+ end
18
+
19
+ module ClassMethods
20
+ def [](disque_id)
21
+ job_data = disque.call("SHOW", disque_id)
22
+ return nil if job_data.nil?
23
+
24
+ job = self.new
25
+ job_data = Hash[*job_data]
26
+
27
+ job.disque_id = disque_id
28
+ job.arguments = Disc.deserialize(job_data.fetch('body')).fetch('arguments')
29
+
30
+ return job
31
+ end
32
+
33
+ def disque
34
+ defined?(@disque) ? @disque : Disc.disque
35
+ end
36
+
37
+ def disque=(disque)
38
+ @disque = disque
39
+ end
40
+
41
+ def disc(queue: nil, **options)
42
+ @queue = queue
43
+ @disc_options = options
44
+ end
45
+
46
+ def disc_options
47
+ @disc_options ||= {}
48
+ end
49
+
50
+ def queue
51
+ @queue || Disc.default_queue
52
+ end
53
+
54
+ def perform(arguments)
55
+ self.new.perform(*arguments)
56
+ end
57
+
58
+ ## Disc's `#enqueue` is the main user-facing method of a Disc job, it
59
+ # enqueues a job with a given set of arguments in Disque, so it can be
60
+ # picked up by a Disc worker process.
61
+ #
62
+ ## Parameters:
63
+ #
64
+ ## `arguments` - an optional array of arguments with which to execute
65
+ # the job's #perform method.
66
+ #
67
+ ## `at` - an optional named parameter specifying a moment in the
68
+ # future in which to run the job, must respond to
69
+ # `#to_time`.
70
+ #
71
+ ## `queue` - an optional named parameter specifying the name of the
72
+ # queue in which to store the job, defaults to the class
73
+ # Disc queue or to 'default' if no Disc queue is specified
74
+ # in the class.
75
+ #
76
+ ## `**options` - an optional hash of options to forward internally to
77
+ # [disque-rb](https://github.com/soveran/disque-rb)'s
78
+ # `#push` method, valid options are:
79
+ #
80
+ ## `replicate: <count>` - specifies the number of nodes the job should
81
+ # be replicated to.
82
+ #
83
+ ### `delay: <sec>` - specifies a delay time in seconds for the job
84
+ # to be delivered to a Disc worker, it is ignored
85
+ # if using the `at` parameter.
86
+ #
87
+ ### `ttl: <sec>` - specifies the job's time to live in seconds:
88
+ # after this time, the job is deleted even if
89
+ # it was not successfully delivered. If not
90
+ # specified, the default TTL is one day.
91
+ #
92
+ ### `maxlen: <count>` - specifies that if there are already <count>
93
+ # messages queued for the specified queue name,
94
+ # the message is refused.
95
+ #
96
+ ### `async: true` - asks the server to let the command return ASAP
97
+ # and replicate the job to other nodes in the background.
98
+ #
99
+ #
100
+ ### CAVEATS
101
+ #
102
+ ## For convenience, any object can be passed as the `arguments` parameter,
103
+ # `Array.wrap` will be used internally to preserve the array structure.
104
+ #
105
+ ## The `arguments` parameter is serialized for storage using `Disc.serialize`
106
+ # and Disc workers picking it up use `Disc.deserialize` on it, both methods
107
+ # use standard library json but can be overriden by the user
108
+ #
109
+ def enqueue(args = [], at: nil, queue: nil, **options)
110
+ options = disc_options.merge(options).tap do |opt|
111
+ opt[:delay] = at.to_time.to_i - DateTime.now.to_time.to_i unless at.nil?
112
+ end
113
+
114
+ disque_id = disque.push(
115
+ queue || self.queue,
116
+ Disc.serialize({
117
+ class: self.name,
118
+ arguments: Array(args)
119
+ }),
120
+ Disc.disque_timeout,
121
+ options
122
+ )
123
+
124
+ return self[disque_id]
125
+ end
126
+ end
127
+ end
@@ -1,3 +1,3 @@
1
1
  class Disc
2
- VERSION = "0.0.26"
2
+ VERSION = "0.0.27"
3
3
  end
@@ -0,0 +1,70 @@
1
+ require 'disc'
2
+
3
+
4
+ class Disc::Worker
5
+ attr_reader :disque,
6
+ :queues,
7
+ :timeout,
8
+ :count
9
+
10
+ def self.current
11
+ @current ||= new
12
+ end
13
+
14
+ def self.run
15
+ current.run
16
+ end
17
+
18
+ def self.stop
19
+ current.stop
20
+ end
21
+
22
+ def initialize(options = {})
23
+ @disque = options.fetch(:disque, Disc.disque)
24
+ @queues = options.fetch(
25
+ :queues,
26
+ ENV.fetch('QUEUES', Disc.default_queue)
27
+ ).split(',')
28
+ @count = Integer(
29
+ options.fetch(
30
+ :count,
31
+ ENV.fetch('DISQUE_COUNT', '1')
32
+ )
33
+ )
34
+ @timeout = Integer(
35
+ options.fetch(
36
+ :timeout,
37
+ ENV.fetch('DISQUE_TIMEOUT', '2000')
38
+ )
39
+ )
40
+
41
+ self.run if options[:run]
42
+ self
43
+ end
44
+
45
+ def stop
46
+ @stop = true
47
+ end
48
+
49
+ def run
50
+ $stdout.puts("Disc::Worker listening in #{queues}")
51
+ loop do
52
+ jobs = disque.fetch(from: queues, timeout: timeout, count: count)
53
+ Array(jobs).each do |queue, msgid, serialized_job|
54
+ begin
55
+ job = Disc.deserialize(serialized_job)
56
+ instance = Object.const_get(job['class']).new
57
+ instance.perform(*job['arguments'])
58
+ disque.call('ACKJOB', msgid)
59
+ $stdout.puts("Completed #{job['class']} id #{msgid}")
60
+ rescue => err
61
+ Disc.on_error(err, job.update('id' => msgid, 'queue' => queue))
62
+ end
63
+ end
64
+
65
+ break if @stop
66
+ end
67
+ ensure
68
+ disque.quit
69
+ end
70
+ end
@@ -1,6 +1,5 @@
1
1
  require 'cutest'
2
2
  require 'disc'
3
- require 'msgpack'
4
3
  require 'pty'
5
4
  require 'timeout'
6
5
 
@@ -55,20 +54,20 @@ scope do
55
54
  end
56
55
 
57
56
  test 'jobs are enqueued to the correct Disque queue with appropriate parameters and class' do
58
- jobid = Echoer.enqueue(['one argument', { random: 'data' }, 3])
57
+ job_instance = Echoer.enqueue(['one argument', { random: 'data' }, 3])
59
58
 
60
59
  jobs = Array(Disc.disque.fetch(from: ['test'], timeout: Disc.disque_timeout, count: 1))
61
60
  assert jobs.any?
62
61
  assert_equal 1, jobs.count
63
62
 
64
63
  jobs.first.tap do |queue, id, serialized_job|
65
- job = MessagePack.unpack(serialized_job)
64
+ job = Disc.deserialize(serialized_job)
66
65
 
67
66
  assert job.has_key?('class')
68
67
  assert job.has_key?('arguments')
69
68
 
70
69
  assert_equal 'Echoer', job['class']
71
- assert_equal jobid, id
70
+ assert_equal job_instance.disque_id, id
72
71
 
73
72
  args = job['arguments']
74
73
  assert_equal 3, args.size
@@ -78,8 +77,29 @@ scope do
78
77
  end
79
78
  end
80
79
 
80
+ test 'we get easy access to the job via the job id' do
81
+ job_instance = Echoer.enqueue(['one argument', { random: 'data' }, 3])
82
+
83
+ assert job_instance.is_a?(Echoer)
84
+ assert !job_instance.disque_id.nil?
85
+ assert !job_instance.info.nil?
86
+
87
+ job = Echoer[job_instance.disque_id]
88
+
89
+ assert job.is_a?(Echoer)
90
+ assert_equal 'queued', job.state
91
+ assert_equal 3, job.arguments.count
92
+ assert_equal 'one argument', job.arguments.first
93
+ end
94
+
95
+ test 'we can query the lenght of a given queue' do
96
+ job_instance = Echoer.enqueue(['one argument', { random: 'data' }, 3])
97
+
98
+ assert_equal 1, Disc.qlen(Echoer.queue)
99
+ end
100
+
81
101
  test 'enqueue at timestamp behaves properly' do
82
- jobid = Echoer.enqueue(['one argument', { random: 'data' }, 3], at: Time.now + 1)
102
+ job_instance = Echoer.enqueue(['one argument', { random: 'data' }, 3], at: Time.now + 1)
83
103
 
84
104
  jobs = Array(Disc.disque.fetch(from: ['test'], timeout: Disc.disque_timeout, count: 1))
85
105
  assert jobs.empty?
@@ -95,8 +115,8 @@ scope do
95
115
 
96
116
  jobs.first.tap do |queue, id, serialized_job|
97
117
  assert_equal 'test', queue
98
- assert_equal jobid, id
99
- job = MessagePack.unpack(serialized_job)
118
+ assert_equal job_instance.disque_id, id
119
+ job = Disc.deserialize(serialized_job)
100
120
  assert job.has_key?('class')
101
121
  assert job.has_key?('arguments')
102
122
  assert_equal 'Echoer', job['class']
@@ -107,7 +127,7 @@ scope do
107
127
  test 'jobs are executed' do
108
128
  Echoer.enqueue(['one argument', { random: 'data' }, 3])
109
129
 
110
- run('QUEUES=test ruby -Ilib bin/disc -r ./examples/echoer') do |cout, pid|
130
+ run('QUEUES=test ruby -Ilib bin/disc -r disc/worker -r ./examples/echoer') do |cout, pid|
111
131
  output = Timeout.timeout(1) { cout.take(3) }
112
132
  jobs = Disc.disque.fetch(from: ['test'], timeout: Disc.disque_timeout, count: 1)
113
133
  assert jobs.nil?
@@ -116,9 +136,9 @@ scope do
116
136
  end
117
137
 
118
138
  test 'Disc.on_error will catch unhandled exceptions and keep disc alive' do
119
- Failer.enqueue('this can only end positively')
139
+ failer = Failer.enqueue('this can only end positively')
120
140
 
121
- run('QUEUES=test ruby -Ilib bin/disc -r ./examples/failer') do |cout, pid|
141
+ run('QUEUES=test ruby -Ilib bin/disc -r disc/worker -r ./examples/failer') do |cout, pid|
122
142
  output = Timeout.timeout(1) { cout.take(5) }
123
143
  jobs = Disc.disque.fetch(from: ['test'], timeout: Disc.disque_timeout, count: 1)
124
144
  assert jobs.nil?
@@ -139,7 +159,7 @@ scope do
139
159
  end
140
160
 
141
161
  test 'enqueue supports delay' do
142
- jobid = Echoer.enqueue(['one argument', { random: 'data' }, 3], delay: 2)
162
+ job_instance = Echoer.enqueue(['one argument', { random: 'data' }, 3], delay: 2)
143
163
 
144
164
  jobs = Array(Disc.disque.fetch(from: ['test'], timeout: Disc.disque_timeout, count: 1))
145
165
  assert jobs.empty?
@@ -155,7 +175,7 @@ scope do
155
175
  end
156
176
 
157
177
  test 'enqueue supports retry' do
158
- jobid = Echoer.enqueue(['one argument', { random: 'data' }, 3], retry: 1)
178
+ job_instance = Echoer.enqueue(['one argument', { random: 'data' }, 3], retry: 1)
159
179
 
160
180
  jobs = Array(Disc.disque.fetch(from: ['test'], timeout: Disc.disque_timeout, count: 1))
161
181
  assert jobs.any?
@@ -168,7 +188,7 @@ scope do
168
188
  end
169
189
 
170
190
  test 'enqueue supports ttl' do
171
- jobid = Echoer.enqueue(['one argument', { random: 'data' }, 3], ttl: 1)
191
+ job_instance = Echoer.enqueue(['one argument', { random: 'data' }, 3], ttl: 1)
172
192
 
173
193
  sleep 1.5
174
194
  jobs = Array(Disc.disque.fetch(from: ['test'], timeout: Disc.disque_timeout, count: 1))
@@ -184,7 +204,7 @@ scope do
184
204
  end
185
205
 
186
206
  test 'enqueue supports async' do
187
- jobid = Echoer.enqueue(['one argument', { random: 'data' }, 3], async: true)
207
+ job_instance = Echoer.enqueue(['one argument', { random: 'data' }, 3], async: true)
188
208
 
189
209
  sleep 1 # async is too fast to reliably assert an empty queue, let's wait instead
190
210
  jobs = Array(Disc.disque.fetch(from: ['test'], timeout: Disc.disque_timeout, count: 1))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.26
4
+ version: 0.0.27
5
5
  platform: ruby
6
6
  authors:
7
7
  - pote
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-21 00:00:00.000000000 Z
11
+ date: 2016-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: disque
@@ -24,26 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.0.6
27
- - !ruby/object:Gem::Dependency
28
- name: msgpack
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 0.5.6
34
- - - "<"
35
- - !ruby/object:Gem::Version
36
- version: 0.6.3
37
- type: :runtime
38
- prerelease: false
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: 0.5.6
44
- - - "<"
45
- - !ruby/object:Gem::Version
46
- version: 0.6.3
47
27
  - !ruby/object:Gem::Dependency
48
28
  name: clap
49
29
  requirement: !ruby/object:Gem::Requirement
@@ -83,8 +63,10 @@ files:
83
63
  - examples/greeter.rb
84
64
  - lib/active_job/queue_adapters/disc_adapter.rb
85
65
  - lib/disc.rb
66
+ - lib/disc/job.rb
86
67
  - lib/disc/testing.rb
87
68
  - lib/disc/version.rb
69
+ - lib/disc/worker.rb
88
70
  - test/disc_test.rb
89
71
  homepage: https://github.com/pote/disc
90
72
  licenses:
@@ -106,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
88
  version: '0'
107
89
  requirements: []
108
90
  rubyforge_project:
109
- rubygems_version: 2.4.5
91
+ rubygems_version: 2.5.1
110
92
  signing_key:
111
93
  specification_version: 4
112
94
  summary: A simple and powerful Disque job implementation