Sha256: 40b56fab9dcb57514f4e6d54d329b502307baaabb32e7372eefabfba1cf6533a

Contents?: true

Size: 1.67 KB

Versions: 9

Compression:

Stored size: 1.67 KB

Contents

require_relative './operation'

module Dentaku
  module AST
    class Comparator < Operation
      def self.precedence
        5
      end

      def type
        :logical
      end

      def operator
        raise NotImplementedError
      end

      private

      def value
        yield
      rescue ::ArgumentError => argument_error
        raise Dentaku::ArgumentError, argument_error.message
      rescue NoMethodError => no_method_error
        raise Dentaku::Error, no_method_error.message
      end
    end

    class LessThan < Comparator
      def value(context = {})
        super() { left.value(context) < right.value(context) }
      end

      def operator
        return :<
      end
    end

    class LessThanOrEqual < Comparator
      def value(context = {})
        super() { left.value(context) <= right.value(context) }
      end

      def operator
        return :<=
      end
    end

    class GreaterThan < Comparator
      def value(context = {})
        super() { left.value(context) > right.value(context) }
      end

      def operator
        return :>
      end
    end

    class GreaterThanOrEqual < Comparator
      def value(context = {})
        super() { left.value(context) >= right.value(context) }
      end

      def operator
        return :>=
      end
    end

    class NotEqual < Comparator
      def value(context = {})
        super() { left.value(context) != right.value(context) }
      end

      def operator
        return :!=
      end
    end

    class Equal < Comparator
      def value(context = {})
        super() { left.value(context) == right.value(context) }
      end

      def operator
        return :==
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
dentaku-3.4.2 lib/dentaku/ast/comparators.rb
dentaku-3.4.1 lib/dentaku/ast/comparators.rb
dentaku-3.4.0 lib/dentaku/ast/comparators.rb
dentaku-3.3.4 lib/dentaku/ast/comparators.rb
dentaku-3.3.3 lib/dentaku/ast/comparators.rb
dentaku-3.3.2 lib/dentaku/ast/comparators.rb
dentaku-3.3.1 lib/dentaku/ast/comparators.rb
dentaku-3.3.0 lib/dentaku/ast/comparators.rb
dentaku-3.2.1 lib/dentaku/ast/comparators.rb