Class: Code::Node::If
- Inherits:
-
Code::Node
- Object
- Code::Node
- Code::Node::If
- Defined in:
- lib/code/node/if.rb
Defined Under Namespace
Classes: Else
Constant Summary collapse
- IF_KEYWORD =
"if"
- UNLESS_KEYWORD =
"unless"
- ELSIF_KEYWORD =
"elsif"
- ELSE_KEYWORD =
"else"
Instance Method Summary collapse
- #evaluate(**args) ⇒ Object
-
#initialize(parsed) ⇒ If
constructor
A new instance of If.
Constructor Details
#initialize(parsed) ⇒ If
Returns a new instance of If.
22 23 24 25 26 27 28 29 |
# File 'lib/code/node/if.rb', line 22 def initialize(parsed) @first_operator = parsed.delete(:first_operator) @first_statement = Node::Statement.new(parsed.delete(:first_statement)) @first_body = Node::Code.new(parsed.delete(:first_body)) @elses = parsed.delete(:elses) { [] }.map { |elses| Node::If::Else.new(elses) } super(parsed) end |
Instance Method Details
#evaluate(**args) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/code/node/if.rb', line 31 def evaluate(**args) if @first_operator == IF_KEYWORD && @first_statement.evaluate(**args).truthy? @first_body.evaluate(**args) elsif @first_operator == UNLESS_KEYWORD && @first_statement.evaluate(**args).falsy? @first_body.evaluate(**args) else @elses.each do |elses| if elses.operator == ELSIF_KEYWORD && elses.statement.evaluate(**args).truthy? return elses.body.evaluate(**args) elsif elses.operator == IF_KEYWORD && elses.statement.evaluate(**args).truthy? return elses.body.evaluate(**args) elsif elses.operator == UNLESS_KEYWORD && elses.statement.evaluate(**args).falsy? return elses.body.evaluate(**args) elsif elses.operator == ELSE_KEYWORD return elses.body.evaluate(**args) end end ::Code::Object::Nothing.new end end |