qe 0.3.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 24925d0691189b9630c57dbce7ee24f17107fb6c
4
- data.tar.gz: cb621b8762de804d541ae375627c31201127fadc
3
+ metadata.gz: e6884801104bf918f5ebc6178ff92c2569125e3d
4
+ data.tar.gz: 99d7e22d878fde30c235f9b60544af0536f2c6b2
5
5
  SHA512:
6
- metadata.gz: d4ca40ca8191277537bddef4fd7b29c0403d9cec5bdc3d30b2c3b07a8a9cf80b784d880fa7e022452ba28aafe0cda609a1b1fbc7eba9b9d4d71824ef3927df41
7
- data.tar.gz: 91de3e84a38b61d045ccd3265a6e34d60a24c298498660e56986a3da0f43dc4cf8337ec2974d80543e7af843584f07a2eb0c3191076f7c78a6974c417ca51f0f
6
+ metadata.gz: f6dde3ab2aad881d8a1d7116c6a2994d51f0ed3dd2088abbcb4d8f86efc1e800a0b122d79d2e031969297c50da2134b19469e18093b292b6905852009be32e7d
7
+ data.tar.gz: b4f31aea83cb96b747309c330202314c42fbc64e14ae94fa421f935473bddb07e2af6fc713d499e54d0f8d3d70fd3ae129bc251a6ba82938a6ef88ba8c9fee8a
@@ -1,46 +1,52 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qe (0.3.0)
4
+ qe (0.3.1)
5
5
  activesupport
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (3.2.13)
11
- activesupport (= 3.2.13)
12
- builder (~> 3.0.0)
13
- activerecord (3.2.13)
14
- activemodel (= 3.2.13)
15
- activesupport (= 3.2.13)
16
- arel (~> 3.0.2)
17
- tzinfo (~> 0.3.29)
18
- activesupport (3.2.13)
19
- i18n (= 0.6.1)
20
- multi_json (~> 1.0)
21
- arel (3.0.2)
10
+ activemodel (4.0.0)
11
+ activesupport (= 4.0.0)
12
+ builder (~> 3.1.0)
13
+ activerecord (4.0.0)
14
+ activemodel (= 4.0.0)
15
+ activerecord-deprecated_finders (~> 1.0.2)
16
+ activesupport (= 4.0.0)
17
+ arel (~> 4.0.0)
18
+ activerecord-deprecated_finders (1.0.3)
19
+ activesupport (4.0.0)
20
+ i18n (~> 0.6, >= 0.6.4)
21
+ minitest (~> 4.2)
22
+ multi_json (~> 1.3)
23
+ thread_safe (~> 0.1)
24
+ tzinfo (~> 0.3.37)
25
+ arel (4.0.0)
26
+ atomic (1.1.12)
22
27
  awesome_print (1.1.0)
23
- backburner (0.3.4)
24
- beaneater (~> 0.3.0)
28
+ backburner (0.4.3)
29
+ beaneater (~> 0.3.1)
25
30
  dante (~> 0.1.5)
26
- beaneater (0.3.0)
27
- builder (3.0.4)
31
+ beaneater (0.3.1)
32
+ builder (3.1.4)
28
33
  celluloid (0.14.1)
29
34
  timers (>= 1.0.0)
30
35
  coderay (1.0.9)
31
36
  connection_pool (1.1.0)
32
37
  dante (0.1.5)
33
- delayed_job (4.0.0.beta2)
38
+ delayed_job (4.0.0)
34
39
  activesupport (>= 3.0, < 4.1)
35
- delayed_job_active_record (4.0.0.beta3)
40
+ delayed_job_active_record (4.0.0)
36
41
  activerecord (>= 3.0, < 4.1)
37
42
  delayed_job (>= 3.0, < 4.1)
38
43
  diff-lcs (1.2.4)
39
- i18n (0.6.1)
44
+ i18n (0.6.4)
40
45
  json (1.8.0)
41
- method_source (0.8.1)
46
+ method_source (0.8.2)
47
+ minitest (4.7.5)
42
48
  mono_logger (1.1.0)
43
- multi_json (1.7.6)
49
+ multi_json (1.7.8)
44
50
  pry (0.9.12.2)
45
51
  coderay (~> 1.0.5)
46
52
  method_source (~> 0.8)
@@ -51,7 +57,7 @@ GEM
51
57
  rack-protection (1.5.0)
52
58
  rack
53
59
  redis (3.0.4)
54
- redis-namespace (1.3.0)
60
+ redis-namespace (1.3.1)
55
61
  redis (~> 3.0.0)
56
62
  resque (1.24.1)
57
63
  mono_logger (~> 1.0)
@@ -63,28 +69,30 @@ GEM
63
69
  redis (>= 2.0.1)
64
70
  resque (>= 1.20.0)
65
71
  rufus-scheduler
