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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.jrubyrc +1 -0
  3. data/.rubocop.yml +8 -6
  4. data/.travis.yml +25 -5
  5. data/Gemfile +10 -0
  6. data/Gemfile.rails6 +10 -0
  7. data/README.md +46 -10
  8. data/Rakefile +7 -3
  9. data/changes.md +19 -8
  10. data/coverband.gemspec +3 -6
  11. data/lib/coverband.rb +1 -0
  12. data/lib/coverband/adapters/hash_redis_store.rb +31 -25
  13. data/lib/coverband/collectors/coverage.rb +10 -5
  14. data/lib/coverband/collectors/delta.rb +8 -2
  15. data/lib/coverband/collectors/view_tracker.rb +9 -1
  16. data/lib/coverband/configuration.rb +3 -3
  17. data/lib/coverband/reporters/html_report.rb +10 -0
  18. data/lib/coverband/reporters/web.rb +13 -2
  19. data/lib/coverband/utils/html_formatter.rb +8 -0
  20. data/lib/coverband/utils/jruby_ext.rb +19 -0
  21. data/lib/coverband/utils/s3_report.rb +0 -1
  22. data/lib/coverband/version.rb +1 -1
  23. data/lua/install.sh +5 -8
  24. data/test/benchmarks/benchmark.rake +2 -2
  25. data/test/big_dog.rb.erb +12 -0
  26. data/test/coverband/collectors/delta_test.rb +15 -0
  27. data/test/coverband/integrations/resque_worker_test.rb +8 -2
  28. data/test/coverband/reporters/web_test.rb +6 -0
  29. data/test/dog.rb.erb +0 -5
  30. data/test/jruby_check.rb +14 -0
  31. data/test/rails6_dummy/Rakefile +6 -0
  32. data/test/rails6_dummy/app/controllers/dummy_controller.rb +5 -0
  33. data/test/rails6_dummy/config.ru +4 -0
  34. data/test/rails6_dummy/config/application.rb +14 -0
  35. data/test/rails6_dummy/config/boot.rb +3 -0
  36. data/test/rails6_dummy/config/coverband.rb +3 -0
  37. data/test/rails6_dummy/config/coverband_missing_redis.rb +3 -0
  38. data/test/rails6_dummy/config/environment.rb +5 -0
  39. data/test/rails6_dummy/config/routes.rb +4 -0
  40. data/test/rails6_dummy/config/secrets.yml +3 -0
  41. data/test/rails6_dummy/tmp/.keep +0 -0
  42. data/test/test_helper.rb +1 -1
  43. data/test/unique_files.rb +6 -0
  44. data/views/data.erb +1 -0
  45. data/views/nav.erb +2 -1
  46. metadata +38 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 13e53266c2fa52796b86da93197611c290f7a0c40e304ef5b75d24c45eed9db3
4
- data.tar.gz: 95b685919c1edd7156f1f940d30f05381a1ac6684863557843001f8edf923125
3
+ metadata.gz: 7095ca0ee73eff7b4290c508df1c6c6961ed1283ce2edcca085cf3f05e12bb9d
4
+ data.tar.gz: e0fc00dc886a0153b3c6887680a86ffee9e13666e5dce3bbe7bc551b249d5734
5
5
  SHA512:
6
- metadata.gz: 2e12f0556877efd6435887c447ef3278ab89c0c3ca6740b7ba0de33f9757e17038eb29a74297e9fb29707a8c4d9c999b1138117d3bb64607e0f4da82ca64e0c4
7
- data.tar.gz: 27cfd67015140d2461fb2a9217d06c9782823433c8cbdad3be67e6cc05ea26125dab778656ff0b2023e5e806a277dd1c9028976ddd5dedcc8b90e3505d94598f
6
+ metadata.gz: 4df21534042791528184de6f65548e48ac4a8d06905c815977376b6d3f815eaf121d5117d2e4af4c53b3a46a8122fc32ea3a9c2a1072219d76231f3acf8c530a
7
+ data.tar.gz: 64f75a91aafb5fd7fa945bde6bbe8b9262f79f90faaa17108743ab480bc3a369a3471225d616144024ca7db0010db219806894ace62dea3cb25941396532a535
@@ -0,0 +1 @@
1
+ debug.fullTrace=true
@@ -3,7 +3,7 @@ AllCops:
3
3
  Exclude:
4
4
  - vendor/bundle/**/*
5
5
  - docs/**/*
6
- - test/rails4_dummy/**/*
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
- Metrics/LineLength:
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:
@@ -4,17 +4,37 @@ rvm:
4
4
  - "2.4"
5
5
  - "2.5"
6
6
  - "2.6.1"
