Sha256: f301d990addd5e0c366f78e98879091c9d8dfbb543d6489135ed313f1022fd90

Contents?: true

Size: 1.06 KB

Versions: 6

Compression:

Stored size: 1.06 KB

Contents

module Mutant
  class Mutator
    class Node
      # Emitter for mutations on 19 blocks
      class Block < self

        handle(:block)

        children :send, :arguments, :body

      private

        # Emit mutations
        #
        # @return [undefined]
        def dispatch
          emit_singletons
          emit(send)
          emit_send_mutations(&method(:n_send?))
          emit_arguments_mutations

          mutate_body
        end

        # Emit body mutations
        #
        # @return [undefined]
        def mutate_body
          emit_body(nil)
          emit_body(N_RAISE)

          return unless body
          emit(body)
          emit_body_mutations

          mutate_body_receiver
        end

        # Mutate method send in body scope of `send`
        #
        # @return [undefined]
        def mutate_body_receiver
          return unless n_send?(body)

          body_meta = AST::Meta::Send.new(body)

          emit(s(:send, send, body_meta.selector, *body_meta.arguments))
        end

      end # Block
    end # Node
  end # Mutator
end # Mutant

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mutant-0.8.16 lib/mutant/mutator/node/block.rb
mutant-0.8.15 lib/mutant/mutator/node/block.rb
mutant-0.8.14 lib/mutant/mutator/node/block.rb
mutant-0.8.13 lib/mutant/mutator/node/block.rb
mutant-0.8.12 lib/mutant/mutator/node/block.rb
mutant-0.8.11 lib/mutant/mutator/node/block.rb