coverband 4.2.4.rc.3 → 4.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.jrubyrc +1 -0
- data/.rubocop.yml +8 -6
- data/.travis.yml +25 -5
- data/Gemfile +10 -0
- data/Gemfile.rails6 +10 -0
- data/README.md +46 -10
- data/Rakefile +7 -3
- data/changes.md +19 -8
- data/coverband.gemspec +3 -6
- data/lib/coverband.rb +1 -0
- data/lib/coverband/adapters/hash_redis_store.rb +31 -25
- data/lib/coverband/collectors/coverage.rb +10 -5
- data/lib/coverband/collectors/delta.rb +8 -2
- data/lib/coverband/collectors/view_tracker.rb +9 -1
- data/lib/coverband/configuration.rb +3 -3
- data/lib/coverband/reporters/html_report.rb +10 -0
- data/lib/coverband/reporters/web.rb +13 -2
- data/lib/coverband/utils/html_formatter.rb +8 -0
- data/lib/coverband/utils/jruby_ext.rb +19 -0
- data/lib/coverband/utils/s3_report.rb +0 -1
- data/lib/coverband/version.rb +1 -1
- data/lua/install.sh +5 -8
- data/test/benchmarks/benchmark.rake +2 -2
- data/test/big_dog.rb.erb +12 -0
- data/test/coverband/collectors/delta_test.rb +15 -0
- data/test/coverband/integrations/resque_worker_test.rb +8 -2
- data/test/coverband/reporters/web_test.rb +6 -0
- data/test/dog.rb.erb +0 -5
- data/test/jruby_check.rb +14 -0
- data/test/rails6_dummy/Rakefile +6 -0
- data/test/rails6_dummy/app/controllers/dummy_controller.rb +5 -0
- data/test/rails6_dummy/config.ru +4 -0
- data/test/rails6_dummy/config/application.rb +14 -0
- data/test/rails6_dummy/config/boot.rb +3 -0
- data/test/rails6_dummy/config/coverband.rb +3 -0
- data/test/rails6_dummy/config/coverband_missing_redis.rb +3 -0
- data/test/rails6_dummy/config/environment.rb +5 -0
- data/test/rails6_dummy/config/routes.rb +4 -0
- data/test/rails6_dummy/config/secrets.yml +3 -0
- data/test/rails6_dummy/tmp/.keep +0 -0
- data/test/test_helper.rb +1 -1
- data/test/unique_files.rb +6 -0
- data/views/data.erb +1 -0
- data/views/nav.erb +2 -1
- metadata +38 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7095ca0ee73eff7b4290c508df1c6c6961ed1283ce2edcca085cf3f05e12bb9d
|
4
|
+
data.tar.gz: e0fc00dc886a0153b3c6887680a86ffee9e13666e5dce3bbe7bc551b249d5734
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4df21534042791528184de6f65548e48ac4a8d06905c815977376b6d3f815eaf121d5117d2e4af4c53b3a46a8122fc32ea3a9c2a1072219d76231f3acf8c530a
|
7
|
+
data.tar.gz: 64f75a91aafb5fd7fa945bde6bbe8b9262f79f90faaa17108743ab480bc3a369a3471225d616144024ca7db0010db219806894ace62dea3cb25941396532a535
|
data/.jrubyrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
debug.fullTrace=true
|
data/.rubocop.yml
CHANGED
@@ -3,7 +3,7 @@ AllCops:
|
|
3
3
|
Exclude:
|
4
4
|
- vendor/bundle/**/*
|
5
5
|
- docs/**/*
|
6
|
-
- test/
|
6
|
+
- test/rails6_dummy/**/*
|
7
7
|
- test/rails5_dummy/**/*
|
8
8
|
- test/fixtures/**/*
|
9
9
|
# Get the code passing first then we will enable for tests
|
@@ -12,7 +12,7 @@ Documentation:
|
|
12
12
|
Enabled: false
|
13
13
|
Metrics/MethodLength:
|
14
14
|
Enabled: false
|
15
|
-
|
15
|
+
Layout/LineLength:
|
16
16
|
Max: 160
|
17
17
|
Metrics/BlockNesting:
|
18
18
|
Max: 5
|
@@ -46,6 +46,10 @@ Style/ClassVars:
|
|
46
46
|
Enabled: false
|
47
47
|
Style/MultilineBlockChain:
|
48
48
|
Enabled: false
|
49
|
+
Style/StringLiterals:
|
50
|
+
Enabled: false
|
51
|
+
Style/IfInsideElse:
|
52
|
+
Enabled: false
|
49
53
|
Style/FrozenStringLiteralComment:
|
50
54
|
Enabled: true
|
51
55
|
Style/GuardClause:
|
@@ -58,14 +62,12 @@ Style/NumericLiteralPrefix:
|
|
58
62
|
Enabled: false
|
59
63
|
Style/ClassAndModuleChildren:
|
60
64
|
Enabled: false
|
65
|
+
Style/SymbolArray:
|
66
|
+
Enabled: false
|
61
67
|
Style/SymbolProc:
|
62
68
|
Enabled: false
|
63
69
|
Style/RegexpLiteral:
|
64
70
|
Enabled: false
|
65
|
-
Performance/Casecmp:
|
66
|
-
Enabled: false
|
67
|
-
Performance/RegexpMatch:
|
68
|
-
Enabled: false
|
69
71
|
Layout/MultilineMethodCallIndentation:
|
70
72
|
Enabled: true
|
71
73
|
Layout/MultilineOperationIndentation:
|
data/.travis.yml
CHANGED
@@ -4,17 +4,37 @@ rvm:
|
|
4
4
|
- "2.4"
|
5
5
|
- "2.5"
|
6
6
|
- "2.6.1"
|
7
|
-
|
8
|
-
|
9
|
-
directories:
|
10
|
-
- $HOME/lua51
|
7
|
+
- "2.7"
|
8
|
+
- jruby-9.2.6.0
|
11
9
|
gemfile:
|
12
10
|
- Gemfile
|
13
11
|
- Gemfile.rails4
|
12
|
+
- Gemfile.rails6
|
13
|
+
env:
|
14
|
+
global:
|
15
|
+
# --dev improves JRuby startup time
|
16
|
+
# See https://github.com/jruby/jruby/wiki/Improving-startup-time
|
17
|
+
- JRUBY_OPTS="--dev"
|
18
|
+
|
19
|
+
jobs:
|
20
|
+
exclude:
|
21
|
+
- rvm: "2.3"
|
22
|
+
gemfile: Gemfile.rails6
|
23
|
+
- rvm: "2.4"
|
24
|
+
gemfile: Gemfile.rails6
|
25
|
+
- rvm: "2.7"
|
26
|
+
gemfile: Gemfile.rails4
|
27
|
+
- rvm: jruby-9.2.6.0
|
28
|
+
gemfile: Gemfile.rails4
|
29
|
+
|
30
|
+
cache:
|
31
|
+
bundler: true
|
32
|
+
directories:
|
33
|
+
- $HOME/lua51
|
14
34
|
services:
|
15
35
|
- redis-server
|
16
36
|
script:
|
17
|
-
- sudo ./lua/install.sh
|
37
|
+
- sudo ./lua/install.sh
|
18
38
|
- $HOME/lua51/bin/busted lua/test/*
|
19
39
|
- bundle exec rake rubocop
|
20
40
|
- COVERBAND_HASH_REDIS_STORE=t bundle exec rake
|
data/Gemfile
CHANGED
@@ -4,6 +4,16 @@ source 'https://rubygems.org'
|
|
4
4
|
|
5
5
|
# Specify your gem's dependencies in coverband.gemspec
|
6
6
|
gemspec
|
7
|
+
|
8
|
+
# add when debugging
|
9
|
+
# require 'byebug'; byebug
|
10
|
+
if ENV['CI']
|
11
|
+
# skipping pry-byebug as it has issues on Ruby 2.3 on travis
|
12
|
+
# and we don't really need it on CI
|
13
|
+
else
|
14
|
+
gem 'pry-byebug', platforms: [:mri, :mingw, :x64_mingw]
|
15
|
+
end
|
16
|
+
|
7
17
|
gem 'rails', '~>5'
|
8
18
|
# these gems are used for testing gem tracking
|
9
19
|
gem 'irb', require: false
|
data/Gemfile.rails6
ADDED
data/README.md
CHANGED
@@ -7,7 +7,6 @@
|
|
7
7
|
[![Maintainability](https://api.codeclimate.com/v1/badges/1e6682f9540d75f26da7/maintainability)](https://codeclimate.com/github/danmayer/coverband/maintainability)
|
8
8
|
[![Discord Shield](https://img.shields.io/discord/609509533999562753)](https://discord.gg/KAH38EV)
|
9
9
|
|
10
|
-
|
11
10
|
<p align="center">
|
12
11
|
<a href="#key-features">Key Features</a> •
|
13
12
|
<a href="#installation">Installation</a> •
|
@@ -116,6 +115,17 @@ The web endpoint is a barebones endpoint that you can either expose direct (afte
|
|
116
115
|
- View individual file details
|
117
116
|
- **clear individual file coverage:** This will clear the details of the file you are looking at. This is helpful if you don't want to lose all Coverage data but made a change that you expect would impact a particular file.
|
118
117
|
|
118
|
+
### JRuby Support
|
119
|
+
|
120
|
+
Coverband is compatible with JRuby. If you want to run on JRuby note that I haven't benchmarked and I believe the perf impact on oldre versions of JRuby could be significant, improved Coverage support is in [JRuby master](https://github.com/jruby/jruby/pull/6180), and will be in the next release.
|
121
|
+
|
122
|
+
* older versions of JRuby need tracing enabled to work (and this could cause bad performance)
|
123
|
+
* run Jruby with the `--debug` option
|
124
|
+
* add into your `.jrubyrc` the `debug.fullTrace=true` setting
|
125
|
+
* For best performance the `oneshot_lines` is recommended, and in the latest releases should have very low overhead
|
126
|
+
* See JRuby support in a Rails app configured to run via JRuby, in [Coverband Demo](https://github.com/coverband-service/coverband_demo)
|
127
|
+
* JRuby is tested via CI against Rails 5 and 6
|
128
|
+
|
119
129
|
### Rake Tasks
|
120
130
|
|
121
131
|
The rake task generates a report locally and opens a browser pointing to `coverage/index.html`.
|
@@ -182,7 +192,7 @@ end
|
|
182
192
|
|
183
193
|
### Working with environment variables
|
184
194
|
|
185
|
-
Do you use figaro, mc-settings, dotenv or something else to inject environment variables into your app? If so ensure you have that done BEFORE coverband is required.
|
195
|
+
Do you use figaro, mc-settings, dotenv or something else to inject environment variables into your app? If so ensure you have that done BEFORE coverband is required.
|
186
196
|
|
187
197
|
For example if you use dotenv, you need to do this, see https://github.com/bkeepers/dotenv#note-on-load-order
|
188
198
|
|
@@ -206,6 +216,8 @@ config.ignore += ['config/application.rb',
|
|
206
216
|
'lib/tasks/*']
|
207
217
|
```
|
208
218
|
|
219
|
+
**Ignoring Custom Gem Locations:** Note, if you have your gems in a custom location under your app folder you likely want to add them to `config.ignore`. For example, if you have your gems not in a default ignored location of `app/vendor` but have them in `app/gems` you would need to add `gems/*` to your ignore list.
|
220
|
+
|
209
221
|
### View Tracking
|
210
222
|
|
211
223
|
Coverband allows an optional feature to track all view files that are used by an application.
|
@@ -237,9 +249,32 @@ ENV['AWS_ACCESS_KEY_ID']
|
|
237
249
|
ENV['AWS_SECRET_ACCESS_KEY']
|
238
250
|
```
|
239
251
|
|
252
|
+
### Fixing Coverage Only Shows Loading Hits
|
253
|
+
|
254
|
+
If all your coverage is being counted as loading or eager_loading coverage, and nothing is showing as runtime Coverage the initialization hook failed for some reason. The most likely reason for this issue is manually calling `eager_load!` on some Plugin/Gem. If you or a plugin is altering the Rails initialization process, you can manually flip Coverband to runtime coverage by calling these two lines, in an `after_initialize` block, in `application.rb`.
|
255
|
+
|
256
|
+
```ruby
|
257
|
+
config.after_initialize do
|
258
|
+
unless Coverband.tasks_to_ignore?
|
259
|
+
Coverband.report_coverage # record the last of the loading coverage
|
260
|
+
Coverband.runtime_coverage! # set all future coverage to runtime
|
261
|
+
end
|
262
|
+
end
|
263
|
+
```
|
264
|
+
|
265
|
+
or if you know you are manually calling eager load anywhere in your initialization process immediately adfter call those two lines. A user reported an issue after calling `ResqueWeb::Engine.eager_load!` for example.
|
266
|
+
|
267
|
+
```ruby
|
268
|
+
Rails.application.routes.draw do
|
269
|
+
ResqueWeb::Engine.eager_load!
|
270
|
+
Coverband.report_coverage
|
271
|
+
Coverband.runtime_coverage!
|
272
|
+
end
|
273
|
+
```
|
274
|
+
|
240
275
|
### Avoiding Cache Stampede
|
241
276
|
|
242
|
-
If you have many servers and they all hit Redis at the same time you can see spikes in your Redis CPU, and memory. This is do to a concept called [cache stampede](https://en.wikipedia.org/wiki/Cache_stampede). It is better to spread out the reporting across your servers. A simple way to do this is to add a random wiggle on your background reporting. This configuration option allows a wiggle. The right amount of wiggle depends on the numbers of servers you have and how willing you are to have delays in your coverage reporting. I would recommend at least 1 second per server.
|
277
|
+
If you have many servers and they all hit Redis at the same time you can see spikes in your Redis CPU, and memory. This is do to a concept called [cache stampede](https://en.wikipedia.org/wiki/Cache_stampede). It is better to spread out the reporting across your servers. A simple way to do this is to add a random wiggle on your background reporting. This configuration option allows a wiggle. The right amount of wiggle depends on the numbers of servers you have and how willing you are to have delays in your coverage reporting. I would recommend at least 1 second per server.
|
243
278
|
|
244
279
|
Add a wiggle (in seconds) to the background thread to avoid all your servers reporting at the same time:
|
245
280
|
|
@@ -247,11 +282,11 @@ Add a wiggle (in seconds) to the background thread to avoid all your servers rep
|
|
247
282
|
|
248
283
|
### Redis Hash Store
|
249
284
|
|
250
|
-
Coverband on very high volume sites with many server processes reporting can have a race condition. To resolve the race condition and reduce Ruby memory overhead we have introduced a new Redis storage option. This moves the some of the work from the Ruby processes to Redis. It is worth noting because of this, it has a larger demands on the Redis server. So adjust your Redis instance accordingly. To help reduce the extra redis load you can also change the background reporting time period.
|
285
|
+
Coverband on very high volume sites with many server processes reporting can have a race condition. To resolve the race condition and reduce Ruby memory overhead we have introduced a new Redis storage option. This moves the some of the work from the Ruby processes to Redis. It is worth noting because of this, it has a larger demands on the Redis server. So adjust your Redis instance accordingly. To help reduce the extra redis load you can also change the background reporting time period.
|
251
286
|
|
252
|
-
|
253
|
-
|
254
|
-
|
287
|
+
- set the new Redis store: `config.store = Coverband::Adapters::HashRedisStore.new(Redis.new(url: redis_url))`
|
288
|
+
- adjust from default 30s reporting `config.background_reporting_sleep_seconds = 120`
|
289
|
+
- reminder it is recommended to have a unique Redis per workload (background jobs, caching, Coverband), for this store, it may be more important to have a dedicated Redis.
|
255
290
|
|
256
291
|
### Clear Coverage
|
257
292
|
|
@@ -289,7 +324,7 @@ rake coverband:coverage # report runtime coverband code coverage
|
|
289
324
|
|
290
325
|
### Collecting Gem / Library Usage
|
291
326
|
|
292
|
-
|
327
|
+
**WARNING:** Gem Tracking is still in experimental stages and not recommended for production. We have some performance issues when view reports on large applications. Gem tracing also during background thread data collection has HIGH memory requirements, during report merging (seemingly around 128mb of extra memory, which is crazy). We recommend deploying WITHOUT `track_gems` first and only enabling it after confirming that Coverband is working and performing well.
|
293
328
|
|
294
329
|
Gem usage can be tracked by enabling the `track_gems` config.
|
295
330
|
|
@@ -353,7 +388,7 @@ If you are trying to debug locally wondering what code is being run during a req
|
|
353
388
|
|
354
389
|
### Ruby and Rails Version Support
|
355
390
|
|
356
|
-
We will match Heroku & Ruby's support lifetime, supporting the last 3 major Ruby releases. For details see [supported runtimes](https://devcenter.heroku.com/articles/ruby-support#supported-runtimes).
|
391
|
+
We will match Heroku & Ruby's support lifetime, supporting the last 3 major Ruby releases. For details see [supported runtimes](https://devcenter.heroku.com/articles/ruby-support#supported-runtimes).
|
357
392
|
|
358
393
|
For Rails, we will follow the policy of the [Rails team maintenance policy](https://guides.rubyonrails.org/maintenance_policy.html). We officially support the last two major release versions, while providing minimal support (major bugs / security fixes) for an additional version. This means at the moment we primaryly target Rails 6.x, 5.x, and will try to keep current functionality working for Rails 4.x but may release new features that do not work on that target.
|
359
394
|
|
@@ -374,7 +409,7 @@ If you submit a change please make sure the tests and benchmarks are passing.
|
|
374
409
|
|
375
410
|
- run tests:
|
376
411
|
- `bundle exec rake`
|
377
|
-
- `BUNDLE_GEMFILE=Gemfile.
|
412
|
+
- `BUNDLE_GEMFILE=Gemfile.rails6 bundle exec rake` (Same tests using rails 6 instead of 5)
|
378
413
|
- view test coverage: `open coverage/index.html`
|
379
414
|
- run the benchmarks before and after your change to see impact
|
380
415
|
- `rake benchmarks`
|
@@ -385,6 +420,7 @@ If you submit a change please make sure the tests and benchmarks are passing.
|
|
385
420
|
- **total fail** on front end code, for line for line coverage, because of the precompiled template step basically coverage doesn't work well for `erb`, `slim`, and the like.
|
386
421
|
- related it will try to report something, but the line numbers reported for `ERB` files are often off and aren't considered useful. I recommend filtering out .erb using the `config.ignore` option. The default configuration excludes these files
|
387
422
|
- **NOTE:** We now have file level coverage for view files, but don't support line level detail
|
423
|
+
- The view file detection doesn't workf or mailers at the moment only for web related views / JSON templates. This is due to how Rails active mailer notifications work.
|
388
424
|
|
389
425
|
### Debugging Redis Store
|
390
426
|
|
data/Rakefile
CHANGED
@@ -22,9 +22,13 @@ Rake::TestTask.new(:test) do |test|
|
|
22
22
|
end
|
23
23
|
|
24
24
|
Rake::TestTask.new(:forked_tests) do |test|
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
if RUBY_PLATFORM == 'java'
|
26
|
+
puts 'forked tests not supported on JRuby'
|
27
|
+
else
|
28
|
+
test.libs << 'lib' << 'test'
|
29
|
+
test.test_files = FileList['test/forked/**/*_test.rb']
|
30
|
+
test.verbose = true
|
31
|
+
end
|
28
32
|
end
|
29
33
|
|
30
34
|
desc 'load irb with this gem'
|
data/changes.md
CHANGED
@@ -76,6 +76,18 @@ Feature Ideas:
|
|
76
76
|
|
77
77
|
# Alpha / Beta / Release Candidates
|
78
78
|
|
79
|
+
### Coverband 4.2.6
|
80
|
+
|
81
|
+
- Address Redis `exists` deprecation warning by baffers
|
82
|
+
|
83
|
+
### Coverband 4.2.5
|
84
|
+
|
85
|
+
- alpha support of jRuby
|
86
|
+
- fix for rails 4.0 by rswaminathan
|
87
|
+
- do not error on branch coverage / simplecov compatibility by desertcart
|
88
|
+
|
89
|
+
# Released
|
90
|
+
|
79
91
|
### Coverband 4.2.4
|
80
92
|
|
81
93
|
- fixes related to startup without Redis, skipping Coverband on common rake tasks (assets:precompile), etc
|
@@ -87,8 +99,8 @@ Feature Ideas:
|
|
87
99
|
- added support to download coverage and view data in JSON format
|
88
100
|
- documentation about working with environment variables
|
89
101
|
- add cache wiggle to avoid Redis CPU spikes (cache stampede on Redis server)
|
90
|
-
|
91
|
-
|
102
|
+
- make the nocov consistant on the data download and html view
|
103
|
+
- small performance improvements
|
92
104
|
|
93
105
|
### Coverband 4.2.3
|
94
106
|
|
@@ -98,19 +110,18 @@ Feature Ideas:
|
|
98
110
|
- improved messaging around non-loaded files
|
99
111
|
- fix on last updated nil issue
|
100
112
|
- view tracker improvements
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
113
|
+
- clear all
|
114
|
+
- reset individual file
|
115
|
+
- timestamps on last seen activity
|
105
116
|
|
106
117
|
### Coverband 4.2.2
|
107
118
|
|
108
119
|
- new experimental hash redis store for high volume collection
|
109
|
-
(hundreds of clients), thanks @kbaum
|
120
|
+
(hundreds of clients), thanks @kbaum
|
110
121
|
- view_tracker supports tracking view layer files like `.html.erb`
|
111
122
|
- documentation improvements, thanks @brossetti1, @jjb, @kbaum
|
112
123
|
- we now have discordapp for discussions, thanks @kbaum,
|
113
|
-
https://discordapp.com/channels/609509533999562753/609509533999562756
|
124
|
+
https://discordapp.com/channels/609509533999562753/609509533999562756
|
114
125
|
- perf fix on Rails initialization, thanks @skangg
|
115
126
|
- simplified logging
|
116
127
|
|
data/coverband.gemspec
CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.version = Coverband::VERSION
|
10
10
|
spec.authors = ['Dan Mayer', 'Karl Baum']
|
11
11
|
spec.email = ['dan@mayerdan.com']
|
12
|
-
spec.description = 'Rack middleware to
|
13
|
-
spec.summary = 'Rack middleware to
|
12
|
+
spec.description = 'Rack middleware to measure production code usage (LOC runtime usage)'
|
13
|
+
spec.summary = 'Rack middleware to measure production code usage (LOC runtime usage)'
|
14
14
|
spec.homepage = 'https://github.com/danmayer/coverband'
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
@@ -35,12 +35,9 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.add_development_dependency 'rake'
|
36
36
|
spec.add_development_dependency 'resque'
|
37
37
|
spec.add_development_dependency 'rubocop'
|
38
|
+
spec.add_development_dependency 'rubocop-performance'
|
38
39
|
|
39
40
|
spec.add_development_dependency 'coveralls'
|
40
|
-
# add when debugging
|
41
|
-
# require 'byebug'; byebug
|
42
|
-
spec.add_development_dependency 'pry-byebug'
|
43
|
-
|
44
41
|
spec.add_development_dependency 'minitest-profile'
|
45
42
|
|
46
43
|
# TODO: Remove when other production adapters exist
|
data/lib/coverband.rb
CHANGED
@@ -100,6 +100,7 @@ module Coverband
|
|
100
100
|
end
|
101
101
|
unless ENV['COVERBAND_DISABLE_AUTO_START']
|
102
102
|
begin
|
103
|
+
require 'coverband/utils/jruby_ext' if RUBY_PLATFORM == 'java'
|
103
104
|
# Coverband should be setup as early as possible
|
104
105
|
# to capture usage of things loaded by initializers or other Rails engines
|
105
106
|
configure
|
@@ -22,6 +22,7 @@ module Coverband
|
|
22
22
|
def initialize(redis, opts = {})
|
23
23
|
super()
|
24
24
|
@redis_namespace = opts[:redis_namespace]
|
25
|
+
@save_report_batch_size = opts[:save_report_batch_size] || 100
|
25
26
|
@format_version = REDIS_STORAGE_FORMAT_VERSION
|
26
27
|
@redis = redis
|
27
28
|
raise 'HashRedisStore requires redis >= 2.6.0' unless supported?
|
@@ -58,31 +59,38 @@ module Coverband
|
|
58
59
|
report_time = Time.now.to_i
|
59
60
|
updated_time = type == Coverband::EAGER_TYPE ? nil : report_time
|
60
61
|
keys = []
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
62
|
+
report.each_slice(@save_report_batch_size) do |slice|
|
63
|
+
files_data = slice.map do |(file, data)|
|
64
|
+
relative_file = @relative_file_converter.convert(file)
|
65
|
+
file_hash = file_hash(relative_file)
|
66
|
+
key = key(relative_file, file_hash: file_hash)
|
67
|
+
keys << key
|
68
|
+
script_input(
|
69
|
+
key: key,
|
70
|
+
file: relative_file,
|
71
|
+
file_hash: file_hash,
|
72
|
+
data: data,
|
73
|
+
report_time: report_time,
|
74
|
+
updated_time: updated_time
|
75
|
+
)
|
76
|
+
end
|
77
|
+
next unless files_data.any?
|
78
|
+
|
79
|
+
arguments_key = [@redis_namespace, SecureRandom.uuid].compact.join('.')
|
80
|
+
@redis.set(arguments_key, { ttl: @ttl, files_data: files_data }.to_json, ex: JSON_PAYLOAD_EXPIRATION)
|
81
|
+
@redis.evalsha(hash_incr_script, [arguments_key])
|
74
82
|
end
|
75
|
-
|
76
|
-
|
77
|
-
arguments_key = [@redis_namespace, SecureRandom.uuid].compact.join('.')
|
78
|
-
@redis.set(arguments_key, { ttl: @ttl, files_data: files_data }.to_json, ex: JSON_PAYLOAD_EXPIRATION)
|
79
|
-
@redis.evalsha(hash_incr_script, [arguments_key])
|
80
|
-
@redis.sadd(files_key, keys)
|
83
|
+
@redis.sadd(files_key, keys) if keys.any?
|
81
84
|
end
|
82
85
|
|
83
86
|
def coverage(local_type = nil)
|
84
|
-
files_set(local_type)
|
85
|
-
|
87
|
+
files_set = files_set(local_type)
|
88
|
+
@redis.pipelined do
|
89
|
+
files_set.map do |key|
|
90
|
+
@redis.hgetall(key)
|
91
|
+
end
|
92
|
+
end.each_with_object({}) do |data_from_redis, hash|
|
93
|
+
add_coverage_for_file(data_from_redis, hash)
|
86
94
|
end
|
87
95
|
end
|
88
96
|
|
@@ -100,9 +108,7 @@ module Coverband
|
|
100
108
|
|
101
109
|
private
|
102
110
|
|
103
|
-
def add_coverage_for_file(
|
104
|
-
data_from_redis = @redis.hgetall(key)
|
105
|
-
|
111
|
+
def add_coverage_for_file(data_from_redis, hash)
|
106
112
|
return if data_from_redis.empty?
|
107
113
|
|
108
114
|
file = data_from_redis[FILE_KEY]
|
@@ -133,7 +139,7 @@ module Coverband
|
|
133
139
|
file_length: data.length,
|
134
140
|
hash_key: key
|
135
141
|
}
|
136
|
-
meta
|
142
|
+
meta[:last_updated_at] = updated_time if updated_time
|
137
143
|
{
|
138
144
|
hash_key: key,
|
139
145
|
meta: meta,
|
@@ -89,12 +89,17 @@ module Coverband
|
|
89
89
|
raise NotImplementedError, 'Coverage needs Ruby > 2.3.0' if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3.0')
|
90
90
|
|
91
91
|
require 'coverage'
|
92
|
-
if
|
93
|
-
|
94
|
-
|
95
|
-
::Coverage.start unless ::Coverage.running?
|
92
|
+
if defined?(SimpleCov) && defined?(Rails) && defined?(Rails.env) && Rails.env.test?
|
93
|
+
puts "Coverband: detected SimpleCov in test Env, allowing it to start Coverage"
|
94
|
+
puts "Coverband: to ensure no error logs or missing Coverage call `SimpleCov.start` prior to requiring Coverband"
|
96
95
|
else
|
97
|
-
|
96
|
+
if Coverage.ruby_version_greater_than_or_equal_to?('2.6.0')
|
97
|
+
::Coverage.start(oneshot_lines: Coverband.configuration.use_oneshot_lines_coverage) unless ::Coverage.running?
|
98
|
+
elsif Coverage.ruby_version_greater_than_or_equal_to?('2.5.0')
|
99
|
+
::Coverage.start unless ::Coverage.running?
|
100
|
+
else
|
101
|
+
::Coverage.start
|
102
|
+
end
|
98
103
|
end
|
99
104
|
reset_instance
|
100
105
|
end
|
@@ -44,11 +44,17 @@ module Coverband
|
|
44
44
|
private
|
45
45
|
|
46
46
|
def generate
|
47
|
+
# TODO: if we filtered before doing this we would avoid calculating the line diff on a ton of files
|
48
|
+
# This would be a fairly noticeable perf win
|
47
49
|
current_coverage.each_with_object({}) do |(file, line_counts), new_results|
|
50
|
+
# This handles Coverage branch support, setup by default in
|
51
|
+
# simplecov 0.18.x
|
52
|
+
arr_line_counts = line_counts.is_a?(Hash) ? line_counts[:lines] : line_counts
|
48
53
|
new_results[file] = if @@previous_coverage && @@previous_coverage[file]
|
49
|
-
|
54
|
+
prev_line_counts = @@previous_coverage[file].is_a?(Hash) ? @@previous_coverage[file][:lines] : @@previous_coverage[file]
|
55
|
+
array_diff(arr_line_counts, prev_line_counts)
|
50
56
|
else
|
51
|
-
|
57
|
+
arr_line_counts
|
52
58
|
end
|
53
59
|
end
|
54
60
|
end
|
@@ -108,7 +108,7 @@ module Coverband
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def report_views_tracked
|
111
|
-
redis_store.set(tracker_time_key, Time.now.to_i) unless @one_time_timestamp ||
|
111
|
+
redis_store.set(tracker_time_key, Time.now.to_i) unless @one_time_timestamp || tracker_time_key_exists?
|
112
112
|
@one_time_timestamp = true
|
113
113
|
reported_time = Time.now.to_i
|
114
114
|
views_to_record.each do |file|
|
@@ -145,6 +145,14 @@ module Coverband
|
|
145
145
|
store.raw_store
|
146
146
|
end
|
147
147
|
|
148
|
+
def tracker_time_key_exists?
|
149
|
+
if defined?(redis_store.exists?)
|
150
|
+
redis_store.exists?(tracker_time_key)
|
151
|
+
else
|
152
|
+
redis_store.exists(tracker_time_key)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
148
156
|
def tracker_key
|
149
157
|
'render_tracker_2'
|
150
158
|
end
|
@@ -54,7 +54,7 @@ module Coverband
|
|
54
54
|
@root = Dir.pwd
|
55
55
|
@root_paths = []
|
56
56
|
@ignore = IGNORE_DEFAULTS.dup
|
57
|
-
@
|
57
|
+
@search_paths = TRACKED_DEFAULT_PATHS.dup
|
58
58
|
@additional_files = []
|
59
59
|
@verbose = false
|
60
60
|
@reporter = 'scov'
|
@@ -134,14 +134,14 @@ module Coverband
|
|
134
134
|
# Search Paths
|
135
135
|
###
|
136
136
|
def tracked_search_paths
|
137
|
-
"#{Coverband.configuration.current_root}/{#{@
|
137
|
+
"#{Coverband.configuration.current_root}/{#{@search_paths.join(',')}}/**/*.{rb}"
|
138
138
|
end
|
139
139
|
|
140
140
|
###
|
141
141
|
# Don't allow the to override defaults
|
142
142
|
###
|
143
143
|
def search_paths=(path_array)
|
144
|
-
@
|
144
|
+
@search_paths = (@search_paths + path_array).uniq
|
145
145
|
end
|
146
146
|
|
147
147
|
###
|
@@ -32,6 +32,10 @@ module Coverband
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
+
def report_data
|
36
|
+
report_dynamic_data
|
37
|
+
end
|
38
|
+
|
35
39
|
private
|
36
40
|
|
37
41
|
def static?
|
@@ -54,6 +58,12 @@ module Coverband
|
|
54
58
|
base_path: base_path,
|
55
59
|
notice: notice).format_dynamic_html!
|
56
60
|
end
|
61
|
+
|
62
|
+
def report_dynamic_data
|
63
|
+
Coverband::Utils::HTMLFormatter.new(filtered_report_files,
|
64
|
+
base_path: base_path,
|
65
|
+
notice: notice).format_dynamic_data!
|
66
|
+
end
|
57
67
|
end
|
58
68
|
end
|
59
69
|
end
|
@@ -32,8 +32,9 @@ module Coverband
|
|
32
32
|
|
33
33
|
return [401, { 'www-authenticate' => 'Basic realm=""' }, ['']] unless check_auth
|
34
34
|
|
35
|
+
request_path_info = (request.path_info == '') ? '/' : request.path_info
|
35
36
|
if request.post?
|
36
|
-
case
|
37
|
+
case request_path_info
|
37
38
|
when %r{\/clear_view_tracking_file}
|
38
39
|
clear_view_tracking_file
|
39
40
|
when %r{\/clear_view_tracking}
|
@@ -46,7 +47,7 @@ module Coverband
|
|
46
47
|
[404, { 'Content-Type' => 'text/html' }, ['404 error!']]
|
47
48
|
end
|
48
49
|
else
|
49
|
-
case
|
50
|
+
case request_path_info
|
50
51
|
when /.*\.(css|js|gif|png)/
|
51
52
|
@static.call(env)
|
52
53
|
when %r{\/settings}
|
@@ -55,6 +56,8 @@ module Coverband
|
|
55
56
|
[200, { 'Content-Type' => 'text/json' }, [view_tracker_data]]
|
56
57
|
when %r{\/view_tracker}
|
57
58
|
[200, { 'Content-Type' => 'text/html' }, [view_tracker]]
|
59
|
+
when %r{\/enriched_debug_data}
|
60
|
+
[200, { 'Content-Type' => 'text/json' }, [enriched_debug_data]]
|
58
61
|
when %r{\/debug_data}
|
59
62
|
[200, { 'Content-Type' => 'text/json' }, [debug_data]]
|
60
63
|
when %r{\/load_file_details}
|
@@ -97,6 +100,14 @@ module Coverband
|
|
97
100
|
Coverband.configuration.store.get_coverage_report.to_json
|
98
101
|
end
|
99
102
|
|
103
|
+
def enriched_debug_data
|
104
|
+
Coverband::Reporters::HTMLReport.new(Coverband.configuration.store,
|
105
|
+
static: false,
|
106
|
+
base_path: base_path,
|
107
|
+
notice: '',
|
108
|
+
open_report: false).report_data
|
109
|
+
end
|
110
|
+
|
100
111
|
def load_file_details
|
101
112
|
filename = request.params['filename']
|
102
113
|
Coverband::Reporters::HTMLReport.new(Coverband.configuration.store,
|
@@ -29,6 +29,10 @@ module Coverband
|
|
29
29
|
format_html(@coverage_result)
|
30
30
|
end
|
31
31
|
|
32
|
+
def format_dynamic_data!
|
33
|
+
format_data(@coverage_result)
|
34
|
+
end
|
35
|
+
|
32
36
|
def format_settings!
|
33
37
|
format_settings
|
34
38
|
end
|
@@ -71,6 +75,10 @@ module Coverband
|
|
71
75
|
template('layout').result(binding)
|
72
76
|
end
|
73
77
|
|
78
|
+
def format_data(result)
|
79
|
+
template('data').result(binding)
|
80
|
+
end
|
81
|
+
|
74
82
|
# Returns the an erb instance for the template of given name
|
75
83
|
def template(name)
|
76
84
|
ERB.new(File.read(File.join(File.dirname(__FILE__), '../../../views/', "#{name}.erb")))
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
####
|
4
|
+
# This exists in CRuby, but not in JRuby, so add it
|
5
|
+
#
|
6
|
+
# Taken from: https://github.com/ruby/ruby/blob/c5eb24349a4535948514fe765c3ddb0628d81004/ext/coverage/lib/coverage.rb
|
7
|
+
####
|
8
|
+
module Coverage
|
9
|
+
def self.line_stub(file)
|
10
|
+
lines = File.foreach(file).map { nil }
|
11
|
+
iseqs = [RubyVM::InstructionSequence.compile_file(file)]
|
12
|
+
until iseqs.empty?
|
13
|
+
iseq = iseqs.pop
|
14
|
+
iseq.trace_points.each { |n, type| lines[n - 1] = 0 if type == :line }
|
15
|
+
iseq.each_child { |child| iseqs << child }
|
16
|
+
end
|
17
|
+
lines
|
18
|
+
end
|
19
|
+
end
|
data/lib/coverband/version.rb
CHANGED
data/lua/install.sh
CHANGED
@@ -1,16 +1,13 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
|
3
3
|
LUA_DIR="$HOME/lua51"
|
4
|
-
|
4
|
+
LUA="$LUA_DIR/bin/lua"
|
5
5
|
|
6
|
-
if [ -f
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
if [ ! -f $LUA ]; then
|
7
|
+
echo "Installing lua"
|
8
|
+
pip install hererocks
|
9
|
+
hererocks $LUA_DIR -l5.1 -rlatest
|
10
10
|
fi
|
11
|
-
|
12
|
-
pip install hererocks
|
13
|
-
hererocks $LUA_DIR -l5.1 -rlatest
|
14
11
|
source $LUA_DIR/bin/activate
|
15
12
|
lua -v
|
16
13
|
for i in luacov busted redis-lua inspect lua-cjson; do
|
@@ -247,7 +247,7 @@ namespace :benchmarks do
|
|
247
247
|
|
248
248
|
desc 'checks memory of collector'
|
249
249
|
task memory_check: [:setup] do
|
250
|
-
require 'pry-byebug'
|
250
|
+
# require 'pry-byebug'
|
251
251
|
require 'objspace'
|
252
252
|
puts 'memory load check'
|
253
253
|
puts(ObjectSpace.memsize_of_all / 2**20)
|
@@ -337,7 +337,7 @@ namespace :benchmarks do
|
|
337
337
|
require 'memory_profiler'
|
338
338
|
require './test/unique_files'
|
339
339
|
|
340
|
-
4000.times { |index| require_unique_file('
|
340
|
+
4000.times { |index| require_unique_file('big_dog.rb.erb', dog_number: index) }
|
341
341
|
# warmup
|
342
342
|
3.times { Coverband.report_coverage }
|
343
343
|
dogs = 400.times.map { |index| Object.const_get("Dog#{index}") }
|
data/test/big_dog.rb.erb
ADDED
@@ -49,6 +49,21 @@ class CollectorsDeltaTest < Minitest::Test
|
|
49
49
|
assert_equal(current_coverage, results)
|
50
50
|
end
|
51
51
|
|
52
|
+
test 'Coverage has branching enabled and has gone up' do
|
53
|
+
current_coverage = {
|
54
|
+
'car.rb' => { lines: [nil, 1, 5, 1] }
|
55
|
+
}
|
56
|
+
::Coverage.expects(:peek_result).returns(current_coverage)
|
57
|
+
results = Coverband::Collectors::Delta.results
|
58
|
+
|
59
|
+
current_coverage = {
|
60
|
+
'car.rb' => { lines: [nil, 1, 7, 1] }
|
61
|
+
}
|
62
|
+
::Coverage.expects(:peek_result).returns(current_coverage)
|
63
|
+
results = Coverband::Collectors::Delta.results
|
64
|
+
assert_equal({ 'car.rb' => [nil, 0, 2, 0] }, results)
|
65
|
+
end
|
66
|
+
|
52
67
|
if Coverband.configuration.one_shot_coverage_implemented_in_ruby_version?
|
53
68
|
test 'oneshot coverage calls clear' do
|
54
69
|
Coverband.configuration.stubs(:use_oneshot_lines_coverage).returns(true)
|
@@ -35,7 +35,13 @@ class ResqueWorkerTest < Minitest::Test
|
|
35
35
|
Coverband.runtime_coverage!
|
36
36
|
report = Coverband.configuration.store.get_coverage_report
|
37
37
|
|
38
|
-
|
39
|
-
|
38
|
+
if RUBY_PLATFORM == 'java'
|
39
|
+
# NOTE: the todo test only issue seems to be slightly different in JRuby
|
40
|
+
# were nothing is showing up as runtime Coverage... This appears to be a test only issue
|
41
|
+
assert_equal 1, report[Coverband::EAGER_TYPE][relative_job_file]['data'][6]
|
42
|
+
else
|
43
|
+
assert_equal 0, report[Coverband::EAGER_TYPE][relative_job_file]['data'][6]
|
44
|
+
assert_equal 1, report[Coverband::RUNTIME_TYPE][relative_job_file]['data'][6]
|
45
|
+
end
|
40
46
|
end
|
41
47
|
end
|
@@ -27,6 +27,12 @@ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.2.0')
|
|
27
27
|
assert_match 'Coverband Admin', last_response.body
|
28
28
|
end
|
29
29
|
|
30
|
+
test 'renders index content for empty path' do
|
31
|
+
get ''
|
32
|
+
assert last_response.ok?
|
33
|
+
assert_match 'Coverband Admin', last_response.body
|
34
|
+
end
|
35
|
+
|
30
36
|
test 'renders 404' do
|
31
37
|
get '/show'
|
32
38
|
assert last_response.not_found?
|
data/test/dog.rb.erb
CHANGED
data/test/jruby_check.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path('boot', __dir__)
|
4
|
+
|
5
|
+
require 'rails'
|
6
|
+
require 'action_controller/railtie'
|
7
|
+
require 'coverband'
|
8
|
+
Bundler.require(*Rails.groups)
|
9
|
+
|
10
|
+
module Rails6Dummy
|
11
|
+
class Application < Rails::Application
|
12
|
+
config.eager_load = true
|
13
|
+
end
|
14
|
+
end
|
File without changes
|
data/test/test_helper.rb
CHANGED
@@ -15,7 +15,7 @@ require 'ostruct'
|
|
15
15
|
require 'json'
|
16
16
|
require 'redis'
|
17
17
|
require 'resque'
|
18
|
-
require 'pry-byebug'
|
18
|
+
# require 'pry-byebug' unless ENV['CI'] # Ruby 2.3 on CI crashes on pry & JRuby doesn't support it
|
19
19
|
require_relative 'unique_files'
|
20
20
|
$VERBOSE = original_verbosity
|
21
21
|
|
data/test/unique_files.rb
CHANGED
@@ -20,6 +20,12 @@ def require_unique_file(file = 'dog.rb', variables = {})
|
|
20
20
|
Coverband::Utils::RelativeFileConverter.convert(File.expand_path(temp_file))
|
21
21
|
end
|
22
22
|
|
23
|
+
@@dogs = 0
|
24
|
+
def require_class_unique_file
|
25
|
+
@@dogs +=1
|
26
|
+
require_unique_file('dog.rb.erb', dog_number: @@dogs)
|
27
|
+
end
|
28
|
+
|
23
29
|
def remove_unique_files
|
24
30
|
FileUtils.rm_r(UNIQUE_FILES_DIR) if File.exist?(UNIQUE_FILES_DIR)
|
25
31
|
end
|
data/views/data.erb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<%= result.source_files.to_json %>
|
data/views/nav.erb
CHANGED
@@ -6,7 +6,8 @@
|
|
6
6
|
<%= button("#{base_path}clear", 'clear coverage report', delete: true) %>
|
7
7
|
<% end %>
|
8
8
|
<% if Coverband.configuration.web_debug %>
|
9
|
-
<a href='<%= base_path %>debug_data'>
|
9
|
+
<a href='<%= base_path %>debug_data'>Debug Data</a>
|
10
|
+
<a href='<%= base_path %>enriched_debug_data'>Coverage Data</a>
|
10
11
|
<% end %>
|
11
12
|
</div>
|
12
13
|
<% if notice.to_s.length > 0 %>
|
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: 4.2.
|
4
|
+
version: 4.2.6
|
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:
|
12
|
+
date: 2020-06-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk-s3
|
@@ -194,7 +194,7 @@ dependencies:
|
|
194
194
|
- !ruby/object:Gem::Version
|
195
195
|
version: '0'
|
196
196
|
- !ruby/object:Gem::Dependency
|
197
|
-
name:
|
197
|
+
name: rubocop-performance
|
198
198
|
requirement: !ruby/object:Gem::Requirement
|
199
199
|
requirements:
|
200
200
|
- - ">="
|
@@ -208,7 +208,7 @@ dependencies:
|
|
208
208
|
- !ruby/object:Gem::Version
|
209
209
|
version: '0'
|
210
210
|
- !ruby/object:Gem::Dependency
|
211
|
-
name:
|
211
|
+
name: coveralls
|
212
212
|
requirement: !ruby/object:Gem::Requirement
|
213
213
|
requirements:
|
214
214
|
- - ">="
|
@@ -249,7 +249,7 @@ dependencies:
|
|
249
249
|
- - ">="
|
250
250
|
- !ruby/object:Gem::Version
|
251
251
|
version: '0'
|
252
|
-
description: Rack middleware to
|
252
|
+
description: Rack middleware to measure production code usage (LOC runtime usage)
|
253
253
|
email:
|
254
254
|
- dan@mayerdan.com
|
255
255
|
executables: []
|
@@ -257,11 +257,13 @@ extensions: []
|
|
257
257
|
extra_rdoc_files: []
|
258
258
|
files:
|
259
259
|
- ".gitignore"
|
260
|
+
- ".jrubyrc"
|
260
261
|
- ".rubocop.yml"
|
261
262
|
- ".travis.yml"
|
262
263
|
- CODE_OF_CONDUCT.md
|
263
264
|
- Gemfile
|
264
265
|
- Gemfile.rails4
|
266
|
+
- Gemfile.rails6
|
265
267
|
- LICENSE
|
266
268
|
- LICENSE.txt
|
267
269
|
- README.md
|
@@ -295,6 +297,7 @@ files:
|
|
295
297
|
- lib/coverband/utils/file_list.rb
|
296
298
|
- lib/coverband/utils/gem_list.rb
|
297
299
|
- lib/coverband/utils/html_formatter.rb
|
300
|
+
- lib/coverband/utils/jruby_ext.rb
|
298
301
|
- lib/coverband/utils/lines_classifier.rb
|
299
302
|
- lib/coverband/utils/railtie.rb
|
300
303
|
- lib/coverband/utils/relative_file_converter.rb
|
@@ -342,6 +345,7 @@ files:
|
|
342
345
|
- test/benchmarks/dog.rb
|
343
346
|
- test/benchmarks/graph_bench.sh
|
344
347
|
- test/benchmarks/init_rails.rake
|
348
|
+
- test/big_dog.rb.erb
|
345
349
|
- test/coverband/adapters/base_test.rb
|
346
350
|
- test/coverband/adapters/file_store_test.rb
|
347
351
|
- test/coverband/adapters/hash_redis_store_test.rb
|
@@ -388,6 +392,7 @@ files:
|
|
388
392
|
- test/forked/rails_full_stack_test.rb
|
389
393
|
- test/forked/rails_rake_full_stack_test.rb
|
390
394
|
- test/integration/full_stack_test.rb
|
395
|
+
- test/jruby_check.rb
|
391
396
|
- test/rails4_dummy/Rakefile
|
392
397
|
- test/rails4_dummy/app/controllers/dummy_controller.rb
|
393
398
|
- test/rails4_dummy/config.ru
|
@@ -408,9 +413,21 @@ files:
|
|
408
413
|
- test/rails5_dummy/config/environment.rb
|
409
414
|
- test/rails5_dummy/config/routes.rb
|
410
415
|
- test/rails5_dummy/tmp/.keep
|
416
|
+
- test/rails6_dummy/Rakefile
|
417
|
+
- test/rails6_dummy/app/controllers/dummy_controller.rb
|
418
|
+
- test/rails6_dummy/config.ru
|
419
|
+
- test/rails6_dummy/config/application.rb
|
420
|
+
- test/rails6_dummy/config/boot.rb
|
421
|
+
- test/rails6_dummy/config/coverband.rb
|
422
|
+
- test/rails6_dummy/config/coverband_missing_redis.rb
|
423
|
+
- test/rails6_dummy/config/environment.rb
|
424
|
+
- test/rails6_dummy/config/routes.rb
|
425
|
+
- test/rails6_dummy/config/secrets.yml
|
426
|
+
- test/rails6_dummy/tmp/.keep
|
411
427
|
- test/rails_test_helper.rb
|
412
428
|
- test/test_helper.rb
|
413
429
|
- test/unique_files.rb
|
430
|
+
- views/data.erb
|
414
431
|
- views/file_list.erb
|
415
432
|
- views/gem_list.erb
|
416
433
|
- views/layout.erb
|
@@ -434,14 +451,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
434
451
|
version: '0'
|
435
452
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
436
453
|
requirements:
|
437
|
-
- - "
|
454
|
+
- - ">="
|
438
455
|
- !ruby/object:Gem::Version
|
439
|
-
version:
|
456
|
+
version: '0'
|
440
457
|
requirements: []
|
441
458
|
rubygems_version: 3.0.3
|
442
459
|
signing_key:
|
443
460
|
specification_version: 4
|
444
|
-
summary: Rack middleware to
|
461
|
+
summary: Rack middleware to measure production code usage (LOC runtime usage)
|
445
462
|
test_files:
|
446
463
|
- test/benchmarks/.gitignore
|
447
464
|
- test/benchmarks/benchmark.rake
|
@@ -449,6 +466,7 @@ test_files:
|
|
449
466
|
- test/benchmarks/dog.rb
|
450
467
|
- test/benchmarks/graph_bench.sh
|
451
468
|
- test/benchmarks/init_rails.rake
|
469
|
+
- test/big_dog.rb.erb
|
452
470
|
- test/coverband/adapters/base_test.rb
|
453
471
|
- test/coverband/adapters/file_store_test.rb
|
454
472
|
- test/coverband/adapters/hash_redis_store_test.rb
|
@@ -495,6 +513,7 @@ test_files:
|
|
495
513
|
- test/forked/rails_full_stack_test.rb
|
496
514
|
- test/forked/rails_rake_full_stack_test.rb
|
497
515
|
- test/integration/full_stack_test.rb
|
516
|
+
- test/jruby_check.rb
|
498
517
|
- test/rails4_dummy/Rakefile
|
499
518
|
- test/rails4_dummy/app/controllers/dummy_controller.rb
|
500
519
|
- test/rails4_dummy/config.ru
|
@@ -515,6 +534,17 @@ test_files:
|
|
515
534
|
- test/rails5_dummy/config/environment.rb
|
516
535
|
- test/rails5_dummy/config/routes.rb
|
517
536
|
- test/rails5_dummy/tmp/.keep
|
537
|
+
- test/rails6_dummy/Rakefile
|
538
|
+
- test/rails6_dummy/app/controllers/dummy_controller.rb
|
539
|
+
- test/rails6_dummy/config.ru
|
540
|
+
- test/rails6_dummy/config/application.rb
|
541
|
+
- test/rails6_dummy/config/boot.rb
|
542
|
+
- test/rails6_dummy/config/coverband.rb
|
543
|
+
- test/rails6_dummy/config/coverband_missing_redis.rb
|
544
|
+
- test/rails6_dummy/config/environment.rb
|
545
|
+
- test/rails6_dummy/config/routes.rb
|
546
|
+
- test/rails6_dummy/config/secrets.yml
|
547
|
+
- test/rails6_dummy/tmp/.keep
|
518
548
|
- test/rails_test_helper.rb
|
519
549
|
- test/test_helper.rb
|
520
550
|
- test/unique_files.rb
|