7
- cache:
8
- bundler: true
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
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in coverband.gemspec
6
+ gemspec
7
+ gem 'rails', '~>6'
8
+ # this is used for testing gem tracking
9
+ gem 'rainbow', require: false
10
+ gem 'pundit'
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
- * set the new Redis store: `config.store = Coverband::Adapters::HashRedisStore.new(Redis.new(url: redis_url))`
253
- * adjust from default 30s reporting `config.background_reporting_sleep_seconds = 120`
254
- * 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.
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
- __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.
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.rails4 bundle exec rake` (Same tests using rails 4 instead of 5)
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
- test.libs << 'lib' << 'test'
26
- test.test_files = FileList['test/forked/**/*_test.rb']
27
- test.verbose = true
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
- # Released
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
- - clear all
102
- - reset individual file
103
- - timestamps on last seen activity
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
 
@@ -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 help measure production code usage (LOC runtime usage)'
13
- spec.summary = 'Rack middleware to help measure production code usage (LOC runtime usage)'
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
@@ -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
- files_data = report.map do |file, data|
62
- relative_file = @relative_file_converter.convert(file)
63
- file_hash = file_hash(relative_file)
64
- key = key(relative_file, file_hash: file_hash)
65
- keys << key
66
- script_input(
67
- key: key,
68
- file: relative_file,
69
- file_hash: file_hash,
70
- data: data,
71
- report_time: report_time,
72
- updated_time: updated_time
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
- return unless keys.any?
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).each_with_object({}) do |key, hash|
85
- add_coverage_for_file(key, hash)
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(key, hash)
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.merge!(last_updated_at: updated_time) if updated_time
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 Coverage.ruby_version_greater_than_or_equal_to?('2.6.0')
93
- ::Coverage.start(oneshot_lines: Coverband.configuration.use_oneshot_lines_coverage) unless ::Coverage.running?
94
- elsif Coverage.ruby_version_greater_than_or_equal_to?('2.5.0')
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
- ::Coverage.start
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
- array_diff(line_counts, @@previous_coverage[file])
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
- line_counts
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 || redis_store.exists(tracker_time_key)
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
- @seach_paths = TRACKED_DEFAULT_PATHS.dup
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}/{#{@seach_paths.join(',')}}/**/*.{rb}"
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
- @seach_paths = (@seach_paths + path_array).uniq
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 request.path_info
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 request.path_info
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
@@ -28,7 +28,6 @@ module Coverband
28
28
  rescue StandardError
29
29
  err_msg = 'Coverband requires aws-sdk in order use S3Report.'
30
30
  Coverband.configuration.logger&.error err_msg
31
- return
32
31
  end
33
32
  end
34
33
 
@@ -5,5 +5,5 @@
5
5
  # use format '4.2.1.rc.1' ~> 4.2.1.rc to prerelease versions like v4.2.1.rc.2 and v4.2.1.rc.3
6
6
  ###
7
7
  module Coverband
8
- VERSION = '4.2.4.rc.3'
8
+ VERSION = '4.2.6'
9
9
  end
@@ -1,16 +1,13 @@
1
1
  #!/bin/bash
2
2
 
3
3
  LUA_DIR="$HOME/lua51"
4
- BUSTED="$LUA_DIR/bin/busted"
4
+ LUA="$LUA_DIR/bin/lua"
5
5
 
6
- if [ -f "$BUSTED" ]
7
- then
8
- echo "$BUSTED already exists"
9
- exit 0
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('dog.rb.erb', dog_number: index) }
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}") }
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Dog<%=dog_number%>
4
+
5
+ def self.bark
6
+ new.bark
7
+ end
8
+
9
+ def bark
10
+ 'woof'
11
+ end
12
+ end
@@ -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
- assert_equal 0, report[Coverband::EAGER_TYPE][relative_job_file]['data'][6]
39
- assert_equal 1, report[Coverband::RUNTIME_TYPE][relative_job_file]['data'][6]
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?
@@ -1,11 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Dog<%=dog_number%>
4
-
5
- def self.bark
6
- new.bark
7
- end
8
-
9
4
  def bark
10
5
  'woof'
11
6
  end
@@ -0,0 +1,14 @@
1
+ require 'coverage'
2
+
3
+ Coverage.start
4
+
5
+ require './test/dog.rb'
6
+
7
+ puts Coverage.peek_result
8
+
9
+ puts Dog.new.bark
10
+
11
+ puts Coverage.peek_result
12
+
13
+ puts "done"
14
+
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require_relative 'config/application'
5
+
6
+ Rails.application.load_tasks
@@ -0,0 +1,5 @@
1
+ class DummyController < ActionController::Base
2
+ def show
3
+ render plain: "I am no dummy"
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Rails.application
@@ -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
@@ -0,0 +1,3 @@
1
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
2
+
3
+ require 'bundler/setup' # Set up gems listed in the Gemfile.
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../rails5_dummy/config/coverband'
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../rails5_dummy/config/coverband_missing_redis'
@@ -0,0 +1,5 @@
1
+ # Load the Rails application.
2
+ require File.expand_path('../application', __FILE__)
3
+
4
+ # Initialize the Rails application.
5
+ Rails.application.initialize!
@@ -0,0 +1,4 @@
1
+ Rails.application.routes.draw do
2
+ get 'dummy/show'
3
+ mount Coverband::Reporters::Web.new, at: '/coverage'
4
+ end
@@ -0,0 +1,3 @@
1
+ test:
2
+ secret_key_base: 8080f2894307a3dcf72127c0a279a729c58c7c10c11a15de761c8e16017e0e478647d1a7ac11bf143730cac7b6901fa000428c6b4873d9298250f8ca4657b5c6
3
+
File without changes
@@ -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
 
@@ -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
@@ -0,0 +1 @@
1
+ <%= result.source_files.to_json %>
@@ -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'>Coverage Data</a> &nbsp;
9
+ <a href='<%= base_path %>debug_data'>Debug Data</a> &nbsp;
10
+ <a href='<%= base_path %>enriched_debug_data'>Coverage Data</a> &nbsp;
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.rc.3
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: 2019-10-28 00:00:00.000000000 Z
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: coveralls
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: pry-byebug
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 help measure production code usage (LOC runtime usage)
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: 1.3.1
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 help measure production code usage (LOC runtime usage)
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