sidekiq-perform_once 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/sidekiq/perform_once/base.rb +43 -0
- data/lib/sidekiq/perform_once/delayed.rb +22 -0
- data/lib/sidekiq/perform_once.rb +22 -0
- data/lib/sidekiq_perform_once.rb +2 -0
- metadata +76 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 970595fd431b198d2daa9d8cb04210e06358c039
|
4
|
+
data.tar.gz: 7aa571ff56eb08e128d08ef8c5f01c0fff7314c5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dcdaa58dadf8862739cda46ac8f4117384cd27b265851ff29ee74a6102827f04d34784a88c4af26123ca1f480edfc61273f0e26fef49b842f1ba6777952c90bd
|
7
|
+
data.tar.gz: 27a7df4ca2836189da49566c7ccd475c75b14e7139c33205e5065fa518034e15ef2f91b4525b4167f3535b0fcb337342a014b7d0bf981b58fe03d0051b038fb9
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "active_support/core_ext/array/wrap"
|
2
|
+
|
3
|
+
module Sidekiq
|
4
|
+
module PerformOnce
|
5
|
+
class Base
|
6
|
+
def initialize(worker, *args)
|
7
|
+
@worker, @args = worker, args
|
8
|
+
end
|
9
|
+
|
10
|
+
def jobs
|
11
|
+
@jobs ||= Array.wrap(get_queue.select {|j| j.klass == @worker.name && j.args == @args })
|
12
|
+
end
|
13
|
+
|
14
|
+
def keep_one_job_or_perform!
|
15
|
+
case jobs
|
16
|
+
when (lambda &:one?) then jobs.first.try(:jid)
|
17
|
+
when (lambda &:many?) then keep_one_job!
|
18
|
+
when (lambda &:empty?) then perform!
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def get_queue
|
24
|
+
Sidekiq::Queue.new(@worker.send(:get_sidekiq_options).try(:fetch, "queue"))
|
25
|
+
end
|
26
|
+
|
27
|
+
def kept_job
|
28
|
+
jobs.first
|
29
|
+
end
|
30
|
+
|
31
|
+
def perform!
|
32
|
+
@worker.perform_async(*@args)
|
33
|
+
end
|
34
|
+
|
35
|
+
def keep_one_job!
|
36
|
+
kept_jid = kept_job.try(:jid)
|
37
|
+
return if kept_jid.nil?
|
38
|
+
jobs.each {|j| j.delete if j.jid != kept_jid }
|
39
|
+
return kept_jid
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Sidekiq
|
2
|
+
module PerformOnce
|
3
|
+
class Delayed < Base
|
4
|
+
def initialize(worker, delay, *args)
|
5
|
+
@worker, @delay, @args = worker, delay, args
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
def get_queue
|
10
|
+
Sidekiq::ScheduledSet.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def kept_job
|
14
|
+
jobs.max_by(&:enqueued_at)
|
15
|
+
end
|
16
|
+
|
17
|
+
def perform!
|
18
|
+
@worker.perform_in(@delay, *@args)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "active_support/concern"
|
2
|
+
require "sidekiq/perform_once/base"
|
3
|
+
require "sidekiq/perform_once/delayed"
|
4
|
+
|
5
|
+
module Sidekiq
|
6
|
+
module PerformOnce
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def perform_once(*args)
|
11
|
+
Sidekiq::PerformOnce::Base.new(self, *args).keep_one_job_or_perform!
|
12
|
+
end
|
13
|
+
|
14
|
+
def perform_once_in(delay, *args)
|
15
|
+
Sidekiq::PerformOnce::Delayed.new(self, delay.to_i, *args).keep_one_job_or_perform!
|
16
|
+
end
|
17
|
+
|
18
|
+
alias_method :perform_once_now, :perform_once
|
19
|
+
alias_method :perform_once_at, :perform_once_in
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sidekiq-perform_once
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tõnis Simo
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.5
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.0.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sidekiq
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.0.0
|
41
|
+
description: Perform sidekiq jobs with the same arguments only once.
|
42
|
+
email:
|
43
|
+
- anton.estum@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- lib/sidekiq/perform_once.rb
|
49
|
+
- lib/sidekiq/perform_once/base.rb
|
50
|
+
- lib/sidekiq/perform_once/delayed.rb
|
51
|
+
- lib/sidekiq_perform_once.rb
|
52
|
+
homepage: https://github.com/estum/sidekiq-perform_once
|
53
|
+
licenses: []
|
54
|
+
metadata: {}
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 2.4.1
|
72
|
+
signing_key:
|
73
|
+
specification_version: 4
|
74
|
+
summary: Sidekiq::PerformOnce
|
75
|
+
test_files: []
|
76
|
+
has_rdoc:
|