mutant 0.8.8 → 0.8.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Changelog.md +9 -0
- data/README.md +1 -1
- data/Rakefile +12 -8
- data/bin/mutant +5 -1
- data/config/flay.yml +1 -1
- data/lib/mutant.rb +18 -17
- data/lib/mutant/actor.rb +1 -7
- data/lib/mutant/actor/env.rb +0 -4
- data/lib/mutant/actor/mailbox.rb +0 -4
- data/lib/mutant/actor/receiver.rb +0 -4
- data/lib/mutant/actor/sender.rb +0 -2
- data/lib/mutant/ast.rb +1 -5
- data/lib/mutant/ast/meta/const.rb +0 -2
- data/lib/mutant/ast/meta/optarg.rb +0 -2
- data/lib/mutant/ast/meta/send.rb +0 -12
- data/lib/mutant/ast/named_children.rb +0 -10
- data/lib/mutant/ast/sexp.rb +1 -5
- data/lib/mutant/cli.rb +19 -38
- data/lib/mutant/color.rb +1 -7
- data/lib/mutant/config.rb +11 -7
- data/lib/mutant/context.rb +0 -4
- data/lib/mutant/context/scope.rb +0 -18
- data/lib/mutant/delegator.rb +0 -6
- data/lib/mutant/diff.rb +0 -18
- data/lib/mutant/env.rb +8 -24
- data/lib/mutant/env/bootstrap.rb +18 -41
- data/lib/mutant/expression.rb +0 -8
- data/lib/mutant/expression/method.rb +6 -7
- data/lib/mutant/expression/methods.rb +5 -9
- data/lib/mutant/expression/namespace.rb +0 -13
- data/lib/mutant/expression/parser.rb +0 -6
- data/lib/mutant/integration.rb +2 -20
- data/lib/mutant/isolation.rb +0 -4
- data/lib/mutant/loader.rb +20 -35
- data/lib/mutant/matcher.rb +1 -1
- data/lib/mutant/matcher/chain.rb +1 -3
- data/lib/mutant/matcher/compiler.rb +0 -8
- data/lib/mutant/matcher/config.rb +2 -10
- data/lib/mutant/matcher/filter.rb +1 -3
- data/lib/mutant/matcher/method.rb +4 -26
- data/lib/mutant/matcher/method/instance.rb +1 -7
- data/lib/mutant/matcher/method/singleton.rb +0 -12
- data/lib/mutant/matcher/methods.rb +1 -19
- data/lib/mutant/matcher/namespace.rb +1 -7
- data/lib/mutant/matcher/null.rb +1 -3
- data/lib/mutant/matcher/scope.rb +1 -5
- data/lib/mutant/matcher/static.rb +0 -2
- data/lib/mutant/meta.rb +0 -2
- data/lib/mutant/meta/example.rb +0 -28
- data/lib/mutant/meta/example/dsl.rb +2 -16
- data/lib/mutant/mutation.rb +9 -18
- data/lib/mutant/mutator.rb +0 -24
- data/lib/mutant/mutator/node.rb +1 -33
- data/lib/mutant/mutator/node/and_asgn.rb +0 -2
- data/lib/mutant/mutator/node/argument.rb +0 -10
- data/lib/mutant/mutator/node/arguments.rb +0 -12
- data/lib/mutant/mutator/node/begin.rb +0 -4
- data/lib/mutant/mutator/node/binary.rb +2 -11
- data/lib/mutant/mutator/node/block.rb +0 -6
- data/lib/mutant/mutator/node/break.rb +0 -2
- data/lib/mutant/mutator/node/case.rb +0 -6
- data/lib/mutant/mutator/node/conditional_loop.rb +0 -2
- data/lib/mutant/mutator/node/const.rb +1 -3
- data/lib/mutant/mutator/node/define.rb +4 -11
- data/lib/mutant/mutator/node/defined.rb +0 -2
- data/lib/mutant/mutator/node/dstr.rb +0 -2
- data/lib/mutant/mutator/node/dsym.rb +0 -2
- data/lib/mutant/mutator/node/generic.rb +1 -3
- data/lib/mutant/mutator/node/if.rb +0 -8
- data/lib/mutant/mutator/node/kwbegin.rb +0 -2
- data/lib/mutant/mutator/node/literal/array.rb +0 -4
- data/lib/mutant/mutator/node/literal/boolean.rb +0 -2
- data/lib/mutant/mutator/node/literal/fixnum.rb +0 -6
- data/lib/mutant/mutator/node/literal/float.rb +0 -6
- data/lib/mutant/mutator/node/literal/hash.rb +0 -6
- data/lib/mutant/mutator/node/literal/nil.rb +0 -2
- data/lib/mutant/mutator/node/literal/range.rb +0 -8
- data/lib/mutant/mutator/node/literal/regex.rb +0 -4
- data/lib/mutant/mutator/node/literal/string.rb +0 -2
- data/lib/mutant/mutator/node/literal/symbol.rb +0 -2
- data/lib/mutant/mutator/node/masgn.rb +0 -2
- data/lib/mutant/mutator/node/match_current_line.rb +0 -2
- data/lib/mutant/mutator/node/mlhs.rb +0 -2
- data/lib/mutant/mutator/node/named_value/access.rb +0 -8
- data/lib/mutant/mutator/node/named_value/constant_assignment.rb +1 -7
- data/lib/mutant/mutator/node/named_value/variable_assignment.rb +0 -4
- data/lib/mutant/mutator/node/next.rb +0 -2
- data/lib/mutant/mutator/node/noop.rb +0 -2
- data/lib/mutant/mutator/node/nthref.rb +0 -2
- data/lib/mutant/mutator/node/op_asgn.rb +0 -2
- data/lib/mutant/mutator/node/or_asgn.rb +0 -2
- data/lib/mutant/mutator/node/resbody.rb +0 -4
- data/lib/mutant/mutator/node/rescue.rb +0 -10
- data/lib/mutant/mutator/node/return.rb +0 -2
- data/lib/mutant/mutator/node/send.rb +4 -32
- data/lib/mutant/mutator/node/send/attribute_assignment.rb +0 -6
- data/lib/mutant/mutator/node/send/binary.rb +0 -6
- data/lib/mutant/mutator/node/send/index.rb +0 -6
- data/lib/mutant/mutator/node/splat.rb +0 -2
- data/lib/mutant/mutator/node/super.rb +0 -2
- data/lib/mutant/mutator/node/when.rb +0 -10
- data/lib/mutant/mutator/node/yield.rb +0 -2
- data/lib/mutant/mutator/node/zsuper.rb +0 -2
- data/lib/mutant/mutator/registry.rb +0 -6
- data/lib/mutant/mutator/util.rb +0 -4
- data/lib/mutant/mutator/util/array.rb +0 -6
- data/lib/mutant/mutator/util/symbol.rb +0 -2
- data/lib/mutant/parallel.rb +21 -17
- data/lib/mutant/parallel/master.rb +0 -28
- data/lib/mutant/parallel/source.rb +0 -10
- data/lib/mutant/parallel/worker.rb +15 -10
- data/lib/mutant/parser.rb +23 -0
- data/lib/mutant/reporter.rb +5 -8
- data/lib/mutant/reporter/cli.rb +1 -15
- data/lib/mutant/reporter/cli/format.rb +3 -25
- data/lib/mutant/reporter/cli/printer.rb +0 -18
- data/lib/mutant/reporter/cli/printer/config.rb +0 -2
- data/lib/mutant/reporter/cli/printer/env_progress.rb +0 -2
- data/lib/mutant/reporter/cli/printer/env_result.rb +0 -2
- data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +0 -4
- data/lib/mutant/reporter/cli/printer/mutation_result.rb +0 -16
- data/lib/mutant/reporter/cli/printer/status.rb +0 -6
- data/lib/mutant/reporter/cli/printer/status_progressive.rb +0 -4
- data/lib/mutant/reporter/cli/printer/subject_progress.rb +0 -8
- data/lib/mutant/reporter/cli/printer/subject_result.rb +0 -2
- data/lib/mutant/reporter/cli/printer/test_result.rb +0 -2
- data/lib/mutant/reporter/cli/tput.rb +0 -4
- data/lib/mutant/repository.rb +4 -22
- data/lib/mutant/require_highjack.rb +0 -2
- data/lib/mutant/result.rb +23 -43
- data/lib/mutant/runner.rb +7 -20
- data/lib/mutant/runner/sink.rb +43 -86
- data/lib/mutant/selector.rb +0 -2
- data/lib/mutant/selector/expression.rb +0 -2
- data/lib/mutant/subject.rb +0 -22
- data/lib/mutant/subject/method.rb +2 -10
- data/lib/mutant/subject/method/instance.rb +0 -6
- data/lib/mutant/subject/method/singleton.rb +0 -2
- data/lib/mutant/test.rb +4 -3
- data/lib/mutant/version.rb +1 -1
- data/lib/mutant/warning_filter.rb +0 -10
- data/lib/mutant/zombifier.rb +5 -20
- data/meta/or_asgn.rb +6 -0
- data/meta/send.rb +29 -0
- data/mutant-rspec.gemspec +1 -1
- data/spec/integration/mutant/rspec_spec.rb +1 -1
- data/spec/integrations.yml +2 -3
- data/spec/shared/method_matcher_behavior.rb +7 -7
- data/spec/spec_helper.rb +2 -9
- data/spec/support/corpus.rb +37 -30
- data/spec/support/rb_bug.rb +1 -2
- data/spec/support/ruby_vm.rb +6 -3
- data/spec/support/shared_context.rb +19 -20
- data/spec/unit/mutant/actor/binding_spec.rb +6 -6
- data/spec/unit/mutant/actor/env_spec.rb +2 -2
- data/spec/unit/mutant/actor/mailbox_spec.rb +6 -6
- data/spec/unit/mutant/actor/message_spec.rb +2 -2
- data/spec/unit/mutant/actor/receiver_spec.rb +4 -4
- data/spec/unit/mutant/actor/sender_spec.rb +6 -6
- data/spec/unit/mutant/ast_spec.rb +9 -0
- data/spec/unit/mutant/cli_spec.rb +16 -10
- data/spec/unit/mutant/context/scope/root_spec.rb +1 -1
- data/spec/unit/mutant/context/scope/unqualified_name_spec.rb +1 -1
- data/spec/unit/mutant/context/scope_spec.rb +3 -3
- data/spec/unit/mutant/context_spec.rb +0 -22
- data/spec/unit/mutant/env/boostrap_spec.rb +34 -41
- data/spec/unit/mutant/env_spec.rb +74 -32
- data/spec/unit/mutant/integration/rspec_spec.rb +23 -17
- data/spec/unit/mutant/integration_spec.rb +4 -4
- data/spec/unit/mutant/isolation_spec.rb +4 -4
- data/spec/unit/mutant/loader_spec.rb +42 -0
- data/spec/unit/mutant/matcher/compiler_spec.rb +3 -3
- data/spec/unit/mutant/matcher/config_spec.rb +1 -1
- data/spec/unit/mutant/matcher/method/instance_spec.rb +8 -1
- data/spec/unit/mutant/matcher/method/singleton_spec.rb +8 -1
- data/spec/unit/mutant/matcher/namespace_spec.rb +7 -8
- data/spec/unit/mutant/matcher/null_spec.rb +3 -2
- data/spec/unit/mutant/mutation_spec.rb +11 -5
- data/spec/unit/mutant/mutator/registry_spec.rb +1 -1
- data/spec/unit/mutant/parallel/master_spec.rb +9 -9
- data/spec/unit/mutant/parallel/source/array_spec.rb +3 -3
- data/spec/unit/mutant/parallel/worker_spec.rb +5 -5
- data/spec/unit/mutant/parallel_spec.rb +4 -4
- data/spec/unit/mutant/parser_spec.rb +24 -0
- data/spec/unit/mutant/reporter/cli/printer_spec.rb +3 -3
- data/spec/unit/mutant/reporter/cli/tput_spec.rb +2 -2
- data/spec/unit/mutant/reporter/cli_spec.rb +7 -7
- data/spec/unit/mutant/reporter/null_spec.rb +5 -4
- data/spec/unit/mutant/repository/diff_spec.rb +30 -18
- data/spec/unit/mutant/repository/subject_filter_spec.rb +5 -5
- data/spec/unit/mutant/require_highjack_spec.rb +1 -1
- data/spec/unit/mutant/result/env_spec.rb +9 -9
- data/spec/unit/mutant/result/subject_spec.rb +5 -5
- data/spec/unit/mutant/runner/driver_spec.rb +4 -4
- data/spec/unit/mutant/runner/{sink/mutation_spec.rb → sink_spec.rb} +16 -4
- data/spec/unit/mutant/runner_spec.rb +31 -31
- data/spec/unit/mutant/selector/expression_spec.rb +8 -8
- data/spec/unit/mutant/subject/method/instance_spec.rb +9 -3
- data/spec/unit/mutant/subject/method/singleton_spec.rb +1 -1
- data/spec/unit/mutant/subject_spec.rb +1 -5
- data/spec/unit/mutant_spec.rb +3 -3
- metadata +9 -15
- data/config/mutant.yml +0 -14
- data/lib/mutant/cache.rb +0 -29
- data/lib/mutant/reporter/trace.rb +0 -36
- data/spec/support/rspec.rb +0 -21
- data/spec/unit/mutant/cache_spec.rb +0 -22
- data/spec/unit/mutant/loader/eval_spec.rb +0 -44
- data/spec/unit/mutant/reporter/trace_spec.rb +0 -21
- data/test_app/Gemfile.rspec3.2 +0 -7
@@ -17,8 +17,6 @@ module Mutant
|
|
17
17
|
# Perform dispatch
|
18
18
|
#
|
19
19
|
# @return [undefined]
|
20
|
-
#
|
21
|
-
# @api private
|
22
20
|
def dispatch
|
23
21
|
emit_naked_receiver
|
24
22
|
emit_value_mutations
|
@@ -30,8 +28,6 @@ module Mutant
|
|
30
28
|
# Mutate indices
|
31
29
|
#
|
32
30
|
# @return [undefined]
|
33
|
-
#
|
34
|
-
# @api private
|
35
31
|
def mutate_indices
|
36
32
|
children_indices(INDEX_RANGE).each do |index|
|
37
33
|
delete_child(index)
|
@@ -42,8 +38,6 @@ module Mutant
|
|
42
38
|
# Emit index read
|
43
39
|
#
|
44
40
|
# @return [undefined]
|
45
|
-
#
|
46
|
-
# @api private
|
47
41
|
def emit_index_read
|
48
42
|
emit_type(receiver, :[], *children[INDEX_RANGE])
|
49
43
|
end
|
@@ -12,8 +12,6 @@ module Mutant
|
|
12
12
|
# Emit mutations
|
13
13
|
#
|
14
14
|
# @return [undefined]
|
15
|
-
#
|
16
|
-
# @api private
|
17
15
|
def dispatch
|
18
16
|
if body
|
19
17
|
mutate_body
|
@@ -26,8 +24,6 @@ module Mutant
|
|
26
24
|
# Emit condition mutations
|
27
25
|
#
|
28
26
|
# @return [undefined]
|
29
|
-
#
|
30
|
-
# @api private
|
31
27
|
def mutate_conditions
|
32
28
|
conditions = children.length - 1
|
33
29
|
children[0..-2].each_index do |index|
|
@@ -39,8 +35,6 @@ module Mutant
|
|
39
35
|
# Emit body mutations
|
40
36
|
#
|
41
37
|
# @return [undefined]
|
42
|
-
#
|
43
|
-
# @api private
|
44
38
|
def mutate_body
|
45
39
|
mutate_child(body_index)
|
46
40
|
end
|
@@ -52,8 +46,6 @@ module Mutant
|
|
52
46
|
#
|
53
47
|
# @return [nil]
|
54
48
|
# otherwise
|
55
|
-
#
|
56
|
-
# @api private
|
57
49
|
def body
|
58
50
|
children[body_index]
|
59
51
|
end
|
@@ -61,8 +53,6 @@ module Mutant
|
|
61
53
|
# Index of body node
|
62
54
|
#
|
63
55
|
# @return [Fixnum]
|
64
|
-
#
|
65
|
-
# @api private
|
66
56
|
def body_index
|
67
57
|
children.length - 1
|
68
58
|
end
|
@@ -6,8 +6,6 @@ module Mutant
|
|
6
6
|
# Initialize object
|
7
7
|
#
|
8
8
|
# @return [undefined]
|
9
|
-
#
|
10
|
-
# @api private
|
11
9
|
def initialize
|
12
10
|
@registry = {}
|
13
11
|
end
|
@@ -21,8 +19,6 @@ module Mutant
|
|
21
19
|
# @param [Class:Mutator] mutator
|
22
20
|
#
|
23
21
|
# @return [self]
|
24
|
-
#
|
25
|
-
# @api private
|
26
22
|
def register(type, mutator)
|
27
23
|
fail RegistryError, "Invalid type registration: #{type}" unless AST::Types::ALL.include?(type)
|
28
24
|
fail RegistryError, "Duplicate type registration: #{type}" if @registry.key?(type)
|
@@ -38,8 +34,6 @@ module Mutant
|
|
38
34
|
#
|
39
35
|
# @raise [ArgumentError]
|
40
36
|
# raises argument error when mutator class cannot be found
|
41
|
-
#
|
42
|
-
# @api private
|
43
37
|
def lookup(node)
|
44
38
|
type = node.type
|
45
39
|
@registry.fetch(type) do
|
data/lib/mutant/mutator/util.rb
CHANGED
@@ -13,8 +13,6 @@ module Mutant
|
|
13
13
|
#
|
14
14
|
# @return [self]
|
15
15
|
# otherwise
|
16
|
-
#
|
17
|
-
# @api private
|
18
16
|
def self.each(object, parent, &block)
|
19
17
|
return to_enum(__method__, object, parent) unless block_given?
|
20
18
|
|
@@ -30,8 +28,6 @@ module Mutant
|
|
30
28
|
# @param [Object] generated
|
31
29
|
#
|
32
30
|
# @return [Boolean]
|
33
|
-
#
|
34
|
-
# @api private
|
35
31
|
def new?(generated)
|
36
32
|
!input.eql?(generated)
|
37
33
|
end
|
@@ -13,8 +13,6 @@ module Mutant
|
|
13
13
|
# Emit element presence mutations
|
14
14
|
#
|
15
15
|
# @return [undefined]
|
16
|
-
#
|
17
|
-
# @api private
|
18
16
|
def dispatch
|
19
17
|
input.each_index do |index|
|
20
18
|
dup = dup_input
|
@@ -33,8 +31,6 @@ module Mutant
|
|
33
31
|
# Emit mutations
|
34
32
|
#
|
35
33
|
# @return [undefined]
|
36
|
-
#
|
37
|
-
# @api private
|
38
34
|
def dispatch
|
39
35
|
input.each_with_index do |element, index|
|
40
36
|
Mutator.each(element).each do |mutation|
|
@@ -52,8 +48,6 @@ module Mutant
|
|
52
48
|
# Emit mutations
|
53
49
|
#
|
54
50
|
# @return [undefined]
|
55
|
-
#
|
56
|
-
# @api private
|
57
51
|
def dispatch
|
58
52
|
run(Element)
|
59
53
|
run(Presence)
|
data/lib/mutant/parallel.rb
CHANGED
@@ -9,8 +9,6 @@ module Mutant
|
|
9
9
|
# Scheduler status
|
10
10
|
#
|
11
11
|
# @return [Object]
|
12
|
-
#
|
13
|
-
# @api private
|
14
12
|
def status
|
15
13
|
binding.call(__method__)
|
16
14
|
end
|
@@ -18,19 +16,15 @@ module Mutant
|
|
18
16
|
# Stop master gracefully
|
19
17
|
#
|
20
18
|
# @return [self]
|
21
|
-
#
|
22
|
-
# @api private
|
23
19
|
def stop
|
24
20
|
binding.call(__method__)
|
25
21
|
self
|
26
22
|
end
|
27
23
|
end # Driver
|
28
24
|
|
29
|
-
# Run async computation
|
25
|
+
# Run async computation returning driver
|
30
26
|
#
|
31
27
|
# @return [Driver]
|
32
|
-
#
|
33
|
-
# @api private
|
34
28
|
def self.async(config)
|
35
29
|
Driver.new(config.env.new_mailbox.bind(Master.call(config)))
|
36
30
|
end
|
@@ -44,43 +38,53 @@ module Mutant
|
|
44
38
|
# @param [Object]
|
45
39
|
#
|
46
40
|
# @return [self]
|
47
|
-
#
|
48
|
-
# @api private
|
49
41
|
abstract_method :result
|
50
42
|
|
51
43
|
# Sink status
|
52
44
|
#
|
53
45
|
# @return [Object]
|
54
|
-
#
|
55
|
-
# @api private
|
56
46
|
abstract_method :status
|
57
47
|
|
58
48
|
# Test if processing should stop
|
59
49
|
#
|
60
50
|
# @return [Boolean]
|
61
|
-
#
|
62
|
-
# @api private
|
63
51
|
abstract_method :stop?
|
64
52
|
end # Sink
|
65
53
|
|
66
54
|
# Job to push to workers
|
67
55
|
class Job
|
68
|
-
include Adamantium::Flat, Anima.new(
|
56
|
+
include Adamantium::Flat, Anima.new(
|
57
|
+
:index,
|
58
|
+
:payload
|
59
|
+
)
|
69
60
|
end # Job
|
70
61
|
|
71
62
|
# Job result object received from workers
|
72
63
|
class JobResult
|
73
|
-
include Adamantium::Flat, Anima.new(
|
64
|
+
include Adamantium::Flat, Anima.new(
|
65
|
+
:job,
|
66
|
+
:payload
|
67
|
+
)
|
74
68
|
end # JobResult
|
75
69
|
|
76
70
|
# Parallel run configuration
|
77
71
|
class Config
|
78
|
-
include Adamantium::Flat, Anima.new(
|
72
|
+
include Adamantium::Flat, Anima.new(
|
73
|
+
:env,
|
74
|
+
:jobs,
|
75
|
+
:processor,
|
76
|
+
:sink,
|
77
|
+
:source
|
78
|
+
)
|
79
79
|
end # Config
|
80
80
|
|
81
81
|
# Parallel execution status
|
82
82
|
class Status
|
83
|
-
include Adamantium::Flat, Anima.new(
|
83
|
+
include Adamantium::Flat, Anima.new(
|
84
|
+
:active_jobs,
|
85
|
+
:done,
|
86
|
+
:payload
|
87
|
+
)
|
84
88
|
end
|
85
89
|
|
86
90
|
end # Parallel
|
@@ -11,8 +11,6 @@ module Mutant
|
|
11
11
|
# @param [Config] config
|
12
12
|
#
|
13
13
|
# @return [Actor::Sender]
|
14
|
-
#
|
15
|
-
# @api private
|
16
14
|
def self.call(config)
|
17
15
|
config.env.spawn do |mailbox|
|
18
16
|
new(config, mailbox).__send__(:run)
|
@@ -22,8 +20,6 @@ module Mutant
|
|
22
20
|
# Initialize object
|
23
21
|
#
|
24
22
|
# @return [undefined]
|
25
|
-
#
|
26
|
-
# @api private
|
27
23
|
def initialize(*)
|
28
24
|
super
|
29
25
|
|
@@ -40,8 +36,6 @@ module Mutant
|
|
40
36
|
# rubocop:disable MethodLength
|
41
37
|
#
|
42
38
|
# @return [undefined]
|
43
|
-
#
|
44
|
-
# @api private
|
45
39
|
def run
|
46
40
|
config.jobs.times do
|
47
41
|
@workers += 1
|
@@ -69,8 +63,6 @@ module Mutant
|
|
69
63
|
# @param [Actor::Message] message
|
70
64
|
#
|
71
65
|
# @return [undefined]
|
72
|
-
#
|
73
|
-
# @api private
|
74
66
|
def handle(message)
|
75
67
|
type, payload = message.type, message.payload
|
76
68
|
method = MAP.fetch(type) do
|
@@ -82,8 +74,6 @@ module Mutant
|
|
82
74
|
# Run receive loop
|
83
75
|
#
|
84
76
|
# @return [undefined]
|
85
|
-
#
|
86
|
-
# @api private
|
87
77
|
def receive_loop
|
88
78
|
handle(mailbox.receiver.call) until @workers.zero? && @stop
|
89
79
|
end
|
@@ -93,8 +83,6 @@ module Mutant
|
|
93
83
|
# @param [Actor::Sender] sender
|
94
84
|
#
|
95
85
|
# @return [undefined]
|
96
|
-
#
|
97
|
-
# @api private
|
98
86
|
def handle_status(sender)
|
99
87
|
status = Status.new(
|
100
88
|
payload: sink.status,
|
@@ -109,8 +97,6 @@ module Mutant
|
|
109
97
|
# @param [JobResult] job_result
|
110
98
|
#
|
111
99
|
# @return [undefined]
|
112
|
-
#
|
113
|
-
# @api private
|
114
100
|
def handle_result(job_result)
|
115
101
|
@active_jobs.delete(job_result.job)
|
116
102
|
sink.result(job_result.payload)
|
@@ -121,8 +107,6 @@ module Mutant
|
|
121
107
|
# @param [Actor::Sender] sender
|
122
108
|
#
|
123
109
|
# @return [undefined]
|
124
|
-
#
|
125
|
-
# @api private
|
126
110
|
def handle_stop(sender)
|
127
111
|
@stop = true
|
128
112
|
receive_loop
|
@@ -134,8 +118,6 @@ module Mutant
|
|
134
118
|
# @param [Actor::Sender] sender
|
135
119
|
#
|
136
120
|
# @return [undefined]
|
137
|
-
#
|
138
|
-
# @api private
|
139
121
|
def handle_ready(sender)
|
140
122
|
if stop_work?
|
141
123
|
stop_worker(sender)
|
@@ -151,8 +133,6 @@ module Mutant
|
|
151
133
|
# if next job is available
|
152
134
|
#
|
153
135
|
# @return [nil]
|
154
|
-
#
|
155
|
-
# @api private
|
156
136
|
def next_job
|
157
137
|
Job.new(
|
158
138
|
index: @index,
|
@@ -168,8 +148,6 @@ module Mutant
|
|
168
148
|
# @param [Actor::Sender] sender
|
169
149
|
#
|
170
150
|
# @return [undefined]
|
171
|
-
#
|
172
|
-
# @api private
|
173
151
|
def stop_worker(sender)
|
174
152
|
@workers -= 1
|
175
153
|
sender.call(Actor::Message.new(:stop))
|
@@ -178,8 +156,6 @@ module Mutant
|
|
178
156
|
# Test if scheduling stopped
|
179
157
|
#
|
180
158
|
# @return [Boolean]
|
181
|
-
#
|
182
|
-
# @api private
|
183
159
|
def stop_work?
|
184
160
|
@stop || !source.next? || sink.stop?
|
185
161
|
end
|
@@ -187,8 +163,6 @@ module Mutant
|
|
187
163
|
# Job source
|
188
164
|
#
|
189
165
|
# @return [Source]
|
190
|
-
#
|
191
|
-
# @api private
|
192
166
|
def source
|
193
167
|
config.source
|
194
168
|
end
|
@@ -196,8 +170,6 @@ module Mutant
|
|
196
170
|
# Job result sink
|
197
171
|
#
|
198
172
|
# @return [Sink]
|
199
|
-
#
|
200
|
-
# @api private
|
201
173
|
def sink
|
202
174
|
config.sink
|
203
175
|
end
|
@@ -12,15 +12,11 @@ module Mutant
|
|
12
12
|
#
|
13
13
|
# @raise [NoJobError]
|
14
14
|
# when no next job is available
|
15
|
-
#
|
16
|
-
# @api private
|
17
15
|
abstract_method :next
|
18
16
|
|
19
17
|
# Test if next job is available
|
20
18
|
#
|
21
19
|
# @return [Boolean]
|
22
|
-
#
|
23
|
-
# @api private
|
24
20
|
abstract_method :next?
|
25
21
|
|
26
22
|
# Job source backed by a finite array
|
@@ -30,8 +26,6 @@ module Mutant
|
|
30
26
|
# Initialize objecto
|
31
27
|
#
|
32
28
|
# @return [undefined]
|
33
|
-
#
|
34
|
-
# @api private
|
35
29
|
def initialize(*)
|
36
30
|
super
|
37
31
|
|
@@ -41,8 +35,6 @@ module Mutant
|
|
41
35
|
# Test if next job is available
|
42
36
|
#
|
43
37
|
# @return [Boolean]
|
44
|
-
#
|
45
|
-
# @api private
|
46
38
|
def next?
|
47
39
|
@next_index < jobs.length
|
48
40
|
end
|
@@ -53,8 +45,6 @@ module Mutant
|
|
53
45
|
#
|
54
46
|
# @raise [NoJobError]
|
55
47
|
# when no next job is available
|
56
|
-
#
|
57
|
-
# @api private
|
58
48
|
def next
|
59
49
|
fail NoJobError unless next?
|
60
50
|
jobs.fetch(@next_index).tap do
|
@@ -2,15 +2,17 @@ module Mutant
|
|
2
2
|
module Parallel
|
3
3
|
# Parallel execution worker
|
4
4
|
class Worker
|
5
|
-
include Adamantium::Flat, Anima.new(
|
5
|
+
include Adamantium::Flat, Anima.new(
|
6
|
+
:mailbox,
|
7
|
+
:parent,
|
8
|
+
:processor
|
9
|
+
)
|
6
10
|
|
7
11
|
# Run worker
|
8
12
|
#
|
9
13
|
# @param [Hash<Symbol, Object] attributes
|
10
14
|
#
|
11
15
|
# @return [self]
|
12
|
-
#
|
13
|
-
# @api private
|
14
16
|
def self.run(attributes)
|
15
17
|
new(attributes).run
|
16
18
|
self
|
@@ -23,8 +25,6 @@ module Mutant
|
|
23
25
|
# @return [self]
|
24
26
|
#
|
25
27
|
# rubocop:disable Lint/Loop
|
26
|
-
#
|
27
|
-
# @api private
|
28
28
|
def run
|
29
29
|
begin
|
30
30
|
parent.call(Actor::Message.new(:ready, mailbox.sender))
|
@@ -38,8 +38,6 @@ module Mutant
|
|
38
38
|
# @param [Message] message
|
39
39
|
#
|
40
40
|
# @return [Boolean]
|
41
|
-
#
|
42
|
-
# @api private
|
43
41
|
def handle(message)
|
44
42
|
type, payload = message.type, message.payload
|
45
43
|
case message.type
|
@@ -58,11 +56,18 @@ module Mutant
|
|
58
56
|
# @param [Job] job
|
59
57
|
#
|
60
58
|
# @return [undefined]
|
61
|
-
#
|
62
|
-
# @api private
|
63
59
|
def handle_job(job)
|
64
60
|
result = processor.call(job.payload)
|
65
|
-
|
61
|
+
|
62
|
+
parent.call(
|
63
|
+
Actor::Message.new(
|
64
|
+
:result,
|
65
|
+
JobResult.new(
|
66
|
+
job: job,
|
67
|
+
payload: result
|
68
|
+
)
|
69
|
+
)
|
70
|
+
)
|
66
71
|
end
|
67
72
|
|
68
73
|
end # Worker
|