Class: Polipus::QueueOverflow::MongoQueue
- Inherits:
-
Object
- Object
- Polipus::QueueOverflow::MongoQueue
- Defined in:
- lib/polipus/queue_overflow/mongo_queue.rb
Direct Known Subclasses
Instance Method Summary collapse
- #clear ⇒ Object
- #empty? ⇒ Boolean
-
#initialize(mongo_db, queue_name, options = {}) ⇒ MongoQueue
constructor
A new instance of MongoQueue.
- #length ⇒ Object (also: #size)
- #pop(_ = false) ⇒ Object (also: #dec, #shift)
- #push(data) ⇒ Object (also: #enc, #<<)
Constructor Details
#initialize(mongo_db, queue_name, options = {}) ⇒ MongoQueue
Returns a new instance of MongoQueue.
6 7 8 9 10 11 12 13 |
# File 'lib/polipus/queue_overflow/mongo_queue.rb', line 6 def initialize(mongo_db, queue_name, = {}) @mongo_db = mongo_db @collection_name = "polipus_q_overflow_#{queue_name}" @semaphore = Mutex.new = [:ensure_uniq] ||= false [:ensure_uniq] && ensure_index end |
Instance Method Details
#clear ⇒ Object
23 24 25 26 |
# File 'lib/polipus/queue_overflow/mongo_queue.rb', line 23 def clear @mongo_db[@collection_name].drop [:ensure_uniq] && ensure_index end |
#empty? ⇒ Boolean
19 20 21 |
# File 'lib/polipus/queue_overflow/mongo_queue.rb', line 19 def empty? !(length > 0) end |
#length ⇒ Object Also known as: size
15 16 17 |
# File 'lib/polipus/queue_overflow/mongo_queue.rb', line 15 def length @mongo_db[@collection_name].count end |
#pop(_ = false) ⇒ Object Also known as: dec, shift
37 38 39 40 41 42 43 44 |
# File 'lib/polipus/queue_overflow/mongo_queue.rb', line 37 def pop(_ = false) @semaphore.synchronize do doc = @mongo_db[@collection_name].find({}, sort: { _id: 1 }).limit(1).first return nil if doc.nil? @mongo_db[@collection_name].remove(_id: doc['_id']) doc && doc['payload'] ? doc['payload'] : nil end end |
#push(data) ⇒ Object Also known as: enc, <<
28 29 30 31 32 33 34 35 |
# File 'lib/polipus/queue_overflow/mongo_queue.rb', line 28 def push(data) if [:ensure_uniq] @mongo_db[@collection_name].update({ payload: data }, { payload: data }, { upsert: 1, w: 1 }) else @mongo_db[@collection_name].insert(payload: data) end true end |