Module: PgQueue

Defined in:
lib/pg_queue.rb,
lib/pg_queue/job.rb,
lib/pg_queue/worker.rb,
lib/pg_queue/version.rb,
lib/pg_queue/pg_extensions.rb

Defined Under Namespace

Modules: PgExtensions Classes: Job, Worker

Constant Summary collapse

VERSION =
"0.1.4"

Class Method Summary collapse

Class Method Details

.connectionObject



19
20
21
# File 'lib/pg_queue.rb', line 19

def self.connection
  @connection
end

.connection=(object) ⇒ Object



23
24
25
26
27
# File 'lib/pg_queue.rb', line 23

def self.connection=(object)
  @connection = object.tap do |conn|
    conn.extend(PgQueue::PgExtensions) if object.respond_to?(:exec)
  end
end

.dequeueObject



43
44
45
46
47
48
49
50
51
# File 'lib/pg_queue.rb', line 43

def self.dequeue
  result = connection.first("SELECT id, class_name, args FROM pg_queue_jobs LIMIT 1")
  return nil unless result

  PgQueue::Job.new(result).tap do |job|
    PgQueue.logger.debug("dequeued #{job.id}")
    connection.delete(:pg_queue_jobs, :id => job.id)
  end
end

.enqueue(klass, *args) ⇒ Object



37
38
39
40
41
# File 'lib/pg_queue.rb', line 37

def self.enqueue(klass, *args)
  id = connection.insert(:pg_queue_jobs, { :class_name => klass.name, :args => MultiJson.encode(args) }, "id")
  logger.debug("enqueued #{id}")
  connection.notify(:pg_queue_jobs)
end

.intervalObject



29
30
31
# File 'lib/pg_queue.rb', line 29

def self.interval
  @interval || 0
end

.interval=(seconds) ⇒ Object



33
34
35
# File 'lib/pg_queue.rb', line 33

def self.interval=(seconds)
  @interval = seconds
end

.loggerObject



11
12
13
# File 'lib/pg_queue.rb', line 11

def self.logger
  @logger ||= Logger.new(STDOUT)
end

.logger=(object) ⇒ Object



15
16
17
# File 'lib/pg_queue.rb', line 15

def self.logger=(object)
  @logger = object
end