qe 0.1.3
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/.gitignore +4 -0
- data/.rspec +1 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +100 -0
- data/README.md +144 -0
- data/Rakefile +5 -0
- data/examples/.env +3 -0
- data/examples/Gemfile +14 -0
- data/examples/Gemfile.lock +119 -0
- data/examples/Procfile +20 -0
- data/examples/README.md +9 -0
- data/examples/Rakefile +14 -0
- data/examples/beanstalkd.ru +5 -0
- data/examples/migrate.rb +16 -0
- data/examples/redis.conf +1 -0
- data/examples/resque.ru +6 -0
- data/examples/sample.rb +11 -0
- data/examples/sidekiq.ru +10 -0
- data/examples/workers.rb +43 -0
- data/lib/qe.rb +79 -0
- data/lib/qe/beanstalk.rb +21 -0
- data/lib/qe/delayed_job.rb +18 -0
- data/lib/qe/immediate.rb +7 -0
- data/lib/qe/qu.rb +21 -0
- data/lib/qe/resque.rb +19 -0
- data/lib/qe/sidekiq.rb +21 -0
- data/lib/qe/testing.rb +11 -0
- data/lib/qe/testing/rspec.rb +59 -0
- data/lib/qe/version.rb +3 -0
- data/lib/qe/worker.rb +71 -0
- data/qe.gemspec +31 -0
- data/spec/qe/beanstalk_spec.rb +45 -0
- data/spec/qe/delayed_job_spec.rb +59 -0
- data/spec/qe/enqueue_matcher_spec.rb +33 -0
- data/spec/qe/immediate_spec.rb +26 -0
- data/spec/qe/qu_spec.rb +42 -0
- data/spec/qe/resque_spec.rb +42 -0
- data/spec/qe/sidekiq_spec.rb +49 -0
- data/spec/qe/worker_spec.rb +82 -0
- data/spec/spec_helper.rb +12 -0
- metadata +247 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color --format documentation --order random
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
qe (0.1.3)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
activemodel (3.2.8)
|
10
|
+
activesupport (= 3.2.8)
|
11
|
+
builder (~> 3.0.0)
|
12
|
+
activerecord (3.2.8)
|
13
|
+
activemodel (= 3.2.8)
|
14
|
+
activesupport (= 3.2.8)
|
15
|
+
arel (~> 3.0.2)
|
16
|
+
tzinfo (~> 0.3.29)
|
17
|
+
activesupport (3.2.8)
|
18
|
+
i18n (~> 0.6)
|
19
|
+
multi_json (~> 1.0)
|
20
|
+
arel (3.0.2)
|
21
|
+
awesome_print (1.1.0)
|
22
|
+
backburner (0.2.5)
|
23
|
+
beaneater (~> 0.1.2)
|
24
|
+
dante (~> 0.1.5)
|
25
|
+
beaneater (0.1.2)
|
26
|
+
builder (3.0.4)
|
27
|
+
celluloid (0.12.3)
|
28
|
+
facter (>= 1.6.12)
|
29
|
+
timers (>= 1.0.0)
|
30
|
+
coderay (1.0.8)
|
31
|
+
connection_pool (0.9.2)
|
32
|
+
dante (0.1.5)
|
33
|
+
delayed_job (3.0.3)
|
34
|
+
activesupport (~> 3.0)
|
35
|
+
delayed_job_active_record (0.3.3)
|
36
|
+
activerecord (>= 2.1.0, < 4)
|
37
|
+
delayed_job (~> 3.0)
|
38
|
+
diff-lcs (1.1.3)
|
39
|
+
facter (1.6.14)
|
40
|
+
i18n (0.6.1)
|
41
|
+
method_source (0.8.1)
|
42
|
+
multi_json (1.3.7)
|
43
|
+
pry (0.9.10)
|
44
|
+
coderay (~> 1.0.5)
|
45
|
+
method_source (~> 0.8)
|
46
|
+
slop (~> 3.3.1)
|
47
|
+
qu (0.2.0)
|
48
|
+
multi_json
|
49
|
+
rack (1.4.1)
|
50
|
+
rack-protection (1.2.0)
|
51
|
+
rack
|
52
|
+
redis (3.0.2)
|
53
|
+
redis-namespace (1.2.1)
|
54
|
+
redis (~> 3.0.0)
|
55
|
+
resque (1.23.0)
|
56
|
+
multi_json (~> 1.0)
|
57
|
+
redis-namespace (~> 1.0)
|
58
|
+
sinatra (>= 0.9.2)
|
59
|
+
vegas (~> 0.1.2)
|
60
|
+
rspec (2.11.0)
|
61
|
+
rspec-core (~> 2.11.0)
|
62
|
+
rspec-expectations (~> 2.11.0)
|
63
|
+
rspec-mocks (~> 2.11.0)
|
64
|
+
rspec-core (2.11.1)
|
65
|
+
rspec-expectations (2.11.3)
|
66
|
+
diff-lcs (~> 1.1.3)
|
67
|
+
rspec-mocks (2.11.3)
|
68
|
+
sidekiq (2.5.2)
|
69
|
+
celluloid (~> 0.12.0)
|
70
|
+
connection_pool (~> 0.9.2)
|
71
|
+
multi_json (~> 1)
|
72
|
+
redis (~> 3)
|
73
|
+
redis-namespace
|
74
|
+
sinatra (1.3.3)
|
75
|
+
rack (~> 1.3, >= 1.3.6)
|
76
|
+
rack-protection (~> 1.2)
|
77
|
+
tilt (~> 1.3, >= 1.3.3)
|
78
|
+
slop (3.3.3)
|
79
|
+
sqlite3 (1.3.6)
|
80
|
+
tilt (1.3.3)
|
81
|
+
timers (1.0.1)
|
82
|
+
tzinfo (0.3.35)
|
83
|
+
vegas (0.1.11)
|
84
|
+
rack (>= 1.0.0)
|
85
|
+
|
86
|
+
PLATFORMS
|
87
|
+
ruby
|
88
|
+
|
89
|
+
DEPENDENCIES
|
90
|
+
activerecord
|
91
|
+
awesome_print
|
92
|
+
backburner
|
93
|
+
delayed_job_active_record
|
94
|
+
pry
|
95
|
+
qe!
|
96
|
+
qu
|
97
|
+
resque
|
98
|
+
rspec
|
99
|
+
sidekiq
|
100
|
+
sqlite3
|
data/README.md
ADDED
@@ -0,0 +1,144 @@
|
|
1
|
+
# Qe
|
2
|
+
|
3
|
+
A simple interface over several background job libraries like Resque, Sidekiq and DelayedJob.
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
In this wild world where a new asynchronous job processing
|
8
|
+
library is released every once in a while, Qe tries to keep a unified
|
9
|
+
interface that works with the most famous libraries:
|
10
|
+
|
11
|
+
* [Sidekiq](http://mperham.github.com/sidekiq/)
|
12
|
+
* [Resque](https://github.com/defunkt/resque/)
|
13
|
+
* [DelayedJob](https://github.com/collectiveidea/delayed_job)
|
14
|
+
* [Qu](https://github.com/bkeepers/qu)
|
15
|
+
* [Beanstalk](https://github.com/kr/beanstalkd)/[Backburner](http://nesquena.github.com/backburner/)
|
16
|
+
|
17
|
+
To set the adapter, just load the file according to your adapter:
|
18
|
+
|
19
|
+
``` ruby
|
20
|
+
require "qe/resque"
|
21
|
+
require "qe/qu"
|
22
|
+
require "qe/delayed_job"
|
23
|
+
require "qe/beanstalk"
|
24
|
+
```
|
25
|
+
|
26
|
+
You also need to require the library you're going to use. If you're using Rails with Bundler, you can simple require the correct file and dependency.
|
27
|
+
|
28
|
+
``` ruby
|
29
|
+
source :rubygems
|
30
|
+
gem "rails", "3.2.8"
|
31
|
+
|
32
|
+
gem "sidekiq"
|
33
|
+
gem "qe", :require => "qe/sidekiq"
|
34
|
+
|
35
|
+
gem "resque"
|
36
|
+
gem "qe", :require => "qe/resque"
|
37
|
+
|
38
|
+
gem "qu"
|
39
|
+
gem "qe", :require => "qe/qu"
|
40
|
+
|
41
|
+
gem "backburner"
|
42
|
+
gem "qe", :require => "qe/beanstalk"
|
43
|
+
```
|
44
|
+
|
45
|
+
Create a worker that will send e-mails through `ActionMailer`.
|
46
|
+
|
47
|
+
``` ruby
|
48
|
+
class MailerWorker
|
49
|
+
include Qe::Worker
|
50
|
+
|
51
|
+
def perform
|
52
|
+
Mailer.public_send(options[:mail], options).deliver
|
53
|
+
end
|
54
|
+
end
|
55
|
+
```
|
56
|
+
|
57
|
+
Define our `Mailer` class.
|
58
|
+
|
59
|
+
``` ruby
|
60
|
+
class Mailer < ActionMailer::Base
|
61
|
+
def welcome(options)
|
62
|
+
@options = options
|
63
|
+
mail :to => options[:email]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
```
|
67
|
+
|
68
|
+
Enqueue a job to be processed asynchronously.
|
69
|
+
|
70
|
+
``` ruby
|
71
|
+
MailerWorker.enqueue({
|
72
|
+
:mail => :welcome,
|
73
|
+
:email => "john@example.org",
|
74
|
+
:name => "John Doe"
|
75
|
+
})
|
76
|
+
```
|
77
|
+
|
78
|
+
## Development support
|
79
|
+
|
80
|
+
Qe comes with development support. Instead of starting up workers on development environment, you can use the `Qe::Immediate` adapter, which executes your worker right away!
|
81
|
+
|
82
|
+
``` ruby
|
83
|
+
Qe.adapter = Qe::Immediate
|
84
|
+
```
|
85
|
+
|
86
|
+
If you're using Rails, you can add the line above to your `config/environments/development.rb` file.
|
87
|
+
|
88
|
+
## Testing support
|
89
|
+
|
90
|
+
Qe also comes with testing support. Just require the `qe/testing.rb` file
|
91
|
+
and a fake queuing adapter will be used. All enqueued jobs will be stored
|
92
|
+
at `Qe.jobs`. Note that this method is only available on testing mode.
|
93
|
+
|
94
|
+
``` ruby
|
95
|
+
require "qe/testing"
|
96
|
+
Qe.adapter = Qe::Testing
|
97
|
+
```
|
98
|
+
|
99
|
+
If you"re using RSpec, you can require the `qe/testing/rspec.rb` file
|
100
|
+
instead. This will reset `Qe.jobs` before every spec and will add a
|
101
|
+
`enqueue` matcher.
|
102
|
+
|
103
|
+
``` ruby
|
104
|
+
# Add the following like to your spec_helper.rb file
|
105
|
+
require "qe/testing/rspec"
|
106
|
+
|
107
|
+
describe "Enqueuing a job" do
|
108
|
+
it "enqueues job" do
|
109
|
+
expect {
|
110
|
+
# do something
|
111
|
+
}.to enqueue(MailerWorker).with(:email => "john@example.org")
|
112
|
+
end
|
113
|
+
end
|
114
|
+
```
|
115
|
+
|
116
|
+
|
117
|
+
Maintainer
|
118
|
+
----------
|
119
|
+
|
120
|
+
* Nando Vieira (<http://nandovieira.com.br>)
|
121
|
+
|
122
|
+
License:
|
123
|
+
--------
|
124
|
+
|
125
|
+
(The MIT License)
|
126
|
+
|
127
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
128
|
+
a copy of this software and associated documentation files (the
|
129
|
+
"Software"), to deal in the Software without restriction, including
|
130
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
131
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
132
|
+
permit persons to whom the Software is furnished to do so, subject to
|
133
|
+
the following conditions:
|
134
|
+
|
135
|
+
The above copyright notice and this permission notice shall be
|
136
|
+
included in all copies or substantial portions of the Software.
|
137
|
+
|
138
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
139
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
140
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
141
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
142
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
143
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
144
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
data/examples/.env
ADDED
data/examples/Gemfile
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activemodel (3.2.8)
|
5
|
+
activesupport (= 3.2.8)
|
6
|
+
builder (~> 3.0.0)
|
7
|
+
activerecord (3.2.8)
|
8
|
+
activemodel (= 3.2.8)
|
9
|
+
activesupport (= 3.2.8)
|
10
|
+
arel (~> 3.0.2)
|
11
|
+
tzinfo (~> 0.3.29)
|
12
|
+
activesupport (3.2.8)
|
13
|
+
i18n (~> 0.6)
|
14
|
+
multi_json (~> 1.0)
|
15
|
+
arel (3.0.2)
|
16
|
+
backburner (0.2.0)
|
17
|
+
beaneater (~> 0.1.2)
|
18
|
+
dante (~> 0.1.5)
|
19
|
+
backports (2.6.5)
|
20
|
+
beaneater (0.1.2)
|
21
|
+
beanstalkd_view (1.1.0)
|
22
|
+
beaneater (~> 0.1.0)
|
23
|
+
json
|
24
|
+
sinatra (>= 1.3.0)
|
25
|
+
sinatra-assetpack (>= 0.0.11)
|
26
|
+
sinatra-contrib (>= 1.3.0)
|
27
|
+
vegas (~> 0.1.2)
|
28
|
+
builder (3.0.4)
|
29
|
+
celluloid (0.12.3)
|
30
|
+
facter (>= 1.6.12)
|
31
|
+
timers (>= 1.0.0)
|
32
|
+
connection_pool (0.9.2)
|
33
|
+
daemons (1.1.9)
|
34
|
+
dante (0.1.5)
|
35
|
+
delayed_job (3.0.3)
|
36
|
+
activesupport (~> 3.0)
|
37
|
+
delayed_job_active_record (0.3.3)
|
38
|
+
activerecord (>= 2.1.0, < 4)
|
39
|
+
delayed_job (~> 3.0)
|
40
|
+
eventmachine (1.0.0)
|
41
|
+
facter (1.6.14)
|
42
|
+
i18n (0.6.1)
|
43
|
+
jsmin (1.0.1)
|
44
|
+
json (1.7.5)
|
45
|
+
multi_json (1.3.7)
|
46
|
+
qu (0.2.0)
|
47
|
+
multi_json
|
48
|
+
qu-redis (0.2.0)
|
49
|
+
qu (= 0.2.0)
|
50
|
+
redis-namespace
|
51
|
+
simple_uuid
|
52
|
+
rack (1.4.1)
|
53
|
+
rack-protection (1.2.0)
|
54
|
+
rack
|
55
|
+
rack-test (0.6.2)
|
56
|
+
rack (>= 1.0)
|
57
|
+
rake (0.9.2.2)
|
58
|
+
redis (3.0.2)
|
59
|
+
redis-namespace (1.2.1)
|
60
|
+
redis (~> 3.0.0)
|
61
|
+
resque (1.23.0)
|
62
|
+
multi_json (~> 1.0)
|
63
|
+
redis-namespace (~> 1.0)
|
64
|
+
sinatra (>= 0.9.2)
|
65
|
+
vegas (~> 0.1.2)
|
66
|
+
sidekiq (2.5.2)
|
67
|
+
celluloid (~> 0.12.0)
|
68
|
+
connection_pool (~> 0.9.2)
|
69
|
+
multi_json (~> 1)
|
70
|
+
redis (~> 3)
|
71
|
+
redis-namespace
|
72
|
+
simple_uuid (0.2.0)
|
73
|
+
sinatra (1.3.3)
|
74
|
+
rack (~> 1.3, >= 1.3.6)
|
75
|
+
rack-protection (~> 1.2)
|
76
|
+
tilt (~> 1.3, >= 1.3.3)
|
77
|
+
sinatra-assetpack (0.0.11)
|
78
|
+
jsmin
|
79
|
+
rack-test
|
80
|
+
sinatra
|
81
|
+
tilt (>= 1.3.0)
|
82
|
+
sinatra-contrib (1.3.2)
|
83
|
+
backports (>= 2.0)
|
84
|
+
eventmachine
|
85
|
+
rack-protection
|
86
|
+
rack-test
|
87
|
+
sinatra (~> 1.3.0)
|
88
|
+
tilt (~> 1.3)
|
89
|
+
slim (1.3.3)
|
90
|
+
temple (~> 0.5.5)
|
91
|
+
tilt (~> 1.3.3)
|
92
|
+
sqlite3 (1.3.6)
|
93
|
+
temple (0.5.5)
|
94
|
+
thin (1.5.0)
|
95
|
+
daemons (>= 1.0.9)
|
96
|
+
eventmachine (>= 0.12.6)
|
97
|
+
rack (>= 1.0.0)
|
98
|
+
tilt (1.3.3)
|
99
|
+
timers (1.0.1)
|
100
|
+
tzinfo (0.3.35)
|
101
|
+
vegas (0.1.11)
|
102
|
+
rack (>= 1.0.0)
|
103
|
+
|
104
|
+
PLATFORMS
|
105
|
+
ruby
|
106
|
+
|
107
|
+
DEPENDENCIES
|
108
|
+
activerecord
|
109
|
+
backburner
|
110
|
+
beanstalkd_view
|
111
|
+
daemons
|
112
|
+
delayed_job_active_record
|
113
|
+
qu-redis
|
114
|
+
rake
|
115
|
+
resque
|
116
|
+
sidekiq
|
117
|
+
slim
|
118
|
+
sqlite3
|
119
|
+
thin
|
data/examples/Procfile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
redis: redis-server redis.conf
|
2
|
+
# beanstalkd: beanstalkd
|
3
|
+
|
4
|
+
# Uncomment the following lines to enable Sidekiq
|
5
|
+
sidekiq: bundle exec sidekiq -r ./workers.rb -q default -q mail
|
6
|
+
sidekiq_web: bundle exec thin -R sidekiq.ru -p 9292 -V start
|
7
|
+
|
8
|
+
# Uncomment the following lines to enable Beanstalk/Backburner
|
9
|
+
# backburner: bundle exec rake backburner:work
|
10
|
+
# beanstalkd_view: bundle exec thin -R beanstalkd.ru -p 9292 -V start
|
11
|
+
|
12
|
+
# Uncomment the following line to enable DelayedJob
|
13
|
+
# delayed_job: bundle exec rake jobs:work
|
14
|
+
|
15
|
+
# Uncomment the following line to enable Qu
|
16
|
+
# qu: bundle exec rake qu:work
|
17
|
+
|
18
|
+
# Uncomment the following lines to enable Resque
|
19
|
+
# resque: bundle exec rake resque:work
|
20
|
+
# resque_web: bundle exec thin -R resque.ru -p 9292 -V start
|
data/examples/README.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# Running examples
|
2
|
+
|
3
|
+
1. First, start processes with `$ foreman start`
|
4
|
+
2. Then execute `$ ruby sample.rb`
|
5
|
+
3. Go back to the Foreman's terminal and watch the output
|
6
|
+
|
7
|
+
Tweak the `Procfile` to enable different libraries and web panels.
|
8
|
+
|
9
|
+
You'll need to install Redis and/or Beanstalkd.
|
data/examples/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "backburner/tasks"
|
2
|
+
require "resque/tasks"
|
3
|
+
require "delayed/tasks"
|
4
|
+
require "qu/tasks"
|
5
|
+
|
6
|
+
task :environment do #=> required by Backburner
|
7
|
+
require "./workers"
|
8
|
+
|
9
|
+
Backburner.configure do |config|
|
10
|
+
config.logger = Logger.new(STDOUT)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
task "resque:setup" => :environment
|