coverband 5.0.0.rc.8 → 5.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.rails4 +2 -0
  4. data/Gemfile.rails6 +2 -0
  5. data/LICENSE.txt +1 -1
  6. data/README.md +69 -48
  7. data/changes.md +28 -5
  8. data/lib/coverband/adapters/base.rb +5 -1
  9. data/lib/coverband/adapters/file_store.rb +1 -1
  10. data/lib/coverband/adapters/redis_store.rb +1 -1
  11. data/lib/coverband/collectors/view_tracker.rb +16 -7
  12. data/lib/coverband/reporters/console_report.rb +2 -8
  13. data/lib/coverband/reporters/web.rb +2 -1
  14. data/lib/coverband/utils/railtie.rb +14 -9
  15. data/lib/coverband/utils/tasks.rb +1 -1
  16. data/lib/coverband/version.rb +1 -1
  17. data/test/coverband/reporters/web_test.rb +36 -2
  18. data/test/forked/rails_full_stack_test.rb +1 -1
  19. data/test/forked/rails_full_stack_views_test.rb +51 -0
  20. data/test/forked/rails_view_tracker_stack_test.rb +44 -0
  21. data/test/rails4_dummy/app/controllers/dummy_view_controller.rb +16 -0
  22. data/test/rails4_dummy/app/views/dummy_view/show.html.erb +5 -0
  23. data/test/rails4_dummy/app/views/dummy_view/show_haml.html.haml +4 -0
  24. data/test/rails4_dummy/app/views/dummy_view/show_slim.html.slim +4 -0
  25. data/test/rails4_dummy/config/application.rb +1 -0
  26. data/test/rails4_dummy/config/routes.rb +3 -0
  27. data/test/rails5_dummy/app/controllers/dummy_view_controller.rb +16 -0
  28. data/test/rails5_dummy/app/views/dummy_view/show.html.erb +5 -0
  29. data/test/rails5_dummy/app/views/dummy_view/show_haml.html.haml +4 -0
  30. data/test/rails5_dummy/app/views/dummy_view/show_slim.html.slim +4 -0
  31. data/test/rails5_dummy/config/application.rb +2 -0
  32. data/test/rails5_dummy/config/coverband.rb +3 -1
  33. data/test/rails5_dummy/config/routes.rb +3 -0
  34. data/test/rails6_dummy/app/controllers/dummy_view_controller.rb +16 -0
  35. data/test/rails6_dummy/app/views/dummy_view/show.html.erb +5 -0
  36. data/test/rails6_dummy/app/views/dummy_view/show_haml.html.haml +4 -0
  37. data/test/rails6_dummy/app/views/dummy_view/show_slim.html.slim +4 -0
  38. data/test/rails6_dummy/config/application.rb +1 -0
  39. data/test/rails6_dummy/config/routes.rb +3 -0
  40. data/views/nav.erb +2 -2
  41. data/views/settings.erb +2 -2
  42. data/views/view_tracker.erb +2 -2
  43. metadata +33 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e236d323d6ce3fdb2d3bf5ea9a7514e2cc5758c50d422573cd0ffe0bf8a3f5b
4
- data.tar.gz: 93c4a362420b64444efa41f74c4f21259e5891e23481885a3acd7472e2577c63
3
+ metadata.gz: bbff118005d968f8d2158135273f108cbb9b867c9c13d783b5fb8a2220dd5540
4
+ data.tar.gz: bc7ec947e707d4feaf213a0559f110ae5d11a487ea370f5e9f6a1256c2799701
5
5
  SHA512:
6
- metadata.gz: ce5500c42de344046f55a277635f7f406e6e6675b7a77cbff0ba9986c86c5b066e3969ea8540043dc4aaa70c91b9648cda531660569209257d7ce04c7831180c
7
- data.tar.gz: 9927e92ef9749a079ee56774d6e112cfa4ca2c21f9fd56cd60e0896bf588198fc5ff8e133baff74cc1bf1bb2d4ca2d9cbe8f99a655702879db464d90a71a5dbb
6
+ metadata.gz: af026a80339c3047c62c99c6ec47385288fc7a0fd1d295b646abffdd4b74ea48118f01b2caa2ef997d7dc8775ebc047ce9844189065148f82eaea10fb2bf2978
7
+ data.tar.gz: a4555a8209507c66efc7ba2432bb5b743cc45331fead66f038df9823a85e8a1bbf9401cd9b47a450cfd184ff399d429e193527df6745ec1770b0b0e08a863141
data/Gemfile CHANGED
@@ -15,5 +15,7 @@ else
15
15
  end
16
16
 
17
17
  gem "rails", "~>5"
18
+ gem "haml"
19
+ gem "slim"
18
20
  # these gems are used for testing gem tracking
19
21
  gem "irb", require: false
@@ -5,3 +5,5 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in coverband.gemspec
6
6
  gemspec
7
7
  gem 'rails', '~>4'
8
+ gem "haml"
9
+ gem "slim"
@@ -5,3 +5,5 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in coverband.gemspec
6
6
  gemspec
7
7
  gem 'rails', '~>6'
8
+ gem "haml"
9
+ gem "slim"
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2018 Dan Mayer
1
+ Copyright (c) 2010-2020 Dan Mayer
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  <p align="center">
11
11
  <a href="#key-features">Key Features</a> •
12
12
  <a href="#installation">Installation</a> •
13
- <a href="#coverage-report">Coverage Report</a> •
13
+ <a href="#coverband-web-ui">Coverband Web UI</a> •
14
14
  <a href="#advanced-config">Advanced Config</a> •
15
15
  <a href="#license">License</a> •
16
16
  <a href="/changes.md">Change Log / Roadmap</a> •
@@ -28,7 +28,7 @@ The primary goal of Coverband is giving deep insight into your production runtim
28
28
  - Low performance overhead
