diff --git a/features/registry.feature b/features/registry.feature index 5cc0524..b661827 100644 --- a/features/registry.feature +++ b/features/registry.feature @@ -56,3 +56,16 @@ Feature: key/value registry """ When I successfully execute the recipe Then the output must contain "some_value" + + Scenario: `set?' keyword tests wether given key is defined + Given a recipe with: + """ + set :some_key, 'some_value' + task :registry_testing do + echo 'some_value_set' if set? :some_key + echo 'other_value' if set? :other_key + end + """ + When I execute the recipe + Then the output must contain "some_value_set" + And the output must not contain "other_value" diff --git a/lib/producer/core/env.rb b/lib/producer/core/env.rb index 38f47c6..261ca8e 100644 --- a/lib/producer/core/env.rb +++ b/lib/producer/core/env.rb @@ -2,7 +2,7 @@ module Producer module Core class Env extend Forwardable - def_delegators :@registry, :[]= + def_delegators :@registry, :[]=, :key? attr_reader :input, :output, :error_output, :registry, :logger attr_accessor :target, :verbose, :debug, :dry_run diff --git a/lib/producer/core/task.rb b/lib/producer/core/task.rb index 3c31c65..9bd646f 100644 --- a/lib/producer/core/task.rb +++ b/lib/producer/core/task.rb @@ -17,6 +17,7 @@ module Producer def_delegators :@name, :to_s def_delegators :@env, :target def_delegator :@env, :[], :get + def_delegator :@env, :key?, :set? define_action :echo, Actions::Echo define_action :sh, Actions::ShellCommand diff --git a/spec/producer/core/task_spec.rb b/spec/producer/core/task_spec.rb index 1acaced..1220659 100644 --- a/spec/producer/core/task_spec.rb +++ b/spec/producer/core/task_spec.rb @@ -160,6 +160,18 @@ module Producer::Core end end + describe '#set?' do + before { env[:some_key] = :some_value } + + it 'returns true when given key exists' do + expect(task.set? :some_key).to be true + end + + it 'returns false when given key does not exist' do + expect(task.set? :other_key).to be false + end + end + describe '#target' do before { env.target = :some_target }