Implement target recipe keyword feature

This commit is contained in:
Thibault Jouan 2013-08-03 23:41:22 +00:00
parent a6e27edfd2
commit a3bba6d4da
4 changed files with 39 additions and 1 deletions

View File

@ -0,0 +1,12 @@
Feature: target recipe keyword
Scenario: registers the target host on which tasks should be evaluated
Given a recipe with:
"""
target 'some_host.example'
puts env.target
"""
When I execute the recipe
Then the exit status must be 0
And the output must contain exactly "some_host.example\n"

View File

@ -1,10 +1,12 @@
module Producer module Producer
module Core module Core
class Env class Env
attr_reader :current_recipe attr_reader :current_recipe
attr_accessor :target
def initialize(recipe) def initialize(recipe)
@current_recipe = recipe @current_recipe = recipe
@target = nil
end end
end end
end end

View File

@ -5,10 +5,25 @@ module Producer::Core
let(:recipe) { Recipe.new(proc { nil }) } let(:recipe) { Recipe.new(proc { nil }) }
subject(:env) { Env.new(recipe) } subject(:env) { Env.new(recipe) }
describe '#initialize' do
it 'has no target' do
expect(env.target).not_to be
end
end
describe '#current_recipe' do describe '#current_recipe' do
it 'returns the assigned current recipe' do it 'returns the assigned current recipe' do
expect(env.current_recipe).to eq recipe expect(env.current_recipe).to eq recipe
end end
end end
describe '#target' do
let(:target) { Object.new }
it 'returns the defined target' do
env.target = target
expect(env.target).to eq target
end
end
end end
end end

View File

@ -87,6 +87,15 @@ module Producer::Core
end end
end end
describe '#target' do
let(:code) { proc { target 'some_host.example' } }
it 'registers the target host in the env' do
expect(env).to receive(:target=).with('some_host.example')
dsl.evaluate(env)
end
end
describe '#tasks' do describe '#tasks' do
let(:code) { proc { task(:some_task) } } let(:code) { proc { task(:some_task) } }