Sha256: 7ccbab21251c4cb70b078b89e029d0666c6832561fb344bb306eb232414fe2c4

Contents?: true

Size: 667 Bytes

Versions: 3

Compression:

Stored size: 667 Bytes

Contents

require_relative './operation'

module Dentaku
  module AST
    class Combinator < Operation
      def initialize(*)
        super
        fail "#{ self.class } requires logical operands" unless valid_node?(left) && valid_node?(right)
      end

      def type
        :logical
      end

      private

      def valid_node?(node)
        node.is_a?(Identifier) || node.type == :logical
      end
    end

    class And < Combinator
      def value(context={})
        left.value(context) && right.value(context)
      end
    end

    class Or < Combinator
      def value(context={})
        left.value(context) || right.value(context)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dentaku-2.0.4 lib/dentaku/ast/combinators.rb
dentaku-2.0.3 lib/dentaku/ast/combinators.rb
dentaku-2.0.2 lib/dentaku/ast/combinators.rb