Merge Condition::DSL into Condition
This commit is contained in:
@@ -14,7 +14,7 @@ require 'producer/core/actions/file_append'
|
||||
require 'producer/core/actions/file_replace_content'
|
||||
require 'producer/core/actions/file_writer'
|
||||
|
||||
# condition tests (need to be defined before the condition DSL)
|
||||
# condition tests
|
||||
require 'producer/core/test'
|
||||
require 'producer/core/tests/condition_test'
|
||||
require 'producer/core/tests/file_contains'
|
||||
@@ -27,7 +27,6 @@ require 'producer/core/tests/shell_command_status'
|
||||
|
||||
require 'producer/core/cli'
|
||||
require 'producer/core/condition'
|
||||
require 'producer/core/condition/dsl'
|
||||
require 'producer/core/env'
|
||||
require 'producer/core/errors'
|
||||
require 'producer/core/logger_formatter'
|
||||
|
@@ -2,16 +2,45 @@ module Producer
|
||||
module Core
|
||||
class Condition
|
||||
class << self
|
||||
def define_test(keyword, test)
|
||||
{
|
||||
keyword => false,
|
||||
"no_#{keyword}" => true
|
||||
}.each do |kw, negated|
|
||||
define_method(kw) do |*args|
|
||||
if test.respond_to? :call
|
||||
args = [test, *args]
|
||||
klass = Tests::ConditionTest
|
||||
else
|
||||
klass = test
|
||||
end
|
||||
t = klass.new(@env, *args, negated: negated)
|
||||
@tests << t
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def evaluate(env, *args, &block)
|
||||
dsl = DSL.new(env, &block)
|
||||
return_value = dsl.evaluate *args
|
||||
Condition.new(dsl.tests, return_value)
|
||||
new.tap do |o|
|
||||
o.instance_eval { @env = env }
|
||||
return_value = o.instance_exec *args, &block
|
||||
o.instance_eval { @return_value = return_value }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
define_test :`, Tests::ShellCommandStatus
|
||||
define_test :sh, Tests::ShellCommandStatus
|
||||
define_test :file_contains, Tests::FileContains
|
||||
define_test :file_eq, Tests::FileEq
|
||||
define_test :env?, Tests::HasEnv
|
||||
define_test :executable?, Tests::HasExecutable
|
||||
define_test :dir?, Tests::HasDir
|
||||
define_test :file?, Tests::HasFile
|
||||
|
||||
attr_reader :tests, :return_value
|
||||
|
||||
def initialize(tests, return_value = nil)
|
||||
def initialize(tests = [], return_value = nil)
|
||||
@tests = tests
|
||||
@return_value = return_value
|
||||
end
|
||||
|
@@ -1,48 +0,0 @@
|
||||
module Producer
|
||||
module Core
|
||||
class Condition
|
||||
class DSL
|
||||
class << self
|
||||
def define_test(keyword, test)
|
||||
{
|
||||
keyword => false,
|
||||
"no_#{keyword}" => true
|
||||
}.each do |kw, negated|
|
||||
define_method(kw) do |*args|
|
||||
if test.respond_to? :call
|
||||
args = [test, *args]
|
||||
klass = Tests::ConditionTest
|
||||
else
|
||||
klass = test
|
||||
end
|
||||
t = klass.new(@env, *args, negated: negated)
|
||||
@tests << t
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
define_test :`, Tests::ShellCommandStatus
|
||||
define_test :sh, Tests::ShellCommandStatus
|
||||
define_test :file_contains, Tests::FileContains
|
||||
define_test :file_eq, Tests::FileEq
|
||||
define_test :env?, Tests::HasEnv
|
||||
define_test :executable?, Tests::HasExecutable
|
||||
define_test :dir?, Tests::HasDir
|
||||
define_test :file?, Tests::HasFile
|
||||
|
||||
attr_reader :block, :env, :tests
|
||||
|
||||
def initialize(env, &block)
|
||||
@env = env
|
||||
@block = block
|
||||
@tests = []
|
||||
end
|
||||
|
||||
def evaluate(*args)
|
||||
instance_exec *args, &@block
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@@ -32,7 +32,7 @@ module Producer
|
||||
end
|
||||
end
|
||||
|
||||
def test_macro(name, dsl: Condition::DSL, &block)
|
||||
def test_macro(name, dsl: Condition, &block)
|
||||
dsl.define_test(name, block)
|
||||
end
|
||||
|
||||
|
Reference in New Issue
Block a user