71 lines
1.2 KiB
Ruby
71 lines
1.2 KiB
Ruby
|
module Mutant
|
||
|
class Mutator
|
||
|
class Util
|
||
|
|
||
|
# Mutators that mutates an array of inputs
|
||
|
class Array < self
|
||
|
|
||
|
handle(::Array)
|
||
|
|
||
|
class Presence < Util
|
||
|
|
||
|
private
|
||
|
|
||
|
# Emit element presence mutations
|
||
|
#
|
||
|
# @return [undefined]
|
||
|
#
|
||
|
# @api private
|
||
|
#
|
||
|
def dispatch
|
||
|
input.each_index do |index|
|
||
|
dup = dup_input
|
||
|
dup.delete_at(index)
|
||
|
emit(dup)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
class Element < Util
|
||
|
|
||
|
private
|
||
|
|
||
|
# Emit mutations
|
||
|
#
|
||
|
# @return [undefined]
|
||
|
#
|
||
|
# @api private
|
||
|
#
|
||
|
def dispatch
|
||
|
input.each_with_index do |element, index|
|
||
|
dup = dup_input
|
||
|
|
||
|
Mutator.each(element).each do |mutation|
|
||
|
dup[index]=mutation
|
||
|
emit(dup)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
# Emit mutations
|
||
|
#
|
||
|
# @return [undefined]
|
||
|
#
|
||
|
# @api private
|
||
|
#
|
||
|
def dispatch
|
||
|
run(Element)
|
||
|
run(Presence)
|
||
|
emit([])
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|