Module: Resque::Plugins::WaitingRoom

Defined in:
lib/resque/plugins/version.rb,
lib/resque/plugins/waiting_room.rb

Defined Under Namespace

Classes: MissingParams

Constant Summary collapse

VERSION =
'0.2.2'

Instance Method Summary collapse

Instance Method Details

#before_perform_waiting_room(*args) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/resque/plugins/waiting_room.rb', line 17

def before_perform_waiting_room(*args)
  key = waiting_room_redis_key
  return unless remaining_performs_key?(key)

  performs_left = Resque.redis.decrby(key, 1).to_i
  if performs_left < 1
    Resque.push 'waiting_room', class: self.to_s, args: args
    raise Resque::Job::DontPerform
  end
end

#can_be_performed(params) ⇒ Object

Raises:



6
7
8
9
10
11
# File 'lib/resque/plugins/waiting_room.rb', line 6

def can_be_performed(params)
  raise MissingParams unless params.is_a?(Hash) && params.keys.sort == [:period, :times]

  @period ||= params[:period]
  @max_performs ||= params[:times].to_i
end

#remaining_performs_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
31
32
33
# File 'lib/resque/plugins/waiting_room.rb', line 28

def remaining_performs_key?(key)
  # Redis SET: with the ex and nx option  sets the keys if it doesn't exist,
  # returns true if key was created redis => 2.6 required
  new_key = Resque.redis.set(key, @max_performs - 1, ex: @period, nx: true)
  return !new_key
end

#repush(*args) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/resque/plugins/waiting_room.rb', line 35

def repush(*args)
  key = waiting_room_redis_key
  value = Resque.redis.get(key)
  no_performs_left = value && value != "" && value.to_i <= 0
  Resque.push 'waiting_room', class: self.to_s, args: args if no_performs_left

  return no_performs_left
end

#waiting_room_redis_keyObject



13
14
15
# File 'lib/resque/plugins/waiting_room.rb', line 13

def waiting_room_redis_key
  [self.to_s, 'remaining_performs'].compact.join(':')
end