pg_queue 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.md +20 -2
- data/lib/pg_queue/version.rb +1 -1
- data/lib/pg_queue/worker.rb +1 -0
- data/lib/pg_queue.rb +8 -0
- data/spec/pg_queue/worker_spec.rb +26 -0
- data/spec/pg_queue_spec.rb +20 -5
- metadata +8 -8
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# PgQueue
|
2
2
|
|
3
|
-
|
3
|
+
Background jobs using PostgreSQL's LISTEN/NOTIFY
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,7 +18,25 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
### Rails
|
22
|
+
|
23
|
+
Create an initializer with the configuration
|
24
|
+
|
25
|
+
PgQueue.connection = ActiveRecord::Base.connection.raw_connection
|
26
|
+
PgQueue.logger = Rails.logger
|
27
|
+
PgQueue.interval = 3 # the number of seconds you want the worker wait after process the job
|
28
|
+
|
29
|
+
Add this line in the Rakefile
|
30
|
+
|
31
|
+
require "pg_queue/tasks"
|
32
|
+
|
33
|
+
And then start the worker running
|
34
|
+
|
35
|
+
rake environment pg_queue:work
|
36
|
+
|
37
|
+
That's it! You're now able to enqueue your jobs. To do that, just call
|
38
|
+
|
39
|
+
PgQueue.enqueue(MyQueueClass, "string", 1, false) # parameters will be JSON encoded
|
22
40
|
|
23
41
|
## Contributing
|
24
42
|
|
data/lib/pg_queue/version.rb
CHANGED
data/lib/pg_queue/worker.rb
CHANGED
data/lib/pg_queue.rb
CHANGED
@@ -26,6 +26,14 @@ module PgQueue
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
def self.interval
|
30
|
+
@interval || 0
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.interval=(seconds)
|
34
|
+
@interval = seconds
|
35
|
+
end
|
36
|
+
|
29
37
|
def self.enqueue(klass, *args)
|
30
38
|
id = connection.insert(:pg_queue_jobs, { :class_name => klass.name, :args => MultiJson.encode(args) }, "id")
|
31
39
|
logger.debug("enqueued #{id}")
|
@@ -32,6 +32,32 @@ describe PgQueue::Worker do
|
|
32
32
|
subject.start
|
33
33
|
end
|
34
34
|
end
|
35
|
+
|
36
|
+
context "with interval" do
|
37
|
+
let(:job) { double("job") }
|
38
|
+
|
39
|
+
before do
|
40
|
+
PgQueue.should_receive(:dequeue).and_return(job)
|
41
|
+
job.should_receive(:perform)
|
42
|
+
end
|
43
|
+
|
44
|
+
after do
|
45
|
+
PgQueue.interval = nil
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should not sleep if an interval is not defined" do
|
49
|
+
subject.should_receive(:sleep).never
|
50
|
+
|
51
|
+
subject.start
|
52
|
+
end
|
53
|
+
|
54
|
+
it "sleeps if an interval is defined" do
|
55
|
+
PgQueue.interval = 5
|
56
|
+
subject.should_receive(:sleep).with(5)
|
57
|
+
|
58
|
+
subject.start
|
59
|
+
end
|
60
|
+
end
|
35
61
|
end
|
36
62
|
|
37
63
|
context "stoping" do
|
data/spec/pg_queue_spec.rb
CHANGED
@@ -11,16 +11,19 @@ describe PgQueue do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
context "logging" do
|
14
|
-
|
15
|
-
|
16
|
-
it "defines a new logger" do
|
17
|
-
described_class.logger = MyLogger.new
|
18
|
-
described_class.logger.should be_instance_of(MyLogger)
|
14
|
+
before do
|
15
|
+
described_class.logger = nil
|
19
16
|
end
|
20
17
|
|
21
18
|
after do
|
22
19
|
described_class.logger = nil
|
23
20
|
end
|
21
|
+
|
22
|
+
it "defines a logger" do
|
23
|
+
described_class.logger.should be_instance_of(Logger)
|
24
|
+
described_class.logger = MyLogger.new
|
25
|
+
described_class.logger.should be_instance_of(MyLogger)
|
26
|
+
end
|
24
27
|
end
|
25
28
|
|
26
29
|
context "database connection" do
|
@@ -39,6 +42,18 @@ describe PgQueue do
|
|
39
42
|
end
|
40
43
|
end
|
41
44
|
|
45
|
+
context "interval" do
|
46
|
+
after do
|
47
|
+
described_class.interval = nil
|
48
|
+
end
|
49
|
+
|
50
|
+
it "defines the interval" do
|
51
|
+
described_class.interval.should == 0
|
52
|
+
described_class.interval = 5
|
53
|
+
described_class.interval.should == 5
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
42
57
|
context "enqueuing/dequeuing" do
|
43
58
|
let(:connection) { described_class.connection }
|
44
59
|
let(:result) { double("result") }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_queue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pg
|
16
|
-
requirement: &
|
16
|
+
requirement: &70363119914140 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.12.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70363119914140
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: multi_json
|
27
|
-
requirement: &
|
27
|
+
requirement: &70363119913640 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.4
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70363119913640
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70363119913180 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: 2.8.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70363119913180
|
47
47
|
description: Some experimentations with LISTEN/NOTIFY for background jobs
|
48
48
|
email:
|
49
49
|
- me@rafaelss.com
|