Sha256: 982cbb1c17305b1b2e965b0ad303c6da1c11e075f38b8695e939fb14ee0607e0

Contents?: true

Size: 866 Bytes

Versions: 12

Compression:

Stored size: 866 Bytes

Contents

class Code
  class Node
    class OrKeyword < Node
      OR_KEYWORD = "or"
      AND_KEYWORD = "and"

      def initialize(or_keyword)
        @first = ::Code::Node::Statement.new(or_keyword.fetch(:first))
        @rest = or_keyword.fetch(:rest)
        @rest.map! do |operation|
          ::Code::Node::Operation::Operation.new(operation)
        end
      end

      def evaluate(**args)
        object = @first.evaluate(**args)

        @rest.each do |operation|
          if operation.operator == OR_KEYWORD
            return object if object.truthy?
          elsif operation.operator == AND_KEYWORD
            return object unless object.truthy?
          else
            raise NotImplementedError.new(operation.operator.inspect)
          end

          object = operation.statement.evaluate(**args)
        end

        object
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
template-ruby-0.4.0 lib/code/node/or_keyword.rb
code-ruby-0.4.0 lib/code/node/or_keyword.rb
template-ruby-0.3.1 lib/code/node/or_keyword.rb
code-ruby-0.3.1 lib/code/node/or_keyword.rb
template-ruby-0.3.0 lib/code/node/or_keyword.rb
code-ruby-0.3.0 lib/code/node/or_keyword.rb
code-ruby-0.2.4 lib/code/node/or_keyword.rb
template-ruby-0.2.4 lib/code/node/or_keyword.rb
template-ruby-0.2.3 lib/code/node/or_keyword.rb
template-ruby-0.2.2 lib/code/node/or_keyword.rb
template-ruby-0.2.1 lib/code/node/or_keyword.rb
template-ruby-0.2.0 lib/code/node/or_keyword.rb