Sha256: b1ed39538d10846147a6b5cb70fd17fbac440f713f0aa253e827bd972197c924

Contents?: true

Size: 990 Bytes

Versions: 17

Compression:

Stored size: 990 Bytes

Contents

require_relative './operation'

module Dentaku
  module AST
    class Combinator < Operation
      def initialize(*)
        super

        unless valid_node?(left)
          raise NodeError.new(:logical, left.type, :left),
                "#{self.class} requires logical operands"
        end
        unless valid_node?(right)
          raise NodeError.new(:logical, right.type, :right),
                "#{self.class} requires logical operands"
        end
      end

      def type
        :logical
      end

      private

      def valid_node?(node)
        node && (node.dependencies.any? || node.type == :logical)
      end
    end

    class And < Combinator
      def operator
        :and
      end

      def value(context = {})
        left.value(context) && right.value(context)
      end
    end

    class Or < Combinator
      def operator
        :or
      end

      def value(context = {})
        left.value(context) || right.value(context)
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 2 rubygems

Version Path
dentaku-3.5.4 lib/dentaku/ast/combinators.rb
dentaku-3.5.3 lib/dentaku/ast/combinators.rb
dentaku-3.5.2 lib/dentaku/ast/combinators.rb
dentaku_zevo-3.5.2 lib/dentaku/ast/combinators.rb
dentaku-3.5.1 lib/dentaku/ast/combinators.rb
dentaku-3.5.0 lib/dentaku/ast/combinators.rb
dentaku-3.4.2 lib/dentaku/ast/combinators.rb
dentaku-3.4.1 lib/dentaku/ast/combinators.rb
dentaku-3.4.0 lib/dentaku/ast/combinators.rb
dentaku-3.3.4 lib/dentaku/ast/combinators.rb
dentaku-3.3.3 lib/dentaku/ast/combinators.rb
dentaku-3.3.2 lib/dentaku/ast/combinators.rb
dentaku-3.3.1 lib/dentaku/ast/combinators.rb
dentaku-3.3.0 lib/dentaku/ast/combinators.rb
dentaku-3.2.1 lib/dentaku/ast/combinators.rb
dentaku-3.2.0 lib/dentaku/ast/combinators.rb
dentaku-3.1.0 lib/dentaku/ast/combinators.rb