pg_queue 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/bin/queue_worker CHANGED
@@ -1,12 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "pg_queue"
3
3
 
4
- class MailQueue
5
- def self.perform(email)
6
- puts email
7
- end
8
- end
9
-
10
4
  worker = PgQueue::Worker.new
11
5
 
12
6
  ["INT", "TERM"].each do |signal|
@@ -37,5 +37,17 @@ module PgQueue
37
37
  def unlisten(key)
38
38
  exec("UNLISTEN #{key}")
39
39
  end
40
+
41
+ def new_connection
42
+ PGconn.open(
43
+ :host => host,
44
+ :port => port,
45
+ :user => user,
46
+ :password => pass,
47
+ :dbname => db
48
+ ).tap do |conn|
49
+ conn.extend(PgExtensions)
50
+ end
51
+ end
40
52
  end
41
53
  end
@@ -0,0 +1,24 @@
1
+ namespace :pg_queue do
2
+ desc "Start worker"
3
+ task :work do
4
+ worker = PgQueue::Worker.new
5
+
6
+ ["INT", "TERM"].each do |signal|
7
+ trap(signal) do
8
+ worker.stop
9
+ end
10
+ end
11
+
12
+ worker.start
13
+ end
14
+
15
+ desc "Drop jobs table"
16
+ task :drop_table do
17
+ PgQueue.connection.exec("DROP TABLE IF EXISTS pg_queue_jobs")
18
+ end
19
+
20
+ desc "Create jobs table"
21
+ task :create_table => :drop_table do
22
+ PgQueue.connection.exec("CREATE TABLE pg_queue_jobs (id SERIAL, class_name VARCHAR, args TEXT)")
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module PgQueue
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -26,8 +26,7 @@ module PgQueue
26
26
 
27
27
  def stop
28
28
  @running = false
29
- PgQueue.connection = nil
30
- PgQueue.connection.notify(:pg_queue_jobs, "stop")
29
+ PgQueue.connection.new_connection.notify(:pg_queue_jobs, "stop")
31
30
  end
32
31
 
33
32
  def running?
@@ -43,6 +42,7 @@ module PgQueue
43
42
  rescue => ex
44
43
  PgQueue.logger.fatal(ex)
45
44
  PgQueue.logger.fatal(ex.message)
45
+ PgQueue.logger.fatal(ex.backtrace)
46
46
  end
47
47
  end
48
48
  end
data/lib/pg_queue.rb CHANGED
@@ -17,14 +17,13 @@ module PgQueue
17
17
  end
18
18
 
19
19
  def self.connection
20
- @connection ||= begin
21
- conn = PGconn.open(:dbname => 'pg_queue_test')
22
- conn.extend(PgQueue::PgExtensions)
23
- end
20
+ @connection
24
21
  end
25
22
 
26
23
  def self.connection=(object)
27
- @connection = object
24
+ @connection = object.tap do |conn|
25
+ conn.extend(PgQueue::PgExtensions) if object.respond_to?(:exec)
26
+ end
28
27
  end
29
28
 
30
29
  def self.enqueue(klass, *args)
@@ -42,8 +42,7 @@ describe PgQueue::Worker do
42
42
  end
43
43
 
44
44
  it "notifies worker to stop" do
45
- PgQueue.should_receive(:connection=).with(nil)
46
- PgQueue.should_receive(:connection).and_return(connection)
45
+ PgQueue.connection.should_receive(:new_connection).and_return(connection)
47
46
  connection.should_receive(:notify).with(:pg_queue_jobs, "stop")
48
47
 
49
48
  subject.should be_running
@@ -1,10 +1,15 @@
1
1
  require "spec_helper"
2
2
 
3
3
  class MyLogger; end
4
- class MyDbConnection; end
4
+ class MyDbConnection; def exec; end; end
5
5
  class MyQueue; end
6
6
 
7
7
  describe PgQueue do
8
+ before do
9
+ described_class.connection = MyDbConnection.new
10
+ described_class.logger = Logger.new("/dev/null")
11
+ end
12
+
8
13
  context "logging" do
9
14
  its(:logger) { should be_instance_of(Logger) }
10
15
 
@@ -19,25 +24,18 @@ describe PgQueue do
19
24
  end
20
25
 
21
26
  context "database connection" do
22
- its(:connection) { should be_instance_of(PGconn) }
27
+ its(:connection) { should be_instance_of(MyDbConnection) }
23
28
 
24
29
  context "extensions" do
25
30
  subject { described_class.connection }
31
+
26
32
  it { should respond_to(:insert) }
27
33
  it { should respond_to(:notify) }
28
34
  it { should respond_to(:delete) }
29
35
  it { should respond_to(:first) }
30
36
  it { should respond_to(:listen) }
31
37
  it { should respond_to(:unlisten) }
32
- end
33
-
34
- it "defines a new connection" do
35
- described_class.connection = MyDbConnection.new
36
- described_class.connection.should be_instance_of(MyDbConnection)
37
- end
38
-
39
- after do
40
- described_class.connection = nil
38
+ it { should respond_to(:new_connection) }
41
39
  end
42
40
  end
43
41
 
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.2
4
+ version: 0.0.3
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-27 00:00:00.000000000 Z
12
+ date: 2012-01-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pg
16
- requirement: &70278043238320 !ruby/object:Gem::Requirement
16
+ requirement: &70341859292320 !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: *70278043238320
24
+ version_requirements: *70341859292320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: multi_json
27
- requirement: &70278043237820 !ruby/object:Gem::Requirement
27
+ requirement: &70341859291820 !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: *70278043237820
35
+ version_requirements: *70341859291820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70278043237360 !ruby/object:Gem::Requirement
38
+ requirement: &70341859291360 !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: *70278043237360
46
+ version_requirements: *70341859291360
47
47
  description: Some experimentations with LISTEN/NOTIFY for background jobs
48
48
  email:
49
49
  - me@rafaelss.com
@@ -62,6 +62,7 @@ files:
62
62
  - lib/pg_queue.rb
63
63
  - lib/pg_queue/job.rb
64
64
  - lib/pg_queue/pg_extensions.rb
65
+ - lib/pg_queue/tasks.rb
65
66
  - lib/pg_queue/version.rb
66
67
  - lib/pg_queue/worker.rb
67
68
  - pg_queue.gemspec