Sha256: 78b07afe00dbbca452185bd5ca2af242334c416beae55870686fbdcdf3642a41

Contents?: true

Size: 1.86 KB

Versions: 36

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true

module Mutant
  class Expression
    # Abstract base class for expressions matching namespaces
    class Namespace < self
      include AbstractType, Anima.new(:scope_name)
      private(*anima.attribute_names)

      # Recursive namespace expression
      class Recursive < self
        REGEXP = /\A#{SCOPE_NAME_PATTERN}?\*\z/.freeze

        # Initialize object
        #
        # @return [undefined]
        def initialize(*)
          super
          @recursion_pattern = Regexp.union(
            /\A#{scope_name}\z/,
            /\A#{scope_name}::/,
            /\A#{scope_name}[.#]/
          )
        end

        # Syntax for expression
        #
        # @return [String]
        def syntax
          "#{scope_name}*"
        end
        memoize :syntax

        # Matcher for expression
        #
        # @return [Matcher]
        def matcher
          Matcher::Namespace.new(self)
        end

        # Length of match with other expression
        #
        # @param [Expression] expression
        #
        # @return [Integer]
        def match_length(expression)
          if eql?(expression)
            syntax.length
          elsif @recursion_pattern.match?(expression.syntax)
            scope_name.length
          else
            0
          end
        end

      end # Recursive

      # Exact namespace expression
      class Exact < self

        MATCHER = Matcher::Scope
        private_constant(*constants(false))

        REGEXP = /\A#{SCOPE_NAME_PATTERN}\z/.freeze

        # Matcher matcher on expression
        #
        # @return [Matcher]
        def matcher
          Matcher::Scope.new(Object.const_get(scope_name))
        end

        # Syntax for expression
        #
        # @return [String]
        alias_method :syntax, :scope_name
        public :syntax

      end # Exact
    end # Namespace
  end # Expression
end # Mutant

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
mutant-0.10.17 lib/mutant/expression/namespace.rb
mutant-0.10.16 lib/mutant/expression/namespace.rb
mutant-0.10.15 lib/mutant/expression/namespace.rb
mutant-0.10.14 lib/mutant/expression/namespace.rb
mutant-0.10.13 lib/mutant/expression/namespace.rb
mutant-0.10.12 lib/mutant/expression/namespace.rb
mutant-0.10.11 lib/mutant/expression/namespace.rb
mutant-0.10.10 lib/mutant/expression/namespace.rb
mutant-0.10.9 lib/mutant/expression/namespace.rb
mutant-0.10.8 lib/mutant/expression/namespace.rb
mutant-0.10.7 lib/mutant/expression/namespace.rb
mutant-0.10.6 lib/mutant/expression/namespace.rb
mutant-0.10.5 lib/mutant/expression/namespace.rb
mutant-0.10.4 lib/mutant/expression/namespace.rb
mutant-0.10.1 lib/mutant/expression/namespace.rb
mutant-0.10.0 lib/mutant/expression/namespace.rb
mutant-0.9.14 lib/mutant/expression/namespace.rb
mutant-0.9.13 lib/mutant/expression/namespace.rb
mutant-0.9.12 lib/mutant/expression/namespace.rb
mutant-0.9.11 lib/mutant/expression/namespace.rb