Sha256: 2b9b65c1f3fb0612057560b54cc4ecb666daced416f77979d7d5927e3210694a

Contents?: true

Size: 1.38 KB

Versions: 9

Compression:

Stored size: 1.38 KB

Contents

module Mutant
  class Expression

    # Abstract base class for methods expression
    class Methods < self

      MATCHERS = IceNine.deep_freeze(
        '.' => Matcher::Methods::Singleton,
        '#' => Matcher::Methods::Instance
      )

      register(
        /\A(?<scope_name>#{SCOPE_PATTERN})(?<scope_symbol>[.#])\z/
      )

      # Return method matcher
      #
      # @param [Env] env
      #
      # @return [Matcher::Method]
      #
      # @api private
      #
      def matcher(env)
        MATCHERS.fetch(scope_symbol).new(env, scope)
      end

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

    private

      # Return scope name
      #
      # @return [String]
      #
      # @api private
      #
      def scope_name
        match[__method__]
      end

      # Return scope
      #
      # @return [Class, Method]
      #
      # @api private
      #
      def scope
        Mutant.constant_lookup(scope_name)
      end

      # Return scope symbol
      #
      # @return [Symbol]
      #
      # @api private
      #
      def scope_symbol
        match[__method__]
      end

    end # Method
  end # Expression
end # Mutant

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
mutant-0.7.9 lib/mutant/expression/methods.rb
mutant-0.7.8 lib/mutant/expression/methods.rb
mutant-0.7.7 lib/mutant/expression/methods.rb
mutant-0.7.6 lib/mutant/expression/methods.rb
mutant-0.7.5 lib/mutant/expression/methods.rb
mutant-0.7.4 lib/mutant/expression/methods.rb
mutant-0.7.3 lib/mutant/expression/methods.rb
mutant-0.7.2 lib/mutant/expression/methods.rb
mutant-0.7.1 lib/mutant/expression/methods.rb