Class: UserQ::Queue

Inherits:
Object
  • Object
show all
Defined in:
lib/userq.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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_constraintsObject

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_timeObject

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

Returns:

  • (Boolean)


46
47
48
# File 'lib/userq.rb', line 46

def empty?
  UserQ::UserQueue.count_in_context(queue_constraints[:context]) == 0
end

#empty_queueObject

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.

Returns:

  • (Boolean)


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_entryObject

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

#resetObject



55
56
57
58
# File 'lib/userq.rb', line 55

def reset
  UserQ::UserQueue.reset(queue_constraints[:context])
  true
end