pg_queue 0.0.2 → 0.0.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/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