Sha256: 0df12c6e0534079fa40c5b585c2d0307d1265f76fa9f43a80363cd2368f2dba6

Contents?: true

Size: 1.23 KB

Versions: 21

Compression:

Stored size: 1.23 KB

Contents

class Code
  class Node
    class IfModifier < Node
      IF_KEYWORD = "if"
      UNLESS_KEYWORD = "unless"
      WHILE_KEYWORD = "while"
      UNTIL_KEYWORD = "until"

      def initialize(parsed)
        @operator = parsed.delete(:operator)
        @left = Node::Statement.new(parsed.delete(:left))
        @right = Node::Statement.new(parsed.delete(:right))
        super(parsed)
      end

      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
    end
  end
end

Version data entries

21 entries across 21 versions & 3 rubygems

Version Path
template-ruby-0.5.6 lib/code/node/if_modifier.rb
language-ruby-0.5.6 lib/code/node/if_modifier.rb
code-ruby-0.5.6 lib/code/node/if_modifier.rb
template-ruby-0.5.5 lib/code/node/if_modifier.rb
language-ruby-0.5.5 lib/code/node/if_modifier.rb
code-ruby-0.5.5 lib/code/node/if_modifier.rb
template-ruby-0.5.4 lib/code/node/if_modifier.rb
language-ruby-0.5.4 lib/code/node/if_modifier.rb
code-ruby-0.5.4 lib/code/node/if_modifier.rb
template-ruby-0.5.3 lib/code/node/if_modifier.rb
language-ruby-0.5.3 lib/code/node/if_modifier.rb
code-ruby-0.5.3 lib/code/node/if_modifier.rb
template-ruby-0.5.2 lib/code/node/if_modifier.rb
language-ruby-0.5.2 lib/code/node/if_modifier.rb
code-ruby-0.5.2 lib/code/node/if_modifier.rb
language-ruby-0.5.1 lib/code/node/if_modifier.rb
template-ruby-0.5.1 lib/code/node/if_modifier.rb
code-ruby-0.5.1 lib/code/node/if_modifier.rb
template-ruby-0.5.0 lib/code/node/if_modifier.rb
language-ruby-0.5.0 lib/code/node/if_modifier.rb