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"
Instance Method Summary collapse
- #evaluate(**args) ⇒ Object
-
#initialize(if_parsed) ⇒ If
constructor
A new instance of If.
Constructor Details
#initialize(if_parsed) ⇒ If
Returns a new instance of If.
21 22 23 24 25 26 27 28 |
# File 'lib/code/node/if.rb', line 21 def initialize(if_parsed) @if_operator = if_parsed.fetch(:if_operator) @if_statement = ::Code::Node::Statement.new(if_parsed.fetch(:if_statement)) @if_body = ::Code::Node::Code.new(if_parsed.fetch(:if_body)) @elses = if_parsed.fetch(:elses, []) @elses.map! { |else_parsed| ::Code::Node::If::Else.new(else_parsed) } end |
Instance Method Details
#evaluate(**args) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/code/node/if.rb', line 30 def evaluate(**args) if_object = @if_statement.evaluate(**args) if @if_operator == IF_KEYWORD && if_object.truthy? @if_body.evaluate(**args) elsif @if_operator == UNLESS_KEYWORD && if_object.falsy? @if_body.evaluate(**args) else @elses.each do |else_node| if else_node.operator == IF_KEYWORD else_object = else_node.statement.evaluate(**args) return else_node.body.evaluate(**args) if else_object.truthy? elsif else_node.operator == UNLESS_KEYWORD else_object = else_node.statement.evaluate(**args) return else_node.body.evaluate(**args) if else_object.falsy? elsif else_node.operator.nil? return else_node.body.evaluate(**args) end end ::Code::Object::Nothing.new end end |