diff --git a/lib/sidekiq_unique_jobs/core_ext.rb b/lib/sidekiq_unique_jobs/core_ext.rb index ca0e3d6e..3ecc171d 100644 --- a/lib/sidekiq_unique_jobs/core_ext.rb +++ b/lib/sidekiq_unique_jobs/core_ext.rb @@ -98,7 +98,7 @@ def slice!(*keys) def _deep_transform_keys_in_object(object, &block) case object when Hash - object.each_with_object({}) do |(key, value), result| + object.each_with_object(self.class.new) do |(key, value), result| result[yield(key)] = _deep_transform_keys_in_object(value, &block) end when Array diff --git a/spec/sidekiq_unique_jobs/core_ext_spec.rb b/spec/sidekiq_unique_jobs/core_ext_spec.rb index 6d29bc09..8964ee8e 100644 --- a/spec/sidekiq_unique_jobs/core_ext_spec.rb +++ b/spec/sidekiq_unique_jobs/core_ext_spec.rb @@ -25,6 +25,20 @@ end end + describe "ExtendedHash" do + before do + stub_const("ExtendedHash", Hash) + end + + let(:hash) { ExtendedHash[:test, :me, :not, :me] } + + describe "#deep_transform_keys" do + subject(:deep_transform_keys) { hash.deep_transform_keys(&:to_s) } + + it { is_expected.to be_a(ExtendedHash) } + end + end + describe Array do let(:array) { [1, 2, nil, last_argument] } let(:last_argument) { Object.new }