Class: UserQ::Queue
- Inherits:
-
Object
- Object
- UserQ::Queue
- Defined in:
- lib/userq.rb
Instance Attribute Summary collapse
-
#queue_constraints ⇒ Object
Returns the value of attribute queue_constraints.
Instance Method Summary collapse
-
#avg_wait_time ⇒ Object
nearest_time but more human-readable.
-
#constraint(input) ⇒ Object
Alias of self.constraints.
-
#constraints(input) ⇒ Object
Update the constraints.
- #empty? ⇒ Boolean
-
#empty_queue ⇒ Object
Clean entries that aren’t ever going to be re-used.
- #enter(data = {}) ⇒ Object
-
#enter_into_queue? ⇒ Boolean
Beautiful syntax.
-
#initialize(constraints = {}) ⇒ Queue
constructor
pre: constraints is a hash - capacity (int), taken (int), entry_time (int of seconds) post: instance of UserQ::Queue.
-
#nearest_entry ⇒ Object
In seconds how long the next entry in the queue will expire.
- #reset ⇒ Object
Constructor Details
#initialize(constraints = {}) ⇒ Queue
pre: constraints is a hash - capacity (int), taken (int), entry_time (int of seconds) post: instance of UserQ::Queue
8 9 10 |
# File 'lib/userq.rb', line 8 def initialize constraints = {} self.queue_constraints = { context: 'all', capacity: 2, taken: 0, entry_time: 180, auto_clean: true }.merge(constraints) end |
Instance Attribute Details
#queue_constraints ⇒ Object
Returns the value of attribute queue_constraints.
4 5 6 |
# File 'lib/userq.rb', line 4 def queue_constraints @queue_constraints end |
Instance Method Details
#avg_wait_time ⇒ Object
nearest_time but more human-readable
35 36 37 38 39 40 41 42 43 44 |
# File 'lib/userq.rb', line 35 def avg_wait_time # nearest_time but more human-readable case nearest_entry.floor when 0..30 return "Less than 30 seconds" when 31..60 return "Less than a minute" else return "approximately #{(nearest_entry.floor / 60).floor} minutes" end end |
#constraint(input) ⇒ Object
Alias of self.constraints
16 17 18 |
# File 'lib/userq.rb', line 16 def constraint input # Alias of self.constraints constraints(input) end |
#constraints(input) ⇒ Object
Update the constraints
12 13 14 |
# File 'lib/userq.rb', line 12 def constraints input # Update the constraints queue_constraints.merge!(input) end |
#empty? ⇒ Boolean
46 47 48 |
# File 'lib/userq.rb', line 46 def empty? UserQ::UserQueue.count_in_context(queue_constraints[:context]) == 0 end |
#empty_queue ⇒ Object
Clean entries that aren’t ever going to be re-used.
50 51 52 53 |
# File 'lib/userq.rb', line 50 def empty_queue # Clean entries that aren't ever going to be re-used. UserQ::UserQueue.empty(queue_constraints[:context]) true end |
#enter(data = {}) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/userq.rb', line 60 def enter data = {} return false unless enter_into_queue? entry = UserQ::UserQueue.new entry.code = UserQ::Internal.generate_code entry.expires_at = UserQ::Internal.current_time + queue_constraints[:entry_time] entry.data = data.to_json entry.context = queue_constraints[:context] entry.save # Automatically clean expired tokens. Woohoo! empty_queue if queue_constraints[:auto_clean] Entry.new(entry.code) end |
#enter_into_queue? ⇒ Boolean
Beautiful syntax.
23 24 25 26 27 28 29 |
# File 'lib/userq.rb', line 23 def enter_into_queue? # Check if enough space in queue current_limit = queue_constraints[:capacity].to_i current_usage = queue_constraints[:taken].to_i + UserQ::UserQueue.count_unexpired(queue_constraints[:context]) # Assess whether enough space left into queue current_usage < current_limit end |
#nearest_entry ⇒ Object
In seconds how long the next entry in the queue will expire.
31 32 33 |
# File 'lib/userq.rb', line 31 def nearest_entry # In seconds how long the next entry in the queue will expire. UserQ::UserQueue.next_in_seconds(queue_constraints[:context]) end |