Thibault Jouan ed99c191e0 Build conditions with DSL evaluated tests:
In Condition:

  * Modify constructor to accepts tests and a default return value;
  * Implement #met?;
  * Modify #! so that it return the negated value returned by #met?.

  In Condition::DSL:

  * Modify .evaluate to build the condition with tests and the value
    returned by a the evaluated condition block.

  Add a basic Test base class, with env and arguments as attributes.

  Add some spec helpers to build some easily testable kind of Test
instances (as test doubles).
2013-08-18 00:29:36 +00:00

34 lines
688 B
Ruby

module Producer
module Core
class Condition
class DSL
class << self
def evaluate(env, &block)
dsl = new(env, &block)
return_value = dsl.evaluate
Condition.new(dsl.tests, return_value)
end
def define_test(keyword, klass)
define_method(keyword) do |*args|
@tests << klass.new(@env, *args)
end
end
end
attr_accessor :tests
def initialize(env, &block)
@env = env
@block = block
@tests = []
end
def evaluate
instance_eval &@block
end
end
end
end
end