deep-cover 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +227 -0
  3. data/Gemfile +5 -2
  4. data/Rakefile +9 -6
  5. data/bin/console +3 -3
  6. data/bin/cov +8 -8
  7. data/bin/gemcov +2 -2
  8. data/bin/selfcov +5 -5
  9. data/bin/test_gems +11 -10
  10. data/bin/testall +6 -6
  11. data/deep_cover.gemspec +26 -21
  12. data/exe/deep-cover +1 -0
  13. data/lib/deep-cover.rb +2 -0
  14. data/lib/deep_cover.rb +3 -0
  15. data/lib/deep_cover/analyser.rb +2 -0
  16. data/lib/deep_cover/analyser/base.rb +2 -0
  17. data/lib/deep_cover/analyser/branch.rb +4 -2
  18. data/lib/deep_cover/analyser/covered_code_source.rb +3 -1
  19. data/lib/deep_cover/analyser/function.rb +3 -1
  20. data/lib/deep_cover/analyser/ignore_uncovered.rb +6 -4
  21. data/lib/deep_cover/analyser/node.rb +3 -0
  22. data/lib/deep_cover/analyser/optionally_covered.rb +12 -7
  23. data/lib/deep_cover/analyser/per_char.rb +7 -6
  24. data/lib/deep_cover/analyser/per_line.rb +9 -8
  25. data/lib/deep_cover/analyser/statement.rb +2 -0
  26. data/lib/deep_cover/analyser/subset.rb +4 -1
  27. data/lib/deep_cover/auto_run.rb +3 -0
  28. data/lib/deep_cover/autoload_tracker.rb +6 -3
  29. data/lib/deep_cover/backports.rb +2 -0
  30. data/lib/deep_cover/base.rb +11 -2
  31. data/lib/deep_cover/builtin_takeover.rb +2 -0
  32. data/lib/deep_cover/cli/debugger.rb +55 -30
  33. data/lib/deep_cover/cli/deep_cover.rb +17 -11
  34. data/lib/deep_cover/cli/instrumented_clone_reporter.rb +16 -14
  35. data/lib/deep_cover/config.rb +29 -16
  36. data/lib/deep_cover/core_ext/autoload_overrides.rb +2 -0
  37. data/lib/deep_cover/core_ext/coverage_replacement.rb +2 -0
  38. data/lib/deep_cover/core_ext/load_overrides.rb +5 -6
  39. data/lib/deep_cover/core_ext/require_overrides.rb +6 -7
  40. data/lib/deep_cover/coverage.rb +21 -18
  41. data/lib/deep_cover/covered_code.rb +22 -12
  42. data/lib/deep_cover/custom_requirer.rb +82 -35
  43. data/lib/deep_cover/memoize.rb +48 -0
  44. data/lib/deep_cover/module_override.rb +2 -0
  45. data/lib/deep_cover/node.rb +14 -1
  46. data/lib/deep_cover/node/arguments.rb +2 -0
  47. data/lib/deep_cover/node/assignments.rb +32 -30
  48. data/lib/deep_cover/node/base.rb +30 -29
  49. data/lib/deep_cover/node/begin.rb +3 -1
  50. data/lib/deep_cover/node/block.rb +5 -2
  51. data/lib/deep_cover/node/branch.rb +2 -1
  52. data/lib/deep_cover/node/case.rb +15 -13
  53. data/lib/deep_cover/node/collections.rb +2 -0
  54. data/lib/deep_cover/node/const.rb +2 -0
  55. data/lib/deep_cover/node/def.rb +10 -8
  56. data/lib/deep_cover/node/empty_body.rb +2 -0
  57. data/lib/deep_cover/node/exceptions.rb +3 -1
  58. data/lib/deep_cover/node/if.rb +3 -1
  59. data/lib/deep_cover/node/keywords.rb +4 -2
  60. data/lib/deep_cover/node/literals.rb +2 -0
  61. data/lib/deep_cover/node/loops.rb +5 -3
  62. data/lib/deep_cover/node/mixin/can_augment_children.rb +8 -7
  63. data/lib/deep_cover/node/mixin/check_completion.rb +3 -1
  64. data/lib/deep_cover/node/mixin/child_can_be_empty.rb +4 -2
  65. data/lib/deep_cover/node/mixin/executed_after_children.rb +2 -0
  66. data/lib/deep_cover/node/mixin/execution_location.rb +4 -2
  67. data/lib/deep_cover/node/mixin/flow_accounting.rb +2 -0
  68. data/lib/deep_cover/node/mixin/has_child.rb +22 -18
  69. data/lib/deep_cover/node/mixin/has_child_handler.rb +10 -8
  70. data/lib/deep_cover/node/mixin/has_tracker.rb +4 -2
  71. data/lib/deep_cover/node/mixin/is_statement.rb +3 -1
  72. data/lib/deep_cover/node/mixin/rewriting.rb +5 -3
  73. data/lib/deep_cover/node/mixin/wrapper.rb +2 -0
  74. data/lib/deep_cover/node/module.rb +11 -9
  75. data/lib/deep_cover/node/root.rb +2 -0
  76. data/lib/deep_cover/node/send.rb +4 -2
  77. data/lib/deep_cover/node/short_circuit.rb +4 -2
  78. data/lib/deep_cover/node/splat.rb +2 -0
  79. data/lib/deep_cover/node/variables.rb +2 -0
  80. data/lib/deep_cover/parser_ext/range.rb +3 -1
  81. data/lib/deep_cover/problem_with_diagnostic.rb +11 -9
  82. data/lib/deep_cover/reporter.rb +2 -0
  83. data/lib/deep_cover/reporter/istanbul.rb +28 -24
  84. data/lib/deep_cover/tools.rb +2 -0
  85. data/lib/deep_cover/tools/builtin_coverage.rb +6 -4
  86. data/lib/deep_cover/tools/camelize.rb +3 -1
  87. data/lib/deep_cover/tools/dasherize.rb +3 -1
  88. data/lib/deep_cover/tools/dump_covered_code.rb +7 -6
  89. data/lib/deep_cover/tools/execute_sample.rb +13 -13
  90. data/lib/deep_cover/tools/format.rb +3 -1
  91. data/lib/deep_cover/tools/format_char_cover.rb +4 -2
  92. data/lib/deep_cover/tools/format_generated_code.rb +3 -1
  93. data/lib/deep_cover/tools/number_lines.rb +2 -0
  94. data/lib/deep_cover/tools/our_coverage.rb +5 -3
  95. data/lib/deep_cover/tools/profiling.rb +66 -0
  96. data/lib/deep_cover/tools/require_relative_dir.rb +3 -1
  97. data/lib/deep_cover/tools/silence_warnings.rb +4 -1
  98. data/lib/deep_cover/tools/slice.rb +3 -1
  99. data/lib/deep_cover/tools/truncate_backtrace.rb +2 -0
  100. data/lib/deep_cover/version.rb +3 -1
  101. metadata +47 -30
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::Camelize
3
5
  # Poor man's camelize. 'an_example' => 'AnExample'
