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 +0 -6
- data/lib/pg_queue/pg_extensions.rb +12 -0
- data/lib/pg_queue/tasks.rb +24 -0
- data/lib/pg_queue/version.rb +1 -1
- data/lib/pg_queue/worker.rb +2 -2
- data/lib/pg_queue.rb +4 -5
- data/spec/pg_queue/worker_spec.rb +1 -2
- data/spec/pg_queue_spec.rb +9 -11
- metadata +9 -8
    
        data/bin/queue_worker
    CHANGED
    
    
| @@ -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
         | 
    
        data/lib/pg_queue/version.rb
    CHANGED
    
    
    
        data/lib/pg_queue/worker.rb
    CHANGED
    
    | @@ -26,8 +26,7 @@ module PgQueue | |
| 26 26 |  | 
| 27 27 | 
             
                def stop
         | 
| 28 28 | 
             
                  @running = false
         | 
| 29 | 
            -
                  PgQueue.connection  | 
| 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 | 
| 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(: | 
| 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
         | 
    
        data/spec/pg_queue_spec.rb
    CHANGED
    
    | @@ -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( | 
| 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 | 
            -
             | 
| 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. | 
| 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- | 
| 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: & | 
| 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: * | 
| 24 | 
            +
              version_requirements: *70341859292320
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: multi_json
         | 
| 27 | 
            -
              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: * | 
| 35 | 
            +
              version_requirements: *70341859291820
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: rspec
         | 
| 38 | 
            -
              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: * | 
| 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
         |