diff options
-rw-r--r-- | .github/issue_template.md | 9 | ||||
-rw-r--r-- | .github/pull_request_template.md | 8 | ||||
-rw-r--r-- | activejob/lib/active_job/arguments.rb | 12 | ||||
-rw-r--r-- | activejob/test/cases/argument_serialization_test.rb | 10 | ||||
-rw-r--r-- | activejob/test/support/stubs/strong_parameters.rb | 15 |
5 files changed, 42 insertions, 12 deletions
diff --git a/.github/issue_template.md b/.github/issue_template.md index 2ff6a271db..87e666a7dd 100644 --- a/.github/issue_template.md +++ b/.github/issue_template.md @@ -1,13 +1,12 @@ ### Steps to reproduce - -(Guidelines for creating a bug report are [available -here](http://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#creating-a-bug-report)) +<!-- (Guidelines for creating a bug report are [available +here](http://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#creating-a-bug-report)) --> ### Expected behavior -Tell us what should happen +<!-- Tell us what should happen --> ### Actual behavior -Tell us what happens instead +<!-- Tell us what happens instead --> ### System configuration **Rails version**: diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index a36687ec99..85c0e29ff0 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,13 +1,13 @@ ### Summary -Provide a general description of the code changes in your pull +<!-- Provide a general description of the code changes in your pull request... were there any bugs you had fixed? If so, mention them. If these bugs have open GitHub issues, be sure to tag them here as well, -to keep the conversation linked together. +to keep the conversation linked together. --> ### Other Information -If there's anything else that's important and relevant to your pull +<!-- If there's anything else that's important and relevant to your pull request, mention that information here. This could include benchmarks, or other information. @@ -18,4 +18,4 @@ Finally, if your pull request affects documentation or any non-code changes, guidelines for those changes are [available here](http://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#contributing-to-the-rails-documentation) -Thanks for contributing to Rails! +Thanks for contributing to Rails! --> diff --git a/activejob/lib/active_job/arguments.rb b/activejob/lib/active_job/arguments.rb index ffc57dae84..fa58c50ed0 100644 --- a/activejob/lib/active_job/arguments.rb +++ b/activejob/lib/active_job/arguments.rb @@ -75,14 +75,14 @@ module ActiveJob when Array argument.map { |arg| serialize_argument(arg) } when ActiveSupport::HashWithIndifferentAccess - result = serialize_hash(argument) - result[WITH_INDIFFERENT_ACCESS_KEY] = serialize_argument(true) - result + serialize_indifferent_hash(argument) when Hash symbol_keys = argument.each_key.grep(Symbol).map(&:to_s) result = serialize_hash(argument) result[SYMBOL_KEYS_KEY] = symbol_keys result + when -> (arg) { arg.respond_to?(:permitted?) } + serialize_indifferent_hash(argument.to_h) else Serializers.serialize(argument) end @@ -148,6 +148,12 @@ module ActiveJob end end + def serialize_indifferent_hash(indifferent_hash) + result = serialize_hash(indifferent_hash) + result[WITH_INDIFFERENT_ACCESS_KEY] = serialize_argument(true) + result + end + def transform_symbol_keys(hash, symbol_keys) # NOTE: HashWithIndifferentAccess#transform_keys always # returns stringified keys with indifferent access diff --git a/activejob/test/cases/argument_serialization_test.rb b/activejob/test/cases/argument_serialization_test.rb index 8b2981926f..e4e14016d9 100644 --- a/activejob/test/cases/argument_serialization_test.rb +++ b/activejob/test/cases/argument_serialization_test.rb @@ -5,6 +5,7 @@ require "active_job/arguments" require "models/person" require "active_support/core_ext/hash/indifferent_access" require "jobs/kwargs_job" +require "support/stubs/strong_parameters" class ArgumentSerializationTest < ActiveSupport::TestCase setup do @@ -49,6 +50,15 @@ class ArgumentSerializationTest < ActiveSupport::TestCase assert_arguments_roundtrip([a: 1, "b" => 2]) end + test "serialize a ActionController::Parameters" do + parameters = Parameters.new(a: 1) + + assert_equal( + { "a" => 1, "_aj_hash_with_indifferent_access" => true }, + ActiveJob::Arguments.serialize([parameters]).first + ) + end + test "serialize a hash" do symbol_key = { a: 1 } string_key = { "a" => 1 } diff --git a/activejob/test/support/stubs/strong_parameters.rb b/activejob/test/support/stubs/strong_parameters.rb new file mode 100644 index 0000000000..acba3a4504 --- /dev/null +++ b/activejob/test/support/stubs/strong_parameters.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class Parameters + def initialize(parameters = {}) + @parameters = parameters.with_indifferent_access + end + + def permitted? + true + end + + def to_h + @parameters.to_h + end +end |