Sha256: 02ba31da20354443c3ea37c4e5d4ed8b3b890b400a36bafcd1e8e86db5c951e1

Contents?: true

Size: 1.63 KB

Versions: 6

Compression:

Stored size: 1.63 KB

Contents

module Mutant
  class Subject
    class Method
      # Instance method subjects
      class Instance < self

        NAME_INDEX = 0
        SYMBOL = '#'.freeze

        # Test if method is public
        #
        # @return [true]
        #   if method is public
        #
        # @return [false]
        #   otherwise
        #
        # @api private
        #
        def public?
          scope.public_method_defined?(name)
        end
        memoize :public?

      private

        # Mutator for memoized instance methods
        class Memoized < self
          include NodeHelpers

        private

          # Return mutations
          #
          # @param [#<<] emitter
          #
          # @return [undefined]
          #
          # @api private
          #
          def generate_mutations(emitter)
            emitter << noop_mutation
            Mutator.each(node) do |mutant|
              emitter << Mutation::Evil.new(self, memoizer_node(mutant))
            end
          end

          # Return neutral mutation
          #
          # @return [Mutation::Neutral]
          #
          # @api private
          #
          def noop_mutation
            Mutation::Neutral::Noop.new(self, memoizer_node(node))
          end

          # Return memoizer node for mutant
          #
          # @param [Parser::AST::Node] mutant
          #
          # @return [Parser::AST::Node]
          #
          # @api private
          #
          def memoizer_node(mutant)
            s(:begin, mutant, s(:send, nil, :memoize, s(:args, s(:sym, name))))
          end

        end # Memoized
      end # Instance
    end # Method
  end # Subject
end # Mutant

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mutant-0.3.0.beta21 lib/mutant/subject/method/instance.rb
mutant-0.3.0.beta20 lib/mutant/subject/method/instance.rb
mutant-0.3.0.beta19 lib/mutant/subject/method/instance.rb
mutant-0.3.0.beta18 lib/mutant/subject/method/instance.rb
mutant-0.3.0.beta17 lib/mutant/subject/method/instance.rb
mutant-0.3.0.beta16 lib/mutant/subject/method/instance.rb