Module: Jobly::JobExtensions::Solo

Includes:
Actions
Included in:
Jobly::Job
Defined in:
lib/jobly/job_extensions/solo.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Actions

#skip_job, #skipped?

Class Method Details

.included(base) ⇒ Object



8
9
10
# File 'lib/jobly/job_extensions/solo.rb', line 8

def self.included(base)
  base.extend ClassMethods
end

Instance Method Details

#solo?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/jobly/job_extensions/solo.rb', line 27

def solo?
  self.class.solo?
end

#solo_full_keyObject



39
40
41
# File 'lib/jobly/job_extensions/solo.rb', line 39

def solo_full_key
  "jobly:solo:#{solo_key}"
end

#solo_keyObject



31
32
33
# File 'lib/jobly/job_extensions/solo.rb', line 31

def solo_key
  @solo_key ||= (self.class.solo_key || solo_key!)
end

#solo_key!Object



35
36
37
# File 'lib/jobly/job_extensions/solo.rb', line 35

def solo_key!
  Digest::MD5.hexdigest "#{self.class.name}:#{params}"
end

#solo_lock(expire = 1.hour) ⇒ Object



49
50
51
52
53
# File 'lib/jobly/job_extensions/solo.rb', line 49

def solo_lock(expire = 1.hour)
  Sidekiq.redis do |redis|
    redis.setex(solo_full_key, expire, '1')
  end
end

#solo_locked?Boolean

Returns:

  • (Boolean)


43
44
45
46
47
# File 'lib/jobly/job_extensions/solo.rb', line 43

def solo_locked?
  Sidekiq.redis do |redis|
    redis.keys(solo_full_key).count >= 1
  end
end

#solo_unlockObject



55
56
57
58
59
# File 'lib/jobly/job_extensions/solo.rb', line 55

def solo_unlock
  Sidekiq.redis do |redis|
    redis.del solo_full_key
  end
end