coverband 6.0.3.rc.2 → 6.0.3.rc.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/coverband/adapters/hash_redis_store.rb +32 -13
- data/lib/coverband/reporters/json_report.rb +11 -2
- data/lib/coverband/reporters/web.rb +2 -1
- data/lib/coverband/version.rb +1 -1
- data/public/application.js +35 -22
- data/views/layout.erb +7 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7076b5973080adc6d9fc4ddeadf8baa92d19e04f0d8f2e1ef961ac3075737448
|
4
|
+
data.tar.gz: aca8e906625af383fbae32139836e8c93113d89e9b17ca323708aed3b5b46ee7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 302bf319119b5c1c3911da3591db34170717a53b9d9af32aee1f04b87171115daa6f97502c1e2d2d06180c7ba9c24ca675e5b09c6f19473bffb98838c5765f6f
|
7
|
+
data.tar.gz: 0a65eb875a43605f1ef355b6bc268728763e8c6a64e1a5566388fbbd685714e8db6ef48e38849a4d1de5b5b34e984782512b9ffe9a37446b3549f82fa586701a
|
@@ -51,16 +51,6 @@ module Coverband
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
protected
|
55
|
-
|
56
|
-
def split_coverage(types, coverage_cache, options = {})
|
57
|
-
if types.is_a?(Array)
|
58
|
-
coverage_for_types(types, options)
|
59
|
-
else
|
60
|
-
super
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
54
|
private
|
65
55
|
|
66
56
|
# sleep in between to avoid holding other redis commands..
|
@@ -189,7 +179,8 @@ module Coverband
|
|
189
179
|
files_set = if opts[:page]
|
190
180
|
files_set(local_type).each_slice(page_size).to_a[opts[:page] - 1] || {}
|
191
181
|
elsif opts[:filename]
|
192
|
-
|
182
|
+
# TODO: this probably needs to be an exact match of the parsed cache key section
|
183
|
+
files_set(local_type).select{ |cache_key| cache_key.match(short_name(opts[:filename])) } || {}
|
193
184
|
else
|
194
185
|
files_set(local_type)
|
195
186
|
end
|
@@ -209,7 +200,17 @@ module Coverband
|
|
209
200
|
end
|
210
201
|
end
|
211
202
|
|
203
|
+
# TODO: fix this before shipping main line release
|
204
|
+
# def split_coverage(types, coverage_cache, options = {})
|
205
|
+
# if types.is_a?(Array)
|
206
|
+
# coverage_for_types(types, options)
|
207
|
+
# else
|
208
|
+
# super
|
209
|
+
# end
|
210
|
+
# end
|
211
|
+
|
212
212
|
# NOTE: when using paging we need to ensure we have the same set of files per page in runtime and eager
|
213
|
+
# TODO: This merge of eager and runtime isn't working fix later...
|
213
214
|
def coverage_for_types(types, opts = {})
|
214
215
|
page_size = opts[:page_size] || 250
|
215
216
|
|
@@ -219,10 +220,13 @@ module Coverband
|
|
219
220
|
runtime_file_set = if opts[:page]
|
220
221
|
files_set(local_type).each_slice(page_size).to_a[opts[:page] - 1] || {}
|
221
222
|
elsif opts[:filename]
|
222
|
-
|
223
|
+
# TODO: this probably needs to be an exact match of the parsed cache key section
|
224
|
+
# match is a hack that will only kind of work
|
225
|
+
files_set(local_type).select{ |cache_key| cache_key.match(short_name(opts[:filename])) } || {}
|
223
226
|
else
|
224
227
|
files_set(local_type)
|
225
228
|
end
|
229
|
+
|
226
230
|
hash_data[Coverband::RUNTIME_TYPE] = runtime_file_set.each_slice(page_size).flat_map do |key_batch|
|
227
231
|
@redis.pipelined do |pipeline|
|
228
232
|
key_batch.each do |key|
|
@@ -231,8 +235,12 @@ module Coverband
|
|
231
235
|
end
|
232
236
|
end
|
233
237
|
|
238
|
+
# TODO: debug the set isn't just paths it has other key details including coverage type so below probalby fails
|
239
|
+
# match is a hack that will work a sometimes... fix this but it will prove out if this solves the perf issue
|
234
240
|
matched_file_set = files_set(Coverband::EAGER_TYPE)
|
235
|
-
.select { |
|
241
|
+
.select { |eager_key, val| runtime_file_set.any?{ |runtime_key|
|
242
|
+
(eager_key.match(/\.\.(.*).rb/) && eager_key.match(/\.\.(.*).rb/)[0]==runtime_key.match(/\.\.(.*).rb/)[0]) }
|
243
|
+
} || {}
|
236
244
|
hash_data[Coverband::EAGER_TYPE] = matched_file_set.each_slice(page_size).flat_map do |key_batch|
|
237
245
|
@redis.pipelined do |pipeline|
|
238
246
|
key_batch.each do |key|
|
@@ -240,9 +248,20 @@ module Coverband
|
|
240
248
|
end
|
241
249
|
end
|
242
250
|
end
|
251
|
+
hash_data[Coverband::RUNTIME_TYPE] = hash_data[Coverband::RUNTIME_TYPE].each_with_object({}) do |data_from_redis, hash|
|
252
|
+
add_coverage_for_file(data_from_redis, hash)
|
253
|
+
end
|
254
|
+
hash_data[Coverband::EAGER_TYPE] = hash_data[Coverband::EAGER_TYPE].each_with_object({}) do |data_from_redis, hash|
|
255
|
+
add_coverage_for_file(data_from_redis, hash)
|
256
|
+
end
|
243
257
|
hash_data
|
244
258
|
end
|
245
259
|
|
260
|
+
def short_name(filename)
|
261
|
+
filename.sub(/^#{Coverband.configuration.root}/, ".")
|
262
|
+
.gsub(%r{^\.\/}, "")
|
263
|
+
end
|
264
|
+
|
246
265
|
def file_count(local_type = nil)
|
247
266
|
files_set(local_type).count { |filename| !Coverband.configuration.ignore.any? { |i| filename.match(i) } }
|
248
267
|
end
|
@@ -5,13 +5,14 @@
|
|
5
5
|
module Coverband
|
6
6
|
module Reporters
|
7
7
|
class JSONReport < Base
|
8
|
-
attr_accessor :filtered_report_files, :options, :page, :as_report, :store, :filename
|
8
|
+
attr_accessor :filtered_report_files, :options, :page, :as_report, :store, :filename, :base_path
|
9
9
|
|
10
10
|
def initialize(store, options = {})
|
11
11
|
self.options = options
|
12
12
|
self.page = options.fetch(:page) { nil }
|
13
13
|
self.filename = options.fetch(:filename) { nil }
|
14
14
|
self.as_report = options.fetch(:as_report) { false }
|
15
|
+
self.base_path = options.fetch(:base_path) { "./" }
|
15
16
|
self.store = store
|
16
17
|
|
17
18
|
coverband_reports = Coverband::Reporters::Base.report(store, options)
|
@@ -41,8 +42,14 @@ module Coverband
|
|
41
42
|
if as_report
|
42
43
|
row_data = []
|
43
44
|
data[:files].each_pair do |key, data|
|
45
|
+
source_class = data[:never_loaded] ? 'strong red' : 'strong'
|
46
|
+
data_loader_url="#{base_path}load_file_details?filename=#{data[:filename]}"
|
47
|
+
# class=\"src_link cboxElement\
|
48
|
+
link = "<a href=\"##{data[:hash]}\" class=\"cboxElement\" title=\"#{key}\" data-loader-url=\"#{data_loader_url}\" onclick=\"src_link_click(this)\">#{key}</a>"
|
49
|
+
# Started GET "/config/coverage/load_file_details?filename=/home/danmayer/projects/coverband_rails_example/app/jobs/application_job.rb" for ::1 at 2024-03-05 16:02:33 -0700
|
50
|
+
# class="<%= coverage_css_class(source_file.covered_percent) %> strong"
|
44
51
|
row_data << [
|
45
|
-
|
52
|
+
link,
|
46
53
|
data[:covered_percent].to_s,
|
47
54
|
data[:runtime_percentage].to_s,
|
48
55
|
data[:lines_of_code].to_s,
|
@@ -79,6 +86,8 @@ module Coverband
|
|
79
86
|
source_files.each_with_object({}) do |source_file, hash|
|
80
87
|
runtime_coverage = result.file_with_type(source_file, Coverband::RUNTIME_TYPE)&.covered_lines_count || 0
|
81
88
|
hash[source_file.short_name] = {
|
89
|
+
filename: source_file.filename,
|
90
|
+
hash: Digest::SHA1.hexdigest(source_file.filename),
|
82
91
|
never_loaded: source_file.never_loaded,
|
83
92
|
runtime_percentage: result.runtime_relevant_coverage(source_file),
|
84
93
|
lines_of_code: source_file.lines.count,
|
@@ -125,7 +125,8 @@ module Coverband
|
|
125
125
|
|
126
126
|
def report_json
|
127
127
|
report_options = {
|
128
|
-
as_report: true
|
128
|
+
as_report: true,
|
129
|
+
base_path: base_path
|
129
130
|
}
|
130
131
|
report_options[:page] = (request.params["page"] || 1).to_i if request.params["page"]
|
131
132
|
Coverband::Reporters::JSONReport.new(
|
data/lib/coverband/version.rb
CHANGED
data/public/application.js
CHANGED
@@ -71,35 +71,36 @@ $(document).ready(function() {
|
|
71
71
|
|
72
72
|
// Syntax highlight all files up front - deactivated
|
73
73
|
// $('.source_table pre code').each(function(i, e) {hljs.highlightBlock(e, ' ')});
|
74
|
+
src_link_click = (trigger_element) => {
|
75
|
+
// Get the source file element that corresponds to the clicked element
|
76
|
+
var source_table = $(".shared_source_table");
|
77
|
+
var loader_url = $(trigger_element).attr("data-loader-url");
|
78
|
+
$(trigger_element).colorbox(jQuery.extend(colorbox_options, { href: loader_url}));
|
79
|
+
|
80
|
+
// If not highlighted yet, do it!
|
81
|
+
if (!source_table.hasClass("highlighted")) {
|
82
|
+
source_table.find("pre code").each(function(i, e) {
|
83
|
+
hljs.highlightBlock(e, " ");
|
84
|
+
});
|
85
|
+
source_table.addClass("highlighted");
|
86
|
+
}
|
87
|
+
};
|
88
|
+
window.src_link_click = src_link_click;
|
74
89
|
|
75
90
|
// Syntax highlight source files on first toggle of the file view popup
|
76
|
-
$("a.src_link").click(
|
77
|
-
// Get the source file element that corresponds to the clicked element
|
78
|
-
var source_table = $($(this).attr("href"));
|
79
|
-
var loader_url = $(source_table).attr("data-loader-url");
|
80
|
-
|
81
|
-
$(source_table).load(loader_url);
|
82
|
-
|
83
|
-
// If not highlighted yet, do it!
|
84
|
-
if (!source_table.hasClass("highlighted")) {
|
85
|
-
source_table.find("pre code").each(function(i, e) {
|
86
|
-
hljs.highlightBlock(e, " ");
|
87
|
-
});
|
88
|
-
source_table.addClass("highlighted");
|
89
|
-
}
|
90
|
-
});
|
91
|
+
$("a.src_link").click(src_link_click(this));
|
91
92
|
|
92
93
|
var prev_anchor;
|
93
94
|
var curr_anchor;
|
94
|
-
|
95
|
-
|
96
|
-
$("a.src_link").colorbox({
|
95
|
+
var colorbox_options = {
|
96
|
+
open: true,
|
97
97
|
transition: "none",
|
98
|
-
inline: true,
|
98
|
+
// inline: true,
|
99
99
|
opacity: 1,
|
100
100
|
width: "95%",
|
101
101
|
height: "95%",
|
102
102
|
onLoad: function() {
|
103
|
+
// TODO: move source highlighting here
|
103
104
|
prev_anchor = curr_anchor ? curr_anchor : jQuery.url.attr("anchor");
|
104
105
|
curr_anchor = this.href.split("#")[1];
|
105
106
|
window.location.hash = curr_anchor;
|
@@ -115,7 +116,16 @@ $(document).ready(function() {
|
|
115
116
|
}
|
116
117
|
window.location.hash = curr_anchor;
|
117
118
|
}
|
118
|
-
}
|
119
|
+
}
|
120
|
+
|
121
|
+
src_link_colorbox = (trigger_element) => {
|
122
|
+
$(trigger_element).colorbox(colorbox_options);
|
123
|
+
};
|
124
|
+
window.src_link_colorbox = src_link_colorbox;
|
125
|
+
|
126
|
+
// Set-up of popup for source file views
|
127
|
+
// TODO: drop the static source view even for not paged coverband, then delete all this
|
128
|
+
$("a.src_link").colorbox(colorbox_options);
|
119
129
|
|
120
130
|
window.onpopstate = function(event) {
|
121
131
|
if (location.hash.substring(0, 2) == "#_") {
|
@@ -123,7 +133,9 @@ $(document).ready(function() {
|
|
123
133
|
curr_anchor = jQuery.url.attr("anchor");
|
124
134
|
} else {
|
125
135
|
if ($("#colorbox").is(":hidden")) {
|
126
|
-
|
136
|
+
console.log("pop");
|
137
|
+
// $('a.src_link[href="' + location.hash + '"]').colorbox({ open: true });
|
138
|
+
$('.shared_source_table').colorbox({ open: true });
|
127
139
|
}
|
128
140
|
}
|
129
141
|
};
|
@@ -207,7 +219,8 @@ $(document).ready(function() {
|
|
207
219
|
var anchor = jQuery.url.attr("anchor");
|
208
220
|
// source file hash
|
209
221
|
if (anchor.length == 40) {
|
210
|
-
|
222
|
+
console.log("I need to fix deep links to source, the click call wont work anymore");
|
223
|
+
// $("a.src_link[href=#" + anchor + "]").click();
|
211
224
|
} else {
|
212
225
|
if ($(".group_tabs a." + anchor.replace("_", "")).length > 0) {
|
213
226
|
$(".group_tabs a." + anchor.replace("_", "")).click();
|
data/views/layout.erb
CHANGED
@@ -26,9 +26,13 @@
|
|
26
26
|
</div>
|
27
27
|
|
28
28
|
<div class="source_files">
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
<div class="shared_source_table">
|
30
|
+
<div class='loader'>
|
31
|
+
loading source data...
|
32
|
+
<br/>
|
33
|
+
<img src="<%= assets_path('loading.gif') %>" alt="loading"/>
|
34
|
+
</div>
|
35
|
+
</div>
|
32
36
|
</div>
|
33
37
|
</div>
|
34
38
|
</body>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coverband
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.3.rc.
|
4
|
+
version: 6.0.3.rc.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Mayer
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-03-
|
12
|
+
date: 2024-03-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: benchmark-ips
|