Class: Cadenza::IfNode

Inherits:
Object
  • Object
show all
Defined in:
lib/cadenza/nodes/if_node.rb

Overview

The IfNode is a structure for rendering one of it’s two given blocks based on the evaluation of an expression in the current Context.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(expression, true_children = [], false_children = []) ⇒ IfNode

creates a new Cadenza::IfNode with the given evaluatable expression and pair of blocks.



24
25
26
27
28
# File 'lib/cadenza/nodes/if_node.rb', line 24

def initialize(expression, true_children=[], false_children=[])
   @expression = expression
   @true_children = true_children
   @false_children = false_children
end

Instance Attribute Details

#expressionOperationNode|BooleanInverseNode



7
8
9
# File 'lib/cadenza/nodes/if_node.rb', line 7

def expression
  @expression
end

#false_childrenArray



15
16
17
# File 'lib/cadenza/nodes/if_node.rb', line 15

def false_children
  @false_children
end

#true_childrenArray



11
12
13
# File 'lib/cadenza/nodes/if_node.rb', line 11

def true_children
  @true_children
end

Instance Method Details

#==(rhs) ⇒ Boolean



62
63
64
65
66
# File 'lib/cadenza/nodes/if_node.rb', line 62

def ==(rhs)
   @expression == rhs.expression and
   @true_children == rhs.true_children and
   @false_children == rhs.false_children
end

#evaluate_expression_for_children(context) ⇒ Array



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/cadenza/nodes/if_node.rb', line 39

def evaluate_expression_for_children(context)
   value = @expression.eval(context)

   if value == true
      return @true_children

   elsif value == false
      return @false_children

   elsif value.is_a?(String)
      return value.length == 0 || value =~ /\s+/ ? @false_children : @true_children

   elsif value.is_a?(Float) or value.is_a?(Fixnum)
      return value == 0 ? @false_children : @true_children

   else
      return !!value ? @true_children : @false_children
      
   end
end

#implied_globalsArray



31
32
33
# File 'lib/cadenza/nodes/if_node.rb', line 31

def implied_globals
   (@expression.implied_globals + true_children.map(&:implied_globals).flatten + false_children.map(&:implied_globals).flatten).uniq
end