4
6
  def camelize(string)
5
- string.to_s.gsub(/([a-z\d]*)[_?!]?/){ $1.capitalize }
7
+ string.to_s.gsub(/([a-z\d]*)[_?!]?/) { Regexp.last_match(1).capitalize }
6
8
  end
7
9
  end
8
10
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::Dasherize
3
5
  # Poor man's dasherize. 'an_example' => 'an-example'
4
6
  def dasherize(string)
5
- string.to_s.gsub('_', '-')
7
+ string.to_s.tr('_', '-')
6
8
  end
7
9
  end
8
10
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  silence_warnings do
3
5
  require 'with_progress'
@@ -14,9 +16,8 @@ module DeepCover
14
16
  dest_path = File.join(File.expand_path(dest_path), '')
15
17
  root_path = Pathname.new(root_path)
16
18
  skipped = []
17
- file_paths = Dir.glob("#{source_path}**/*.rb").select{|p| File.file?(p) }
19
+ file_paths = Dir.glob("#{source_path}**/*.rb").select { |p| File.file?(p) }
18
20
  file_paths.each.with_progress(title: 'Rewriting') do |path|
19
-
20
21
  new_path = Pathname(path.gsub(source_path, dest_path))
21
22
  begin
22
23
  covered_code = coverage.covered_code(path, name: new_path.relative_path_from(root_path))
@@ -29,10 +30,10 @@ module DeepCover
29
30
  end
30
31
  unless skipped.empty?
