disc 0.0.1
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.
- checksums.yaml +7 -0
- data/Makefile +8 -0
- data/README.md +46 -0
- data/disc.gemspec +17 -0
- data/lib/disc.rb +108 -0
- metadata +104 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 212532c0e53da43e758379c93d9af4a619df7804
|
4
|
+
data.tar.gz: 1f9cb86e8408906a3cdb4a8488a8c48f9e33315f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 95c97856b2ad9e78c1b49730d8dde8fd639abd969fdea4e3062bb5d177df3b98b441ba469aafa54c793dae8a8a9eeab12ba113bc5cc951d5f34e3eb5282a8a23
|
7
|
+
data.tar.gz: 1b2ec20719f8cb13631bf3eb3502b02fc7d2f77d73d8d79f97b01f504182523c8c023eeffebe86fe567b49a11b980081c982832f370b3e40c8cc69ba18a7a8aa
|
data/Makefile
ADDED
data/README.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# Disc
|
2
|
+
|
3
|
+
Disc allows you to easily leverage [antirez](http://antirez.com/)'s wonderful [Disque](https://github.com/antirez/disque) from your Ruby applications, filling the gap between your service objects and Disque.
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
1. Install the gem
|
8
|
+
|
9
|
+
```bash
|
10
|
+
$ gem install disc
|
11
|
+
```
|
12
|
+
|
13
|
+
2. Write your jobs
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
requie 'disc'
|
17
|
+
|
18
|
+
class CreateGameGrid
|
19
|
+
include Disque::Job
|
20
|
+
queue :urgent
|
21
|
+
|
22
|
+
def perform(type)
|
23
|
+
# perform rather lengthy operations here.
|
24
|
+
end
|
25
|
+
end
|
26
|
+
```
|
27
|
+
|
28
|
+
3. Enqueue them to perform them asynchronously
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
CreateGameGrid.enqueue('ligth_cycle')
|
32
|
+
```
|
33
|
+
|
34
|
+
4. Or enqueue them to be performed at some time in the future.
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
CreateGameGrid.enqueue('disc_arena', at: DateTime.new(2015, 12, 31))
|
38
|
+
```
|
39
|
+
|
40
|
+
5. Run as many Disc Worker processes as you wish.
|
41
|
+
|
42
|
+
```bash
|
43
|
+
$ DISQUE_QUEUES=urgent,default disc
|
44
|
+
```
|
45
|
+
|
46
|
+
You're done!
|
data/disc.gemspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'disc'
|
3
|
+
s.version = '0.0.1'
|
4
|
+
s.summary = 'A simple disque and powerful job implementation'
|
5
|
+
s.description = ''
|
6
|
+
s.authors = ['pote']
|
7
|
+
s.email = ['pote@tardis.com.uy']
|
8
|
+
s.homepage = 'https://github.com/pote/disque-job'
|
9
|
+
s.license = 'MIT'
|
10
|
+
|
11
|
+
s.files = `git ls-files`.split("\n")
|
12
|
+
|
13
|
+
s.add_dependency 'disque'
|
14
|
+
s.add_dependency 'msgpack'
|
15
|
+
s.add_dependency 'clap'
|
16
|
+
s.add_development_dependency 'cutest'
|
17
|
+
end
|
data/lib/disc.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
require 'disque'
|
2
|
+
require 'msgpack'
|
3
|
+
|
4
|
+
class Disc
|
5
|
+
attr_reader :disque,
|
6
|
+
:disque_timeout
|
7
|
+
|
8
|
+
def self.disque
|
9
|
+
@disque ||= Disque.new(
|
10
|
+
ENV.fetch('DISQUE_NODES', 'localhost:7711'),
|
11
|
+
auth: ENV.fetch('DISQUE_AUTH', nil),
|
12
|
+
cycle: ENV.fetch('DISQUE_CYCLE', '1000').to_i
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.disque=(disque)
|
17
|
+
@disque = disque
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.disque_timeout
|
21
|
+
@disque_timeout ||= 100
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.disque_timeout=(timeout)
|
25
|
+
@disque_timeout = timeout
|
26
|
+
end
|
27
|
+
|
28
|
+
class Worker
|
29
|
+
attr_reader :disque,
|
30
|
+
:queues,
|
31
|
+
:timeout,
|
32
|
+
:count
|
33
|
+
|
34
|
+
def self.run
|
35
|
+
new.run
|
36
|
+
end
|
37
|
+
|
38
|
+
def initialize(disque: nil , queues: nil, count: 1, timeout: nil)
|
39
|
+
@disque = client || Disc.disque
|
40
|
+
@count, @timeout = count, timeout
|
41
|
+
@queues = case
|
42
|
+
when queues.is_a?(Array)
|
43
|
+
queues
|
44
|
+
when queues.is_a?(String)
|
45
|
+
queues.split(',')
|
46
|
+
when queues.nil?
|
47
|
+
ENV.fetch('QUEUES', 'default').split(',')
|
48
|
+
else
|
49
|
+
raise 'Invalid Disque Queues'
|
50
|
+
end
|
51
|
+
|
52
|
+
self
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def run
|
57
|
+
loop do
|
58
|
+
disque.fetch(
|
59
|
+
from: queues,
|
60
|
+
timeout: timeout,
|
61
|
+
count: count
|
62
|
+
) do |serialized_job, _|
|
63
|
+
klass = Object.const_get(job['class'])
|
64
|
+
klass.new.perform(job['arguments'])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
module Job
|
71
|
+
attr_reader :arguments,
|
72
|
+
:queue
|
73
|
+
|
74
|
+
def self.disque=(disque)
|
75
|
+
@disque = disque
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.disque
|
79
|
+
defined?(@disque) ? @disque : Disc.disque
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.disc(options = {})
|
83
|
+
@queue ||= options.fetch(:queue, :default)
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.enqueue(*args, at: nil)
|
87
|
+
job = new(args)
|
88
|
+
|
89
|
+
disque.push(
|
90
|
+
job.queue,
|
91
|
+
job.serializable.to_msgpack,
|
92
|
+
Disc.disque_timeout,
|
93
|
+
delay: at.nil? ? nil : (at.to_i - Time.now.to_i)
|
94
|
+
)
|
95
|
+
end
|
96
|
+
|
97
|
+
def initialize(arguments)
|
98
|
+
@arguments = arguments
|
99
|
+
end
|
100
|
+
|
101
|
+
def serializable
|
102
|
+
{
|
103
|
+
class: self.class.name,
|
104
|
+
arguments: self.arguments
|
105
|
+
}
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
metadata
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: disc
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- pote
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: disque
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
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'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: clap
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: cutest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: ''
|
70
|
+
email:
|
71
|
+
- pote@tardis.com.uy
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- Makefile
|
77
|
+
- README.md
|
78
|
+
- disc.gemspec
|
79
|
+
- lib/disc.rb
|
80
|
+
homepage: https://github.com/pote/disque-job
|
81
|
+
licenses:
|
82
|
+
- MIT
|
83
|
+
metadata: {}
|
84
|
+
post_install_message:
|
85
|
+
rdoc_options: []
|
86
|
+
require_paths:
|
87
|
+
- lib
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
requirements: []
|
99
|
+
rubyforge_project:
|
100
|
+
rubygems_version: 2.4.5
|
101
|
+
signing_key:
|
102
|
+
specification_version: 4
|
103
|
+
summary: A simple disque and powerful job implementation
|
104
|
+
test_files: []
|