Class: SuckerPunch::Queue

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

Defined Under Namespace

Classes: MaxWorkersExceeded, NotEnoughWorkers

Constant Summary collapse

DEFAULT_OPTIONS =
{ workers: 2 }
PREFIX =
"sucker_punch"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass) ⇒ Queue

Returns a new instance of Queue.



29
30
31
32
33
# File 'lib/sucker_punch/queue.rb', line 29

def initialize(klass)
  @klass = klass
  @pool = nil
  @mutex = Mutex.new
end

Instance Attribute Details

#klassObject (readonly)

Returns the value of attribute klass.



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

def klass
  @klass
end

#poolObject

Returns the value of attribute pool.



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

def pool
  @pool
end

Class Method Details

.clear_allObject



18
19
20
21
22
23
24
25
26
27
# File 'lib/sucker_punch/queue.rb', line 18

def self.clear_all
  Celluloid::Actor.all.each do |actor|
    registered_name = actor.registered_name.to_s
    matches = registered_name.match(PREFIX).to_a

    if matches.any?
      Celluloid::Actor.delete(registered_name)
    end
  end
end

.find(klass) ⇒ Object



13
14
15
16
# File 'lib/sucker_punch/queue.rb', line 13

def self.find(klass)
  queue = self.new(klass)
  Celluloid::Actor[queue.name]
end

Instance Method Details

#nameObject



53
54
55
56
# File 'lib/sucker_punch/queue.rb', line 53

def name
  klass_name = klass.to_s.underscore
  "#{PREFIX}_#{klass_name}".to_sym
end

#register(num_workers = DEFAULT_OPTIONS[:workers]) ⇒ Object

Raises:



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/sucker_punch/queue.rb', line 35

def register(num_workers = DEFAULT_OPTIONS[:workers])
  num_workers ||= DEFAULT_OPTIONS[:workers]
  raise MaxWorkersExceeded if num_workers > 200
  raise NotEnoughWorkers if num_workers < 1

  @mutex.synchronize {
    unless registered?
      initialize_celluloid_pool(num_workers)
      register_celluloid_pool
    end
  }
  self.class.find(klass)
end

#registered?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/sucker_punch/queue.rb', line 49

def registered?
  Celluloid::Actor.registered.include?(name.to_sym)
end