Class: Code::Node::IfModifier
- Inherits:
- 
      Code::Node
      
        - Object
- Code::Node
- Code::Node::IfModifier
 
- Defined in:
- lib/code/node/if_modifier.rb
Constant Summary collapse
- IF_KEYWORD =
- "if"
- UNLESS_KEYWORD =
- "unless"
- WHILE_KEYWORD =
- "while"
- UNTIL_KEYWORD =
- "until"
Instance Method Summary collapse
- #evaluate(**args) ⇒ Object
- 
  
    
      #initialize(parsed)  ⇒ IfModifier 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of IfModifier. 
Constructor Details
#initialize(parsed) ⇒ IfModifier
Returns a new instance of IfModifier.
| 9 10 11 12 13 14 | # File 'lib/code/node/if_modifier.rb', line 9 def initialize(parsed) @operator = parsed.delete(:operator) @left = Node::Statement.new(parsed.delete(:left)) @right = Node::Statement.new(parsed.delete(:right)) super(parsed) end | 
Instance Method Details
#evaluate(**args) ⇒ Object
| 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | # File 'lib/code/node/if_modifier.rb', line 16 def evaluate(**args) if @operator == IF_KEYWORD if @right.evaluate(**args).truthy? @left.evaluate(**args) else ::Code::Object::Nothing.new end elsif @operator == UNLESS_KEYWORD if @right.evaluate(**args).falsy? @left.evaluate(**args) else ::Code::Object::Nothing.new end elsif @operator == WHILE_KEYWORD last = ::Code::Object::Nothing.new last = @left.evaluate(**args) while @right.evaluate(**args).truthy? last elsif @operator == UNTIL_KEYWORD last = ::Code::Object::Nothing.new last = @left.evaluate(**args) while @right.evaluate(**args).falsy? last else raise NotImplementedError.new(@operator) end end |