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(if_modifier) ⇒ IfModifier
constructor
A new instance of IfModifier.
Constructor Details
#initialize(if_modifier) ⇒ IfModifier
Returns a new instance of IfModifier.
9 10 11 12 13 |
# File 'lib/code/node/if_modifier.rb', line 9 def initialize(if_modifier) @left = ::Code::Node::Statement.new(if_modifier.fetch(:left)) @operator = if_modifier.fetch(:operator) @right = ::Code::Node::Statement.new(if_modifier.fetch(:right)) end |
Instance Method Details
#evaluate(**args) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/code/node/if_modifier.rb', line 15 def evaluate(**args) if operator == IF_KEYWORD right = @right.evaluate(**args) right.truthy? ? @left.evaluate(**args) : ::Code::Object::Nothing.new elsif operator == UNLESS_KEYWORD right = @right.evaluate(**args) right.truthy? ? ::Code::Object::Nothing.new : @left.evaluate(**args) elsif operator == WHILE_KEYWORD left = ::Code::Object::Nothing.new left = @left.evaluate(**args) while @right.evaluate(**args).truthy? left elsif operator == UNTIL_KEYWORD left = ::Code::Object::Nothing.new left = @left.evaluate(**args) until @right.evaluate(**args).truthy? left else raise NotImplementedError.new(operator.inspect) end end |