mutant 0.5.19 → 0.5.20
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/.travis.yml +1 -4
- data/Changelog.md +9 -0
- data/Gemfile.devtools +15 -11
- data/README.md +10 -6
- data/config/flay.yml +1 -1
- data/config/reek.yml +3 -1
- data/lib/mutant.rb +41 -41
- data/lib/mutant/cache.rb +0 -2
- data/lib/mutant/cli.rb +6 -8
- data/lib/mutant/color.rb +0 -2
- data/lib/mutant/config.rb +0 -2
- data/lib/mutant/context.rb +0 -2
- data/lib/mutant/context/scope.rb +0 -2
- data/lib/mutant/delegator.rb +2 -0
- data/lib/mutant/diff.rb +4 -16
- data/lib/mutant/expression.rb +8 -7
- data/lib/mutant/expression/method.rb +3 -9
- data/lib/mutant/isolation.rb +65 -0
- data/lib/mutant/killer.rb +1 -3
- data/lib/mutant/loader.rb +0 -2
- data/lib/mutant/matcher.rb +0 -2
- data/lib/mutant/matcher/chain.rb +0 -2
- data/lib/mutant/matcher/filter.rb +0 -2
- data/lib/mutant/matcher/method.rb +1 -2
- data/lib/mutant/matcher/method/finder.rb +0 -2
- data/lib/mutant/matcher/method/instance.rb +1 -3
- data/lib/mutant/matcher/method/singleton.rb +0 -2
- data/lib/mutant/matcher/methods.rb +0 -2
- data/lib/mutant/matcher/namespace.rb +2 -6
- data/lib/mutant/matcher/null.rb +0 -2
- data/lib/mutant/matcher/scope.rb +0 -2
- data/lib/mutant/meta/example.rb +57 -18
- data/lib/mutant/meta/example/dsl.rb +10 -13
- data/lib/mutant/mutation.rb +0 -2
- data/lib/mutant/mutation/evil.rb +0 -2
- data/lib/mutant/mutation/neutral.rb +0 -2
- data/lib/mutant/mutator.rb +4 -31
- data/lib/mutant/mutator/node.rb +19 -18
- data/lib/mutant/mutator/node/and_asgn.rb +3 -6
- data/lib/mutant/mutator/node/argument.rb +0 -2
- data/lib/mutant/mutator/node/arguments.rb +47 -4
- data/lib/mutant/mutator/node/begin.rb +3 -10
- data/lib/mutant/mutator/node/binary.rb +0 -2
- data/lib/mutant/mutator/node/block.rb +0 -2
- data/lib/mutant/mutator/node/blockarg.rb +0 -2
- data/lib/mutant/mutator/node/break.rb +0 -2
- data/lib/mutant/mutator/node/case.rb +3 -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 +0 -2
- data/lib/mutant/mutator/node/defined.rb +1 -3
- 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 +0 -2
- data/lib/mutant/mutator/node/if.rb +8 -12
- data/lib/mutant/mutator/node/kwbegin.rb +0 -2
- data/lib/mutant/mutator/node/literal.rb +0 -2
- data/lib/mutant/mutator/node/literal/array.rb +2 -5
- data/lib/mutant/mutator/node/literal/boolean.rb +0 -2
- data/lib/mutant/mutator/node/literal/fixnum.rb +0 -2
- data/lib/mutant/mutator/node/literal/float.rb +0 -2
- data/lib/mutant/mutator/node/literal/hash.rb +0 -2
- data/lib/mutant/mutator/node/literal/nil.rb +0 -2
- data/lib/mutant/mutator/node/literal/range.rb +0 -2
- data/lib/mutant/mutator/node/literal/regex.rb +2 -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/mlhs.rb +0 -2
- data/lib/mutant/mutator/node/named_value/access.rb +0 -2
- data/lib/mutant/mutator/node/named_value/constant_assignment.rb +0 -2
- data/lib/mutant/mutator/node/named_value/variable_assignment.rb +0 -2
- data/lib/mutant/mutator/node/next.rb +0 -3
- 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 +2 -4
- data/lib/mutant/mutator/node/or_asgn.rb +4 -7
- data/lib/mutant/mutator/node/resbody.rb +1 -1
- data/lib/mutant/mutator/node/rescue.rb +0 -2
- data/lib/mutant/mutator/node/restarg.rb +0 -2
- data/lib/mutant/mutator/node/return.rb +3 -6
- data/lib/mutant/mutator/node/send.rb +14 -8
- data/lib/mutant/mutator/node/send/attribute_assignment.rb +0 -2
- data/lib/mutant/mutator/node/send/binary.rb +1 -3
- 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 -2
- 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 -2
- data/lib/mutant/mutator/util.rb +0 -2
- data/lib/mutant/mutator/util/array.rb +0 -2
- data/lib/mutant/mutator/util/symbol.rb +0 -2
- data/lib/mutant/node_helpers.rb +11 -2
- data/lib/mutant/reporter.rb +0 -2
- data/lib/mutant/reporter/cli.rb +0 -2
- data/lib/mutant/reporter/cli/printer.rb +0 -2
- data/lib/mutant/reporter/cli/progress.rb +0 -2
- data/lib/mutant/reporter/cli/report.rb +0 -2
- data/lib/mutant/reporter/cli/report/config.rb +0 -2
- data/lib/mutant/reporter/cli/report/mutation.rb +5 -5
- data/lib/mutant/reporter/cli/report/subject.rb +0 -2
- data/lib/mutant/reporter/null.rb +0 -2
- data/lib/mutant/runner.rb +0 -2
- data/lib/mutant/runner/config.rb +0 -2
- data/lib/mutant/runner/mutation.rb +0 -2
- data/lib/mutant/runner/subject.rb +0 -2
- data/lib/mutant/strategy.rb +0 -2
- data/lib/mutant/subject.rb +0 -2
- data/lib/mutant/subject/method.rb +0 -2
- data/lib/mutant/subject/method/instance.rb +1 -3
- data/lib/mutant/subject/method/singleton.rb +0 -2
- data/lib/mutant/version.rb +1 -3
- data/lib/mutant/zombifier.rb +0 -2
- data/meta/begin.rb +10 -0
- data/meta/case.rb +0 -2
- data/meta/def.rb +19 -0
- data/mutant-rspec.gemspec +1 -1
- data/mutant.gemspec +1 -1
- data/spec/integration/mutant/corpus_spec.rb +81 -22
- data/spec/integration/mutant/null_spec.rb +1 -3
- data/spec/integration/mutant/rspec_spec.rb +6 -8
- data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -2
- data/spec/integration/mutant/zombie_spec.rb +0 -2
- data/spec/integrations.yml +12 -1
- data/spec/shared/method_matcher_behavior.rb +0 -2
- data/spec/spec_helper.rb +0 -2
- data/spec/support/compress_helper.rb +0 -2
- data/spec/support/ice_nine_config.rb +0 -2
- data/spec/support/rspec.rb +0 -2
- data/spec/support/test_app.rb +0 -2
- data/spec/unit/mutant/cli_new_spec.rb +0 -2
- data/spec/unit/mutant/cli_run_spec.rb +0 -2
- data/spec/unit/mutant/context/root_spec.rb +0 -2
- data/spec/unit/mutant/context/scope/root_spec.rb +0 -2
- data/spec/unit/mutant/context/scope/unqualified_name_spec.rb +0 -2
- data/spec/unit/mutant/diff_spec.rb +0 -2
- data/spec/unit/mutant/expression/method_spec.rb +2 -4
- data/spec/unit/mutant/expression/namespace/flat_spec.rb +1 -3
- data/spec/unit/mutant/expression/namespace/recursive_spec.rb +10 -6
- data/spec/unit/mutant/isolation_spec.rb +61 -0
- data/spec/unit/mutant/loader/eval_spec.rb +0 -2
- data/spec/unit/mutant/matcher/chain_spec.rb +4 -15
- data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -2
- data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -2
- data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -2
- data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -2
- data/spec/unit/mutant/matcher/namespace_spec.rb +33 -31
- data/spec/unit/mutant/mutation_spec.rb +0 -2
- data/spec/unit/mutant/runner/config_spec.rb +0 -2
- data/spec/unit/mutant/runner/mutation_spec.rb +0 -2
- data/spec/unit/mutant/runner/subject_spec.rb +0 -2
- data/spec/unit/mutant/strategy_spec.rb +0 -2
- data/spec/unit/mutant/subject/context_spec.rb +0 -2
- data/spec/unit/mutant/subject/mutations_spec.rb +0 -2
- data/spec/unit/mutant/subject/node_spec.rb +0 -2
- data/spec/unit/mutant/subject_spec.rb +0 -2
- data/spec/unit/mutant/warning_filter_spec.rb +6 -0
- data/spec/unit/mutant_spec.rb +0 -55
- data/test_app/Gemfile.devtools +15 -11
- data/test_app/Gemfile.rspec3 +2 -2
- metadata +7 -7
- data/lib/mutant/constants.rb +0 -45
- data/spec/unit/mutant/mutator_spec.rb +0 -29
@@ -1,12 +1,10 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'spec_helper'
|
4
2
|
|
5
3
|
describe Mutant::Expression::Namespace::Exact do
|
6
4
|
|
7
5
|
let(:object) { described_class.parse(input) }
|
8
6
|
let(:cache) { Mutant::Cache.new }
|
9
|
-
let(:input) { '
|
7
|
+
let(:input) { 'TestApp::Literal' }
|
10
8
|
|
11
9
|
describe '#matcher' do
|
12
10
|
subject { object.matcher(cache) }
|
@@ -1,16 +1,14 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'spec_helper'
|
4
2
|
|
5
3
|
describe Mutant::Expression::Namespace::Recursive do
|
6
4
|
|
7
5
|
let(:object) { described_class.parse(input) }
|
8
6
|
let(:cache) { Mutant::Cache.new }
|
9
|
-
let(:input) { '
|
7
|
+
let(:input) { 'TestApp::Literal*' }
|
10
8
|
|
11
9
|
describe '#matcher' do
|
12
10
|
subject { object.matcher(cache) }
|
13
|
-
it { should eql(Mutant::Matcher::Namespace.new(cache, '
|
11
|
+
it { should eql(Mutant::Matcher::Namespace.new(cache, 'TestApp::Literal')) }
|
14
12
|
end
|
15
13
|
|
16
14
|
describe '#match_length' do
|
@@ -23,13 +21,19 @@ describe Mutant::Expression::Namespace::Recursive do
|
|
23
21
|
end
|
24
22
|
|
25
23
|
context 'when other expression describes a shorter prefix' do
|
26
|
-
let(:other) { described_class.parse('
|
24
|
+
let(:other) { described_class.parse('TestApp') }
|
25
|
+
|
26
|
+
it { should be(0) }
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when other expression describes adjacent namespace' do
|
30
|
+
let(:other) { described_class.parse('TestApp::LiteralFoo') }
|
27
31
|
|
28
32
|
it { should be(0) }
|
29
33
|
end
|
30
34
|
|
31
35
|
context 'when other expression describes a longer prefix' do
|
32
|
-
let(:other) { described_class.parse('
|
36
|
+
let(:other) { described_class.parse('TestApp::Literal::Deep') }
|
33
37
|
|
34
38
|
it { should be(input[0..-2].length) }
|
35
39
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mutant::Isolation do
|
4
|
+
describe '.isolate' do
|
5
|
+
let(:object) { described_class }
|
6
|
+
|
7
|
+
before do
|
8
|
+
unless RUBY_VERSION.eql?('2.1.2')
|
9
|
+
skip 'Series of events is indeterministic cross ruby implementations. Skipping this test under non 2.1.2'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:expected_return) { :foo }
|
14
|
+
|
15
|
+
subject { object.call(&block) }
|
16
|
+
|
17
|
+
def redirect_stderr
|
18
|
+
$stderr = File.open('/dev/null')
|
19
|
+
end
|
20
|
+
|
21
|
+
unless ENV['COVERAGE']
|
22
|
+
context 'when block returns mashallable data, and process exists zero' do
|
23
|
+
let(:block) do
|
24
|
+
lambda do
|
25
|
+
:data_from_child_process
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it { should eql(:data_from_child_process) }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when block does return marshallable data' do
|
34
|
+
let(:block) do
|
35
|
+
lambda do
|
36
|
+
redirect_stderr
|
37
|
+
$stderr # not mashallable, nothing written to pipe and raises exception in child
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'raises an exception' do
|
42
|
+
expect { subject }.to raise_error(described_class::Error, 'Childprocess wrote un-unmarshallable data')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when block causes the child to exit nonzero' do
|
47
|
+
let(:block) do
|
48
|
+
lambda do
|
49
|
+
method = Kernel.method(:exit!)
|
50
|
+
Kernel.define_singleton_method(:exit!) do |_status|
|
51
|
+
method.call(1)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'raises an exception' do
|
57
|
+
expect { subject }.to raise_error(described_class::Error, 'Childprocess exited with nonzero exit status: 1')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'spec_helper'
|
4
2
|
|
5
3
|
describe Mutant::Matcher::Chain do
|
@@ -11,29 +9,20 @@ describe Mutant::Matcher::Chain do
|
|
11
9
|
|
12
10
|
let(:matchers) { [matcher_a, matcher_b] }
|
13
11
|
|
14
|
-
let(:matcher_a) {
|
15
|
-
let(:matcher_b) {
|
12
|
+
let(:matcher_a) { [subject_a] }
|
13
|
+
let(:matcher_b) { [subject_b] }
|
16
14
|
|
17
15
|
let(:subject_a) { double('Subject A') }
|
18
16
|
let(:subject_b) { double('Subject B') }
|
19
17
|
|
20
|
-
before do
|
21
|
-
matcher_a.stub(:each).and_yield(subject_a).and_return(matcher_a)
|
22
|
-
matcher_b.stub(:each).and_yield(subject_b).and_return(matcher_b)
|
23
|
-
end
|
24
|
-
|
25
18
|
# it_should_behave_like 'an #each method'
|
26
19
|
context 'with no block' do
|
27
20
|
subject { object.each }
|
28
21
|
|
29
22
|
it { should be_instance_of(to_enum.class) }
|
30
23
|
|
31
|
-
|
32
|
-
|
33
|
-
else
|
34
|
-
it 'yields the expected values' do
|
35
|
-
expect(subject.to_a).to eql(object.to_a)
|
36
|
-
end
|
24
|
+
it 'yields the expected values' do
|
25
|
+
expect(subject.to_a).to eql(object.to_a)
|
37
26
|
end
|
38
27
|
end
|
39
28
|
|
@@ -1,45 +1,47 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'spec_helper'
|
4
2
|
|
5
|
-
describe Mutant::Matcher::Namespace
|
6
|
-
subject { object.each { |item| yields << item } }
|
7
|
-
|
8
|
-
let(:yields) { [] }
|
3
|
+
describe Mutant::Matcher::Namespace do
|
9
4
|
let(:object) { described_class.new(cache, 'TestApp::Literal') }
|
5
|
+
let(:yields) { [] }
|
10
6
|
|
11
7
|
let(:cache) { Mutant::Cache.new }
|
12
8
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
.
|
25
|
-
|
26
|
-
|
9
|
+
subject { object.each { |item| yields << item } }
|
10
|
+
|
11
|
+
describe '#each' do
|
12
|
+
|
13
|
+
let(:singleton_a) { double('SingletonA', name: 'TestApp::Literal') }
|
14
|
+
let(:singleton_b) { double('SingletonB', name: 'TestApp::Foo') }
|
15
|
+
let(:singleton_c) { double('SingletonC', name: 'TestApp::LiteralOther') }
|
16
|
+
let(:subject_a) { double('SubjectA') }
|
17
|
+
let(:subject_b) { double('SubjectB') }
|
18
|
+
|
19
|
+
before do
|
20
|
+
Mutant::Matcher::Methods::Singleton.stub(:each)
|
21
|
+
.with(cache, singleton_a)
|
22
|
+
.and_yield(subject_a)
|
23
|
+
Mutant::Matcher::Methods::Instance.stub(:each)
|
24
|
+
.with(cache, singleton_a)
|
25
|
+
.and_yield(subject_b)
|
26
|
+
ObjectSpace.stub(each_object: [singleton_a, singleton_b, singleton_c])
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
29
|
+
context 'with no block' do
|
30
|
+
subject { object.each }
|
30
31
|
|
31
|
-
|
32
|
+
it { should be_instance_of(to_enum.class) }
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
35
|
+
skip 'FIX RBX rspec? BUG HERE'
|
36
|
+
else
|
37
|
+
it 'yields the expected values' do
|
38
|
+
expect(subject.to_a).to eql(object.to_a)
|
39
|
+
end
|
38
40
|
end
|
39
41
|
end
|
40
|
-
end
|
41
42
|
|
42
|
-
|
43
|
-
|
43
|
+
it 'should yield subjects' do
|
44
|
+
expect { subject }.to change { yields }.from([]).to([subject_a, subject_b])
|
45
|
+
end
|
44
46
|
end
|
45
47
|
end
|
data/spec/unit/mutant_spec.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'spec_helper'
|
4
2
|
|
5
3
|
describe Mutant do
|
@@ -38,57 +36,4 @@ describe Mutant do
|
|
38
36
|
expect(inspect).to be_frozen
|
39
37
|
end
|
40
38
|
end
|
41
|
-
|
42
|
-
describe '.isolate' do
|
43
|
-
let(:object) { described_class }
|
44
|
-
|
45
|
-
let(:expected_return) { :foo }
|
46
|
-
|
47
|
-
subject { object.isolate(&block) }
|
48
|
-
|
49
|
-
def redirect_stderr
|
50
|
-
$stderr = File.open('/dev/null')
|
51
|
-
end
|
52
|
-
|
53
|
-
unless ENV['COVERAGE']
|
54
|
-
context 'when block returns mashallable data, and process exists zero' do
|
55
|
-
let(:block) do
|
56
|
-
lambda do
|
57
|
-
:data_from_child_process
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
it { should eql(:data_from_child_process) }
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'when block does return marshallable data' do
|
66
|
-
let(:block) do
|
67
|
-
lambda do
|
68
|
-
redirect_stderr
|
69
|
-
$stderr # not mashallable, nothing written to pipe and raised exceptions in child
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'raises an exception' do
|
74
|
-
expect { subject }.to raise_error(Mutant::IsolationError, 'Childprocess wrote un-unmarshallable data')
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context 'when block does return marshallable data, but process exits with nonzero exitstatus' do
|
79
|
-
let(:block) do
|
80
|
-
lambda do
|
81
|
-
redirect_stderr
|
82
|
-
at_exit do
|
83
|
-
raise
|
84
|
-
end
|
85
|
-
:foo
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
it 'raises an exception' do
|
90
|
-
expect { subject }.to raise_error(Mutant::IsolationError, 'Childprocess exited with nonzero exit status: 1')
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
39
|
end
|
data/test_app/Gemfile.devtools
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
group :development do
|
4
|
-
gem 'rake', '~> 10.3.
|
5
|
-
gem 'rspec', '~> 2.99.0
|
6
|
-
gem 'rspec-core', '~> 2.99.0
|
4
|
+
gem 'rake', '~> 10.3.2'
|
5
|
+
gem 'rspec', '~> 2.99.0'
|
6
|
+
gem 'rspec-core', '~> 2.99.0'
|
7
7
|
gem 'yard', '~> 0.8.7.4'
|
8
8
|
|
9
9
|
platform :rbx do
|
@@ -11,30 +11,34 @@ group :development do
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
group :yard do
|
15
|
+
gem 'kramdown', '~> 1.3.3'
|
16
|
+
end
|
17
|
+
|
14
18
|
group :guard do
|
15
|
-
gem 'guard', '~> 2.6.
|
19
|
+
gem 'guard', '~> 2.6.1'
|
16
20
|
gem 'guard-bundler', '~> 2.0.0'
|
17
|
-
gem 'guard-rspec', '~> 4.2.
|
21
|
+
gem 'guard-rspec', '~> 4.2.9'
|
18
22
|
gem 'guard-rubocop', '~> 1.1.0'
|
19
23
|
|
20
24
|
# file system change event handling
|
21
|
-
gem 'listen', '~> 2.7.
|
25
|
+
gem 'listen', '~> 2.7.7'
|
22
26
|
gem 'rb-fchange', '~> 0.0.6', require: false
|
23
27
|
gem 'rb-fsevent', '~> 0.9.4', require: false
|
24
|
-
gem 'rb-inotify', '~> 0.9.
|
28
|
+
gem 'rb-inotify', '~> 0.9.5', require: false
|
25
29
|
|
26
30
|
# notification handling
|
27
|
-
gem 'libnotify', '~> 0.8.
|
31
|
+
gem 'libnotify', '~> 0.8.3', require: false
|
28
32
|
gem 'rb-notifu', '~> 0.0.4', require: false
|
29
33
|
gem 'terminal-notifier-guard', '~> 1.5.3', require: false
|
30
34
|
end
|
31
35
|
|
32
36
|
group :metrics do
|
33
37
|
gem 'coveralls', '~> 0.7.0'
|
34
|
-
gem 'flay', '~> 2.
|
35
|
-
gem 'flog', '~> 4.2.
|
38
|
+
gem 'flay', '~> 2.5.0'
|
39
|
+
gem 'flog', '~> 4.2.1'
|
36
40
|
gem 'reek', '~> 1.3.7'
|
37
|
-
gem 'rubocop', '~> 0.
|
41
|
+
gem 'rubocop', '~> 0.23.0'
|
38
42
|
gem 'simplecov', '~> 0.7.1'
|
39
43
|
gem 'yardstick', '~> 0.9.9'
|
40
44
|
|