sidekiq-debouncer 3.0.0 → 3.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c98e0c985f240350757ce46298f39cb5586d7e01966f78bd3a886c8b4a78b7e0
4
- data.tar.gz: e1f7ceda05cd4cc580fc5d318da59ccaf9a8a3f737020524c76a147add5fa5e3
3
+ metadata.gz: 0a48a55ff72c620ec5c777c51d93008502eee9a5a5e6ac5678936a0a937f9300
4
+ data.tar.gz: a3a99b8171604c90d3e3fb2ee2665e8601d2a53e22cae488d7a3018f298c734a
5
5
  SHA512:
6
- metadata.gz: 3175ce8da01db8a593290273a4a7c392133792de93c04a9091662ca96ab24caeea8a60e17e0ab7a7fd16e8b8273d184b62a421deb58374430e26f720f0708927
7
- data.tar.gz: 2e42dedd11a4b6c05e9c4af5446803a1fab05daa7fe762b83ef3846b0f5c8cb253bf6f03e1bbbdc8e21311245087526c89098955c088d040c0c09606bba526da
6
+ metadata.gz: caf0fe8240dd387090d730f7421ed6f92897bbbb770410b7f2861f1bf898f261c8cf801519c9f974c50e9a4929fff3da5f275280bca4de4506bf17ea48fbaff4
7
+ data.tar.gz: 262ca59401d304f301413beda565c40f2557a2352f156ad84e9422e0ab2cf30006e7038e31bcbb67c80ecbe4a575880a3074e6ec74657c74fca4ce250f645c61
data/CHANGELOG.md CHANGED
@@ -1,9 +1,17 @@
1
+ ## [3.1.0] - 2025-03-28
2
+ - Drop support for Ruby < 3.2.0
3
+ - Support for Sidekiq 8 ([#31](https://github.com/paladinsoftware/sidekiq-debouncer/pull/31), [#32](https://github.com/paladinsoftware/sidekiq-debouncer/pull/32))
4
+ - DragonflyDB support ([#29](https://github.com/paladinsoftware/sidekiq-debouncer/pull/29))
5
+
1
6
  ## [3.0.0] - 2024-10-22
2
7
  - Complete rewrite of the library ([#25](https://github.com/paladinsoftware/sidekiq-debouncer/pull/25))
3
8
  - Read only Web UI ([#26](https://github.com/paladinsoftware/sidekiq-debouncer/pull/26))
4
9
  - Drop support for sidekiq 6.x and ruby 2.7 ([#28](https://github.com/paladinsoftware/sidekiq-debouncer/pull/28))
5
10
  - Respect sidekiq_options overridden by .set ([#27](https://github.com/paladinsoftware/sidekiq-debouncer/pull/27))
6
11
 
12
+ **Upgrade notes:**
13
+ Since the job format changed, V3 won't debounce jobs enqueued with V2, although they'll still get executed
14
+
7
15
  ## [2.0.2] - 2023-03-13
8
16
  - support Sidekiq::Testing
9
17
 
@@ -11,7 +19,7 @@
11
19
  - don't remove debounce key in redis to avoid invalid debouncing
12
20
 
13
21
  ## [2.0.0] - 2023-02-28
14
- Complete rewrite of the library:
22
+ Complete rewrite of the library:
15
23
  - Instead of iterating through whole schedule set, sidekiq-debouncer will now cache debounce key in redis with a reference to the job.
16
24
  Thanks to that there is a huge performance boost compared to V1. With 1k jobs in schedule set it's over 100x faster.
17
25
  The difference is even bigger with larger amount of jobs.
@@ -9,7 +9,7 @@ module Sidekiq
9
9
 
10
10
  def initialize(key, score)
11
11
  @key = key
12
- @score = score
12
+ @score = Float(score)
13
13
  end
14
14
 
15
15
  def at
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sidekiq
4
4
  module Debouncer
5
- VERSION = "3.0.0"
5
+ VERSION = "3.1.0"
6
6
  end
7
7
  end
@@ -1,48 +1,50 @@
1
- <header class='row'>
2
- <div class='col-sm-5 pull-left'>
3
- <h3><%= t('Debounces') %></h3>
4
- </div>
5
- <div class='col-sm-7 pull-right'>
6
- <%= erb :_paging, locals: { url: "#{root_path}debounces" } %>
7
- </div>
8
- </header>
9
-
10
- <% if @debounces.size > 0 %>
11
- <form action="<%= root_path %>debounces" method="post">
12
- <%= csrf_tag %>
13
- <div class="table_container">
14
- <table class="table table-striped table-bordered table-hover">
15
- <thead>
16
- <tr>
17
- <th class="table-checkbox checkbox-column">
18
- <label>
19
- <input type="checkbox" class="check_all" />
20
- </label>
21
- </th>
22
- <th><%= t('When') %></th>
23
- <th><%= t('DebounceKey') %></th>
24
- </tr>
25
- </thead>
26
- <% @debounces.each do |entry| %>
27
- <tr>
28
- <td class="table-checkbox">
29
- <label>
30
- <input type='checkbox' name='key[]' value='<%= entry.key %>' class='shift_clickable' />
31
- </label>
32
- </td>
33
- <td>
34
- <a href="<%= root_path %>debounces/<%= ::Base64.urlsafe_encode64(entry.key) %>"><%= relative_time(entry.at) %></a>
35
- </td>
36
- <td>
37
- <a href="<%= root_path %>debounces/<%= ::Base64.urlsafe_encode64(entry.key) %>"><%= entry.key %></a>
38
- </td>
39
- </tr>
40
- <% end %>
41
- </table>
1
+ <section>
2
+ <header class='row'>
3
+ <div class='col-sm-5 pull-left'>
4
+ <h3><%= t('Debounces') %></h3>
5
+ </div>
6
+ <div class='col-sm-7 pull-right'>
7
+ <%= erb :_paging, locals: { url: "#{root_path}debounces" } %>
42
8
  </div>
43
- <!-- <input class="btn btn-danger pull-right flip" type="submit" name="delete" value="<%#= t('Delete') %>" />-->
44
- <!-- <input class="btn btn-danger pull-right flip" type="submit" name="add_to_queue" value="<%#= t('AddToQueue') %>" />-->
45
- </form>
46
- <% else %>
47
- <div class="alert alert-success"><%= t('NoDebouncesFound') %></div>
48
- <% end %>
9
+ </header>
10
+
11
+ <% if @debounces.size > 0 %>
12
+ <form action="<%= root_path %>debounces" method="post">
13
+ <%= csrf_tag %>
14
+ <div class="table_container">
15
+ <table class="table table-striped table-bordered table-hover">
16
+ <thead>
17
+ <tr>
18
+ <th class="table-checkbox checkbox-column">
19
+ <label>
20
+ <input type="checkbox" class="check_all" />
21
+ </label>
22
+ </th>
23
+ <th><%= t('When') %></th>
24
+ <th><%= t('DebounceKey') %></th>
25
+ </tr>
26
+ </thead>
27
+ <% @debounces.each do |entry| %>
28
+ <tr>
29
+ <td class="table-checkbox">
30
+ <label>
31
+ <input type='checkbox' name='key[]' value='<%= entry.key %>' class='shift_clickable' />
32
+ </label>
33
+ </td>
34
+ <td>
35
+ <a href="<%= root_path %>debounces/<%= ::Base64.urlsafe_encode64(entry.key) %>"><%= relative_time(entry.at) %></a>
36
+ </td>
37
+ <td>
38
+ <a href="<%= root_path %>debounces/<%= ::Base64.urlsafe_encode64(entry.key) %>"><%= entry.key %></a>
39
+ </td>
40
+ </tr>
41
+ <% end %>
42
+ </table>
43
+ </div>
44
+ <!-- <input class="btn btn-danger pull-right flip" type="submit" name="delete" value="<%#= t('Delete') %>" />-->
45
+ <!-- <input class="btn btn-danger pull-right flip" type="submit" name="add_to_queue" value="<%#= t('AddToQueue') %>" />-->
46
+ </form>
47
+ <% else %>
48
+ <div class="alert alert-success"><%= t('NoDebouncesFound') %></div>
49
+ <% end %>
50
+ </section>
@@ -1,38 +1,40 @@
1
- <div class="header-container">
2
- <h3><%= t('Job') %></h3>
3
- </div>
1
+ <section>
2
+ <header class="header-container">
3
+ <h3><%= t('Job') %></h3>
4
+ </header>
4
5
 
5
- <div class="table_container">
6
- <table class="table table-bordered table-striped table-hover">
7
- <tbody>
8
- <tr>
9
- <th><%= t('Queue') %></th>
10
- <td><%= @job.queue %></td>
11
- </tr>
12
- <tr>
13
- <th><%= t('When') %></th>
14
- <td><%= relative_time(@job.at) %></td>
15
- </tr>
16
- <tr>
17
- <th><%= t('DebounceKey') %></th>
18
- <td>
19
- <%= @job.key %>
20
- </td>
21
- </tr>
22
- <tr>
23
- <th><%= t('Job') %></th>
24
- <td>
25
- <%= @job.display_class %>
26
- </td>
27
- </tr>
28
- <tr>
29
- <th><%= t('Arguments') %></th>
30
- <td>
31
- <code class="code-wrap">
32
- <div class="args-extended"><%= display_args(@job.args, nil) %></div>
33
- </code>
34
- </td>
35
- </tr>
36
- </tbody>
37
- </table>
38
- </div>
6
+ <div class="table_container">
7
+ <table class="table table-bordered table-striped table-hover">
8
+ <tbody>
9
+ <tr>
10
+ <th><%= t('Queue') %></th>
11
+ <td><%= @job.queue %></td>
12
+ </tr>
13
+ <tr>
14
+ <th><%= t('When') %></th>
15
+ <td><%= relative_time(@job.at) %></td>
16
+ </tr>
17
+ <tr>
18
+ <th><%= t('DebounceKey') %></th>
19
+ <td>
20
+ <%= @job.key %>
21
+ </td>
22
+ </tr>
23
+ <tr>
24
+ <th><%= t('Job') %></th>
25
+ <td>
26
+ <%= @job.display_class %>
27
+ </td>
28
+ </tr>
29
+ <tr>
30
+ <th><%= t('Arguments') %></th>
31
+ <td>
32
+ <code class="code-wrap">
33
+ <div class="args-extended"><%= display_args(@job.args, nil) %></div>
34
+ </code>
35
+ </td>
36
+ </tr>
37
+ </tbody>
38
+ </table>
39
+ </div>
40
+ </section>
@@ -3,6 +3,24 @@
3
3
  if defined?(Sidekiq::Web)
4
4
  require "sidekiq/debouncer/web_extension"
5
5
 
6
- Sidekiq::Web.register Sidekiq::Debouncer::WebExtension
7
- Sidekiq::Web.tabs["Debounces"] = "debounces"
6
+ if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("8.0.0")
7
+ Sidekiq::Web.configure do |config|
8
+ config.register(
9
+ Sidekiq::Debouncer::WebExtension,
10
+ name: "debounces",
11
+ tab: "Debounces",
12
+ index: "debounces"
13
+ )
14
+ end
15
+ elsif Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("7.3.0")
16
+ Sidekiq::Web.register(
17
+ Sidekiq::Debouncer::WebExtension,
18
+ name: "debounces",
19
+ tab: "Debounces",
20
+ index: "debounces"
21
+ )
22
+ else
23
+ Sidekiq::Web.register Sidekiq::Debouncer::WebExtension
24
+ Sidekiq::Web.tabs["Debounces"] = "debounces"
25
+ end
8
26
  end
@@ -5,14 +5,40 @@ require "base64"
5
5
  module Sidekiq
6
6
  module Debouncer
7
7
  module WebExtension
8
+ module Helpers
9
+ def get_route_param(key)
10
+ if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("8.0.0")
11
+ route_params(key)
12
+ else
13
+ route_params[key]
14
+ end
15
+ end
16
+
17
+ def get_url_param(key)
18
+ if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("8.0.0")
19
+ url_params(key)
20
+ else
21
+ params[key]
22
+ end
23
+ end
24
+ end
25
+
8
26
  def self.registered(app)
9
- app.settings.locales << File.join(File.expand_path("..", __FILE__), "locales")
27
+ locales = if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("8.0.0")
28
+ Sidekiq::Web.configure.locales
29
+ else
30
+ app.settings.locales
31
+ end
32
+
33
+ locales << File.join(File.expand_path("..", __FILE__), "locales")
34
+
35
+ app.helpers(Helpers)
10
36
 
11
37
  app.get "/debounces" do
12
38
  view_path = File.join(File.expand_path("..", __FILE__), "views")
13
39
 
14
- @count = (params["count"] || 25).to_i
15
- (@current_page, @total_size, @debounces) = page("debouncer", params["page"], @count)
40
+ @count = (get_url_param("count") || 25).to_i
41
+ (@current_page, @total_size, @debounces) = page("debouncer", get_url_param("page"), @count)
16
42
  @debounces = @debounces.map { |key, score| Sidekiq::Debouncer::Job.new(key, score) }
17
43
 
18
44
  render(:erb, File.read(File.join(view_path, "index.html.erb")))
@@ -21,7 +47,7 @@ module Sidekiq
21
47
  app.get "/debounces/:key" do
22
48
  view_path = File.join(File.expand_path("..", __FILE__), "views")
23
49
 
24
- @job = Sidekiq::Debouncer::Set.new.fetch_by_key(Base64.urlsafe_decode64(route_params[:key]))
50
+ @job = Sidekiq::Debouncer::Set.new.fetch_by_key(Base64.urlsafe_decode64(get_route_param(:key)))
25
51
 
26
52
  render(:erb, File.read(File.join(view_path, "show.html.erb")))
27
53
  end
@@ -27,7 +27,7 @@ Gem::Specification.new do |gem|
27
27
  "sidekiq-debouncer.gemspec"
28
28
  ]
29
29
 
30
- gem.add_dependency "sidekiq", ">= 7.0", "< 8.0"
30
+ gem.add_dependency "sidekiq", ">= 7.0", "< 9.0"
31
31
 
32
32
  gem.add_development_dependency "rspec", "~> 3.12.0"
33
33
  gem.add_development_dependency "timecop", "~> 0.9.6"
@@ -35,4 +35,5 @@ Gem::Specification.new do |gem|
35
35
  gem.add_development_dependency "parallel", "~> 1.22.1"
36
36
  gem.add_development_dependency "standard", "~> 1.24.3"
37
37
  gem.add_development_dependency "rack-test", "~> 2.1.0"
38
+ gem.add_development_dependency "rack-session", "~> 2.1.0"
38
39
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-debouncer
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Zuchmański
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-10-22 00:00:00.000000000 Z
12
+ date: 2025-03-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sidekiq
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: '7.0'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '8.0'
23
+ version: '9.0'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,7 +30,7 @@ dependencies:
30
30
  version: '7.0'
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '8.0'
33
+ version: '9.0'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: rspec
36
36
  requirement: !ruby/object:Gem::Requirement
@@ -115,6 +115,20 @@ dependencies:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: 2.1.0
118
+ - !ruby/object:Gem::Dependency
119
+ name: rack-session
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 2.1.0
125
+ type: :development
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 2.1.0
118
132
  description: |
119
133
  Sidekiq extension that adds the ability to debounce job execution.
120
134
  Worker will postpone its execution after `wait time` have elapsed since the last time it was invoked.
@@ -169,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
183
  - !ruby/object:Gem::Version
170
184
  version: '0'
171
185
  requirements: []
172
- rubygems_version: 3.3.26
186
+ rubygems_version: 3.5.22
173
187
  signing_key:
174
188
  specification_version: 4
175
189
  summary: Sidekiq extension that adds the ability to debounce job execution