From 10e7feb312cbcd5c14c89e8a8dd9e74a6355f588 Mon Sep 17 00:00:00 2001 From: Thach Chau Date: Sun, 30 Jan 2022 00:04:29 +0700 Subject: [PATCH] Add keyword arguments handler in Sidekiq::JobRecord#display_args (#5134) * Add keyword arguments handler in Sidekiq::JobRecord#display_args * Update Sidekiq::JobRecord#display_args kwargs's presence check so that we are not dependent on Rails. --- lib/sidekiq/api.rb | 8 ++++++-- test/test_extensions.rb | 12 ++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/sidekiq/api.rb b/lib/sidekiq/api.rb index ac4dbd0a..2076f899 100644 --- a/lib/sidekiq/api.rb +++ b/lib/sidekiq/api.rb @@ -355,8 +355,12 @@ module Sidekiq # Unwrap known wrappers so they show up in a human-friendly manner in the Web UI @display_args ||= case klass when /\ASidekiq::Extensions::Delayed/ - safe_load(args[0], args) do |_, _, arg| - arg + safe_load(args[0], args) do |_, _, arg, kwarg| + if !kwarg || kwarg.empty? + arg + else + [arg, kwarg] + end end when "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper" job_args = self["wrapped"] ? args[0]["arguments"] : [] diff --git a/test/test_extensions.rb b/test/test_extensions.rb index 7d0dcde6..4a8b1dad 100644 --- a/test/test_extensions.rb +++ b/test/test_extensions.rb @@ -33,11 +33,12 @@ describe Sidekiq::Extensions do assert_equal [], Sidekiq::Queue.all.map(&:name) q = Sidekiq::Queue.new assert_equal 0, q.size - MyModel.delay.long_class_method_with_optional_args(with: :keywords) + MyModel.delay.long_class_method_with_optional_args("argument_a", "argument_b", with: :keywords) assert_equal ['default'], Sidekiq::Queue.all.map(&:name) assert_equal 1, q.size obj = YAML.load q.first['args'].first assert_equal({ with: :keywords }, obj.last) + assert_equal([["argument_a", "argument_b"], { with: :keywords }], q.first.display_args) end it 'forwards the keyword arguments to perform' do @@ -92,11 +93,12 @@ describe Sidekiq::Extensions do assert_equal [], Sidekiq::Queue.all.map(&:name) q = Sidekiq::Queue.new assert_equal 0, q.size - UserMailer.delay.greetings_with_optional_args(with: :keywords) + UserMailer.delay.greetings_with_optional_args("argument_a", "argument_b", with: :keywords) assert_equal ['default'], Sidekiq::Queue.all.map(&:name) assert_equal 1, q.size obj = YAML.load q.first['args'].first assert_equal({ with: :keywords }, obj.last) + assert_equal([["argument_a", "argument_b"], { with: :keywords }], q.first.display_args) end it 'allows delayed scheduling of AM mails' do @@ -132,10 +134,11 @@ describe Sidekiq::Extensions do it 'allows delay of any ole class method with optional arguments' do q = Sidekiq::Queue.new assert_equal 0, q.size - SomeClass.delay.doit_with_optional_args(with: :keywords) + SomeClass.delay.doit_with_optional_args("argument_a", "argument_b", with: :keywords) assert_equal 1, q.size obj = YAML.load q.first['args'].first assert_equal({ with: :keywords }, obj.last) + assert_equal([["argument_a", "argument_b"], { with: :keywords }], q.first.display_args) end it 'forwards the keyword arguments to perform' do @@ -170,10 +173,11 @@ describe Sidekiq::Extensions do it 'allows delay of any module class method with optional arguments' do q = Sidekiq::Queue.new assert_equal 0, q.size - SomeModule.delay.doit_with_optional_args(with: :keywords) + SomeModule.delay.doit_with_optional_args("argument_a", "argument_b", with: :keywords) assert_equal 1, q.size obj = YAML.load q.first['args'].first assert_equal({ with: :keywords }, obj.last) + assert_equal([["argument_a", "argument_b"], { with: :keywords }], q.first.display_args) end it 'forwards the keyword arguments to perform' do