Sha256: 572e3af75af45147770e3c18ba8c3a51cc76e7a4e9085d44704bf2bb14b3da95

Contents?: true

Size: 1.57 KB

Versions: 3

Compression:

Stored size: 1.57 KB

Contents

# frozen_string_literal: true

module Cucumber
  module TagExpressions
    # Literal expression node
    class Literal
      def initialize(value)
        @value = value
      end

      def evaluate(variables)
        variables.include?(@value)
      end

      def to_s
        @value
          .gsub(/\\/, '\\\\\\\\')
          .gsub(/\(/, '\\(')
          .gsub(/\)/, '\\)')
          .gsub(/\s/, '\\ ')
      end
    end

    # Not expression node
    class Not
      def initialize(expression)
        @expression = expression
      end

      def evaluate(variables)
        !@expression.evaluate(variables)
      end

      def to_s
        if @expression.is_a?(And) || @expression.is_a?(Or)
          # -- HINT: Binary operations already provide "( ... )"
          "not #{@expression}"
        else
          "not ( #{@expression} )"
        end
      end
    end

    # Or expression node
    class Or
      def initialize(left, right)
        @left = left
        @right = right
      end

      def evaluate(variables)
        @left.evaluate(variables) || @right.evaluate(variables)
      end

      def to_s
        "( #{@left} or #{@right} )"
      end
    end

    # And expression node
    class And
      def initialize(left, right)
        @left = left
        @right = right
      end

      def evaluate(variables)
        @left.evaluate(variables) && @right.evaluate(variables)
      end

      def to_s
        "( #{@left} and #{@right} )"
      end
    end

    class True
      def evaluate(_variables)
        true
      end

      def to_s
        'true'
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
cucumber-tag-expressions-6.1.2 lib/cucumber/tag_expressions/expressions.rb
cucumber-tag-expressions-6.1.1 lib/cucumber/tag_expressions/expressions.rb
cucumber-tag-expressions-6.1.0 lib/cucumber/tag_expressions/expressions.rb