From 0b0b5c315f936e6405e32c28a971d95dfbe8b882 Mon Sep 17 00:00:00 2001 From: Alexander Paramonov Date: Sun, 9 Nov 2014 16:25:31 +0200 Subject: [PATCH] Add redo command --- lib/processor/process_runner/threads.rb | 8 +++++++- spec/processor/process_runner/specs.rb | 15 +++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/processor/process_runner/threads.rb b/lib/processor/process_runner/threads.rb index 0b34a8e..dd9b108 100755 --- a/lib/processor/process_runner/threads.rb +++ b/lib/processor/process_runner/threads.rb @@ -17,7 +17,13 @@ def call(processor) begin thread_data_processor.process(thread_record) rescue StandardError => exception - thread_data_processor.record_error thread_record, exception + command = catch(:command) do + thread_data_processor.record_error thread_record, exception + end + + # NOTE: redo can not be moved into a method or block + # to break from records loop, use Exception + redo if command == :redo end end diff --git a/spec/processor/process_runner/specs.rb b/spec/processor/process_runner/specs.rb index 554ea42..015efbb 100644 --- a/spec/processor/process_runner/specs.rb +++ b/spec/processor/process_runner/specs.rb @@ -14,9 +14,9 @@ end describe "exception handling" do - describe "processing a record raised StandardError" do - let(:records) { 1..3 } + let(:records) { 1..3 } + describe "processing a record raised StandardError" do it "should continue processing" do processor.should_receive(:process).exactly(3).times.and_raise(StandardError) expect { process_runner.call processor }.to_not raise_error @@ -35,5 +35,16 @@ expect { process_runner.call processor }.to raise_error(Exception) end end + + describe "processing a record have requested a command run" do + it "should run redo command" do + processor.should_receive(:process).with(1).once.and_raise(StandardError) + processor.should_receive(:process).with(1).once + processor.should_receive(:process).exactly(2).times + + processor.should_receive(:record_error).once.and_throw(:command, :redo) + process_runner.call processor + end + end end end