unique_job 0.3.0.pre → 0.4.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b63e8007f726ff6fa7024e33e896356a0f0a8165b811ef8df75fa890275e498
4
- data.tar.gz: 763c15b9b7b7f68c98977c9c12fb91ab000fa3b884de9992de6a37d34a28c390
3
+ metadata.gz: e9d6d855680edc62ab346669253c4673b6876f6661641a6b8be4228da95790b6
4
+ data.tar.gz: a50467a6416a3e8d38982a8cf183aaa93def34e8a0a6f647a43b954a8a6d4860
5
5
  SHA512:
6
- metadata.gz: f1e5231116d67db01e395a3788b54d9a94cf94dd0ea691fe6feff2a5e7f7a79008b9b011badce76074dd03bd1c4857a633b6cc1975644a313b5d0c633f5ba6e7
7
- data.tar.gz: dcc61ef6f05b02d7bb8a285e429ff7499332341ba2ba10a7a6f6609e8505dbf065f227aa08eec3460b9c981f7cc5ae2c5977ba9aeecf9355ec21c85904d675af
6
+ metadata.gz: 2a63e1bea71e94f76e050cf68442cb7503259a25995ea66501da6946c82a2a9dcdcd4cd2190d778fa16829c46e34051023cadb695b473d843baae984cf32b7a3
7
+ data.tar.gz: c7e82bd747e21a6bdbf1b12a479eb35b9f102f3466d8d87ebc7eba8e03951ace19219cb482ea86ed9762fec27c306a579609d7004a41be1bf7e05aca6132bdc6
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ -fd
2
+ --require spec_helper
data/Gemfile CHANGED
@@ -4,4 +4,4 @@ source "https://rubygems.org"
4
4
  gemspec
5
5
 
6
6
  gem "rake", "~> 12.0"
7
- gem "minitest", "~> 5.0"
7
+ gem "rspec"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- unique_job (0.3.0.pre)
4
+ unique_job (0.4.1)
5
5
  redis
6
6
  sidekiq (> 6.0, < 7.0)
7
7
 
@@ -9,10 +9,23 @@ GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
11
  connection_pool (2.2.3)
12
- minitest (5.14.2)
12
+ diff-lcs (1.4.4)
13
13
  rack (2.2.3)
14
14
  rake (12.3.3)
15
15
  redis (4.2.2)
16
+ rspec (3.10.0)
17
+ rspec-core (~> 3.10.0)
18
+ rspec-expectations (~> 3.10.0)
19
+ rspec-mocks (~> 3.10.0)
20
+ rspec-core (3.10.1)
21
+ rspec-support (~> 3.10.0)
22
+ rspec-expectations (3.10.1)
23
+ diff-lcs (>= 1.2.0, < 2.0)
24
+ rspec-support (~> 3.10.0)
25
+ rspec-mocks (3.10.2)
26
+ diff-lcs (>= 1.2.0, < 2.0)
27
+ rspec-support (~> 3.10.0)
28
+ rspec-support (3.10.3)
16
29
  sidekiq (6.1.2)
17
30
  connection_pool (>= 2.2.2)
18
31
  rack (~> 2.0)
@@ -22,8 +35,8 @@ PLATFORMS
22
35
  ruby
23
36
 
24
37
  DEPENDENCIES
25
- minitest (~> 5.0)
26
38
  rake (~> 12.0)
39
+ rspec
27
40
  unique_job!
28
41
 
29
42
  BUNDLED WITH
@@ -4,6 +4,10 @@ module UniqueJob
4
4
  class ClientMiddleware
5
5
  include Util
6
6
 
7
+ def initialize(redis_options)
8
+ @redis_options = redis_options
9
+ end
10
+
7
11
  def call(worker_str, job, queue, redis_pool, &block)
8
12
  if job.has_key?('at')
9
13
  # perform_in or perform_at
@@ -40,8 +40,10 @@ module UniqueJob
40
40
  end
41
41
 
42
42
  class << self
43
+ attr_accessor :redis_options
44
+
43
45
  def redis
44
- @redis ||= Redis.client(ENV['REDIS_HOST'])
46
+ @redis ||= Redis.new(redis_options)
45
47
  end
