Class: Producer::Core::Condition

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/producer/core/condition.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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_valueObject (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

#testsObject (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

Returns:

  • (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