Sha256: d49f33907fc5dcd9d51a07b3dd4a143bb18e02d1a55b3d3f12121f41b6ae1e89

Contents?: true

Size: 1.4 KB

Versions: 8

Compression:

Stored size: 1.4 KB

Contents

module Mutest
  class Matcher
    # Compiler for complex matchers
    class Compiler
      include Concord.new(:config), AST::Sexp, Procto.call(:result)

      # Generated matcher
      #
      # @return [Matcher]
      def result
        Filter.new(
          Chain.new(config.match_expressions.map(&:matcher)),
          Morpher::Evaluator::Predicate::Boolean::And.new(
            [
              ignored_subjects,
              filtered_subjects
            ]
          )
        )
      end

      # Subject expression prefix predicate
      class SubjectPrefix
        include Concord.new(:expression)

        # Test if subject expression is matched by prefix
        #
        # @return [Boolean]
        def call(subject)
          expression.prefix?(subject.expression)
        end
      end # SubjectPrefix

      private

      # Predicate returning false on expression ignored subject
      #
      # @return [#call]
      def ignored_subjects
        Morpher::Evaluator::Predicate::Boolean::Negation.new(
          Morpher::Evaluator::Predicate::Boolean::Or.new(
            config.ignore_expressions.map(&SubjectPrefix.method(:new))
          )
        )
      end

      # Predicate returning false on filtered subject
      #
      # @return [#call]
      def filtered_subjects
        Morpher::Evaluator::Predicate::Boolean::And.new(config.subject_filters)
      end
    end # Compiler
  end # Matcher
end # Mutest

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
mutest-0.0.9 lib/mutest/matcher/compiler.rb
mutest-0.0.8 lib/mutest/matcher/compiler.rb
mutest-0.0.7 lib/mutest/matcher/compiler.rb
mutest-0.0.6 lib/mutest/matcher/compiler.rb
mutest-0.0.5 lib/mutest/matcher/compiler.rb
mutest-0.0.4 lib/mutest/matcher/compiler.rb
mutest-0.0.3 lib/mutest/matcher/compiler.rb
mutest-0.0.2 lib/mutest/matcher/compiler.rb