activejob-uniqueness 0.1.2 → 0.4.0
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 +4 -4
- data/CHANGELOG.md +115 -10
- data/README.md +140 -14
- data/lib/active_job/uniqueness/{patch.rb → active_job_patch.rb} +10 -12
- data/lib/active_job/uniqueness/configuration.rb +20 -3
- data/lib/active_job/uniqueness/lock_key.rb +9 -1
- data/lib/active_job/uniqueness/lock_manager.rb +20 -4
- data/lib/active_job/uniqueness/log_subscriber.rb +68 -67
- data/lib/active_job/uniqueness/sidekiq_patch.rb +98 -0
- data/lib/active_job/uniqueness/strategies/base.rb +20 -5
- data/lib/active_job/uniqueness/strategies/until_and_while_executing.rb +9 -9
- data/lib/active_job/uniqueness/version.rb +1 -1
- data/lib/active_job/uniqueness.rb +9 -6
- data/lib/generators/active_job/uniqueness/templates/config/initializers/active_job_uniqueness.rb +11 -4
- metadata +59 -31
- data/.gitignore +0 -14
- data/.rspec +0 -3
- data/.rubocop.yml +0 -38
- data/.travis.yml +0 -22
- data/Gemfile +0 -15
- data/Rakefile +0 -8
- data/activejob-uniqueness.gemspec +0 -36
- data/lib/active_job/uniqueness/patch/sidekiq.rb +0 -93
data/.rubocop.yml
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
AllCops:
|
|
2
|
-
NewCops: enable
|
|
3
|
-
|
|
4
|
-
Layout/LineLength:
|
|
5
|
-
Max: 120
|
|
6
|
-
Exclude:
|
|
7
|
-
- spec/**/*
|
|
8
|
-
|
|
9
|
-
Layout/MultilineMethodCallIndentation:
|
|
10
|
-
Exclude:
|
|
11
|
-
- spec/**/*
|
|
12
|
-
|
|
13
|
-
Lint/AmbiguousBlockAssociation:
|
|
14
|
-
Exclude:
|
|
15
|
-
- spec/**/*
|
|
16
|
-
|
|
17
|
-
Metrics/AbcSize:
|
|
18
|
-
Exclude:
|
|
19
|
-
- spec/**/*
|
|
20
|
-
|
|
21
|
-
Metrics/BlockLength:
|
|
22
|
-
Exclude:
|
|
23
|
-
- activejob-uniqueness.gemspec
|
|
24
|
-
- spec/**/*
|
|
25
|
-
|
|
26
|
-
Metrics/MethodLength:
|
|
27
|
-
Exclude:
|
|
28
|
-
- spec/**/*
|
|
29
|
-
|
|
30
|
-
Style/ClassAndModuleChildren:
|
|
31
|
-
Exclude:
|
|
32
|
-
- spec/**/*
|
|
33
|
-
|
|
34
|
-
Style/Documentation:
|
|
35
|
-
Enabled: false
|
|
36
|
-
|
|
37
|
-
Style/RescueModifier:
|
|
38
|
-
Enabled: false
|
data/.travis.yml
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
dist: xenial
|
|
3
|
-
language: ruby
|
|
4
|
-
services:
|
|
5
|
-
- redis-server
|
|
6
|
-
cache: bundler
|
|
7
|
-
rvm:
|
|
8
|
-
- 2.5.8
|
|
9
|
-
- 2.6.6
|
|
10
|
-
- 2.7.1
|
|
11
|
-
env:
|
|
12
|
-
- ACTIVEJOB_VERSION="~> 4.2.11"
|
|
13
|
-
- ACTIVEJOB_VERSION="~> 5.2.4"
|
|
14
|
-
- ACTIVEJOB_VERSION="~> 6.0.3"
|
|
15
|
-
- ACTIVEJOB_VERSION="~> 6.0.3" SIDEKIQ_VERSION="~> 6.0.0"
|
|
16
|
-
jobs:
|
|
17
|
-
exclude:
|
|
18
|
-
- rvm: 2.7.1
|
|
19
|
-
env: ACTIVEJOB_VERSION="~> 4.2.11"
|
|
20
|
-
|
|
21
|
-
before_install: gem install bundler -v 1.17.3
|
|
22
|
-
bundler_args: --jobs 3 --retry 3
|
data/Gemfile
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
source 'https://rubygems.org'
|
|
4
|
-
|
|
5
|
-
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
|
6
|
-
|
|
7
|
-
# Specify your gem's dependencies in activejob-uniqueness.gemspec
|
|
8
|
-
gemspec
|
|
9
|
-
|
|
10
|
-
gem 'activejob', ENV.fetch('ACTIVEJOB_VERSION', '~> 4.2.11')
|
|
11
|
-
|
|
12
|
-
if ENV['SIDEKIQ_VERSION']
|
|
13
|
-
gem 'sidekiq', ENV.fetch('SIDEKIQ_VERSION')
|
|
14
|
-
gem 'railties', ENV.fetch('ACTIVEJOB_VERSION')
|
|
15
|
-
end
|
data/Rakefile
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
lib = File.expand_path('lib', __dir__)
|
|
4
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
-
require 'active_job/uniqueness/version'
|
|
6
|
-
|
|
7
|
-
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name = 'activejob-uniqueness'
|
|
9
|
-
spec.version = ActiveJob::Uniqueness::VERSION
|
|
10
|
-
spec.authors = ['Rustam Sharshenov']
|
|
11
|
-
spec.email = ['rustam@sharshenov.com']
|
|
12
|
-
|
|
13
|
-
spec.summary = 'Ensure uniqueness of your ActiveJob jobs'
|
|
14
|
-
spec.description = 'Ensure uniqueness of your ActiveJob jobs'
|
|
15
|
-
spec.homepage = 'https://github.com/veeqo/activejob-uniqueness'
|
|
16
|
-
spec.license = 'MIT'
|
|
17
|
-
|
|
18
|
-
if spec.respond_to?(:metadata)
|
|
19
|
-
spec.metadata['homepage_uri'] = spec.homepage
|
|
20
|
-
spec.metadata['source_code_uri'] = spec.homepage
|
|
21
|
-
spec.metadata['changelog_uri'] = 'https://github.com/veeqo/activejob-uniqueness/blob/master/CHANGELOG.md'
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
25
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec|\.rubocop.yml)/}) }
|
|
26
|
-
end
|
|
27
|
-
spec.require_paths = ['lib']
|
|
28
|
-
|
|
29
|
-
spec.add_dependency 'activejob', '>= 4.2'
|
|
30
|
-
spec.add_dependency 'redlock', '>= 1.2', '< 2'
|
|
31
|
-
|
|
32
|
-
spec.add_development_dependency 'bundler'
|
|
33
|
-
spec.add_development_dependency 'pry-byebug'
|
|
34
|
-
spec.add_development_dependency 'rake'
|
|
35
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
36
|
-
end
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module ActiveJob
|
|
4
|
-
module Uniqueness
|
|
5
|
-
module Patch
|
|
6
|
-
def self.delete_sidekiq_job!(job)
|
|
7
|
-
ActiveJob::Uniqueness.unlock!(
|
|
8
|
-
job_class_name: job.fetch('wrapped'),
|
|
9
|
-
arguments: job.fetch('args').first.fetch('arguments')
|
|
10
|
-
)
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
require 'sidekiq/api'
|
|
17
|
-
|
|
18
|
-
Sidekiq.configure_server do |config|
|
|
19
|
-
config.death_handlers << ->(job, _ex) do
|
|
20
|
-
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(job)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
module Sidekiq
|
|
25
|
-
class SortedEntry
|
|
26
|
-
module UniqueExtension
|
|
27
|
-
def delete
|
|
28
|
-
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(item) if super
|
|
29
|
-
item
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
def remove_job
|
|
35
|
-
super do |message|
|
|
36
|
-
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(Sidekiq.load_json(message))
|
|
37
|
-
yield message
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
prepend UniqueExtension
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
class ScheduledSet
|
|
46
|
-
module UniqueExtension
|
|
47
|
-
def delete(score, job_id)
|
|
48
|
-
entry = find_job(job_id)
|
|
49
|
-
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(entry.item) if super(score, job_id)
|
|
50
|
-
entry
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
prepend UniqueExtension
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
class Job
|
|
58
|
-
module UniqueExtension
|
|
59
|
-
def delete
|
|
60
|
-
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(item)
|
|
61
|
-
super
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
prepend UniqueExtension
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
class Queue
|
|
69
|
-
module UniqueExtension
|
|
70
|
-
def clear
|
|
71
|
-
each(&:delete)
|
|
72
|
-
super
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
prepend UniqueExtension
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
class JobSet
|
|
80
|
-
module UniqueExtension
|
|
81
|
-
def clear
|
|
82
|
-
each(&:delete)
|
|
83
|
-
super
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def delete_by_value(name, value)
|
|
87
|
-
ActiveJob::Uniqueness::Patch.delete_sidekiq_job!(Sidekiq.load_json(value)) if super(name, value)
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
prepend UniqueExtension
|
|
92
|
-
end
|
|
93
|
-
end
|