From fd8ad9c0817ce743dfd124da5bd1caa36d66d87d Mon Sep 17 00:00:00 2001 From: Mikko Koski Date: Sat, 6 Feb 2016 12:42:27 +0200 Subject: [PATCH] Don't mutate the options hash Fix: Duplicate the options hash before mutating --- lib/delayed/backend/job_preparer.rb | 2 +- lib/delayed/backend/shared_spec.rb | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/delayed/backend/job_preparer.rb b/lib/delayed/backend/job_preparer.rb index 04492b1e7..44317f66b 100644 --- a/lib/delayed/backend/job_preparer.rb +++ b/lib/delayed/backend/job_preparer.rb @@ -4,7 +4,7 @@ class JobPreparer attr_reader :options, :args def initialize(*args) - @options = args.extract_options! + @options = args.extract_options!.dup @args = args end diff --git a/lib/delayed/backend/shared_spec.rb b/lib/delayed/backend/shared_spec.rb index a4dfb6896..6d8671eef 100644 --- a/lib/delayed/backend/shared_spec.rb +++ b/lib/delayed/backend/shared_spec.rb @@ -113,6 +113,13 @@ def create_job(opts = {}) job = described_class.enqueue M::ModuleJob.new expect { job.invoke_job }.to change { M::ModuleJob.runs }.from(0).to(1) end + + it 'does not mutate the options hash' do + options = { priority: 1} + job = described_class.enqueue SimpleJob.new, options + expect(options).to eq({ priority: 1 }) + end + end context 'with delay_jobs = false' do