Sha256: dd1c24f276e0d23577af227635a65ddff95f7df664a09e234a17ef2a1f1444bd

Contents?: true

Size: 1.09 KB

Versions: 24

Compression:

Stored size: 1.09 KB

Contents

module Gherkin
  module Parser
    class TagExpression
      attr_reader :limits

      def initialize(*tag_expressions)
        @ands = []
        @limits = {}
        tag_expressions.each do |expr|
          add(expr.strip.split(/\s*,\s*/))
        end
      end

      def empty?
        @ands.empty?
      end

      def eval(*tags)
        return true if @ands.flatten.empty?
        vars = Hash[*tags.map{|tag| [tag, true]}.flatten]
        !!Kernel.eval(ruby_expression)
      end

    private

      def add(tags)
        negatives, positives = tags.partition{|tag| tag =~ /^~/}
        positive_limits = Hash[*positives.map{|positive| tag, limit = positive.split(':'); [tag, limit ? limit.to_i : nil]}.flatten]
        @limits.merge!(positive_limits)
        @ands << (negatives + positive_limits.keys)
      end

      def ruby_expression
        "(" + @ands.map do |ors|
          ors.map do |tag|
            if tag =~ /^~(.*)/
              "!vars['#{$1}']"
            else
              "vars['#{tag}']"
            end
          end.join("||")
        end.join(")&&(") + ")"
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
gherkin-1.0.9 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.9-i386-mswin32 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.9-i386-mingw32 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.9-java lib/gherkin/parser/tag_expression.rb
gherkin-1.0.8 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.8-i386-mswin32 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.8-i386-mingw32 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.8-java lib/gherkin/parser/tag_expression.rb
gherkin-1.0.7 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.7-i386-mswin32 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.7-i386-mingw32 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.7-java lib/gherkin/parser/tag_expression.rb
gherkin-1.0.6 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.6-i386-mswin32 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.6-i386-mingw32 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.6-java lib/gherkin/parser/tag_expression.rb
gherkin-1.0.5-i386-mswin32 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.5-i386-mingw32 lib/gherkin/parser/tag_expression.rb
gherkin-1.0.5-java lib/gherkin/parser/tag_expression.rb
gherkin-1.0.5 lib/gherkin/parser/tag_expression.rb