Sha256: 4d4d70f28a82a488015f1a58bc6fc82e43d50ffb8d2684e5b4eac770ef812d58

Contents?: true

Size: 1.93 KB

Versions: 7

Compression:

Stored size: 1.93 KB

Contents

module Mutant
  class Matcher
    class Method
      # Matcher for singleton methods
      class Singleton < self
        SUBJECT_CLASS  = Subject::Method::Singleton
        RECEIVER_INDEX = 0
        NAME_INDEX     = 1

      private

        # Test for node match
        #
        # @param [Parser::AST::Node] node
        #
        # @return [Boolean]
        #
        # @api private
        def match?(node)
          line?(node) && name?(node) && receiver?(node)
        end

        # Test for line match
        #
        # @param [Parser::AST::Node] node
        #
        # @return [Boolean]
        #
        # @api private
        def line?(node)
          expression = node.location.expression
          return false unless expression
          expression.line.equal?(source_line)
        end

        # Test for name match
        #
        # @param [Parser::AST::Node] node
        #
        # @return [Boolean]
        #
        # @api private
        def name?(node)
          node.children[NAME_INDEX].equal?(method_name)
        end

        # Test for receiver match
        #
        # @param [Parser::AST::Node] node
        #
        # @return [Boolean]
        #
        # @api private
        def receiver?(node)
          receiver = node.children[RECEIVER_INDEX]
          case receiver.type
          when :self
            true
          when :const
            receiver_name?(receiver)
          else
            env.warn(format('Can only match :defs on :self or :const got %s unable to match', receiver.type.inspect))
            false
          end
        end

        # Test if receiver name matches context
        #
        # @param [Parser::AST::Node] node
        #
        # @return [Boolean]
        #
        # @api private
        def receiver_name?(node)
          name = node.children[NAME_INDEX]
          name.to_s.eql?(context.unqualified_name)
        end

      end # Singleton
    end # Method
  end # Matcher
end # Mutant

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
mutant-0.8.7 lib/mutant/matcher/method/singleton.rb
mutant-0.8.6 lib/mutant/matcher/method/singleton.rb
mutant-0.8.5 lib/mutant/matcher/method/singleton.rb
mutant-0.8.4 lib/mutant/matcher/method/singleton.rb
mutant-0.8.3 lib/mutant/matcher/method/singleton.rb
mutant-0.8.2 lib/mutant/matcher/method/singleton.rb
mutant-0.8.1 lib/mutant/matcher/method/singleton.rb