Merge Condition::DSL into Condition

This commit is contained in:
Thibault Jouan
2014-09-22 19:42:14 +00:00
parent 2c335b2437
commit 3b28045340
7 changed files with 145 additions and 197 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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