sidekiq-unique-jobs 8.0.9 → 8.0.11

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +39 -2
  3. data/README.md +56 -43
  4. data/lib/sidekiq_unique_jobs/cli.rb +2 -2
  5. data/lib/sidekiq_unique_jobs/config.rb +51 -32
  6. data/lib/sidekiq_unique_jobs/digests.rb +1 -1
  7. data/lib/sidekiq_unique_jobs/exceptions.rb +2 -2
  8. data/lib/sidekiq_unique_jobs/lock/base_lock.rb +1 -1
  9. data/lib/sidekiq_unique_jobs/lock/while_executing.rb +1 -1
  10. data/lib/sidekiq_unique_jobs/lock.rb +1 -1
  11. data/lib/sidekiq_unique_jobs/lock_args.rb +3 -3
  12. data/lib/sidekiq_unique_jobs/lock_digest.rb +6 -1
  13. data/lib/sidekiq_unique_jobs/lock_ttl.rb +28 -6
  14. data/lib/sidekiq_unique_jobs/locksmith.rb +13 -8
  15. data/lib/sidekiq_unique_jobs/logging.rb +2 -2
  16. data/lib/sidekiq_unique_jobs/lua/delete.lua +6 -5
  17. data/lib/sidekiq_unique_jobs/lua/lock.lua +16 -7
  18. data/lib/sidekiq_unique_jobs/lua/queue.lua +9 -8
  19. data/lib/sidekiq_unique_jobs/lua/shared/_delete_from_queue.lua +10 -10
  20. data/lib/sidekiq_unique_jobs/lua/shared/_delete_from_sorted_set.lua +20 -10
  21. data/lib/sidekiq_unique_jobs/lua/unlock.lua +10 -9
  22. data/lib/sidekiq_unique_jobs/on_conflict/reject.rb +10 -1
  23. data/lib/sidekiq_unique_jobs/on_conflict/replace.rb +3 -3
  24. data/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb +1 -1
  25. data/lib/sidekiq_unique_jobs/on_conflict.rb +2 -2
  26. data/lib/sidekiq_unique_jobs/orphans/manager.rb +3 -3
  27. data/lib/sidekiq_unique_jobs/orphans/ruby_reaper.rb +4 -5
  28. data/lib/sidekiq_unique_jobs/reflections.rb +3 -3
  29. data/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb +2 -2
  30. data/lib/sidekiq_unique_jobs/sidekiq_unique_jobs.rb +4 -4
  31. data/lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb +1 -1
  32. data/lib/sidekiq_unique_jobs/testing.rb +2 -2
  33. data/lib/sidekiq_unique_jobs/version.rb +1 -1
  34. data/lib/sidekiq_unique_jobs/web/helpers.rb +29 -1
  35. data/lib/sidekiq_unique_jobs/web.rb +38 -30
  36. metadata +5 -8
@@ -7,17 +7,15 @@ module SidekiqUniqueJobs
7
7
  # Useful for deleting keys that for whatever reason wasn't deleted
8
8
  # @author Mikael Henriksson <mikael@mhenrixon.com>
9
9
  module Web
10
- def self.registered(app) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
11
- app.helpers do
12
- include Web::Helpers
13
- end
10
+ def self.registered(app)
11
+ app.helpers Web::Helpers
14
12
 
15
13
  app.get "/changelogs" do
16
- @filter = h(params[:filter] || "*")
14
+ @filter = h(safe_url_params("filter") || "*")
17
15
  @filter = "*" if @filter == ""
