diff --git a/lib/producer/core/recipe.rb b/lib/producer/core/recipe.rb index f50333f..153e087 100644 --- a/lib/producer/core/recipe.rb +++ b/lib/producer/core/recipe.rb @@ -16,7 +16,7 @@ module Producer def evaluate(env) dsl = DSL.new(@code).evaluate(env) - dsl.tasks.map(&:evaluate) + dsl.tasks.map { |e| e.evaluate env } end end end diff --git a/lib/producer/core/task.rb b/lib/producer/core/task.rb index ad79491..0c97cd7 100644 --- a/lib/producer/core/task.rb +++ b/lib/producer/core/task.rb @@ -8,8 +8,8 @@ module Producer @block = block end - def evaluate - DSL.new &@block + def evaluate(env) + DSL.new(&@block).evaluate(env) end end end diff --git a/lib/producer/core/task/dsl.rb b/lib/producer/core/task/dsl.rb index dd9ee74..f1a52b8 100644 --- a/lib/producer/core/task/dsl.rb +++ b/lib/producer/core/task/dsl.rb @@ -5,7 +5,11 @@ module Producer ConditionNotMetError = Class.new(StandardError) def initialize(&block) - instance_eval &block + @block = block + end + + def evaluate(env) + instance_eval &@block rescue ConditionNotMetError end diff --git a/spec/producer/core/recipe_spec.rb b/spec/producer/core/recipe_spec.rb index 9679e49..c9ff15a 100644 --- a/spec/producer/core/recipe_spec.rb +++ b/spec/producer/core/recipe_spec.rb @@ -52,7 +52,7 @@ module Producer::Core allow(Task).to receive(:new) { task } dsl = Recipe::DSL.new { task(:some_task) } allow(Recipe::DSL).to receive(:new) { dsl } - expect(task).to receive(:evaluate) + expect(task).to receive(:evaluate).with(env) recipe.evaluate(env) end end diff --git a/spec/producer/core/task/dsl_spec.rb b/spec/producer/core/task/dsl_spec.rb index aaa121f..e67ad37 100644 --- a/spec/producer/core/task/dsl_spec.rb +++ b/spec/producer/core/task/dsl_spec.rb @@ -2,13 +2,15 @@ require 'spec_helper' module Producer::Core describe Task::DSL do + let(:env) { double('env') } subject(:dsl) { Task::DSL.new &block } - describe '#initialize' do + describe '#evaluate' do let(:block) { Proc.new { raise 'error from task' } } - it 'evaluates its block' do - expect { dsl }.to raise_error(RuntimeError, 'error from task') + it 'evaluates its code' do + expect { dsl.evaluate(env) } + .to raise_error(RuntimeError, 'error from task') end end @@ -20,7 +22,8 @@ module Producer::Core } } it 'evaluates all the block' do - expect { dsl }.to raise_error(RuntimeError, 'error after condition') + expect { dsl.evaluate(env) } + .to raise_error(RuntimeError, 'error after condition') end end @@ -31,7 +34,7 @@ module Producer::Core } } it 'stops block evaluation' do - expect { dsl }.not_to raise_error + expect { dsl.evaluate(env) }.not_to raise_error end end end diff --git a/spec/producer/core/task_spec.rb b/spec/producer/core/task_spec.rb index c75fb3f..ff55340 100644 --- a/spec/producer/core/task_spec.rb +++ b/spec/producer/core/task_spec.rb @@ -13,9 +13,18 @@ module Producer::Core end describe '#evaluate' do + let(:env) { double('env') } + it 'builds a task DSL sandbox' do - expect(Task::DSL).to receive(:new).with(&block) - task.evaluate + expect(Task::DSL).to receive(:new).with(&block).and_call_original + task.evaluate(env) + end + + it 'evaluates the task DSL sandbox' do + dsl = double('task dsl') + allow(Task::DSL).to receive(:new) { dsl } + expect(dsl).to receive(:evaluate).with(env) + task.evaluate(env) end end end