31
32
  warn [
32
- "#{skipped.size} files could not be instrumented because of syntax errors:",
33
- *skipped.first(3),
34
- ('...' if skipped.size > 3),
35
- ].compact.join("\n")
33
+ "#{skipped.size} files could not be instrumented because of syntax errors:",
34
+ *skipped.first(3),
35
+ ('...' if skipped.size > 3),
36
+ ].compact.join("\n")
36
37
  end
37
38
  dest_path
38
39
  end
@@ -1,23 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::ExecuteSample
3
5
  # Returns true if the code would have continued, false if the rescue was triggered.
4
6
  def execute_sample(to_execute)
5
7
  # Disable some annoying warning by ruby. We are testing edge cases, so warnings are to be expected.
6
- begin
7
- Tools.silence_warnings do
8
- if to_execute.is_a?(CoveredCode)
9
- to_execute.execute_code
10
- else
11
- to_execute.call
12
- end
8
+ Tools.silence_warnings do
9
+ if to_execute.is_a?(CoveredCode)
10
+ to_execute.execute_code
11
+ else
12
+ to_execute.call
13
13
  end
14
- true
15
- rescue RuntimeError => e
16
- # In our samples, a simple `raise` doesn't need to be rescued
17
- # Other exceptions are not rescued
18
- raise unless e.message.empty?
19
- false
20
14
  end
15
+ true
16
+ rescue RuntimeError => e
17
+ # In our samples, a simple `raise` doesn't need to be rescued
18
+ # Other exceptions are not rescued
19
+ raise unless e.message.empty?
20
+ false
21
21
  end
22
22
  end
23
23
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::Format
3
5
  CONVERT = Hash.new(' ')
@@ -6,7 +8,7 @@ module DeepCover
6
8
 
7
9
  def format(*results, filename: nil, source: nil)
8
10
  source ||= File.read(filename)
9
- results.map!{|counts| counts.map{|c| CONVERT[c]}}
11
+ results.map! { |counts| counts.map { |c| CONVERT[c] } }
10
12
  [*results, source.lines].transpose.map do |parts|
11
13
  *line_results, line = parts
12
14
  Term::ANSIColor.white(line_results.join) + line.to_s
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::FormatCharCover
3
- COLOR = {'x' => :red, ' ' => :green, '-' => :faint}
4
- WHITESPACE_MAP = Hash.new{|_, v| v}.merge!(' ' => '·', "\t" => '→ ')
5
+ COLOR = {'x' => :red, ' ' => :green, '-' => :faint}.freeze
6
+ WHITESPACE_MAP = Hash.new { |_, v| v }.merge!(' ' => '·', "\t" => '→ ')
5
7
  def format_char_cover(covered_code, show_whitespace: false, **options)
6
8
  bc = covered_code.char_cover(**options)
7
9
  covered_code.buffer.source_lines.map.with_index do |line, line_index|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::FormatGeneratedCode
3
5
  def format_generated_code(covered_code)
@@ -7,7 +9,7 @@ module DeepCover
7
9
  Term::ANSIColor.yellow(inserted)
8
10
  end
9
11
 
10
- inserts = inserts.sort_by{|exp, _| [exp.line, exp.column]}.reverse
12
+ inserts = inserts.sort_by { |exp, _| [exp.line, exp.column] }.reverse
11
13
  generated_lines = generated_code.split("\n")
12
14
 
13
15
  inserts.each do |exp_limit, size|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::NumberLines
3
5
  def number_lines(lines, lineno: 1, bad_linenos: [])
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
- module Tools::OutCoverage
4
+ module Tools::OurCoverage
3
5
  def our_coverage(source, fn, lineno, **options)
4
- covered_code = CoveredCode.new(source:source, path: fn, lineno: lineno)
6
+ covered_code = CoveredCode.new(source: source, path: fn, lineno: lineno)
5
7
  Tools.execute_sample(covered_code)
6
- covered_code.line_coverage(options)[(lineno-1)..-1]
8
+ covered_code.line_coverage(options)[(lineno - 1)..-1]
7
9
  end
8
10
  end
9
11
  end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DeepCover
