Sha256: 137b2e72212bba7507b2d24f53ca43e64d84455d03791374b9b76970cb1a2f71

Contents?: true

Size: 1.78 KB

Versions: 9

Compression:

Stored size: 1.78 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] 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 [Cache] 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

9 entries across 9 versions & 1 rubygems

Version Path
mutant-0.7.4 lib/mutant/expression/namespace.rb
mutant-0.7.3 lib/mutant/expression/namespace.rb
mutant-0.7.2 lib/mutant/expression/namespace.rb
mutant-0.7.1 lib/mutant/expression/namespace.rb
mutant-0.6.7 lib/mutant/expression/namespace.rb
mutant-0.6.6 lib/mutant/expression/namespace.rb
mutant-0.6.5 lib/mutant/expression/namespace.rb
mutant-0.6.4 lib/mutant/expression/namespace.rb
mutant-0.6.3 lib/mutant/expression/namespace.rb