aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/active_job/arguments.rb2
-rw-r--r--test/cases/parameters_test.rb6
2 files changed, 6 insertions, 2 deletions
diff --git a/lib/active_job/arguments.rb b/lib/active_job/arguments.rb
index 6fe52397da..553ab20f65 100644
--- a/lib/active_job/arguments.rb
+++ b/lib/active_job/arguments.rb
@@ -28,7 +28,7 @@ module ActiveJob
when Array
deserialize(argument)
when Hash
- argument.with_indifferent_access
+ Hash[argument.map{ |key, value| [ key, deserialize([value]).first ] }].with_indifferent_access
else
ActiveModel::GlobalLocator.locate(argument) || argument
end
diff --git a/test/cases/parameters_test.rb b/test/cases/parameters_test.rb
index 93b34278a5..737f3c26b7 100644
--- a/test/cases/parameters_test.rb
+++ b/test/cases/parameters_test.rb
@@ -66,8 +66,12 @@ class ParameterDeserializationTest < ActiveSupport::TestCase
assert_equal [ 3, Person.find(5) ], ActiveJob::Arguments.deserialize([ 3, Person.find(5).gid ])
end
- test 'should dive deep when desierializing' do
+ test 'should dive deep when deserialising arrays' do
assert_equal [ [ 3, Person.find(5) ] ], ActiveJob::Arguments.deserialize([ [ 3, Person.find(5).gid ] ])
end
+ test 'should dive deep when deserialising hashes' do
+ assert_equal [ { "5" => Person.find(5) } ], ActiveJob::Arguments.deserialize([ { "5" => Person.find(5).gid } ])
+ end
+
end