deep-cover 0.6.2 → 0.6.3.pre
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/.gitignore +3 -1
- data/.rspec +2 -1
- data/.rspec_all +2 -1
- data/.rubocop.yml +8 -9
- data/Gemfile +2 -0
- data/Rakefile +32 -6
- data/bin/cov +3 -3
- data/deep_cover.gemspec +3 -16
- data/exe/deep-cover +5 -0
- data/lib/deep_cover/cli/debugger.rb +1 -1
- data/lib/deep_cover/cli/exec.rb +1 -1
- data/lib/deep_cover/cli/instrumented_clone_reporter.rb +5 -3
- data/lib/deep_cover/cli/runner.rb +2 -2
- data/lib/deep_cover/{tools/dump_covered_code.rb → dump_covered_code.rb} +2 -0
- metadata +10 -203
- data/lib/deep-cover.rb +0 -3
- data/lib/deep_cover.rb +0 -22
- data/lib/deep_cover/analyser.rb +0 -23
- data/lib/deep_cover/analyser/base.rb +0 -104
- data/lib/deep_cover/analyser/branch.rb +0 -41
- data/lib/deep_cover/analyser/covered_code_source.rb +0 -21
- data/lib/deep_cover/analyser/function.rb +0 -14
- data/lib/deep_cover/analyser/node.rb +0 -54
- data/lib/deep_cover/analyser/per_char.rb +0 -38
- data/lib/deep_cover/analyser/per_line.rb +0 -41
- data/lib/deep_cover/analyser/ruby25_like_branch.rb +0 -211
- data/lib/deep_cover/analyser/statement.rb +0 -33
- data/lib/deep_cover/analyser/stats.rb +0 -54
- data/lib/deep_cover/analyser/subset.rb +0 -27
- data/lib/deep_cover/auto_run.rb +0 -71
- data/lib/deep_cover/autoload_tracker.rb +0 -215
- data/lib/deep_cover/backports.rb +0 -22
- data/lib/deep_cover/base.rb +0 -117
- data/lib/deep_cover/basics.rb +0 -22
- data/lib/deep_cover/builtin_takeover.rb +0 -10
- data/lib/deep_cover/config.rb +0 -104
- data/lib/deep_cover/config_setter.rb +0 -33
- data/lib/deep_cover/core_ext/autoload_overrides.rb +0 -112
- data/lib/deep_cover/core_ext/coverage_replacement.rb +0 -61
- data/lib/deep_cover/core_ext/exec_callbacks.rb +0 -27
- data/lib/deep_cover/core_ext/instruction_sequence_load_iseq.rb +0 -32
- data/lib/deep_cover/core_ext/load_overrides.rb +0 -19
- data/lib/deep_cover/core_ext/require_overrides.rb +0 -28
- data/lib/deep_cover/coverage.rb +0 -125
- data/lib/deep_cover/coverage/analysis.rb +0 -42
- data/lib/deep_cover/coverage/persistence.rb +0 -84
- data/lib/deep_cover/covered_code.rb +0 -145
- data/lib/deep_cover/custom_requirer.rb +0 -187
- data/lib/deep_cover/flag_comment_associator.rb +0 -68
- data/lib/deep_cover/load.rb +0 -66
- data/lib/deep_cover/memoize.rb +0 -48
- data/lib/deep_cover/module_override.rb +0 -39
- data/lib/deep_cover/node.rb +0 -23
- data/lib/deep_cover/node/arguments.rb +0 -51
- data/lib/deep_cover/node/assignments.rb +0 -273
- data/lib/deep_cover/node/base.rb +0 -155
- data/lib/deep_cover/node/begin.rb +0 -27
- data/lib/deep_cover/node/block.rb +0 -61
- data/lib/deep_cover/node/branch.rb +0 -32
- data/lib/deep_cover/node/case.rb +0 -113
- data/lib/deep_cover/node/collections.rb +0 -31
- data/lib/deep_cover/node/const.rb +0 -12
- data/lib/deep_cover/node/def.rb +0 -40
- data/lib/deep_cover/node/empty_body.rb +0 -32
- data/lib/deep_cover/node/exceptions.rb +0 -79
- data/lib/deep_cover/node/if.rb +0 -73
- data/lib/deep_cover/node/keywords.rb +0 -86
- data/lib/deep_cover/node/literals.rb +0 -100
- data/lib/deep_cover/node/loops.rb +0 -74
- data/lib/deep_cover/node/mixin/can_augment_children.rb +0 -65
- data/lib/deep_cover/node/mixin/check_completion.rb +0 -18
- data/lib/deep_cover/node/mixin/child_can_be_empty.rb +0 -27
- data/lib/deep_cover/node/mixin/executed_after_children.rb +0 -15
- data/lib/deep_cover/node/mixin/execution_location.rb +0 -66
- data/lib/deep_cover/node/mixin/filters.rb +0 -47
- data/lib/deep_cover/node/mixin/flow_accounting.rb +0 -71
- data/lib/deep_cover/node/mixin/has_child.rb +0 -145
- data/lib/deep_cover/node/mixin/has_child_handler.rb +0 -75
- data/lib/deep_cover/node/mixin/has_tracker.rb +0 -46
- data/lib/deep_cover/node/mixin/is_statement.rb +0 -20
- data/lib/deep_cover/node/mixin/rewriting.rb +0 -35
- data/lib/deep_cover/node/mixin/wrapper.rb +0 -15
- data/lib/deep_cover/node/module.rb +0 -66
- data/lib/deep_cover/node/root.rb +0 -20
- data/lib/deep_cover/node/send.rb +0 -161
- data/lib/deep_cover/node/short_circuit.rb +0 -42
- data/lib/deep_cover/node/splat.rb +0 -15
- data/lib/deep_cover/node/variables.rb +0 -16
- data/lib/deep_cover/parser_ext/range.rb +0 -21
- data/lib/deep_cover/problem_with_diagnostic.rb +0 -63
- data/lib/deep_cover/reporter.rb +0 -10
- data/lib/deep_cover/reporter/base.rb +0 -68
- data/lib/deep_cover/reporter/html.rb +0 -15
- data/lib/deep_cover/reporter/html/base.rb +0 -14
- data/lib/deep_cover/reporter/html/index.rb +0 -59
- data/lib/deep_cover/reporter/html/site.rb +0 -70
- data/lib/deep_cover/reporter/html/source.rb +0 -136
- data/lib/deep_cover/reporter/html/template/assets/32px.png +0 -0
- data/lib/deep_cover/reporter/html/template/assets/40px.png +0 -0
- data/lib/deep_cover/reporter/html/template/assets/deep_cover.css.sass +0 -336
- data/lib/deep_cover/reporter/html/template/assets/jquery-3.2.1.min.js +0 -4
- data/lib/deep_cover/reporter/html/template/assets/jquery-3.2.1.min.map +0 -1
- data/lib/deep_cover/reporter/html/template/assets/jstree.css +0 -1108
- data/lib/deep_cover/reporter/html/template/assets/jstree.js +0 -8424
- data/lib/deep_cover/reporter/html/template/assets/jstreetable.js +0 -1069
- data/lib/deep_cover/reporter/html/template/assets/throbber.gif +0 -0
- data/lib/deep_cover/reporter/html/template/index.html.erb +0 -75
- data/lib/deep_cover/reporter/html/template/source.html.erb +0 -35
- data/lib/deep_cover/reporter/istanbul.rb +0 -184
- data/lib/deep_cover/reporter/text.rb +0 -58
- data/lib/deep_cover/reporter/tree/util.rb +0 -86
- data/lib/deep_cover/tools.rb +0 -22
- data/lib/deep_cover/tools/blank.rb +0 -25
- data/lib/deep_cover/tools/builtin_coverage.rb +0 -55
- data/lib/deep_cover/tools/camelize.rb +0 -13
- data/lib/deep_cover/tools/content_tag.rb +0 -11
- data/lib/deep_cover/tools/covered.rb +0 -9
- data/lib/deep_cover/tools/execute_sample.rb +0 -34
- data/lib/deep_cover/tools/format.rb +0 -18
- data/lib/deep_cover/tools/format_char_cover.rb +0 -19
- data/lib/deep_cover/tools/format_generated_code.rb +0 -27
- data/lib/deep_cover/tools/indent_string.rb +0 -26
- data/lib/deep_cover/tools/merge.rb +0 -16
- data/lib/deep_cover/tools/number_lines.rb +0 -22
- data/lib/deep_cover/tools/our_coverage.rb +0 -11
- data/lib/deep_cover/tools/profiling.rb +0 -68
- data/lib/deep_cover/tools/render_template.rb +0 -13
- data/lib/deep_cover/tools/require_relative_dir.rb +0 -12
- data/lib/deep_cover/tools/scan_match_datas.rb +0 -10
- data/lib/deep_cover/tools/silence_warnings.rb +0 -18
- data/lib/deep_cover/tools/slice.rb +0 -9
- data/lib/deep_cover/tools/strip_heredoc.rb +0 -18
- data/lib/deep_cover/tools/truncate_backtrace.rb +0 -32
- data/lib/deep_cover/tracker_bucket.rb +0 -50
- data/lib/deep_cover/tracker_hits_per_path.rb +0 -35
- data/lib/deep_cover/tracker_storage.rb +0 -76
- data/lib/deep_cover/tracker_storage_per_path.rb +0 -34
- data/lib/deep_cover/version.rb +0 -5
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::Blank
|
5
|
-
BLANK_RE = /\A[[:space:]]*\z/
|
6
|
-
|
7
|
-
# Homemade poor-man's blank?
|
8
|
-
# Based, but modified, on https://github.com/rails/rails/blob/5-0-stable/activesupport/lib/active_support/core_ext/object/blank.rb
|
9
|
-
def blank?(obj)
|
10
|
-
if obj.is_a?(String)
|
11
|
-
obj.empty? || obj =~ BLANK_RE
|
12
|
-
else
|
13
|
-
obj.respond_to?(:empty?) ? !!obj.empty? : !obj
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def present?(obj)
|
18
|
-
!blank?(obj)
|
19
|
-
end
|
20
|
-
|
21
|
-
def presence(obj)
|
22
|
-
obj if present?(obj)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::BuiltinCoverage
|
5
|
-
def builtin_coverage(source, filename, lineno)
|
6
|
-
require 'coverage'
|
7
|
-
filename = File.absolute_path(File.expand_path(filename))
|
8
|
-
::Coverage.start
|
9
|
-
begin
|
10
|
-
Tools.silence_warnings do
|
11
|
-
execute_sample -> { run_with_line_coverage(source, filename, lineno) }
|
12
|
-
end
|
13
|
-
ensure
|
14
|
-
result = ::Coverage.result
|
15
|
-
end
|
16
|
-
unshift_coverage(result.fetch(filename), lineno)
|
17
|
-
end
|
18
|
-
|
19
|
-
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
20
|
-
# Executes the source as if it was in the specified file while
|
21
|
-
# builtin coverage information is still captured
|
22
|
-
def run_with_line_coverage(source, filename = nil, lineno = 1)
|
23
|
-
source = shift_source(source, lineno)
|
24
|
-
Object.to_java.getRuntime.executeScript(source, filename)
|
25
|
-
end
|
26
|
-
else
|
27
|
-
# In ruby 2.0 and 2.1, using 2, 3 or 4 as lineno with RubyVM::InstructionSequence.compile
|
28
|
-
# will cause the coverage result to be truncated.
|
29
|
-
# 1: [1,2,nil,1]
|
30
|
-
# 2: [nil,1,2,nil]
|
31
|
-
# 3: [nil,nil,1,2]
|
32
|
-
# 4: [nil,nil,nil,1]
|
33
|
-
# 5: [nil,nil,nil,nil,1,2,nil,1]
|
34
|
-
# Using 1 and 5 or more do not seem to show this issue.
|
35
|
-
# The workaround is to create the fake lines manually and always use the default lineno
|
36
|
-
|
37
|
-
# Executes the source as if it was in the specified file while
|
38
|
-
# builtin coverage information is still captured
|
39
|
-
def run_with_line_coverage(source, filename = nil, lineno = 1)
|
40
|
-
source = shift_source(source, lineno)
|
41
|
-
RubyVM::InstructionSequence.compile(source, filename).eval
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def shift_source(source, lineno)
|
48
|
-
"\n" * (lineno - 1) + source
|
49
|
-
end
|
50
|
-
|
51
|
-
def unshift_coverage(coverage, lineno)
|
52
|
-
coverage[(lineno - 1)..-1]
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools
|
5
|
-
module Camelize
|
6
|
-
extend self # Loaded before bootstrap
|
7
|
-
# Poor man's camelize. 'an_example' => 'AnExample'
|
8
|
-
def camelize(string)
|
9
|
-
string.to_s.gsub(/([a-z\d]*)[_?!]?/) { Regexp.last_match(1).capitalize }
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::ContentTag
|
5
|
-
# Poor man's content_tag. No HTML escaping included
|
6
|
-
def content_tag(tag, content, **options)
|
7
|
-
attrs = options.map { |kind, value| %{ #{kind}="#{value}"} }.join
|
8
|
-
"<#{tag}#{attrs}>#{content}</#{tag}>"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::ExecuteSample
|
5
|
-
class ExceptionInSample < StandardError
|
6
|
-
end
|
7
|
-
|
8
|
-
# Returns true if the code would have continued, false if the rescue was triggered.
|
9
|
-
def execute_sample(to_execute, source: nil)
|
10
|
-
# Disable some annoying warning by ruby. We are testing edge cases, so warnings are to be expected.
|
11
|
-
Tools.silence_warnings do
|
12
|
-
if to_execute.is_a?(CoveredCode)
|
13
|
-
to_execute.execute_code
|
14
|
-
else
|
15
|
-
to_execute.call
|
16
|
-
end
|
17
|
-
end
|
18
|
-
true
|
19
|
-
rescue StandardError => e
|
20
|
-
# In our samples, a simple `raise` is expected and doesn't need to be rescued
|
21
|
-
return false if e.is_a?(RuntimeError) && e.message.empty?
|
22
|
-
|
23
|
-
source = to_execute.covered_source if to_execute.is_a?(CoveredCode)
|
24
|
-
raise unless source
|
25
|
-
|
26
|
-
inner_msg = Tools.indent_string("#{e.class.name}: #{e.message}", 4)
|
27
|
-
source = Tools.indent_string(source, 4)
|
28
|
-
msg = "Exception when executing the sample:\n#{inner_msg}\n*Code follows*\n#{source}"
|
29
|
-
new_exc = ExceptionInSample.new(msg)
|
30
|
-
new_exc.set_backtrace(e.backtrace)
|
31
|
-
raise new_exc
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::Format
|
5
|
-
CONVERT = Hash.new(' ')
|
6
|
-
CONVERT[0] = 'x '
|
7
|
-
CONVERT[nil] = '- '
|
8
|
-
|
9
|
-
def format(*results, filename: nil, source: nil)
|
10
|
-
source ||= File.read(filename)
|
11
|
-
results.map! { |counts| counts.map { |c| CONVERT[c] } }
|
12
|
-
[*results, source.lines].transpose.map do |parts|
|
13
|
-
*line_results, line = parts
|
14
|
-
Term::ANSIColor.white(line_results.join) + line.to_s
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::FormatCharCover
|
5
|
-
COLOR = {'x' => :red, ' ' => :green, '-' => :faint}.freeze
|
6
|
-
WHITESPACE_MAP = Hash.new { |_, v| v }.merge!(' ' => '·', "\t" => '→ ')
|
7
|
-
def format_char_cover(covered_code, show_whitespace: false, **options)
|
8
|
-
bc = covered_code.char_cover(**options)
|
9
|
-
covered_code.buffer.source_lines.map.with_index do |line, line_index|
|
10
|
-
next line if line.strip =~ /^#[ >]/
|
11
|
-
line.chars.map.with_index do |c, c_index|
|
12
|
-
color = COLOR[bc[line_index][c_index]]
|
13
|
-
c = WHITESPACE_MAP[c] if show_whitespace
|
14
|
-
Term::ANSIColor.send(color, c)
|
15
|
-
end.join
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::FormatGeneratedCode
|
5
|
-
def format_generated_code(covered_code)
|
6
|
-
inserts = []
|
7
|
-
generated_code = covered_code.instrument_source do |inserted, _node, expr_limit|
|
8
|
-
inserts << [expr_limit, inserted.size]
|
9
|
-
Term::ANSIColor.yellow(inserted)
|
10
|
-
end
|
11
|
-
|
12
|
-
inserts = inserts.sort_by { |exp, _| [exp.line, exp.column] }.reverse
|
13
|
-
generated_lines = generated_code.split("\n")
|
14
|
-
|
15
|
-
inserts.each do |exp_limit, size|
|
16
|
-
# Line index starts at 1, so array index returns the next line
|
17
|
-
comment_line = generated_lines[exp_limit.line]
|
18
|
-
next if Tools.blank?(comment_line)
|
19
|
-
next unless comment_line.start_with?('#>')
|
20
|
-
next if comment_line.start_with?('#>X')
|
21
|
-
next unless comment_line.size >= exp_limit.column
|
22
|
-
comment_line.insert(exp_limit.column, ' ' * size)
|
23
|
-
end
|
24
|
-
generated_lines.join("\n")
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::IndentString
|
5
|
-
# In-place implementation copied from active-support.
|
6
|
-
IMPLEMENTATION = ->(amount, indent_string = nil, indent_empty_lines = false) do
|
7
|
-
indent_string = indent_string || self[/^[ \t]/] || ' '
|
8
|
-
re = indent_empty_lines ? /^/ : /^(?!$)/
|
9
|
-
gsub!(re, indent_string * amount)
|
10
|
-
end
|
11
|
-
|
12
|
-
# Same as #indent! from active-support
|
13
|
-
# https://github.com/rails/rails/blob/10e1f1f9a129f2f197a44009a99b73b8ff9dbc0d/activesupport/lib/active_support/core_ext/string/indent.rb#L7
|
14
|
-
def indent_string!(string, *args)
|
15
|
-
string.instance_exec(*args, &IMPLEMENTATION)
|
16
|
-
end
|
17
|
-
|
18
|
-
# Same as #indent from active-support
|
19
|
-
# https://github.com/rails/rails/blob/10e1f1f9a129f2f197a44009a99b73b8ff9dbc0d/activesupport/lib/active_support/core_ext/string/indent.rb#L42
|
20
|
-
def indent_string(string, *args)
|
21
|
-
string = string.dup
|
22
|
-
indent_string!(string, *args)
|
23
|
-
string
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::Merge
|
5
|
-
def merge(*hashes)
|
6
|
-
if hashes.last.is_a?(Symbol)
|
7
|
-
oper = hashes.pop
|
8
|
-
merge(*hashes) { |a, b| a.public_send(oper, b) }
|
9
|
-
elsif !block_given?
|
10
|
-
merge(*hashes, &:last)
|
11
|
-
else
|
12
|
-
hashes.inject { |result, h| result.merge(h) { |key, a, b| yield [a, b] } }
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::NumberLines
|
5
|
-
def number_lines(lines, lineno: 1, bad_linenos: [])
|
6
|
-
max_lineno = lineno + lines.size - 1
|
7
|
-
nb_lineno_digits = max_lineno.to_s.size
|
8
|
-
lines.map.with_index do |line, i|
|
9
|
-
cur_lineno = lineno + i
|
10
|
-
cur_lineno_s = cur_lineno.to_s.rjust(nb_lineno_digits)
|
11
|
-
if bad_linenos.include?(cur_lineno)
|
12
|
-
cur_lineno_s = "*#{cur_lineno_s}" unless bad_linenos.empty?
|
13
|
-
prefix = Term::ANSIColor.red("#{cur_lineno_s} | ")
|
14
|
-
else
|
15
|
-
cur_lineno_s = " #{cur_lineno_s}" unless bad_linenos.empty?
|
16
|
-
prefix = Term::ANSIColor.white("#{cur_lineno_s} | ")
|
17
|
-
end
|
18
|
-
"#{prefix}#{line}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::OurCoverage
|
5
|
-
def our_coverage(source, filename, lineno, **options)
|
6
|
-
covered_code = CoveredCode.new(source: source, path: filename, lineno: lineno)
|
7
|
-
Tools.execute_sample(covered_code)
|
8
|
-
covered_code.line_coverage(options)[(lineno - 1)..-1]
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'delegate'
|
4
|
-
|
5
|
-
module DeepCover
|
6
|
-
module Tools::Profiling
|
7
|
-
# Simple forwarding to implementation
|
8
|
-
def start
|
9
|
-
profiler.start
|
10
|
-
end
|
11
|
-
|
12
|
-
def stop
|
13
|
-
@results = profiler.stop
|
14
|
-
end
|
15
|
-
|
16
|
-
def pause
|
17
|
-
profiler.pause
|
18
|
-
end
|
19
|
-
|
20
|
-
def resume
|
21
|
-
profiler.resume
|
22
|
-
end
|
23
|
-
|
24
|
-
def report
|
25
|
-
profiler.report(@results)
|
26
|
-
end
|
27
|
-
|
28
|
-
# Basic utilities using forwarding methods
|
29
|
-
def profile(do_start = true)
|
30
|
-
return yield unless do_start
|
31
|
-
start
|
32
|
-
yield
|
33
|
-
stop
|
34
|
-
report
|
35
|
-
end
|
36
|
-
|
37
|
-
def dont_profile
|
38
|
-
pause if profiler_loaded?
|
39
|
-
yield
|
40
|
-
ensure
|
41
|
-
resume if profiler_loaded?
|
42
|
-
end
|
43
|
-
|
44
|
-
def profiler_loaded?
|
45
|
-
!!@profiler
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
# Dependency injection
|
51
|
-
def profiler
|
52
|
-
@profiler = RubyProfProfiler.new
|
53
|
-
end
|
54
|
-
|
55
|
-
class RubyProfProfiler < SimpleDelegator
|
56
|
-
def initialize
|
57
|
-
raise 'Profiling is not available when using JRuby' if RUBY_PLATFORM == 'java'
|
58
|
-
require 'ruby-prof'
|
59
|
-
super(RubyProf)
|
60
|
-
end
|
61
|
-
|
62
|
-
def report(results)
|
63
|
-
printer = RubyProf::GraphPrinter.new(results)
|
64
|
-
printer.print(STDOUT, {})
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::RenderTemplate
|
5
|
-
def render_template(template, bound_object)
|
6
|
-
require 'erb'
|
7
|
-
caller_path = Pathname.new(caller(1..1).first.partition(/\.rb:\d/).first).dirname
|
8
|
-
template = caller_path.join("template/#{template}.html.erb").read
|
9
|
-
erb = ERB.new(template)
|
10
|
-
erb.result(bound_object.instance_eval { binding })
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::RequireRelativeDir
|
5
|
-
def require_relative_dir(dir_name, except: [])
|
6
|
-
dir = File.dirname(caller(1..1).first.partition(/\.rb:\d/).first)
|
7
|
-
Dir["#{dir}/#{dir_name}/*.rb"].sort.each do |file|
|
8
|
-
require file unless except.include? File.basename(file, '.rb')
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::RequireRelativeDir
|
5
|
-
# Like String#scan, but return the MatchData object instead
|
6
|
-
def scan_match_datas(source, matcher)
|
7
|
-
source.to_enum(:scan, matcher).map { Regexp.last_match }
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module DeepCover
|
4
|
-
module Tools::SilenceWarnings
|
5
|
-
# copied from: activesupport/lib/active_support/core_ext/kernel/reporting.rb
|
6
|
-
def silence_warnings
|
7
|
-
with_warnings(nil) { yield }
|
8
|
-
end
|
9
|
-
|
10
|
-
def with_warnings(flag)
|
11
|
-
old_verbose = $VERBOSE
|
12
|
-
$VERBOSE = flag
|
13
|
-
yield
|
14
|
-
ensure
|
15
|
-
$VERBOSE = old_verbose
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|