4
+ module Tools::Profiling
5
+ # Simple forwarding to implementation
6
+ def start
7
+ profiler.start
8
+ end
9
+
10
+ def stop
11
+ @results = profiler.stop
12
+ end
13
+
14
+ def pause
15
+ profiler.pause
16
+ end
17
+
18
+ def resume
19
+ profiler.resume
20
+ end
21
+
22
+ def report
23
+ profiler.report(@results)
24
+ end
25
+
26
+ # Basic utilities using forwarding methods
27
+ def profile(do_start = true)
28
+ return yield unless do_start
29
+ start
30
+ yield
31
+ stop
32
+ report
33
+ end
34
+
35
+ def dont_profile
36
+ pause if profiler_loaded?
37
+ yield
38
+ ensure
39
+ resume if profiler_loaded?
40
+ end
41
+
42
+ def profiler_loaded?
43
+ !!@profiler
44
+ end
45
+
46
+ private
47
+
48
+ # Dependency injection
49
+ def profiler
50
+ @profiler = RubyProfProfiler.new
51
+ end
52
+
53
+ class RubyProfProfiler < SimpleDelegator
54
+ def initialize
55
+ raise 'Profiling is not available when using JRuby' if RUBY_PLATFORM == 'java'
56
+ require 'ruby-prof'
57
+ super(RubyProf)
58
+ end
59
+
60
+ def report(results)
61
+ printer = RubyProf::GraphPrinter.new(results)
62
+ printer.print(STDOUT, {})
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::RequireRelativeDir
3
5
  def require_relative_dir(dir_name, except: [])
4
- dir = File.dirname(caller.first.partition(/\.rb:\d/).first)
6
+ dir = File.dirname(caller(1..1).first.partition(/\.rb:\d/).first)
5
7
  Dir["#{dir}/#{dir_name}/*.rb"].sort.each do |file|
6
8
  require file unless except.include? File.basename(file, '.rb')
7
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::SilenceWarnings
3
5
  # copied from: activesupport/lib/active_support/core_ext/kernel/reporting.rb
@@ -6,7 +8,8 @@ module DeepCover
6
8
  end
7
9
 
8
10
  def with_warnings(flag)
9
- old_verbose, $VERBOSE = $VERBOSE, flag
11
+ old_verbose = $VERBOSE
12
+ $VERBOSE = flag
10
13
  yield
11
14
  ensure
12
15
  $VERBOSE = old_verbose
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::Slice
3
5
  def slice(hash, *keys)
4
- keys.each_with_object(Hash.new) { |k, h| h[k] = hash[k] if hash.has_key?(k) }
6
+ keys.each_with_object({}) { |k, h| h[k] = hash[k] if hash.has_key?(k) }
5
7
  end
6
8
  end
7
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
4
  module Tools::TruncateBacktrace
3
5
  def truncate_backtrace(backtrace, extra_context: 10)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeepCover
2
- VERSION = "0.1.14"
4
+ VERSION = '0.1.15'
3
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deep-cover
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marc-André Lafortune
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-11-07 00:00:00.000000000 Z
12
+ date: 2017-11-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parser
@@ -54,7 +54,7 @@ dependencies:
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
- name: term-ansicolor
57
+ name: highline
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - ">="
@@ -68,21 +68,21 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
- name: highline
71
+ name: slop
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ">="
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '0'
76
+ version: '4.0'
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ">="
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '0'
83
+ version: '4.0'
84
84
  - !ruby/object:Gem::Dependency
85
- name: with_progress
85
+ name: term-ansicolor
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - ">="
@@ -96,19 +96,19 @@ dependencies:
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  - !ruby/object:Gem::Dependency
99
- name: slop
99
+ name: with_progress
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - "~>"
102
+ - - ">="
103
103
  - !ruby/object:Gem::Version
104
- version: '4.0'
104
+ version: '0'
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - "~>"
109
+ - - ">="
110
110
  - !ruby/object:Gem::Version
111
- version: '4.0'
111
+ version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: pry
114
114
  requirement: !ruby/object:Gem::Requirement
@@ -123,6 +123,20 @@ dependencies:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: activesupport
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '4.0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '4.0'
126
140
  - !ruby/object:Gem::Dependency
127
141
  name: bundler
128
142
  requirement: !ruby/object:Gem::Requirement
@@ -138,62 +152,62 @@ dependencies:
138
152
  - !ruby/object:Gem::Version
139
153
  version: '1.15'
