mutant 0.5.19 → 0.5.20
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|