@@ -14,6 +14,10 @@ class MyModel < ActiveRecord::Base
14
14
def self . long_class_method
15
15
raise "Should not be called!"
16
16
end
17
+
18
+ def self . long_class_method_with_optional_args ( *arg , **kwargs )
19
+ kwargs
20
+ end
17
21
end
18
22
19
23
it 'allows delayed execution of ActiveRecord class methods' do
@@ -25,6 +29,23 @@ def self.long_class_method
25
29
assert_equal 1 , q . size
26
30
end
27
31
32
+ it 'allows delayed execution of ActiveRecord class methods with optional arguments' do
33
+ assert_equal [ ] , Sidekiq ::Queue . all . map ( &:name )
34
+ q = Sidekiq ::Queue . new
35
+ assert_equal 0 , q . size
36
+ MyModel . delay . long_class_method_with_optional_args ( with : :keywords )
37
+ assert_equal [ 'default' ] , Sidekiq ::Queue . all . map ( &:name )
38
+ assert_equal 1 , q . size
39
+ obj = YAML . load q . first [ 'args' ] . first
40
+ assert_equal ( { with : :keywords } , obj . last )
41
+ end
42
+
43
+ it 'forwards the keyword arguments to perform' do
44
+ yml = "---\n - !ruby/class 'MyModel'\n - :long_class_method_with_optional_args\n - []\n - :with: :keywords\n "
45
+ result = Sidekiq ::Extensions ::DelayedClass . new . perform ( yml )
46
+ assert_equal ( { with : :keywords } , result )
47
+ end
48
+
28
49
it 'uses and stringifies specified options' do
29
50
assert_equal [ ] , Sidekiq ::Queue . all . map ( &:name )
30
51
q = Sidekiq ::Queue . new ( 'notdefault' )
@@ -53,6 +74,9 @@ class UserMailer < ActionMailer::Base
53
74
def greetings ( a , b )
54
75
raise "Should not be called!"
55
76
end
77
+
78
+ def greetings_with_optional_args ( *arg , **kwargs )
79
+ end
56
80
end
57
81
58
82
it 'allows delayed delivery of ActionMailer mails' do
@@ -64,6 +88,17 @@ def greetings(a, b)
64
88
assert_equal 1 , q . size
65
89
end
66
90
91
+ it 'allows delayed delivery of ActionMailer mails with optional arguments' do
92
+ assert_equal [ ] , Sidekiq ::Queue . all . map ( &:name )
93
+ q = Sidekiq ::Queue . new
94
+ assert_equal 0 , q . size
95
+ UserMailer . delay . greetings_with_optional_args ( with : :keywords )
96
+ assert_equal [ 'default' ] , Sidekiq ::Queue . all . map ( &:name )
97
+ assert_equal 1 , q . size
98
+ obj = YAML . load q . first [ 'args' ] . first
99
+ assert_equal ( { with : :keywords } , obj . last )
100
+ end
101
+
67
102
it 'allows delayed scheduling of AM mails' do
68
103
ss = Sidekiq ::ScheduledSet . new
69
104
assert_equal 0 , ss . size
@@ -81,6 +116,10 @@ def greetings(a, b)
81
116
class SomeClass
82
117
def self . doit ( arg )
83
118
end
119
+
120
+ def self . doit_with_optional_args ( *arg , **kwargs )
121
+ kwargs
122
+ end
84
123
end
85
124
86
125
it 'allows delay of any ole class method' do
@@ -90,9 +129,28 @@ def self.doit(arg)
90
129
assert_equal 1 , q . size
91
130
end
92
131
132
+ it 'allows delay of any ole class method with optional arguments' do
133
+ q = Sidekiq ::Queue . new
134
+ assert_equal 0 , q . size
135
+ SomeClass . delay . doit_with_optional_args ( with : :keywords )
136
+ assert_equal 1 , q . size
137
+ obj = YAML . load q . first [ 'args' ] . first
138
+ assert_equal ( { with : :keywords } , obj . last )
139
+ end
140
+
141
+ it 'forwards the keyword arguments to perform' do
142
+ yml = "---\n - !ruby/class 'SomeClass'\n - :doit_with_optional_args\n - []\n - :with: :keywords\n "
143
+ result = Sidekiq ::Extensions ::DelayedClass . new . perform ( yml )
144
+ assert_equal ( { with : :keywords } , result )
145
+ end
146
+
93
147
module SomeModule
94
148
def self . doit ( arg )
95
149
end
150
+
151
+ def self . doit_with_optional_args ( *arg , **kwargs )
152
+ kwargs
153
+ end
96
154
end
97
155
98
156
it 'logs large payloads' do
@@ -109,4 +167,18 @@ def self.doit(arg)
109
167
assert_equal 1 , q . size
110
168
end
111
169
170
+ it 'allows delay of any module class method with optional arguments' do
171
+ q = Sidekiq ::Queue . new
172
+ assert_equal 0 , q . size
173
+ SomeModule . delay . doit_with_optional_args ( with : :keywords )
174
+ assert_equal 1 , q . size
175
+ obj = YAML . load q . first [ 'args' ] . first
176
+ assert_equal ( { with : :keywords } , obj . last )
177
+ end
178
+
179
+ it 'forwards the keyword arguments to perform' do
180
+ yml = "---\n - !ruby/class 'SomeModule'\n - :doit_with_optional_args\n - []\n - :with: :keywords\n "
181
+ result = Sidekiq ::Extensions ::DelayedClass . new . perform ( yml )
182
+ assert_equal ( { with : :keywords } , result )
183
+ end
112
184
end
0 commit comments