Class: Producer::Core::Condition
- Inherits:
-
Object
- Object
- Producer::Core::Condition
- Extended by:
- Forwardable
- Defined in:
- lib/producer/core/condition.rb
Instance Attribute Summary collapse
-
#return_value ⇒ Object
readonly
Returns the value of attribute return_value.
-
#tests ⇒ Object
readonly
Returns the value of attribute tests.
Class Method Summary collapse
Instance Method Summary collapse
- #! ⇒ Object
-
#initialize(tests = [], return_value = nil) ⇒ Condition
constructor
A new instance of Condition.
- #met? ⇒ Boolean
Constructor Details
#initialize(tests = [], return_value = nil) ⇒ Condition
Returns a new instance of Condition.
48 49 50 51 |
# File 'lib/producer/core/condition.rb', line 48 def initialize(tests = [], return_value = nil) @tests = tests @return_value = return_value end |
Instance Attribute Details
#return_value ⇒ Object (readonly)
Returns the value of attribute return_value.
46 47 48 |
# File 'lib/producer/core/condition.rb', line 46 def return_value @return_value end |
#tests ⇒ Object (readonly)
Returns the value of attribute tests.
46 47 48 |
# File 'lib/producer/core/condition.rb', line 46 def tests @tests end |
Class Method Details
.define_test(keyword, test) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/producer/core/condition.rb', line 5 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 |
.evaluate(env, *args, &block) ⇒ Object
23 24 25 26 27 28 29 |
# File 'lib/producer/core/condition.rb', line 23 def evaluate(env, *args, &block) 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 |
Instance Method Details
#! ⇒ Object
59 60 61 |
# File 'lib/producer/core/condition.rb', line 59 def ! !met? end |
#met? ⇒ Boolean
53 54 55 56 57 |
# File 'lib/producer/core/condition.rb', line 53 def met? return !!@return_value if @tests.empty? @tests.each { |t| return false unless t.pass? } true end |