18
- @count = h(params[:count] || 100).to_i
19
- @current_cursor = h(params[:cursor]).to_i
20
- @prev_cursor = h(params[:prev_cursor]).to_i
16
+ @count = h(safe_url_params("count") || 100).to_i
17
+ @current_cursor = h(safe_url_params("cursor")).to_i
18
+ @prev_cursor = h(safe_url_params("prev_cursor")).to_i
21
19
  @total_size, @next_cursor, @changelogs = changelog.page(
22
20
  cursor: @current_cursor,
23
21
  pattern: @filter,
@@ -29,15 +27,15 @@ module SidekiqUniqueJobs
29
27
 
30
28
  app.get "/changelogs/delete_all" do
31
29
  changelog.clear
32
- redirect_to :changelogs
30
+ safe_redirect_to :changelogs
33
31
  end
34
32
 
35
33
  app.get "/locks" do
36
- @filter = h(params[:filter]) || "*"
34
+ @filter = h(safe_url_params("filter") || "*")
37
35
  @filter = "*" if @filter == ""
38
- @count = h(params[:count] || 100).to_i
39
- @current_cursor = h(params[:cursor]).to_i
40
- @prev_cursor = h(params[:prev_cursor]).to_i
36
+ @count = h(safe_url_params("count") || 100).to_i
37
+ @current_cursor = h(safe_url_params("cursor")).to_i
38
+ @prev_cursor = h(safe_url_params("prev_cursor")).to_i
41
39
 
42
40
  @total_size, @next_cursor, @locks = digests.page(
43
41
  cursor: @current_cursor,
@@ -49,11 +47,11 @@ module SidekiqUniqueJobs
49
47
  end
50
48
 
51
49
  app.get "/expiring_locks" do
52
- @filter = h(params[:filter]) || "*"
50
+ @filter = h(safe_url_params("filter") || "*")
53
51
  @filter = "*" if @filter == ""
54
- @count = h(params[:count] || 100).to_i
55
- @current_cursor = h(params[:cursor]).to_i
56
- @prev_cursor = h(params[:prev_cursor]).to_i
52
+ @count = h(safe_url_params("count") || 100).to_i
53
+ @current_cursor = h(safe_url_params("cursor")).to_i
54
+ @prev_cursor = h(safe_url_params("prev_cursor")).to_i
57
55
 
58
56
  @total_size, @next_cursor, @locks = expiring_digests.page(
59
57
  cursor: @current_cursor,
@@ -67,29 +65,29 @@ module SidekiqUniqueJobs
67
65
  app.get "/locks/delete_all" do
68
66
  digests.delete_by_pattern("*", count: digests.count)
69
67
  expiring_digests.delete_by_pattern("*", count: digests.count)
70
- redirect_to :locks
68
+ safe_redirect_to :locks
71
69
  end
72
70
 
73
71
  app.get "/locks/:digest" do
74
- @digest = h(params[:digest])
72
+ @digest = h(safe_route_params(:digest))
75
73
  @lock = SidekiqUniqueJobs::Lock.new(@digest)
76
74
 
77
75
  erb(unique_template(:lock))
78
76
  end
79
77
 
80
78
  app.get "/locks/:digest/delete" do
81
- digests.delete_by_digest(h(params[:digest]))
82
- expiring_digests.delete_by_digest(h(params[:digest]))
83
- redirect_to :locks
79
+ digests.delete_by_digest(h(safe_route_params(:digest)))
80
+ expiring_digests.delete_by_digest(h(safe_route_params(:digest)))
81
+ safe_redirect_to :locks
84
82
  end
85
83
 
86
84
  app.get "/locks/:digest/jobs/:job_id/delete" do
87
- @digest = h(params[:digest])
88
- @job_id = h(params[:job_id])
85
+ @digest = h(safe_route_params(:digest))
86
+ @job_id = h(safe_route_params(:job_id))
89
87
  @lock = SidekiqUniqueJobs::Lock.new(@digest)
90
88
  @lock.unlock(@job_id)
91
89
 
92
- redirect_to "locks/#{@lock.key}"
90
+ safe_redirect_to "locks/#{@lock.key}"
93
91
  end
94
92
  end
95
93
  end
@@ -99,11 +97,21 @@ begin
99
97
  require "delegate" unless defined?(DelegateClass)
100
98
  require "sidekiq/web" unless defined?(Sidekiq::Web)
101
99
 
102
- Sidekiq::Web.register(SidekiqUniqueJobs::Web)
103
- Sidekiq::Web.tabs["Locks"] = "locks"
104
- Sidekiq::Web.tabs["Expiring Locks"] = "expiring_locks"
105
- Sidekiq::Web.tabs["Changelogs"] = "changelogs"
106
- Sidekiq::Web.settings.locales << File.join(File.dirname(__FILE__), "locales")
100
+ if Sidekiq::MAJOR >= 8
101
+ Sidekiq::Web.configure do |config|
102
+ config.register_extension(
103
+ SidekiqUniqueJobs::Web,
104
+ name: "unique_jobs",
105
+ tab: ["Locks", "Expiring Locks", "Changelogs"],
106
+ index: %w[locks/ expiring_locks/ changelogs/],
107
+ )
108
+ end
109
+ else
110
+ Sidekiq::Web.register(SidekiqUniqueJobs::Web)
111
+ Sidekiq::Web.tabs["Locks"] = "locks"
112
+ Sidekiq::Web.tabs["Expiring Locks"] = "expiring_locks"
113
+ Sidekiq::Web.tabs["Changelogs"] = "changelogs"
114
+ end
107
115
  rescue NameError, LoadError => ex
108
116
  SidekiqUniqueJobs.logger.error(ex)
109
117
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-unique-jobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.9
4
+ version: 8.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Henriksson
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-02-12 00:00:00.000000000 Z
10
+ date: 2025-05-25 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: concurrent-ruby
@@ -39,7 +38,7 @@ dependencies:
39
38
  version: 7.0.0
40
39
  - - "<"
41
40
  - !ruby/object:Gem::Version
42
- version: 8.0.0
41
+ version: 9.0.0
43
42
  type: :runtime
44
43
  prerelease: false
45
44
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +48,7 @@ dependencies:
49
48
  version: 7.0.0
50
49
  - - "<"
51
50
  - !ruby/object:Gem::Version
52
- version: 8.0.0
51
+ version: 9.0.0
53
52
  - !ruby/object:Gem::Dependency
54
53
  name: thor
55
54
  requirement: !ruby/object:Gem::Requirement
@@ -208,7 +207,6 @@ licenses:
208
207
  - MIT
209
208
  metadata:
210
209
  rubygems_mfa_required: 'true'
211
- post_install_message:
212
210
  rdoc_options: []
213
211
  require_paths:
214
212
  - lib
@@ -223,8 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
221
  - !ruby/object:Gem::Version
224
222
  version: '0'
225
223
  requirements: []
226
- rubygems_version: 3.5.6
227
- signing_key:
224
+ rubygems_version: 3.6.2
228
225
  specification_version: 4
229
226
  summary: Sidekiq middleware that prevents duplicates jobs
230
227
  test_files: []