git: 0b1b15396e1b - main - devel/rubygem-sidekiq-unique-jobs: Allow build with rubygem-sidekiq 8.0.0+

From: Po-Chuan Hsieh <sunpoet_at_FreeBSD.org>
Date: Wed, 19 Mar 2025 04:02:21 UTC
The branch main has been updated by sunpoet:

URL: https://cgit.FreeBSD.org/ports/commit/?id=0b1b15396e1bbf9e249d5b6c406345df0116d2a0

commit 0b1b15396e1bbf9e249d5b6c406345df0116d2a0
Author:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2025-03-19 03:43:25 +0000
Commit:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2025-03-19 03:43:25 +0000

    devel/rubygem-sidekiq-unique-jobs: Allow build with rubygem-sidekiq 8.0.0+
    
    - Bump PORTREVISION for package change
    
    Obtained from:  https://github.com/mhenrixon/sidekiq-unique-jobs/commit/fdfc15ef00961295b3ec1533d33b86315bd80224
                    https://github.com/mhenrixon/sidekiq-unique-jobs/commit/73bc7ffbac4a3c9c51e426d6329d18bb25bd06a1
---
 devel/rubygem-sidekiq-unique-jobs/Makefile         |   3 +-
 .../files/patch-sidekiq8                           | 192 +++++++++++++++++++++
 2 files changed, 194 insertions(+), 1 deletion(-)

diff --git a/devel/rubygem-sidekiq-unique-jobs/Makefile b/devel/rubygem-sidekiq-unique-jobs/Makefile
index 165ad1c96646..60030ac5e060 100644
--- a/devel/rubygem-sidekiq-unique-jobs/Makefile
+++ b/devel/rubygem-sidekiq-unique-jobs/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	sidekiq-unique-jobs
 PORTVERSION=	8.0.10
+PORTREVISION=	1
 CATEGORIES=	devel rubygems
 MASTER_SITES=	RG
 
@@ -11,7 +12,7 @@ LICENSE=	MIT
 LICENSE_FILE=	${WRKSRC}/LICENSE.txt
 
 RUN_DEPENDS=	rubygem-concurrent-ruby>=1.0.5<2:devel/rubygem-concurrent-ruby \
-		rubygem-sidekiq>=7.0.0<8.0.0:devel/rubygem-sidekiq \
+		rubygem-sidekiq>=7.0.0<9.0.0:devel/rubygem-sidekiq \
 		rubygem-thor>=1.0<3.0:devel/rubygem-thor
 
 USES=		gem