66
- rspec (2.14.0.rc1)
67
- rspec-core (= 2.14.0.rc1)
68
- rspec-expectations (= 2.14.0.rc1)
69
- rspec-mocks (= 2.14.0.rc1)
70
- rspec-core (2.14.0.rc1)
71
- rspec-expectations (2.14.0.rc1)
72
+ rspec (2.14.1)
73
+ rspec-core (~> 2.14.0)
74
+ rspec-expectations (~> 2.14.0)
75
+ rspec-mocks (~> 2.14.0)
76
+ rspec-core (2.14.4)
77
+ rspec-expectations (2.14.0)
72
78
  diff-lcs (>= 1.1.3, < 2.0)
73
- rspec-mocks (2.14.0.rc1)
74
- rufus-scheduler (2.0.19)
79
+ rspec-mocks (2.14.2)
80
+ rufus-scheduler (2.0.23)
75
81
  tzinfo (>= 0.3.23)
76
- sidekiq (2.12.1)
82
+ sidekiq (2.13.0)
77
83
  celluloid (>= 0.14.1)
78
84
  connection_pool (>= 1.0.0)
79
85
  json
80
86
  redis (>= 3.0)
81
87
  redis-namespace
82
- sinatra (1.4.2)
83
- rack (~> 1.5, >= 1.5.2)
88
+ sinatra (1.4.3)
89
+ rack (~> 1.4)
84
90
  rack-protection (~> 1.4)
85
91
  tilt (~> 1.3, >= 1.3.4)
86
- slop (3.4.5)
92
+ slop (3.4.6)
87
93
  sqlite3 (1.3.7)
94
+ thread_safe (0.1.2)
95
+ atomic
88
96
  tilt (1.4.1)
89
97
  timers (1.1.0)
90
98
  tzinfo (0.3.37)
data/README.md CHANGED
@@ -75,7 +75,7 @@ MailerWorker.enqueue({
75
75
  })
76
76
  ```
77
77
 
78
- You can specify when this job must be processed by setting the <tt>:run_at</tt> option.
78
+ You can specify when this job must be processed by setting the `:run_at` option.
79
79
 
80
80
  ``` ruby
