delayed 0.3.0 → 0.4.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 +4 -4
- data/lib/delayed/message_sending.rb +4 -14
- data/lib/delayed/performable_mailer.rb +1 -1
- data/lib/delayed/performable_method.rb +10 -3
- data/lib/delayed/psych_ext.rb +1 -0
- data/spec/delayed/active_job_adapter_spec.rb +19 -0
- data/spec/delayed/job_spec.rb +1 -1
- data/spec/message_sending_spec.rb +33 -23
- data/spec/performable_mailer_spec.rb +48 -38
- data/spec/performable_method_spec.rb +36 -11
- data/spec/psych_ext_spec.rb +24 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec0bc05440d0ea5392480d83c4a3295aecfcad71a47fc48b16de19d356387e8d
|
4
|
+
data.tar.gz: 2a9b09c4a77f058e8fe322f9b80da8aed4b909b20e3ebbcc33da1277435407d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 183b8ad1b96cbe2ce987a6a2faa449b90963a898ae2ffccb7f99eacbeb94be5cedae452bc2ed884414e6cfe2a8169481192d9269e2111b80b3be2d805a5cac83
|
7
|
+
data.tar.gz: 75ad14cf19505ee4b0152797cbee705dbe712939a5e5a0f3bd960a9ddad2c25756e0aedbc8745e70e40d5b634bdf96ef5d175c81f88a86308b524a1f97b2356c
|
@@ -8,8 +8,8 @@ module Delayed
|
|
8
8
|
@options = options
|
9
9
|
end
|
10
10
|
|
11
|
-
def method_missing(method, *args)
|
12
|
-
Job.enqueue({ payload_object: @payload_class.new(@target, method.to_sym, args) }.merge(@options))
|
11
|
+
def method_missing(method, *args, **kwargs)
|
12
|
+
Job.enqueue({ payload_object: @payload_class.new(@target, method.to_sym, args, kwargs) }.merge(@options))
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -18,16 +18,6 @@ module Delayed
|
|
18
18
|
DelayProxy.new(PerformableMethod, self, options)
|
19
19
|
end
|
20
20
|
alias __delay__ delay
|
21
|
-
|
22
|
-
def send_later(method, *args)
|
23
|
-
warn '[DEPRECATION] `object.send_later(:method)` is deprecated. Use `object.delay.method'
|
24
|
-
__delay__.__send__(method, *args)
|
25
|
-
end
|
26
|
-
|
27
|
-
def send_at(time, method, *args)
|
28
|
-
warn '[DEPRECATION] `object.send_at(time, :method)` is deprecated. Use `object.delay(:run_at => time).method'
|
29
|
-
__delay__(run_at: time).__send__(method, *args)
|
30
|
-
end
|
31
21
|
end
|
32
22
|
|
33
23
|
module MessageSendingClassMethods
|
@@ -36,7 +26,7 @@ module Delayed
|
|
36
26
|
punctuation = $1 # rubocop:disable Style/PerlBackrefs
|
37
27
|
with_method = "#{aliased_method}_with_delay#{punctuation}"
|
38
28
|
without_method = "#{aliased_method}_without_delay#{punctuation}"
|
39
|
-
define_method(with_method) do |*args|
|
29
|
+
define_method(with_method) do |*args, **kwargs|
|
40
30
|
curr_opts = opts.clone
|
41
31
|
curr_opts.each_key do |key|
|
42
32
|
next unless (val = curr_opts[key]).is_a?(Proc)
|
@@ -47,7 +37,7 @@ module Delayed
|
|
47
37
|
val.call
|
48
38
|
end
|
49
39
|
end
|
50
|
-
delay(curr_opts).__send__(without_method, *args)
|
40
|
+
delay(curr_opts).__send__(without_method, *args, **kwargs)
|
51
41
|
end
|
52
42
|
|
53
43
|
alias_method without_method, method
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Delayed
|
2
2
|
class PerformableMethod
|
3
|
-
attr_accessor :object, :method_name, :args
|
3
|
+
attr_accessor :object, :method_name, :args, :kwargs
|
4
4
|
|
5
|
-
def initialize(object, method_name, args)
|
5
|
+
def initialize(object, method_name, args, kwargs)
|
6
6
|
raise NoMethodError, "undefined method `#{method_name}' for #{object.inspect}" unless object.respond_to?(method_name, true)
|
7
7
|
|
8
8
|
if !her_model?(object) && object.respond_to?(:persisted?) && !object.persisted?
|
@@ -11,6 +11,7 @@ module Delayed
|
|
11
11
|
|
12
12
|
self.object = object
|
13
13
|
self.args = args
|
14
|
+
self.kwargs = kwargs
|
14
15
|
self.method_name = method_name.to_sym
|
15
16
|
end
|
16
17
|
|
@@ -23,7 +24,13 @@ module Delayed
|
|
23
24
|
end
|
24
25
|
|
25
26
|
def perform
|
26
|
-
|
27
|
+
return unless object
|
28
|
+
|
29
|
+
if kwargs.nil? || (RUBY_VERSION < '2.7' && kwargs.empty?)
|
30
|
+
object.send(method_name, *args)
|
31
|
+
else
|
32
|
+
object.send(method_name, *args, **kwargs)
|
33
|
+
end
|
27
34
|
end
|
28
35
|
|
29
36
|
def method(sym)
|
data/lib/delayed/psych_ext.rb
CHANGED
@@ -223,6 +223,25 @@ RSpec.describe Delayed::ActiveJobAdapter do
|
|
223
223
|
end
|
224
224
|
end
|
225
225
|
|
226
|
+
context 'when ActiveJob has both positional and keyword arguments' do
|
227
|
+
let(:job_class) do
|
228
|
+
Class.new(ActiveJob::Base) do # rubocop:disable Rails/ApplicationJob
|
229
|
+
cattr_accessor(:result)
|
230
|
+
|
231
|
+
def perform(arg, kwarg:)
|
232
|
+
self.class.result = [arg, kwarg]
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'passes arguments through to the perform method' do
|
238
|
+
JobClass.perform_later('foo', kwarg: 'bar')
|
239
|
+
|
240
|
+
Delayed::Worker.new.work_off
|
241
|
+
expect(JobClass.result).to eq %w(foo bar)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
226
245
|
context 'when using the ActiveJob test adapter' do
|
227
246
|
let(:queue_adapter) { :test }
|
228
247
|
|
data/spec/delayed/job_spec.rb
CHANGED
@@ -352,7 +352,7 @@ describe Delayed::Job do
|
|
352
352
|
context 'large handler' do
|
353
353
|
before do
|
354
354
|
text = 'Lorem ipsum dolor sit amet. ' * 1000
|
355
|
-
@job = described_class.enqueue Delayed::PerformableMethod.new(text, :length, {})
|
355
|
+
@job = described_class.enqueue Delayed::PerformableMethod.new(text, :length, [], {})
|
356
356
|
end
|
357
357
|
|
358
358
|
it 'has an id' do
|
@@ -7,24 +7,27 @@ describe Delayed::MessageSending do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
describe 'handle_asynchronously' do
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
let(:test_class) do
|
11
|
+
Class.new do
|
12
|
+
def tell!(_arg, _kwarg:); end
|
13
|
+
handle_asynchronously :tell!
|
14
|
+
end
|
13
15
|
end
|
14
16
|
|
15
17
|
it 'aliases original method' do
|
16
|
-
expect(
|
17
|
-
expect(
|
18
|
+
expect(test_class.new).to respond_to(:tell_without_delay!)
|
19
|
+
expect(test_class.new).to respond_to(:tell_with_delay!)
|
18
20
|
end
|
19
21
|
|
20
22
|
it 'creates a PerformableMethod' do
|
21
|
-
|
23
|
+
obj = test_class.new
|
22
24
|
expect {
|
23
|
-
job =
|
25
|
+
job = obj.tell!('a', kwarg: 'b')
|
24
26
|
expect(job.payload_object.class).to eq(Delayed::PerformableMethod)
|
25
27
|
expect(job.payload_object.method_name).to eq(:tell_without_delay!)
|
26
|
-
expect(job.payload_object.args).to eq([
|
27
|
-
|
28
|
+
expect(job.payload_object.args).to eq(['a'])
|
29
|
+
expect(job.payload_object.kwargs).to eq(kwarg: 'b')
|
30
|
+
}.to change { Delayed::Job.count }.by(1)
|
28
31
|
end
|
29
32
|
|
30
33
|
describe 'with options' do
|
@@ -64,26 +67,33 @@ describe Delayed::MessageSending do
|
|
64
67
|
end
|
65
68
|
|
66
69
|
context 'delay' do
|
67
|
-
|
68
|
-
|
70
|
+
let(:fairy_tail_class) do
|
71
|
+
Class.new do
|
72
|
+
attr_accessor :happy_ending
|
69
73
|
|
70
|
-
|
74
|
+
def self.princesses; end
|
71
75
|
|
72
|
-
|
73
|
-
|
76
|
+
def tell(arg, kwarg:)
|
77
|
+
@happy_ending = [arg, kwarg]
|
78
|
+
end
|
74
79
|
end
|
75
80
|
end
|
76
81
|
|
82
|
+
before do
|
83
|
+
stub_const('FairyTail', fairy_tail_class)
|
84
|
+
end
|
85
|
+
|
77
86
|
after do
|
78
87
|
Delayed::Worker.default_queue_name = nil
|
79
88
|
end
|
80
89
|
|
81
90
|
it 'creates a new PerformableMethod job' do
|
82
91
|
expect {
|
83
|
-
job =
|
92
|
+
job = FairyTail.new.delay.tell('arg', kwarg: 'kwarg')
|
84
93
|
expect(job.payload_object.class).to eq(Delayed::PerformableMethod)
|
85
|
-
expect(job.payload_object.method_name).to eq(:
|
86
|
-
expect(job.payload_object.args).to eq(['
|
94
|
+
expect(job.payload_object.method_name).to eq(:tell)
|
95
|
+
expect(job.payload_object.args).to eq(['arg'])
|
96
|
+
expect(job.payload_object.kwargs).to eq(kwarg: 'kwarg')
|
87
97
|
}.to change { Delayed::Job.count }.by(1)
|
88
98
|
end
|
89
99
|
|
@@ -111,8 +121,8 @@ describe Delayed::MessageSending do
|
|
111
121
|
fairy_tail = FairyTail.new
|
112
122
|
expect {
|
113
123
|
expect {
|
114
|
-
fairy_tail.delay.tell
|
115
|
-
}.to change { fairy_tail.happy_ending }.from(nil).to(
|
124
|
+
fairy_tail.delay.tell('a', kwarg: 'b')
|
125
|
+
}.to change { fairy_tail.happy_ending }.from(nil).to %w(a b)
|
116
126
|
}.not_to(change { Delayed::Job.count })
|
117
127
|
end
|
118
128
|
|
@@ -121,7 +131,7 @@ describe Delayed::MessageSending do
|
|
121
131
|
fairy_tail = FairyTail.new
|
122
132
|
expect {
|
123
133
|
expect {
|
124
|
-
fairy_tail.delay.tell
|
134
|
+
fairy_tail.delay.tell('a', kwarg: 'b')
|
125
135
|
}.not_to change { fairy_tail.happy_ending }
|
126
136
|
}.to change { Delayed::Job.count }.by(1)
|
127
137
|
end
|
@@ -131,7 +141,7 @@ describe Delayed::MessageSending do
|
|
131
141
|
fairy_tail = FairyTail.new
|
132
142
|
expect {
|
133
143
|
expect {
|
134
|
-
fairy_tail.delay.tell
|
144
|
+
fairy_tail.delay.tell('a', kwarg: 'b')
|
135
145
|
}.not_to change { fairy_tail.happy_ending }
|
136
146
|
}.to change { Delayed::Job.count }.by(1)
|
137
147
|
end
|
@@ -141,8 +151,8 @@ describe Delayed::MessageSending do
|
|
141
151
|
fairy_tail = FairyTail.new
|
142
152
|
expect {
|
143
153
|
expect {
|
144
|
-
fairy_tail.delay.tell
|
145
|
-
}.to change { fairy_tail.happy_ending }.from(nil).to(
|
154
|
+
fairy_tail.delay.tell('a', kwarg: 'b')
|
155
|
+
}.to change { fairy_tail.happy_ending }.from(nil).to %w(a b)
|
146
156
|
}.not_to(change { Delayed::Job.count })
|
147
157
|
end
|
148
158
|
end
|
@@ -1,58 +1,41 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
3
|
+
describe Delayed::PerformableMailer do
|
4
|
+
let(:mailer_class) do
|
5
|
+
Class.new(ActionMailer::Base) do
|
6
|
+
cattr_accessor(:emails) { [] }
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
expect {
|
13
|
-
job = MyMailer.delay.signup('john@example.com')
|
14
|
-
expect(job.payload_object.class).to eq(Delayed::PerformableMailer)
|
15
|
-
expect(job.payload_object.method_name).to eq(:signup)
|
16
|
-
expect(job.payload_object.args).to eq(['john@example.com'])
|
17
|
-
}.to change { Delayed::Job.count }.by(1)
|
8
|
+
def signup(email, beta_tester: false)
|
9
|
+
mail to: email, subject: "Delaying Emails (beta: #{beta_tester})", from: 'delayedjob@example.com', body: 'Delaying Emails Body'
|
10
|
+
end
|
18
11
|
end
|
19
12
|
end
|
20
13
|
|
21
|
-
|
22
|
-
|
23
|
-
expect {
|
24
|
-
MyMailer.signup('john@example.com').delay
|
25
|
-
}.to raise_error(RuntimeError)
|
26
|
-
end
|
14
|
+
before do
|
15
|
+
stub_const('MyMailer', mailer_class)
|
27
16
|
end
|
28
17
|
|
29
|
-
describe
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
18
|
+
describe 'perform' do
|
19
|
+
it 'calls the method and #deliver on the mailer' do
|
20
|
+
mailer = MyMailer.new
|
21
|
+
email = double('email', deliver: true)
|
22
|
+
allow(mailer).to receive(:mail).and_return(email)
|
23
|
+
mailer_job = described_class.new(mailer, :signup, ['john@example.com'], {})
|
35
24
|
|
36
|
-
|
37
|
-
|
38
|
-
mailer.perform
|
39
|
-
end
|
25
|
+
expect(email).to receive(:deliver)
|
26
|
+
mailer_job.perform
|
40
27
|
end
|
41
28
|
end
|
42
|
-
end
|
43
29
|
|
44
|
-
|
45
|
-
describe ActionMailer::Parameterized::Mailer do
|
30
|
+
describe ActionMailer::Base do
|
46
31
|
describe 'delay' do
|
47
32
|
it 'enqueues a PerformableEmail job' do
|
48
33
|
expect {
|
49
|
-
job = MyMailer.
|
34
|
+
job = MyMailer.delay.signup('john@example.com', beta_tester: true)
|
50
35
|
expect(job.payload_object.class).to eq(Delayed::PerformableMailer)
|
51
|
-
expect(job.payload_object.object.class).to eq(described_class)
|
52
|
-
expect(job.payload_object.object.instance_variable_get('@mailer')).to eq(MyMailer)
|
53
|
-
expect(job.payload_object.object.instance_variable_get('@params')).to eq(foo: 1, bar: 2)
|
54
36
|
expect(job.payload_object.method_name).to eq(:signup)
|
55
37
|
expect(job.payload_object.args).to eq(['john@example.com'])
|
38
|
+
expect(job.payload_object.kwargs).to eq(beta_tester: true)
|
56
39
|
}.to change { Delayed::Job.count }.by(1)
|
57
40
|
end
|
58
41
|
end
|
@@ -60,9 +43,36 @@ if defined?(ActionMailer::Parameterized::Mailer)
|
|
60
43
|
describe 'delay on a mail object' do
|
61
44
|
it 'raises an exception' do
|
62
45
|
expect {
|
63
|
-
MyMailer.
|
46
|
+
MyMailer.signup('john@example.com').delay
|
64
47
|
}.to raise_error(RuntimeError)
|
65
48
|
end
|
66
49
|
end
|
67
50
|
end
|
51
|
+
|
52
|
+
if defined?(ActionMailer::Parameterized::Mailer)
|
53
|
+
describe ActionMailer::Parameterized::Mailer do
|
54
|
+
describe 'delay' do
|
55
|
+
it 'enqueues a PerformableEmail job' do
|
56
|
+
expect {
|
57
|
+
job = MyMailer.with(foo: 1, bar: 2).delay.signup('john@example.com', beta_tester: false)
|
58
|
+
expect(job.payload_object.class).to eq(Delayed::PerformableMailer)
|
59
|
+
expect(job.payload_object.object.class).to eq(described_class)
|
60
|
+
expect(job.payload_object.object.instance_variable_get('@mailer')).to eq(MyMailer)
|
61
|
+
expect(job.payload_object.object.instance_variable_get('@params')).to eq(foo: 1, bar: 2)
|
62
|
+
expect(job.payload_object.method_name).to eq(:signup)
|
63
|
+
expect(job.payload_object.args).to eq(['john@example.com'])
|
64
|
+
expect(job.payload_object.kwargs).to eq(beta_tester: false)
|
65
|
+
}.to change { Delayed::Job.count }.by(1)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'delay on a mail object' do
|
70
|
+
it 'raises an exception' do
|
71
|
+
expect {
|
72
|
+
MyMailer.with(foo: 1, bar: 2).signup('john@example.com').delay
|
73
|
+
}.to raise_error(RuntimeError)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
68
78
|
end
|
@@ -2,8 +2,18 @@ require 'helper'
|
|
2
2
|
|
3
3
|
describe Delayed::PerformableMethod do
|
4
4
|
describe 'perform' do
|
5
|
+
let(:test_class) do
|
6
|
+
Class.new do
|
7
|
+
cattr_accessor :result
|
8
|
+
|
9
|
+
def foo(arg, kwarg:)
|
10
|
+
self.class.result = [arg, kwarg]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
5
15
|
before do
|
6
|
-
@method = described_class.new(
|
16
|
+
@method = described_class.new(test_class.new, :foo, ['a'], { kwarg: 'b' })
|
7
17
|
end
|
8
18
|
|
9
19
|
context 'with the persisted record cannot be found' do
|
@@ -17,14 +27,29 @@ describe Delayed::PerformableMethod do
|
|
17
27
|
end
|
18
28
|
|
19
29
|
it 'calls the method on the object' do
|
20
|
-
expect
|
21
|
-
|
30
|
+
expect { @method.perform }
|
31
|
+
.to change { test_class.result }
|
32
|
+
.from(nil).to %w(a b)
|
33
|
+
end
|
34
|
+
|
35
|
+
if RUBY_VERSION < '3.0'
|
36
|
+
context 'when kwargs are nil (job was delayed via prior gem version)' do
|
37
|
+
before do
|
38
|
+
@method = described_class.new(test_class.new, :foo, ['a', { kwarg: 'b' }], nil)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'calls the method on the object' do
|
42
|
+
expect { @method.perform }
|
43
|
+
.to change { test_class.result }
|
44
|
+
.from(nil).to %w(a b)
|
45
|
+
end
|
46
|
+
end
|
22
47
|
end
|
23
48
|
end
|
24
49
|
|
25
50
|
it "raises a NoMethodError if target method doesn't exist" do
|
26
51
|
expect {
|
27
|
-
described_class.new(Object, :method_that_does_not_exist, [])
|
52
|
+
described_class.new(Object, :method_that_does_not_exist, [], {})
|
28
53
|
}.to raise_error(NoMethodError)
|
29
54
|
end
|
30
55
|
|
@@ -33,29 +58,29 @@ describe Delayed::PerformableMethod do
|
|
33
58
|
def private_method; end
|
34
59
|
private :private_method
|
35
60
|
end
|
36
|
-
expect { described_class.new(clazz.new, :private_method, []) }.not_to raise_error
|
61
|
+
expect { described_class.new(clazz.new, :private_method, [], {}) }.not_to raise_error
|
37
62
|
end
|
38
63
|
|
39
64
|
context 'when it receives an object that is not persisted' do
|
40
65
|
let(:object) { double(persisted?: false, expensive_operation: true) }
|
41
66
|
|
42
67
|
it 'raises an ArgumentError' do
|
43
|
-
expect { described_class.new(object, :expensive_operation, []) }.to raise_error ArgumentError
|
68
|
+
expect { described_class.new(object, :expensive_operation, [], {}) }.to raise_error ArgumentError
|
44
69
|
end
|
45
70
|
|
46
71
|
it 'does not raise ArgumentError if the object acts like a Her model' do
|
47
72
|
allow(object.class).to receive(:save_existing).and_return(true)
|
48
|
-
expect { described_class.new(object, :expensive_operation, []) }.not_to raise_error
|
73
|
+
expect { described_class.new(object, :expensive_operation, [], {}) }.not_to raise_error
|
49
74
|
end
|
50
75
|
end
|
51
76
|
|
52
77
|
describe 'display_name' do
|
53
78
|
it 'returns class_name#method_name for instance methods' do
|
54
|
-
expect(described_class.new('foo', :count, ['o']).display_name).to eq('String#count')
|
79
|
+
expect(described_class.new('foo', :count, ['o'], {}).display_name).to eq('String#count')
|
55
80
|
end
|
56
81
|
|
57
82
|
it 'returns class_name.method_name for class methods' do
|
58
|
-
expect(described_class.new(Class, :inspect, []).display_name).to eq('Class.inspect')
|
83
|
+
expect(described_class.new(Class, :inspect, [], {}).display_name).to eq('Class.inspect')
|
59
84
|
end
|
60
85
|
end
|
61
86
|
|
@@ -84,7 +109,7 @@ describe Delayed::PerformableMethod do
|
|
84
109
|
end
|
85
110
|
|
86
111
|
it 'delegates failure hook to object' do
|
87
|
-
method = described_class.new('object', :size, [])
|
112
|
+
method = described_class.new('object', :size, [], {})
|
88
113
|
expect(method.object).to receive(:failure)
|
89
114
|
method.failure
|
90
115
|
end
|
@@ -114,7 +139,7 @@ describe Delayed::PerformableMethod do
|
|
114
139
|
end
|
115
140
|
|
116
141
|
it 'delegates failure hook to object' do
|
117
|
-
method = described_class.new('object', :size, [])
|
142
|
+
method = described_class.new('object', :size, [], {})
|
118
143
|
expect(method.object).to receive(:failure)
|
119
144
|
method.failure
|
120
145
|
end
|
data/spec/psych_ext_spec.rb
CHANGED
@@ -11,6 +11,30 @@ describe 'Psych::Visitors::ToRuby', if: defined?(Psych::Visitors::ToRuby) do
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
context Delayed::PerformableMethod do
|
15
|
+
it 'serializes with object, method_name, args, and kwargs' do
|
16
|
+
Delayed::PerformableMethod.new(String, :new, ['hello'], capacity: 20).tap do |pm|
|
17
|
+
serialized = YAML.dump_dj(pm)
|
18
|
+
expect(serialized).to eq <<~YAML
|
19
|
+
--- !ruby/object:Delayed::PerformableMethod
|
20
|
+
object: !ruby/class 'String'
|
21
|
+
method_name: :new
|
22
|
+
args:
|
23
|
+
- hello
|
24
|
+
kwargs:
|
25
|
+
:capacity: 20
|
26
|
+
YAML
|
27
|
+
|
28
|
+
deserialized = YAML.load_dj(serialized)
|
29
|
+
expect(deserialized).to be_an_instance_of(Delayed::PerformableMethod)
|
30
|
+
expect(deserialized.object).to eq String
|
31
|
+
expect(deserialized.method_name).to eq :new
|
32
|
+
expect(deserialized.args).to eq ['hello']
|
33
|
+
expect(deserialized.kwargs).to eq(capacity: 20)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
14
38
|
context ActiveRecord::Base do
|
15
39
|
it 'serializes and deserializes in a version-independent way' do
|
16
40
|
Story.create.tap do |story|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Griffith
|
@@ -19,7 +19,7 @@ authors:
|
|
19
19
|
autorequire:
|
20
20
|
bindir: bin
|
21
21
|
cert_chain: []
|
22
|
-
date: 2021-
|
22
|
+
date: 2021-11-30 00:00:00.000000000 Z
|
23
23
|
dependencies:
|
24
24
|
- !ruby/object:Gem::Dependency
|
25
25
|
name: activerecord
|
@@ -290,6 +290,7 @@ metadata:
|
|
290
290
|
changelog_uri: https://github.com/betterment/delayed/blob/main/CHANGELOG.md
|
291
291
|
bug_tracker_uri: https://github.com/betterment/delayed/issues
|
292
292
|
source_code_uri: https://github.com/betterment/delayed
|
293
|
+
rubygems_mfa_required: 'true'
|
293
294
|
post_install_message:
|
294
295
|
rdoc_options: []
|
295
296
|
require_paths:
|