diff --git a/devel/rubygem-sidekiq-unique-jobs/files/patch-sidekiq8 b/devel/rubygem-sidekiq-unique-jobs/files/patch-sidekiq8
new file mode 100644
index 000000000000..b0763b343c19
--- /dev/null
+++ b/devel/rubygem-sidekiq-unique-jobs/files/patch-sidekiq8
@@ -0,0 +1,192 @@
+Obtained from:	https://github.com/mhenrixon/sidekiq-unique-jobs/commit/fdfc15ef00961295b3ec1533d33b86315bd80224
+		https://github.com/mhenrixon/sidekiq-unique-jobs/commit/73bc7ffbac4a3c9c51e426d6329d18bb25bd06a1
+
+--- lib/sidekiq_unique_jobs/web.rb.orig	2025-03-15 18:09:47 UTC
++++ lib/sidekiq_unique_jobs/web.rb
+@@ -8,20 +8,18 @@ module SidekiqUniqueJobs
+   # @author Mikael Henriksson <mikael@mhenrixon.com>
+   module Web
+     def self.registered(app) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
+-      app.helpers do
+-        include Web::Helpers
+-      end
++      app.helpers Web::Helpers
+ 
+       app.get "/changelogs" do
+-        @filter         = h(params[:filter] || "*")
++        @filter         = h(safe_url_params("filter") || "*")
+         @filter         = "*" if @filter == ""
+-        @count          = h(params[:count] || 100).to_i
+-        @current_cursor = h(params[:cursor]).to_i
+-        @prev_cursor    = h(params[:prev_cursor]).to_i
++        @count          = h(safe_url_params("count") || 100).to_i
++        @current_cursor = h(safe_url_params("cursor")).to_i
++        @prev_cursor    = h(safe_url_params("prev_cursor")).to_i
+         @total_size, @next_cursor, @changelogs = changelog.page(
+           cursor: @current_cursor,
+           pattern: @filter,
+-          page_size: @count,
++          page_size: @count
+         )
+ 
+         erb(unique_template(:changelogs))
+@@ -29,36 +27,36 @@ module SidekiqUniqueJobs
+ 
+       app.get "/changelogs/delete_all" do
+         changelog.clear
+-        redirect_to :changelogs
++        safe_redirect_to :changelogs
+       end
+ 
+       app.get "/locks" do
+-        @filter         = h(params[:filter]) || "*"
++        @filter         = h(safe_url_params("filter") || "*")
+         @filter         = "*" if @filter == ""
+-        @count          = h(params[:count] || 100).to_i
+-        @current_cursor = h(params[:cursor]).to_i
+-        @prev_cursor    = h(params[:prev_cursor]).to_i
++        @count          = h(safe_url_params("count") || 100).to_i
++        @current_cursor = h(safe_url_params("cursor")).to_i
++        @prev_cursor    = h(safe_url_params("prev_cursor")).to_i
+ 
+         @total_size, @next_cursor, @locks = digests.page(
+           cursor: @current_cursor,
+           pattern: @filter,
+-          page_size: @count,
++          page_size: @count
+         )
+ 
+         erb(unique_template(:locks))
+       end
+ 
+       app.get "/expiring_locks" do
+-        @filter         = h(params[:filter]) || "*"
++        @filter         = h(safe_url_params("filter") || "*")
+         @filter         = "*" if @filter == ""
+-        @count          = h(params[:count] || 100).to_i
+-        @current_cursor = h(params[:cursor]).to_i
+-        @prev_cursor    = h(params[:prev_cursor]).to_i
++        @count          = h(safe_url_params("count") || 100).to_i
++        @current_cursor = h(safe_url_params("cursor")).to_i
++        @prev_cursor    = h(safe_url_params("prev_cursor")).to_i
+ 
+         @total_size, @next_cursor, @locks = expiring_digests.page(
+           cursor: @current_cursor,
+           pattern: @filter,
+-          page_size: @count,
++          page_size: @count
+         )
+ 
+         erb(unique_template(:locks))
+@@ -67,29 +65,29 @@ module SidekiqUniqueJobs
+       app.get "/locks/delete_all" do
+         digests.delete_by_pattern("*", count: digests.count)
+         expiring_digests.delete_by_pattern("*", count: digests.count)
+-        redirect_to :locks
++        safe_redirect_to :locks
+       end
+ 
+       app.get "/locks/:digest" do
+-        @digest = h(params[:digest])
++        @digest = h(safe_route_params(:digest))
+         @lock   = SidekiqUniqueJobs::Lock.new(@digest)
+ 
+         erb(unique_template(:lock))
+       end
+ 
+       app.get "/locks/:digest/delete" do
+-        digests.delete_by_digest(h(params[:digest]))
+-        expiring_digests.delete_by_digest(h(params[:digest]))
+-        redirect_to :locks
++        digests.delete_by_digest(h(safe_route_params(:digest)))
++        expiring_digests.delete_by_digest(h(safe_route_params(:digest)))
++        safe_redirect_to :locks
+       end
+ 
+       app.get "/locks/:digest/jobs/:job_id/delete" do
+-        @digest = h(params[:digest])
+-        @job_id = h(params[:job_id])
++        @digest = h(safe_route_params(:digest))
++        @job_id = h(safe_route_params(:job_id))
+         @lock   = SidekiqUniqueJobs::Lock.new(@digest)
+         @lock.unlock(@job_id)
+ 
+-        redirect_to "locks/#{@lock.key}"
++        safe_redirect_to "locks/#{@lock.key}"
+       end
+     end
+   end
+@@ -99,11 +97,17 @@ begin
+   require "delegate" unless defined?(DelegateClass)
+   require "sidekiq/web" unless defined?(Sidekiq::Web)
+ 
+-  Sidekiq::Web.register(SidekiqUniqueJobs::Web)
+-  Sidekiq::Web.tabs["Locks"]          = "locks"
+-  Sidekiq::Web.tabs["Expiring Locks"] = "expiring_locks"
+-  Sidekiq::Web.tabs["Changelogs"]     = "changelogs"
+-  Sidekiq::Web.settings.locales << File.join(File.dirname(__FILE__), "locales")
+-rescue NameError, LoadError => ex
+-  SidekiqUniqueJobs.logger.error(ex)
++  if Sidekiq::MAJOR >= 8
++    Sidekiq::Web.configure do |config|
++      config.register_extension(SidekiqUniqueJobs::Web, name: "unique_jobs", tab: ["Locks", "Expiring Locks", "Changelogs"],
++                                                        index: %w[locks/ expiring_locks/ changelogs/])
++    end
++  else
++    Sidekiq::Web.register(SidekiqUniqueJobs::Web)
++    Sidekiq::Web.tabs["Locks"]          = "locks"
++    Sidekiq::Web.tabs["Expiring Locks"] = "expiring_locks"
++    Sidekiq::Web.tabs["Changelogs"]     = "changelogs"
++  end
++rescue NameError, LoadError => e
++  SidekiqUniqueJobs.logger.error(e)
+ end
+--- lib/sidekiq_unique_jobs/web/helpers.rb.orig	2025-03-15 18:09:47 UTC
++++ lib/sidekiq_unique_jobs/web/helpers.rb
+@@ -116,7 +116,7 @@ module SidekiqUniqueJobs
+       #
+       # @return a redirect to the new subpath
+       #
+-      def redirect_to(subpath)
++      def safe_redirect_to(subpath)
+         if respond_to?(:to)
+           # Sinatra-based web UI
+           redirect to(subpath)
+@@ -169,6 +169,26 @@ module SidekiqUniqueJobs
+         else
+           Time.parse(time.to_s)
+         end
++      end
++
++      # Copied from sidekiq for compatibility with older versions
++
++      # stuff after ? or form input
++      # uses String keys, no Symbols!
++      def safe_url_params(key)
++        return url_params(key) if Sidekiq::MAJOR >= 8
++
++        warn { "URL parameter `#{key}` should be accessed via String, not Symbol (at #{caller(3..3).first})" } if key.is_a?(Symbol)
++        request.params[key.to_s]
++      end
++
++      # variables embedded in path, `/metrics/:name`
++      # uses Symbol keys, no Strings!
++      def safe_route_params(key)
++        return route_params(key) if Sidekiq::MAJOR >= 8
++
++        warn { "Route parameter `#{key}` should be accessed via Symbol, not String (at #{caller(3..3).first})" } if key.is_a?(String)
++        env["rack.route_params"][key.to_sym]
+       end
+     end
+   end
+--- sidekiq-unique-jobs.gemspec.orig	2025-03-15 18:09:47 UTC
++++ sidekiq-unique-jobs.gemspec
+@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
+   s.specification_version = 4
+ 
+   s.add_runtime_dependency(%q<concurrent-ruby>.freeze, ["~> 1.0".freeze, ">= 1.0.5".freeze])
+-  s.add_runtime_dependency(%q<sidekiq>.freeze, [">= 7.0.0".freeze, "< 8.0.0".freeze])
++  s.add_runtime_dependency(%q<sidekiq>.freeze, [">= 7.0.0".freeze, "< 9.0.0".freeze])
+   s.add_runtime_dependency(%q<thor>.freeze, [">= 1.0".freeze, "< 3.0".freeze])
+ end
+