81
81
  MailerWorker.enqueue({
@@ -86,6 +86,18 @@ MailerWorker.enqueue({
86
86
  })
87
87
  ```
88
88
 
89
+ ### Setting the queue name
90
+
91
+ Sometimes setting the queue name is important.
92
+
93
+ ```ruby
94
+ class HelloWorker
95
+ include Qe::Worker
96
+
97
+ queue :hello
98
+ end
99
+ ```
100
+
89
101
  ### Defining actions
90
102
 
91
103
  Sometimes you want to create several actions in a single worker, just because is easier. Instead of manually dispatch the action on your perform method, you can
@@ -3,5 +3,9 @@ module Qe
3
3
  def self.enqueue(worker, options = {})
4
4
  Qe::Worker.perform(worker.name, options)
5
5
  end
6
+
7
+ def self.schedule(worker, run_at, options = {})
8
+ enqueue(worker, options)
9
+ end
6
10
  end
7
11
  end
@@ -5,7 +5,11 @@ module Qe
5
5
 
6
6
  class Testing
7
7
  def self.enqueue(worker, options = {})
8
- Qe.jobs << {:worker => worker, :options => options}
8
+ Qe.jobs << {worker: worker, options: options}
9
+ end
10
+
11
+ def self.schedule(worker, run_at, options = {})
12
+ Qe.jobs << {worker: worker, options: options, run_at: run_at}
9
13
  end
10
14
  end
11
15
  end
@@ -3,10 +3,12 @@ require "qe/testing"
3
3
  module Qe
4
4
  module EnqueueMatcher
5
5
  class Matcher
6
- attr_reader :worker, :options
6
+ attr_reader :worker, :options, :date, :scheduled
7
7
 
8
- def initialize(worker)
8
+ def initialize(worker, scheduled)
9
9
  @worker = worker
10
+ @options = nil
11
+ @scheduled = scheduled
10
12
  end
11
13
 
12
14
  def with(options)
@@ -14,16 +16,34 @@ module Qe
14
16
  self
15
17
  end
16
18
 
19
+ def on(date)
20
+ @date = date
21
+ self
22
+ end
23
+
17
24
  def matches?(block)
18
25
  block.call
19
26
 
20
- Qe.jobs.find do |job|
27
+ jobs.any? do |job|
21
28
  condition = job[:worker] == worker
29
+ condition = condition && datetime? if scheduled
22
30
  condition = condition && job[:options] == options if options
31
+ condition = condition && job[:run_at].to_i == date.to_i if date
23
32
  condition
24
33
  end != nil
25
34
  end
26
35
 
36
+ def does_not_match?(block)
37
+ block.call
38
+
39
+ jobs.none? do |job|
40
+ condition = job[:worker] != worker
41
+ condition = condition && job[:options] != options if options
42
+ condition = condition && job[:run_at].to_i != date.to_i if date
43
+ condition
44
+ end
45
+ end
46
+
27
47
  def description
28
48
  "enqueue job for #{worker.inspect} worker"
29
49
  end
@@ -37,7 +57,19 @@ module Qe
37
57
  end
38
58
 
39
59
  def build_message(base)
40
- base << (options.empty? ? "" : " with #{options.inspect}")
60
+ base << ((options || {}).empty? ? "" : " with #{options.inspect}")
61
+ base << " on #{date.inspect}" if date
62
+ base
63
+ end
64
+
65
+ def jobs
66
+ Qe.jobs.select do |job|
67
+ scheduled ? job.key?(:run_at) : true
68
+ end
69
+ end
70
+
71
+ def datetime?
72
+ [Date, Time, DateTime].find {|klass| date.kind_of?(klass) }
41
73
  end
42
74
  end
43
75
 
@@ -45,7 +77,14 @@ module Qe
45
77
  # expect {}.to enqueue(MailerWorker).with(options)
46
78
  #
47
79
  def enqueue(worker)
48
- Matcher.new(worker)
80
+ Matcher.new(worker, true)
81
+ end
82
+
83
+ #
84
+ # expect {}.to schedule(MailerWorker).on(Time.now).with(options)
85
+ #
86
+ def schedule(worker)
87
+ Matcher.new(worker, true)
49
88
  end
50
89
  end
51
90
  end
@@ -1,3 +1,3 @@
1
1
  module Qe
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -12,7 +12,7 @@ module Qe
12
12
  end
13
13
  end
14
14
 
15
- # Set the queue name when receiving on argument.
15
+ # Set the queue name when receiving one argument.
16
16
  # Return queue name otherwise.
17
17
  def queue(*args)
18
18
  @queue = args.first unless args.empty?
@@ -18,4 +18,14 @@ describe Qe::Immediate do
18
18
 
19
19
  Qe::Immediate.enqueue(HelloWorker)
20
20
  end
21
+
22
+ it "schedules job" do
23
+ date = Time.now
24
+
25
+ Qe::Immediate
26
+ .should_receive(:enqueue)
27
+ .with(HelloWorker, :a => 1)
28
+
29
+ Qe::Immediate.schedule(HelloWorker, date, :a => 1)
30
+ end
21
31
  end
@@ -0,0 +1,49 @@
1
+ require "spec_helper"
2
+
3
+ describe Qe::EnqueueMatcher do
4
+ let(:date) { Time.now }
5
+
6
+ before { Qe.jobs.clear }
7
+
8
+ it "enqueues job" do
9
+ expect {
10
+ HelloWorker.enqueue(a: 1)
11
+ }.to enqueue(HelloWorker).with(a: 1)
12
+ end
13
+
14
+ it "enqueues job without mentioning options" do
15
+ expect {
16
+ HelloWorker.enqueue(a: 1)
17
+ }.to enqueue(HelloWorker)
18
+ end
19
+
20
+ it "doesn't enqueue job" do
21
+ expect {
22
+ # noop
23
+ }.not_to enqueue(HelloWorker)
24
+ end
25
+
26
+ it "doesn't enqueue job with options" do
27
+ expect {
28
+ HelloWorker.enqueue(b: 1)
29
+ }.not_to enqueue(HelloWorker).with(a: 1)
30
+ end
31
+
32
+ it "schedules job" do
33
+ expect {
34
+ HelloWorker.enqueue(a: 1, run_at: date)
35
+ }.to schedule(HelloWorker).on(date).with(a: 1)
36
+ end
37
+
38
+ it "schedules job without mentioning options" do
39
+ expect {
40
+ HelloWorker.enqueue(a: 1, run_at: date)
41
+ }.to schedule(HelloWorker).on(date)
42
+ end
43
+
44
+ it "requires date on scheduled job" do
45
+ expect {
46
+ HelloWorker.enqueue(a: 1, run_at: date)
47
+ }.not_to schedule(HelloWorker).on(nil)
48
+ end
49
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ describe Qe::Testing do
4
+ let(:job) { double("job").as_null_object }
5
+
6
+ it "stores enqueued job" do
7
+ Qe::Testing.enqueue(HelloWorker, a: 1)
8
+ job = Qe.jobs.first
9
+
10
+ expect(job).to include(worker: HelloWorker)
11
+ expect(job).to include(options: {a: 1})
12
+ end
13
+
14
+ it "schedules job" do
15
+ date = Time.now
16
+ Qe::Testing.schedule(HelloWorker, date, a: 1)
17
+ job = Qe.jobs.first
18
+
19
+ expect(job).to include(run_at: date)
20
+ end
21
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-07 00:00:00.000000000 Z
11
+ date: 2013-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -230,9 +230,11 @@ files:
230
230
  - spec/qe/enqueue_matcher_spec.rb
231
231
  - spec/qe/immediate_spec.rb
232
232
  - spec/qe/locale_spec.rb
233
+ - spec/qe/matchers_spec.rb
233
234
  - spec/qe/qu_spec.rb
234
235
  - spec/qe/resque_spec.rb
235
236
  - spec/qe/sidekiq_spec.rb
237
+ - spec/qe/testing_spec.rb
236
238
  - spec/qe/worker_spec.rb
237
239
  - spec/spec_helper.rb
238
240
  - spec/support/hello_worker.rb