29
29
  - Simple setup and configuration
30
30
  - Out of the box support for all standard code execution paths (web, cron, background jobs, rake tasks, etc)
31
- - Splits load time (Rails eager load) and Run time metrics
31
+ - Splits load time (Rails eager load) and runtime metrics
32
32
  - Easy to understand actionable insights from the report
33
33
  - Development mode, offers deep insight of code usage details (number of LOC execution during single request, etc) during development.
34
34
  - Mountable web interface to easily share reports
@@ -41,7 +41,7 @@ Coverband stores coverage data in Redis. The Redis endpoint is looked for in thi
41
41
 
42
42
  1. `ENV['COVERBAND_REDIS_URL']`
43
43
  2. `ENV['REDIS_URL']`
44
- 3. `localhost`
44
+ 3. `localhost:6379`
45
45
 
46
46
  The redis store can also be explicitly defined within the coverband.rb. See [advanced config](#advanced-config).
47
47
 
@@ -53,8 +53,6 @@ Add this line to your application's `Gemfile`, remember to `bundle install` afte
53
53
  gem 'coverband'
54
54
  ```
55
55
 
56
- ## Upgrading to Latest
57
-
58
56
  ### No custom code or middleware required
59
57
 
60
58
  With older versions of coverband, projects would report to redis using rack or sidekiq middleware. After coverband 4.0, this should no longer be required and could cause performance issues. Reporting to redis is now automatically done within a background thread with no custom code needed.
@@ -67,7 +65,7 @@ The Railtie integration means you shouldn't need to do anything else other than
67
65
 
68
66
  ## Sinatra
69
67
 
70
- For the best coverage you want this loaded as early as possible. I have been putting it directly in my `config.ru` but you could use an initializer, though you may end up missing some boot up coverage. To start collection require Coverband as early as possible.
68
+ For the best coverage you want this loaded as early as possible. We recommend requiring cover band directly in the `config.ru`. Requiring coverband within an initializer could also work, but you may end up missing some boot up coverage. To start collection require Coverband as early as possible.
71
69
 
72
70
  ```ruby
73
71
  require 'coverband'
@@ -77,7 +75,33 @@ use Coverband::BackgroundMiddleware
77
75
  run ActionController::Dispatcher.new
78
76
  ```
79
77
 
80
- # Coverage Report
78
+ ## Coverband Web UI
79
+
80
+ ![image](https://raw.github.com/danmayer/coverband/master/docs/coverband_web_ui.png)
81
+
82
+ > The web index as available on the [Coverband Demo site](https://coverband-demo.herokuapp.com/coverage?#_Coverage)
83
+
84
+ - View overall coverage information
85
+
86
+ - Drill into individual file coverage
87
+
88
+ - View individual file details
89
+
90
+ - Clear Coverage - disabled by default as it could be considered a dangerous operation in production. Enable with `config.web_enable_clear` or leave off and clear from [rake task](#clear-coverage).
91
+
92
+ - Clear coverage report
93
+
94
+ This will clear the coverage data. This wipes out all collected data.
95
+
96
+ - Clear individual file coverage
97
+
98
+ 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.
99
+
100
+ - Force coverage collection
101
+
102
+ This triggers coverage collection on the current webserver process. Useful in development but confusing in production environments where many ruby processes are usually running.
103
+
104
+ ### Mounting as a Rack App
81
105
 
82
106
  Coverband comes with a mountable rack app for viewing reports. For Rails this can be done in `config/routes.rb` with:
83
107
 
@@ -97,49 +121,29 @@ Rails.application.routes.draw do
97
121
  end
98
122
  ```
99
123
 
100
- or you can enable basic auth by setting `ENV['COVERBAND_PASSWORD']` or via your configuration `config.password = 'my_pass'`
124
+ or you can enable basic auth by setting `ENV['COVERBAND_PASSWORD']` or via your configuration `config.password = <YOUR_COMPLEX_UNGUESSABLE_PASSWORD>`
101
125
 
102
- ### Coverband Web Endpoint
126
+ ### Standalone
103
127
 
104
- The web endpoint is a barebones endpoint that you can either expose direct (after authentication) or you can just link to the actions you wish to expose. The index is intended as a example to showcase all the features.
128
+ The coverage server can also be started standalone with a rake task:
105
129
 
106
- ![image](https://raw.github.com/danmayer/coverband/master/docs/coverband_web_ui.png)
107
-
108
- > The web index as available on the Coverband Demo site
109
-
110
- - **force coverage collection:** This triggers coverage collection on the current webserver process
111
- - **clear coverage report:** This will clear the coverage data. This wipes out all collected data (**dangerous**)
112
- - View individual file details
113
- - **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.
114
-
115
- ### JRuby Support
116
-
117
- 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 older 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.
118
-
119
- - older versions of JRuby need tracing enabled to work (and this could cause bad performance)
120
- - run Jruby with the `--debug` option
121
- - add into your `.jrubyrc` the `debug.fullTrace=true` setting
122
- - For best performance the `oneshot_lines` is recommended, and in the latest releases should have very low overhead
123
- - See JRuby support in a Rails app configured to run via JRuby, in [Coverband Demo](https://github.com/coverband-service/coverband_demo)
124
- - JRuby is tested via CI against Rails 5 and 6
125
-
126
- ### Rake Tasks
127
-
128
- The rake task generates a report locally and opens a browser pointing to `coverage/index.html`.
129
-
130
- `rake coverband:coverage`
130
+ ```
131
+ bundle exec rake coverband:coverage_server
132
+ ```
131
133
 
132
- This is mostly useful in your local development environment.
134
+ The web UI should then be available here: http://localhost:9022/
133
135
 
134
- ##### Example Output
136
+ If you want to run on an alternative port:
135
137
 
136
- Since Coverband is [Simplecov](https://github.com/colszowka/simplecov) output compatible it should work with any of the `SimpleCov::Formatter`'s available. The output below is produced using the default Simplecov HTML formatter.
138
+ ```
139
+ COVERBAND_COVERAGE_PORT=8086 bundle exec rake coverband:coverage_server
140
+ ```
137
141
 
138
- Index Page
139
- ![image](https://raw.github.com/danmayer/coverband/master/docs/coverband_index.png)
142
+ This is especially useful for projects that are api only and cannot support the mounted rack app. To get production coverage, point coverband at your production redis server and ensure to checkout the production version of your project code locally.
140
143
 
141
- Details on an example Sinatra app
142
- ![image](https://raw.github.com/danmayer/coverband/master/docs/coverband_details.png)
144
+ ```
145
+ COVERBAND_REDIS_URL=redis://username:password:redis_production_server:2322 bundle exec rake coverband:coverage_server
146
+ ```
143
147
 
144
148
  # Coverband Demo
145
149
 
@@ -245,7 +249,7 @@ end
245
249
 
246
250
  ### Avoiding Cache Stampede
247
251
 
248
- 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.
252
+ 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. Note, the default wiggle is set to 30 seconds.
249
253
 
250
254
  Add a wiggle (in seconds) to the background thread to avoid all your servers reporting at the same time:
251
255
 
@@ -253,11 +257,12 @@ Add a wiggle (in seconds) to the background thread to avoid all your servers rep
253
257
 
254
258
  ### Redis Hash Store
255
259
 
256
- 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.
260
+ Coverband on very high volume sites with many server processes reporting can have a race condition which can cause hit counts to be inaccurate. 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 frequency.
257
261
 
258
- - set the new Redis store: `config.store = Coverband::Adapters::HashRedisStore.new(Redis.new(url: redis_url))`
259
- - adjust from default 30s reporting `config.background_reporting_sleep_seconds = 120`
260
- - 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.
262
+ - Use a dedicated coverband redis instance: `config.store = Coverband::Adapters::HashRedisStore.new(Redis.new(url: redis_url))`
263
+ - Adjust from default 30s reporting `config.background_reporting_sleep_seconds = 120`
264
+
265
+ See more discussion [here](https://github.com/danmayer/coverband/issues/384).
261
266
 
262
267
  ### Clear Coverage
263
268
 
@@ -265,6 +270,8 @@ Now that Coverband uses MD5 hashes there should be no reason to manually clear c
265
270
 
266
271
  `rake coverband:clear`
267
272
 
273
+ This can also be done through the web if `config.web_enable_clear` is enabled.
274
+
268
275
  ### Coverage Data Migration
269
276
 
270
277
  Between the release of 4.0 and 4.1 our data format changed. This resets all your coverage data. If you want to restore your previous coverage data, feel free to migrate.
@@ -306,7 +313,7 @@ Coverband.start
306
313
 
307
314
  ### Verbose Debug / Development Mode
308
315
 
309
- Note: To debug issues getting Coverband working. I recommend running in development mode, by turning verbose logging on `config.verbose = true` and passing in the Rails.logger `config.logger = Rails.logger` to the Coverband config. We respect the log level, and I would recommend log level info generally, but if you are investigating a prolbem Coverband logs additional data at the `debug` level. This makes it easy to follow in development mode. Be careful to not leave these on in production as they will affect performance.
316
+ Note: To debug issues getting Coverband working. I recommend running in development mode, by turning verbose logging on `config.verbose = true` and passing in the Rails.logger `config.logger = Rails.logger` to the Coverband config. We respect the log level, and I would recommend log level info generally, but if you are investigating a problem Coverband logs additional data at the `debug` level. This makes it easy to follow in development mode. Be careful to not leave these on in production as they will affect performance.
310
317
 
311
318
  ---
312
319
 
@@ -339,6 +346,17 @@ We will match Heroku & Ruby's support lifetime, supporting the last 3 major Ruby
339
346
 
340
347
  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.
341
348
 
349
+ ### JRuby Support
350
+
351
+ 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 older 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.
352
+
353
+ - older versions of JRuby need tracing enabled to work (and this could cause bad performance)
354
+ - run Jruby with the `--debug` option
355
+ - add into your `.jrubyrc` the `debug.fullTrace=true` setting
356
+ - For best performance the `oneshot_lines` is recommended, and in the latest releases should have very low overhead
357
+ - See JRuby support in a Rails app configured to run via JRuby, in [Coverband Demo](https://github.com/coverband-service/coverband_demo)
358
+ - JRuby is tested via CI against Rails 5 and 6
359
+
342
360
  # Contributing To Coverband
343
361
 
344
362
  If you are working on adding features, PRs, or bugfixes to Coverband this section should help get you going.
@@ -368,6 +386,9 @@ If you submit a change please make sure the tests and benchmarks are passing.
368
386
  - 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
369
387
  - **NOTE:** We now have file level coverage for view files, but don't support line level detail
370
388
  - 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.
389
+ - **Coverage does NOT work when used alongside Scout APM Auto Instrumentation**
390
+ - In an environment that uses Scout's `AUTO_INSTRUMENT=true` (usually production or staging) it stops reporting any coverage, it will show one or two files that have been loaded at the start but everything else will show up as having 0% coverage
391
+ - Bug tracked here: https://github.com/scoutapp/scout_apm_ruby/issues/343
371
392
 
372
393
  ### Debugging Redis Store
373
394
 
data/changes.md CHANGED
@@ -53,6 +53,27 @@ Will be the fully modern release that drops maintenance legacy support in favor
53
53
 
54
54
  # Alpha / Beta / Release Candidates
55
55
 
56
+ ### Coverband 5.0.4
57
+
58
+ - ?
59
+
60
+ # Released
61
+
62
+ ### Coverband 5.0.3
63
+
64
+ - fix for non standard root paths for view_tracker thx @markshawtoronto
65
+ - support basic auth for Rack prior to 2.0 thx @kadru
66
+
67
+ ### Coverband 5.0.2
68
+
69
+ - change default port of local server
70
+ - update on readme about issue with scout app, thanks @mrbongiolo
71
+ - fix on configuration page not loading when redis can't load
72
+
73
+ ### Coverband 5.0.1
74
+
75
+ - fix for race condition on view tracker redis configuration setting ensuring it is set after it is configured... bug only impacted apps that have multiple redis connections for the same system and have Coverband not on the default REDIS_URL
76
+
56
77
  ### Coverband 5.0.0
57
78
 
58
79
  - Full JRuby support
@@ -66,21 +87,23 @@ Will be the fully modern release that drops maintenance legacy support in favor
66
87
  - all config options can be set via coverband config, not requiring ENV var support
67
88
  - deprecation notices on soon to be removed config options
68
89
  - config exceptions on invalid configuration combinations
90
+ - additional testing around configurations
91
+ - improved defaults and reduced configuration options
69
92
  - improved resque patching pattern
70
93
  - improved default ignores
71
94
  - additional adapters
72
95
  - supports web-service adapter for http coverage collection
73
96
  - support log/file adapter
97
+ - extendable pattern to support any additional backends
74
98
  - reduce logs / errors / alerts on bad startup configurations
99
+ - fix: #301 runtime vs eagerload should always remain correct
75
100
 
76
- # Released
77
-
78
- ###Coverband 4.2.7
101
+ ### Coverband 4.2.7
79
102
 
80
103
  - Ignore patterns too aggressive #382, thanks @thijsnado
81
104
  - Stack level too deep error when running certain activejob jobs #367, thanks @kejordan and @hanslauwers
82
105
 
83
- ###Coverband 4.2.6
106
+ ### Coverband 4.2.6
84
107
 
85
108
  - Address Redis exists deprecation warning by baffers
86
109
 
@@ -263,7 +286,7 @@ Will be a stable and fast release that drops maintenance legacy support in favor
263
286
  - implemented for Redis and File store
264
287
  - improved mountable web interface
265
288
 
266
- # 2.0.3
289
+ ### 2.0.3
267
290
 
268
291
  - don''t include docs in the gemfile thanks @bquorning
269
292
  - pipeline_redis to reduce network overhead thanks @Kallin
@@ -40,7 +40,11 @@ module Coverband
40
40
  end
41
41
 
42
42
  def size_in_mib
43
- format("%<size>.2f", size: (size.to_f / 2**20))
43
+ if size
44
+ format("%<size>.2f", size: (size.to_f / 2**20))
45
+ else
46
+ "N/A"
47
+ end
44
48
  end
45
49
 
46
50
  def save_report(_report)
@@ -20,7 +20,7 @@ module Coverband
20
20
  # files matching the path pattern, in this case `log/coverage.log.*`
21
21
  #
22
22
  # run: `bundle exec rake coverband:coverage_server`
23
- # open http://localhost:1022/
23
+ # open http://localhost:9022/
24
24
  #
25
25
  # one could also build a report via code, the output is suitable to feed into SimpleCov
26
26
  #
@@ -44,7 +44,7 @@ module Coverband
44
44
  end
45
45
 
46
46
  def size
47
- @redis.get(base_key).bytesize
47
+ @redis.get(base_key) ? @redis.get(base_key).bytesize : "N/A"
48
48
  end
49
49
 
50
50
  ###
@@ -10,22 +10,20 @@ module Coverband
10
10
  # This is a port of Flatfoot, a project I open sourced years ago,
11
11
  # but am now rolling into Coverband
12
12
  # https://github.com/livingsocial/flatfoot
13
- #
14
- # TODO: test and ensure slim, haml, and other support
15
13
  ###
16
14
  class ViewTracker
17
- DEFAULT_TARGET = Dir.glob("app/views/**/*.html.erb").reject { |file| file.match(/(_mailer)/) }
18
15
  attr_accessor :target, :logged_views, :views_to_record
19
16
  attr_reader :logger, :roots, :store, :ignore_patterns
20
17
 
21
18
  def initialize(options = {})
22
19
  raise NotImplementedError, "View Tracker requires Rails 4 or greater" unless self.class.supported_version?
20
+ raise "Coverband: view tracker initialized before configuration!" if !Coverband.configured? && ENV["COVERBAND_TEST"] == "test"
23
21
 
24
22
  @project_directory = File.expand_path(Coverband.configuration.root)
25
23
  @ignore_patterns = Coverband.configuration.ignore
26
24
  @store = options.fetch(:store) { Coverband.configuration.store }
27
25
  @logger = options.fetch(:logger) { Coverband.configuration.logger }
28
- @target = options.fetch(:target) { DEFAULT_TARGET }
26
+ @target = options.fetch(:target) { Dir.glob("#{@project_directory}/app/views/**/*.html.{erb,haml,slim}").reject { |file| file.match(/(_mailer)/) }.freeze }
29
27
 
30
28
  @roots = options.fetch(:roots) { Coverband.configuration.all_root_patterns }
31
29
  @roots = @roots.split(",") if @roots.is_a?(String)
@@ -65,18 +63,29 @@ module Coverband
65
63
  normalized_views = {}
66
64
  views.each_pair do |view, time|
67
65
  roots.each do |root|
68
- view = view.gsub(/#{root}/, "")
66
+ view = view.gsub(root, "")
69
67
  end
70
68
  normalized_views[view] = time
71
69
  end
72
70
  normalized_views
73
71
  end
74
72
 
73
+ def all_views
74
+ all_views = []
75
+ target.each do |view|
76
+ roots.each do |root|
77
+ view = view.gsub(root, "")
78
+ end
79
+ all_views << view
80
+ end
81
+ all_views.uniq
82
+ end
83
+
75
84
  def unused_views
76
85
  recently_used_views = used_views.keys
77
- all_views = target.reject { |view| recently_used_views.include?(view) }
86
+ unused_views = all_views.reject { |view| recently_used_views.include?(view) }
78
87
  # since layouts don't include format we count them used if they match with ANY formats
79
- all_views.reject { |view| view.match(/\/layouts\//) && recently_used_views.any? { |used_view| view.include?(used_view) } }
88
+ unused_views.reject { |view| view.match(/\/layouts\//) && recently_used_views.any? { |used_view| view.include?(used_view) } }
80
89
  end
81
90
 
82
91
  def as_json
@@ -8,14 +8,8 @@ module Coverband
8
8
  class ConsoleReport < Base
9
9
  def self.report(store, options = {})
10
10
  scov_style_report = super(store, options)
11
-
12
- scov_style_report.each_pair do |file, usage|
13
- # TODO: In Coverband 5 deprecate none hash format
14
- if usage.is_a?(Hash)
15
- Coverband.configuration.logger.info "#{file}: #{usage["data"]}"
16
- else
17
- Coverband.configuration.logger.info "#{file}: #{usage}"
18
- end
11
+ scov_style_report[:merged].each_pair do |file, usage|
12
+ Coverband.configuration.logger.info "#{file}: #{usage["data"]}"
19
13
  end
20
14
  scov_style_report
21
15
  end
@@ -23,7 +23,8 @@ module Coverband
23
23
  def check_auth
24
24
  return true unless Coverband.configuration.password
25
25
 
26
- auth_header = request.get_header("HTTP_AUTHORIZATION")
26
+ # support rack 1.6.x and rack 2.0 (get_header)
27
+ auth_header = request.respond_to?(:get_header) ? request.get_header("HTTP_AUTHORIZATION") : request.env["HTTP_AUTHORIZATION"]
27
28
  return unless auth_header
28
29
 
29
30
  Coverband.configuration.password == Base64.decode64(auth_header.split[1]).split(":")[1]
@@ -13,7 +13,21 @@ module Coverband
13
13
  initializer "coverband.configure" do |app|
14
14
  begin
15
15
  app.middleware.use Coverband::BackgroundMiddleware
16
+ rescue Redis::CannotConnectError => error
17
+ Coverband.configuration.logger.info "Redis is not available (#{error}), Coverband not configured"
18
+ Coverband.configuration.logger.info "If this is a setup task like assets:precompile feel free to ignore"
19
+ end
20
+ end
16
21
 
22
+ config.after_initialize do
23
+ unless Coverband.tasks_to_ignore?
24
+ Coverband.configure
25
+ Coverband.eager_loading_coverage!
26
+ Coverband.report_coverage
27
+ Coverband.runtime_coverage!
28
+ end
29
+
30
+ begin
17
31
  if Coverband.configuration.track_views
18
32
  COVERBAND_VIEW_TRACKER = if Coverband.coverband_service?
19
33
  Coverband::Collectors::ViewTrackerService.new
@@ -33,15 +47,6 @@ module Coverband
33
47
  end
34
48
  end
35
49
 
36
- config.after_initialize do
37
- unless Coverband.tasks_to_ignore?
38
- Coverband.configure
39
- Coverband.eager_loading_coverage!
40
- Coverband.report_coverage
41
- Coverband.runtime_coverage!
42
- end
43
- end
44
-
45
50
  config.before_configuration do
46
51
  unless ENV["COVERBAND_DISABLE_AUTO_START"]
47
52
  begin
@@ -13,7 +13,7 @@ namespace :coverband do
13
13
  task :coverage_server do
14
14
  Rake.application["environment"].invoke if Rake::Task.task_defined?("environment")
15
15
  Coverband.configuration.store.merge_mode = true if Coverband.configuration.store.is_a?(Coverband::Adapters::FileStore)
16
- Rack::Server.start app: Coverband::Reporters::Web.new, Port: ENV.fetch("COVERBAND_COVERAGE_PORT", 1022).to_i
16
+ Rack::Server.start app: Coverband::Reporters::Web.new, Port: ENV.fetch("COVERBAND_COVERAGE_PORT", 9022).to_i
17
17
  end
18
18
 
19
19
  ###
@@ -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 = "5.0.0.rc.8"
8
+ VERSION = "5.0.3"
9
9
  end
@@ -22,13 +22,13 @@ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.2.0")
22
22
  test "renders index content" do
23
23
  get "/"
24
24
  assert last_response.ok?
25
- assert_match "Coverband Admin", last_response.body
25
+ assert_match "Coverband Home", last_response.body
26
26
  end
27
27
 
28
28
  test "renders index content for empty path" do
29
29
  get ""
30
30
  assert last_response.ok?
31
- assert_match "Coverband Admin", last_response.body
31
+ assert_match "Coverband Home", last_response.body
32
32
  end
33
33
 
34
34
  test "renders 404" do
@@ -43,4 +43,38 @@ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.2.0")
43
43
  end
44
44
  end
45
45
  end
46
+
47
+ module Coverband
48
+ class AuthWebTest < Minitest::Test
49
+ include Rack::Test::Methods
50
+
51
+ def setup
52
+ super
53
+ @store = Coverband.configuration.store
54
+ Coverband.configure do |config|
55
+ config.password = "test_pass"
56
+ end
57
+ end
58
+
59
+ def app
60
+ Coverband::Reporters::Web.new
61
+ end
62
+
63
+ def teardown
64
+ super
65
+ end
66
+
67
+ test "renders index with basic auth" do
68
+ basic_authorize "anything", "test_pass"
69
+ get "/"
70
+ assert last_response.ok?
71
+ assert_match "Coverband Home", last_response.body
72
+ end
73
+
74
+ test "renders 401 auth error when not provided" do
75
+ get "/"
76
+ assert_equal 401, last_response.status
77
+ end
78
+ end
79
+ end
46
80
  end
@@ -35,7 +35,7 @@ class RailsFullStackTest < Minitest::Test
35
35
  end
36
36
 
37
37
  # Test eager load data stored separately
38
- dummy_controller = "./test/rails#{Rails::VERSION::MAJOR}_dummy/app/controllers/dummy_controller.rb"
38
+ dummy_controller = "./app/controllers/dummy_controller.rb"
39
39
  store.type = :eager_loading
40
40
  eager_expected = [1, 1, 0, nil, nil]
41
41
  results = store.coverage[dummy_controller]["data"]
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("../rails_test_helper", File.dirname(__FILE__))
4
+
5
+ class RailsFullStackTest < Minitest::Test
6
+ include Capybara::DSL
7
+ include Capybara::Minitest::Assertions
8
+
9
+ def setup
10
+ super
11
+ rails_setup
12
+ Coverband.report_coverage
13
+ end
14
+
15
+ def teardown
16
+ super
17
+ Capybara.reset_sessions!
18
+ Capybara.use_default_driver
19
+ end
20
+
21
+ test "verify erb haml slim support" do
22
+ visit "/dummy_view/show"
23
+ assert_content("I am no dummy view tracker text")
24
+ Coverband.report_coverage
25
+ Coverband.configuration.view_tracker&.report_views_tracked
26
+ visit "/coverage/view_tracker"
27
+ assert_content("Used Views: (1)")
28
+ assert_content("Unused Views: (2)")
29
+ assert_selector("li.used-views", text: "dummy_view/show.html.erb")
30
+ assert_selector("li.unused-views", text: "dummy_view/show_haml.html.haml")
31
+ assert_selector("li.unused-views", text: "dummy_view/show_slim.html.slim")
32
+
33
+ visit "/dummy_view/show_haml"
34
+ assert_content("I am haml text")
35
+ Coverband.report_coverage
36
+ Coverband.configuration.view_tracker&.report_views_tracked
37
+ visit "/coverage/view_tracker"
38
+ assert_content("Used Views: (2)")
39
+ assert_content("Unused Views: (1)")
40
+ assert_selector("li.used-views", text: "dummy_view/show_haml.html.haml")
41
+
42
+ visit "/dummy_view/show_slim"
43
+ assert_content("I am slim text")
44
+ Coverband.report_coverage
45
+ Coverband.configuration.view_tracker&.report_views_tracked
46
+ visit "/coverage/view_tracker"
47
+ assert_content("Used Views: (3)")
48
+ assert_content("Unused Views: (0)")
49
+ assert_selector("li.used-views", text: "dummy_view/show_slim.html.slim")
50
+ end
51
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("../rails_test_helper", File.dirname(__FILE__))
4
+
5
+ class RailsWithoutConfigStackTest < Minitest::Test
6
+ def setup
7
+ super
8
+ setup_server
9
+ end
10
+
11
+ def teardown
12
+ super
13
+ shutdown_server
14
+ end
15
+
16
+ test "check view tracker" do
17
+ output = `sleep 7 && curl http://localhost:9999/dummy_view/show`
18
+ assert output.match(/rendered view/)
19
+ assert output.match(/I am no dummy view tracker text/)
20
+ output = `sleep 1 && curl http://localhost:9999/coverage/view_tracker`
21
+ assert output.match(/Used Views: \(1\)/)
22
+ assert output.match(/dummy_view\/show/)
23
+ end
24
+
25
+ private
26
+
27
+ # NOTE: We aren't leveraging Capybara because it loads all of our other test helpers and such,
28
+ # which in turn Configures coverband making it impossible to test the configuration error
29
+ def setup_server
30
+ ENV["RAILS_ENV"] = "test"
31
+ require "rails"
32
+ fork do
33
+ exec "cd test/rails#{Rails::VERSION::MAJOR}_dummy && COVERBAND_TEST=test bundle exec rackup config.ru -p 9999 --pid /tmp/testrack.pid"
34
+ end
35
+ end
36
+
37
+ def shutdown_server
38
+ if File.exist?("/tmp/testrack.pid")
39
+ pid = `cat /tmp/testrack.pid`&.strip&.to_i
40
+ Process.kill("HUP", pid)
41
+ sleep 1
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,16 @@
1
+ class DummyViewController < ActionController::Base
2
+ def show
3
+ @text = "I am no dummy view tracker text"
4
+ render layout: false
5
+ end
6
+
7
+ def show_haml
8
+ @text = "I am haml text"
9
+ render layout: false
10
+ end
11
+
12
+ def show_slim
13
+ @text = "I am slim text"
14
+ render layout: false
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ rendered view
2
+
3
+ <div>
4
+ <%= @text %>
5
+ </div>
@@ -0,0 +1,4 @@
1
+ rendered haml view
2
+
3
+ #foo
4
+ = @text
@@ -0,0 +1,4 @@
1
+ rendered slim view
2
+
3
+ #content
4
+ = @text
@@ -10,5 +10,6 @@ Bundler.require(*Rails.groups)
10
10
  module Rails4Dummy
11
11
  class Application < Rails::Application
12
12
  config.eager_load = true
13
+ config.consider_all_requests_local = true
13
14
  end
14
15
  end
@@ -1,4 +1,7 @@
1
1
  Rails.application.routes.draw do
2
2
  get "dummy/show"
3
+ get "dummy_view/show", to: "dummy_view#show"
4
+ get "dummy_view/show_haml", to: "dummy_view#show_haml"
5
+ get "dummy_view/show_slim", to: "dummy_view#show_slim"
3
6
  mount Coverband::Reporters::Web.new, at: "/coverage"
4
7
  end
@@ -0,0 +1,16 @@
1
+ class DummyViewController < ActionController::Base
2
+ def show
3
+ @text = "I am no dummy view tracker text"
4
+ render layout: false
5
+ end
6
+
7
+ def show_haml
8
+ @text = "I am haml text"
9
+ render layout: false
10
+ end
11
+
12
+ def show_slim
13
+ @text = "I am slim text"
14
+ render layout: false
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ rendered view
2
+
3
+ <div>
4
+ <%= @text %>
5
+ </div>
@@ -0,0 +1,4 @@
1
+ rendered haml view
2
+
3
+ #foo
4
+ = @text
@@ -0,0 +1,4 @@
1
+ rendered slim view
2
+
3
+ #content
4
+ = @text
@@ -2,11 +2,13 @@
2
2
 
3
3
  require "rails"
4
4
  require "action_controller/railtie"
5
+ require "action_view/railtie"
5
6
  require "coverband"
6
7
  Bundler.require(*Rails.groups)
7
8
 
8
9
  module Rails5Dummy
9
10
  class Application < Rails::Application
10
11
  config.eager_load = true
12
+ config.consider_all_requests_local = true
11
13
  end
12
14
  end
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Coverband.configure do |config|
4
- config.root = Dir.pwd
4
+ # NOTE: we reuse this config in each of the fake rails projects
5
+ # the below ensures the root is set to the correct fake project
6
+ config.root = ::File.expand_path("../../../", __FILE__).to_s + "/rails#{Rails::VERSION::MAJOR}_dummy"
5
7
  config.store = Coverband::Adapters::RedisStore.new(Redis.new(db: 2, url: ENV["REDIS_URL"]), redis_namespace: "coverband_test") if defined? Redis
6
8
  config.ignore = %w[.erb$ .slim$]
7
9
  config.root_paths = []
@@ -1,4 +1,7 @@
1
1
  Rails.application.routes.draw do
2
2
  get "dummy/show"
3
+ get "dummy_view/show", to: "dummy_view#show"
4
+ get "dummy_view/show_haml", to: "dummy_view#show_haml"
5
+ get "dummy_view/show_slim", to: "dummy_view#show_slim"
3
6
  mount Coverband::Reporters::Web.new, at: "/coverage"
4
7
  end
@@ -0,0 +1,16 @@
1
+ class DummyViewController < ActionController::Base
2
+ def show
3
+ @text = "I am no dummy view tracker text"
4
+ render layout: false
5
+ end
6
+
7
+ def show_haml
8
+ @text = "I am haml text"
9
+ render layout: false
10
+ end
11
+
12
+ def show_slim
13
+ @text = "I am slim text"
14
+ render layout: false
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ rendered view
2
+
3
+ <div>
4
+ <%= @text %>
5
+ </div>
@@ -0,0 +1,4 @@
1
+ rendered haml view
2
+
3
+ #foo
4
+ = @text
@@ -0,0 +1,4 @@
1
+ rendered slim view
2
+
3
+ #content
4
+ = @text
@@ -10,5 +10,6 @@ Bundler.require(*Rails.groups)
10
10
  module Rails6Dummy
11
11
  class Application < Rails::Application
12
12
  config.eager_load = true
13
+ config.consider_all_requests_local = true
13
14
  end
14
15
  end
@@ -1,4 +1,7 @@
1
1
  Rails.application.routes.draw do
2
2
  get "dummy/show"
3
+ get "dummy_view/show", to: "dummy_view#show"
4
+ get "dummy_view/show_haml", to: "dummy_view#show_haml"
5
+ get "dummy_view/show_slim", to: "dummy_view#show_slim"
3
6
  mount Coverband::Reporters::Web.new, at: "/coverage"
4
7
  end
@@ -1,7 +1,7 @@
1
1
 
2
2
  <div id="header">
3
- <a href='<%= base_path %>'>Coverband Admin</a> &nbsp;
4
- <a href='<%= base_path %>settings'>Info</a> &nbsp;
3
+ <a href='<%= base_path %>'>Coverband Home</a> &nbsp;
4
+ <a href='<%= base_path %>settings'>Configuration</a> &nbsp;
5
5
  <% if Coverband.configuration.web_enable_clear %>
6
6
  <%= button("#{base_path}clear", 'clear coverage report', delete: true) %>
7
7
  <% end %>
@@ -11,8 +11,8 @@
11
11
  <body>
12
12
  <div id="wrapper" style="">
13
13
  <div id="header">
14
- <a href='<%= base_path %>'>Coverband Admin</a> &nbsp;
15
- <a href='<%= base_path %>settings'>Info</a> &nbsp;
14
+ <a href='<%= base_path %>'>Coverband Home</a> &nbsp;
15
+ <a href='<%= base_path %>settings'>Configuration</a> &nbsp;
16
16
  </div>
17
17
  <div id="content">
18
18
  <dl>
@@ -26,7 +26,7 @@
26
26
  <p>These views have not been rendered since recording started at <%= tracker.tracking_since %></p>
27
27
  <ul>
28
28
  <% tracker.unused_views.each do |view_file| %>
29
- <li><%= view_file %></li>
29
+ <li class="unused-views"><%= view_file %></li>
30
30
  <% end %>
31
31
  </ul>
32
32
 
@@ -34,7 +34,7 @@
34
34
  <p>These views have been rendered at least once</p>
35
35
  <ul>
36
36
  <% tracker.used_views.each_pair do |view_file, time_at| %>
37
- <li>
37
+ <li class="used-views">
38
38
  <%= view_file %>
39
39
  <span class="last_seen_at">last activity recorded <%= Time.at(time_at.to_i)%></span>
40
40
  <% if Coverband.configuration.web_enable_clear %>
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: 5.0.0.rc.8
4
+ version: 5.0.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: 2020-08-29 00:00:00.000000000 Z
12
+ date: 2020-10-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: benchmark-ips
@@ -402,11 +402,17 @@ files:
402
402
  - test/fixtures/skipped_and_executed.rb
403
403
  - test/fixtures/utf-8.rb
404
404
  - test/forked/rails_full_stack_test.rb
405
+ - test/forked/rails_full_stack_views_test.rb
405
406
  - test/forked/rails_rake_full_stack_test.rb
407
+ - test/forked/rails_view_tracker_stack_test.rb
406
408
  - test/integration/full_stack_test.rb
407
409
  - test/jruby_check.rb
408
410
  - test/rails4_dummy/Rakefile
409
411
  - test/rails4_dummy/app/controllers/dummy_controller.rb
412
+ - test/rails4_dummy/app/controllers/dummy_view_controller.rb
413
+ - test/rails4_dummy/app/views/dummy_view/show.html.erb
414
+ - test/rails4_dummy/app/views/dummy_view/show_haml.html.haml
415
+ - test/rails4_dummy/app/views/dummy_view/show_slim.html.slim
410
416
  - test/rails4_dummy/config.ru
411
417
  - test/rails4_dummy/config/application.rb
412
418
  - test/rails4_dummy/config/boot.rb
@@ -418,6 +424,10 @@ files:
418
424
  - test/rails4_dummy/tmp/.keep
419
425
  - test/rails5_dummy/Rakefile
420
426
  - test/rails5_dummy/app/controllers/dummy_controller.rb
427
+ - test/rails5_dummy/app/controllers/dummy_view_controller.rb
428
+ - test/rails5_dummy/app/views/dummy_view/show.html.erb
429
+ - test/rails5_dummy/app/views/dummy_view/show_haml.html.haml
430
+ - test/rails5_dummy/app/views/dummy_view/show_slim.html.slim
421
431
  - test/rails5_dummy/config.ru
422
432
  - test/rails5_dummy/config/application.rb
423
433
  - test/rails5_dummy/config/coverband.rb
@@ -427,6 +437,10 @@ files:
427
437
  - test/rails5_dummy/tmp/.keep
428
438
  - test/rails6_dummy/Rakefile
429
439
  - test/rails6_dummy/app/controllers/dummy_controller.rb
440
+ - test/rails6_dummy/app/controllers/dummy_view_controller.rb
441
+ - test/rails6_dummy/app/views/dummy_view/show.html.erb
442
+ - test/rails6_dummy/app/views/dummy_view/show_haml.html.haml
443
+ - test/rails6_dummy/app/views/dummy_view/show_slim.html.slim
430
444
  - test/rails6_dummy/config.ru
431
445
  - test/rails6_dummy/config/application.rb
432
446
  - test/rails6_dummy/config/boot.rb
@@ -462,11 +476,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
462
476
  version: '0'
463
477
  required_rubygems_version: !ruby/object:Gem::Requirement
464
478
  requirements:
465
- - - ">"
479
+ - - ">="
466
480
  - !ruby/object:Gem::Version
467
- version: 1.3.1
481
+ version: '0'
468
482
  requirements: []
469
- rubygems_version: 3.1.2
483
+ rubygems_version: 3.0.3
470
484
  signing_key:
471
485
  specification_version: 4
472
486
  summary: Rack middleware to measure production code usage (LOC runtime usage)
@@ -520,11 +534,17 @@ test_files:
520
534
  - test/fixtures/skipped_and_executed.rb
521
535
  - test/fixtures/utf-8.rb
522
536
  - test/forked/rails_full_stack_test.rb
537
+ - test/forked/rails_full_stack_views_test.rb
523
538
  - test/forked/rails_rake_full_stack_test.rb
539
+ - test/forked/rails_view_tracker_stack_test.rb
524
540
  - test/integration/full_stack_test.rb
525
541
  - test/jruby_check.rb
526
542
  - test/rails4_dummy/Rakefile
527
543
  - test/rails4_dummy/app/controllers/dummy_controller.rb
544
+ - test/rails4_dummy/app/controllers/dummy_view_controller.rb
545
+ - test/rails4_dummy/app/views/dummy_view/show.html.erb
546
+ - test/rails4_dummy/app/views/dummy_view/show_haml.html.haml
547
+ - test/rails4_dummy/app/views/dummy_view/show_slim.html.slim
528
548
  - test/rails4_dummy/config.ru
529
549
  - test/rails4_dummy/config/application.rb
530
550
  - test/rails4_dummy/config/boot.rb
@@ -536,6 +556,10 @@ test_files:
536
556
  - test/rails4_dummy/tmp/.keep
537
557
  - test/rails5_dummy/Rakefile
538
558
  - test/rails5_dummy/app/controllers/dummy_controller.rb
559
+ - test/rails5_dummy/app/controllers/dummy_view_controller.rb
560
+ - test/rails5_dummy/app/views/dummy_view/show.html.erb
561
+ - test/rails5_dummy/app/views/dummy_view/show_haml.html.haml
562
+ - test/rails5_dummy/app/views/dummy_view/show_slim.html.slim
539
563
  - test/rails5_dummy/config.ru
540
564
  - test/rails5_dummy/config/application.rb
541
565
  - test/rails5_dummy/config/coverband.rb
@@ -545,6 +569,10 @@ test_files:
545
569
  - test/rails5_dummy/tmp/.keep
546
570
  - test/rails6_dummy/Rakefile
547
571
  - test/rails6_dummy/app/controllers/dummy_controller.rb
572
+ - test/rails6_dummy/app/controllers/dummy_view_controller.rb
573
+ - test/rails6_dummy/app/views/dummy_view/show.html.erb
574
+ - test/rails6_dummy/app/views/dummy_view/show_haml.html.haml
575
+ - test/rails6_dummy/app/views/dummy_view/show_slim.html.slim
548
576
  - test/rails6_dummy/config.ru
549
577
  - test/rails6_dummy/config/application.rb
550
578
  - test/rails6_dummy/config/boot.rb