Sha256: 2c16d257a10b32ab0dd35db3947e0b4ee391be6844cf77fad529263aaf3ca1e6

Contents?: true

Size: 1.8 KB

Versions: 5

Compression:

Stored size: 1.8 KB

Contents

module Mutant
  class Expression
    # Abstract base class for expressions matching namespaces
    class Namespace < self
      include AbstractType

    private

      # Return matched namespace
      #
      # @return [String]
      #
      # @api private
      #
      def namespace
        match[__method__]
      end

      # Recursive namespace expression
      class Recursive < self

        register(/\A(?<namespace>#{SCOPE_PATTERN})?\*\z/)

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

        # Return matcher
        #
        # @param [Env::Bootstrap] env
        #
        # @return [Matcher]
        #
        # @api private
        #
        def matcher(env)
          Matcher::Namespace.new(env, self)
        end

        # Return length of match
        #
        # @param [Expression] expression
        #
        # @return [Fixnum]
        #
        # @api private
        #
        def match_length(expression)
          if @recursion_pattern =~ expression.syntax
            namespace.length
          else
            0
          end
        end

      end # Recursive

      # Exact namespace expression
      class Exact < self

        register(/\A(?<namespace>#{SCOPE_PATTERN})\z/)

        MATCHER = Matcher::Scope

        # Return matcher
        #
        # @param [Env::Bootstrap] env
        #
        # @return [Matcher]
        #
        # @api private
        #
        def matcher(env)
          Matcher::Scope.new(env, Mutant.constant_lookup(namespace), self)
        end

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

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mutant-0.7.9 lib/mutant/expression/namespace.rb
mutant-0.7.8 lib/mutant/expression/namespace.rb
mutant-0.7.7 lib/mutant/expression/namespace.rb
mutant-0.7.6 lib/mutant/expression/namespace.rb
mutant-0.7.5 lib/mutant/expression/namespace.rb