Class: Fairway::Queue

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection, *queue_names) ⇒ Queue

Returns a new instance of Queue.



5
6
7
8
# File 'lib/fairway/queue.rb', line 5

def initialize(connection, *queue_names)
  @connection  = connection
  @queue_names = parse_queue_names(queue_names)
end

Instance Attribute Details

#connectionObject (readonly)

Returns the value of attribute connection.



3
4
5
# File 'lib/fairway/queue.rb', line 3

def connection
  @connection
end

#queue_namesObject (readonly)

Returns the value of attribute queue_names.



3
4
5
# File 'lib/fairway/queue.rb', line 3

def queue_names
  @queue_names
end

Instance Method Details

#==(other) ⇒ Object



40
41
42
43
44
45
# File 'lib/fairway/queue.rb', line 40

def ==(other)
  other.respond_to?(:connection) &&
  other.respond_to?(:queue_names) &&
  connection == other.connection &&
  queue_names == other.queue_names
end

#active_facetsObject



10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/fairway/queue.rb', line 10

def active_facets
  facet_names = []

  redis.with_each do |conn|
    facet_names += unique_queues.map do |queue|
      conn.smembers("#{queue}:active_facets")
    end.flatten
  end

  facet_names.uniq.map do |name|
    Facet.new(self, name)
  end
end

#destroyObject



55
56
57
# File 'lib/fairway/queue.rb', line 55

def destroy
  scripts.fairway_destroy(unique_queues)
end

#lengthObject



24
25
26
27
28
29
30
# File 'lib/fairway/queue.rb', line 24

def length
  redis.pools.map do |pool|
    pool.with do |conn|
      conn.mget(unique_queues.map{|q| "#{q}:length" }).map(&:to_i).sum
    end
  end.sum
end

#peekObject



32
33
34
# File 'lib/fairway/queue.rb', line 32

def peek
  scripts.fairway_peek(@queue_names.shuffle.uniq)
end

#pullObject



36
37
38
# File 'lib/fairway/queue.rb', line 36

def pull
  scripts.fairway_pull(@queue_names.shuffle.uniq)
end

#queue_keyObject



51
52
53
# File 'lib/fairway/queue.rb', line 51

def queue_key
  queue
end

#redisObject



59
60
61
# File 'lib/fairway/queue.rb', line 59

def redis
  @connection.redis
end

#scriptsObject



63
64
65
# File 'lib/fairway/queue.rb', line 63

def scripts
  @connection.scripts
end

#unique_queuesObject



47
48
49
# File 'lib/fairway/queue.rb', line 47

def unique_queues
  @queue_names.uniq
end