Class: Postqueue::Item
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Postqueue::Item
- Extended by:
- RawInserter
- Defined in:
- lib/postqueue/item.rb,
lib/postqueue/item/enqueue.rb,
lib/postqueue/item/inserter.rb
Overview
An item class.
Defined Under Namespace
Modules: ActiveRecordInserter, RawInserter
Class Method Summary collapse
-
.enqueue(op:, entity_id:, ignore_duplicates: false) ⇒ Object
Enqueues an queue item.
-
.enqueue_many(op:, entity_ids:, ignore_duplicates:) ⇒ Object
:nodoc:.
- .postpone(ids) ⇒ Object
Methods included from RawInserter
insert_item, prepared_inserter_statement
Class Method Details
.enqueue(op:, entity_id:, ignore_duplicates: false) ⇒ Object
Enqueues an queue item. If the operation is duplicate, and an entry with the same combination of op and entity_id exists already, no new entry will be added to the queue.
Returns the number of items that have been enqueued.
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/postqueue/item/enqueue.rb', line 8 def self.enqueue(op:, entity_id:, ignore_duplicates: false) if entity_id.is_a?(Enumerable) return enqueue_many(op: op, entity_ids: entity_id, ignore_duplicates: ignore_duplicates) end if ignore_duplicates && where(op: op, entity_id: entity_id).present? return 0 end insert_item op: op, entity_id: entity_id 1 end |
.enqueue_many(op:, entity_ids:, ignore_duplicates:) ⇒ Object
:nodoc:
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/postqueue/item/enqueue.rb', line 21 def self.enqueue_many(op:, entity_ids:, ignore_duplicates:) #:nodoc: entity_ids = Array(entity_ids) entity_ids.uniq! if ignore_duplicates transaction do entity_ids.each do |entity_id| enqueue(op: op, entity_id: entity_id, ignore_duplicates: ignore_duplicates) end end entity_ids.count end |
.postpone(ids) ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/postqueue/item.rb', line 9 def self.postpone(ids) connection.exec_query " UPDATE \#{table_name}\n SET failed_attempts = failed_attempts+1,\n next_run_at = next_run_at + power(failed_attempts + 1, 1.5) * interval '10 second'\n WHERE id IN (\#{ids.join(',')})\n SQL\nend\n" |