140
154
  - !ruby/object:Gem::Dependency
141
- name: rake
155
+ name: psych
142
156
  requirement: !ruby/object:Gem::Requirement
143
157
  requirements:
144
- - - "~>"
158
+ - - ">="
145
159
  - !ruby/object:Gem::Version
146
- version: '10.0'
160
+ version: '2.0'
147
161
  type: :development
148
162
  prerelease: false
149
163
  version_requirements: !ruby/object:Gem::Requirement
150
164
  requirements:
151
- - - "~>"
165
+ - - ">="
152
166
  - !ruby/object:Gem::Version
153
- version: '10.0'
167
+ version: '2.0'
154
168
  - !ruby/object:Gem::Dependency
155
- name: rspec
169
+ name: rake
156
170
  requirement: !ruby/object:Gem::Requirement
157
171
  requirements:
158
172
  - - "~>"
159
173
  - !ruby/object:Gem::Version
160
- version: '3.0'
174
+ version: '10.0'
161
175
  type: :development
162
176
  prerelease: false
163
177
  version_requirements: !ruby/object:Gem::Requirement
164
178
  requirements:
165
179
  - - "~>"
166
180
  - !ruby/object:Gem::Version
167
- version: '3.0'
181
+ version: '10.0'
168
182
  - !ruby/object:Gem::Dependency
169
- name: activesupport
183
+ name: rspec
170
184
  requirement: !ruby/object:Gem::Requirement
171
185
  requirements:
172
186
  - - "~>"
173
187
  - !ruby/object:Gem::Version
174
- version: '4.0'
188
+ version: '3.0'
175
189
  type: :development
176
190
  prerelease: false
177
191
  version_requirements: !ruby/object:Gem::Requirement
178
192
  requirements:
179
193
  - - "~>"
180
194
  - !ruby/object:Gem::Version
181
- version: '4.0'
195
+ version: '3.0'
182
196
  - !ruby/object:Gem::Dependency
183
- name: psych
197
+ name: rubocop
184
198
  requirement: !ruby/object:Gem::Requirement
185
199
  requirements:
186
200
  - - ">="
187
201
  - !ruby/object:Gem::Version
188
- version: '2.0'
202
+ version: '0'
189
203
  type: :development
190
204
  prerelease: false
191
205
  version_requirements: !ruby/object:Gem::Requirement
192
206
  requirements:
193
207
  - - ">="
194
208
  - !ruby/object:Gem::Version
195
- version: '2.0'
196
- description: Write a longer description or delete this line.
209
+ version: '0'
210
+ description: expression and branch coverage for Ruby.
197
211
  email:
198
212
  - github@marc-andre.ca
199
213
  - hunter_spawn@hotmail.com
@@ -204,6 +218,7 @@ extra_rdoc_files: []
204
218
  files:
205
219
  - ".gitignore"
206
220
  - ".rspec"
221
+ - ".rubocop.yml"
207
222
  - ".travis.yml"
208
223
  - CODE_OF_CONDUCT.md
209
224
  - CONTRIBUTING.md
@@ -251,6 +266,7 @@ files:
251
266
  - lib/deep_cover/coverage.rb
252
267
  - lib/deep_cover/covered_code.rb
253
268
  - lib/deep_cover/custom_requirer.rb
269
+ - lib/deep_cover/memoize.rb
254
270
  - lib/deep_cover/module_override.rb
255
271
  - lib/deep_cover/node.rb
256
272
  - lib/deep_cover/node/arguments.rb
@@ -302,6 +318,7 @@ files:
302
318
  - lib/deep_cover/tools/format_generated_code.rb
303
319
  - lib/deep_cover/tools/number_lines.rb
304
320
  - lib/deep_cover/tools/our_coverage.rb
321
+ - lib/deep_cover/tools/profiling.rb
305
322
  - lib/deep_cover/tools/require_relative_dir.rb
306
323
  - lib/deep_cover/tools/silence_warnings.rb
307
324
  - lib/deep_cover/tools/slice.rb
@@ -330,5 +347,5 @@ rubyforge_project:
330
347
  rubygems_version: 2.6.14
331
348
  signing_key:
332
349
  specification_version: 4
333
- summary: Write a short summary, because Rubygems requires one.
350
+ summary: In depth coverage of your Ruby code.
334
351
  test_files: []