46
48
  end
47
49
 
@@ -58,7 +60,7 @@ module UniqueJob
58
60
  super(*args, &blk)
59
61
  rescue => e
60
62
  elapsed = Time.now - start
61
- logger.warn "Rescue all errors in #{self.class}##{method_name} #{e.inspect} elapsed=#{sprintf("%.3f sec", elapsed)}"
63
+ logger.warn "[UniqueJob] Rescue all errors in #{self.class}##{method_name} #{e.inspect} elapsed=#{sprintf("%.3f sec", elapsed)}"
62
64
  logger.debug { e.backtrace.join("\n") }
63
65
  nil
64
66
  end
@@ -4,6 +4,10 @@ module UniqueJob
4
4
  class ServerMiddleware
5
5
  include Util
6
6
 
7
+ def initialize(redis_options)
8
+ @redis_options = redis_options
9
+ end
10
+
7
11
  def call(worker, msg, queue, &block)
8
12
  perform_if_unique(worker, msg['args'], &block)
9
13
  end
@@ -10,34 +10,37 @@ module UniqueJob
10
10
  unique_key = worker.unique_key(*args)
11
11
  logger.debug { "[UniqueJob] Calculate unique key worker=#{worker.class} key=#{unique_key}" }
12
12
 
13
- if unique_key.nil? || unique_key.to_s.empty?
14
- logger.warn { "[UniqueJob] Don't check a job with a blank key worker=#{worker.class} key=#{unique_key}" }
15
- yield
16
- elsif perform_unique_check(worker, args, unique_key.to_s)
13
+ if check_uniqueness(worker, unique_key)
17
14
  yield
15
+ else
16
+ logger.debug { "[UniqueJob] Duplicate job skipped worker=#{worker.class} key=#{unique_key}" }
17
+ perform_callback(worker, :after_skip, args)
18
+ nil
18
19
  end
19
20
  else
20
21
  yield
21
22
  end
22
23
  end
23
24
 
24
- def perform_unique_check(worker, args, unique_key)
25
- history = job_history(worker)
26
-
27
- if history.exists?(unique_key)
28
- logger.info { "[UniqueJob] Skip duplicate job worker=#{worker.class} key=#{unique_key}" }
25
+ def check_uniqueness(worker, key)
26
+ if key.nil? || key.to_s.empty?
27
+ logger.warn { "[UniqueJob] Don't check a job with a blank key worker=#{worker.class} key=#{key}" }
28
+ return false
29
+ end
29
30
 
30
- perform_callback(worker, :after_skip, args)
31
+ history = job_history(worker)
31
32
 
33
+ if history.exists?(key)
32
34
  false
33
35
  else
34
- history.add(unique_key)
36
+ history.add(key)
35
37
  true
36
38
  end
37
39
  end
38
40
 
39
41
  def job_history(worker)
40
42
  ttl = worker.respond_to?(:unique_in) ? worker.unique_in : 3600
43
+ JobHistory.redis_options = @redis_options
41
44
  JobHistory.new(worker.class, self.class, ttl)
42
45
  end
43
46
 
@@ -1,3 +1,3 @@
1
1
  module UniqueJob
2
- VERSION = "0.3.0.pre"
2
+ VERSION = "0.4.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unique_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.pre
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ts-3156
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-25 00:00:00.000000000 Z
11
+ date: 2021-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -52,6 +52,7 @@ extensions: []
52
52
  extra_rdoc_files: []
53
53
  files:
54
54
  - ".gitignore"
55
+ - ".rspec"
55
56
  - ".ruby-version"
56
57
  - ".travis.yml"
57
58
  - CODE_OF_CONDUCT.md
@@ -88,9 +89,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
88
89
  version: 2.3.0
89
90
  required_rubygems_version: !ruby/object:Gem::Requirement
90
91
  requirements:
91
- - - ">"
92
+ - - ">="
92
93
  - !ruby/object:Gem::Version
93
- version: 1.3.1
94
+ version: '0'
94
95
  requirements: []
95
96
  rubygems_version: 3.1.6
96
97
  signing_key: