coverband 5.1.0.rcmailer.2 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 356bd2d155bece44c71e186cc25072ede61e25e3e8236c311cd2c160c93fd6b0
4
- data.tar.gz: 609ac60c8757360b59ad63051e14357635bd2395b0ba9ba09add3140505415c7
3
+ metadata.gz: a5cd2e1c2877aa5eefb57baf7b1c51c5e708ef8d5869f01b51a37c3b6e37c931
4
+ data.tar.gz: 4f0a6bc520d84917f989b3c13ec1c5bba2d6ab04db26fb87331cfed536b142f9
5
5
  SHA512:
6
- metadata.gz: 929208aaadba979be02db9eb55153f91515c14bed94c94de7115255ea89413b87547518a6bbf11f250df506f8604dd1f64c9582b6536a4595943fd2692736776
7
- data.tar.gz: 37ca9ec442e80223284a4b5e9ec6234d1fbff014270f7b9e905db71a9c7513e700a07417f47a123ecbc4b561b0adc075f2e68dd328763599c0f8b2676c555d08
6
+ metadata.gz: cb077ceeb315e92dd7f51e355057d855b00701e05d8b4ef7836ff8cae624c2db71ba0ce67ac6e3be5dd5fb87182c4a68d8e8d1ab3c6e4554f2d792db9f214c65
7
+ data.tar.gz: 0ab9e096d137f1babd34b3cc32899095b6b3f0f87bb0a9aee7d987bf8b116b1815a3fc630ad0f1f73d4550563c2cf08a4bb9e8e20e8c9553dd9246d0dee6414a
data/Gemfile CHANGED
@@ -7,11 +7,8 @@ gemspec
7
7
 
8
8
  # add when debugging
9
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]
10
+ unless ENV["CI"]
11
+ gem "pry-byebug"
15
12
  end
16
13
 
17
14
  gem "rails", "~>5"
data/README.md CHANGED
@@ -12,6 +12,7 @@
12
12
  <a href="#installation">Installation</a> •
13
13
  <a href="#coverband-web-ui">Coverband Web UI</a> •
14
14
  <a href="#advanced-config">Advanced Config</a> •
15
+ <a href="#newer-features">Newer Features</a> •
15
16
  <a href="#license">License</a> •
16
17
  <a href="/changes.md">Change Log / Roadmap</a> •
17
18
  <a href="/CODE_OF_CONDUCT.md">Code of Conduct</a>
@@ -33,6 +34,7 @@ The primary goal of Coverband is giving deep insight into your production runtim
33
34
  - Development mode, offers deep insight of code usage details (number of LOC execution during single request, etc) during development.
34
35
  - Mountable web interface to easily share reports
35
36
 
37
+
36
38
  # Installation
37
39
 
38
40
  ## Redis
@@ -337,6 +339,30 @@ gem 'coverband', require: ['alternative_coverband_patch']
337
339
 
338
340
  This conflict happens when a ruby method is patched twice, once using module prepend, and once using method aliasing. See this ruby issue for details. The fix is to apply all patches the same way. Coverband by default will apply its patch using prepend, but you can change that to method aliasing by adding require: ['alternative_coverband_patch'] to the gem line as shown above.
339
341
 
342
+ # Newer Features
343
+
344
+ ### Dead Method Scanning (ruby 2.6+)
345
+
346
+ Rake task that outputs dead methods based on current coverage data:
347
+
348
+ ```
349
+ bundle exec rake coverband:dead_methods
350
+ ```
351
+
352
+ Outputs:
353
+
354
+ ```
355
+ ---------------------------------------------------------------------------------------------------
356
+ | file | class | method | line_number |
357
+ | ./config/routes.rb | AdminConstraint | matches? | 20 |
358
+ | ./app/controllers/home_controller.rb | HomeController | trigger_jobs | 8 |
359
+ | ./app/controllers/home_controller.rb | HomeController | data_tracer | 14 |
360
+ | ./app/controllers/posts_controller.rb | PostsController | edit | 22 |
361
+ | ./app/controllers/posts_controller.rb | PostsController | destroy_bad_dangerously | 73 |
362
+ ---------------------------------------------------------------------------------------------------
363
+ ```
364
+
365
+
340
366
  # Prerequisites
341
367
 
342
368
  - Coverband 3.0.X+ requires Ruby 2.3+
data/changes.md CHANGED
@@ -55,19 +55,19 @@ Will be the fully modern release that drops maintenance legacy support in favor
55
55
 
56
56
  ### Coverband 5.0.4
57
57
 
58
- - ?
58
+ - add support for tracking email view templates/partials
59
59
 
60
60
  # Released
61
61
 
62
62
  ### Coverband 5.0.3
63
63
 
64
- - fix for non standard root paths for view_tracker thx @markshawtoronto
64
+ - fix for non standard root paths for view_tracker thx @markshawtoronto
65
65
  - support basic auth for Rack prior to 2.0 thx @kadru
66
66
 
67
67
  ### Coverband 5.0.2
68
68
 
69
69
  - change default port of local server
70
- - update on readme about issue with scout app, thanks @mrbongiolo
70
+ - update on readme about issue with scout app, thanks @mrbongiolo
71
71
  - fix on configuration page not loading when redis can't load
72
72
 
73
73
  ### Coverband 5.0.1
@@ -82,13 +82,7 @@ Will be the fully modern release that drops maintenance legacy support in favor
82
82
  - drops static report support
83
83
  - drops gem support
84
84
  - only loaded web reporter files when required
85
- - configuration improvements
86
- - improved load order allowing more time for ENV vars (better dotenv, figaro, rails secrets support)
87
- - all config options can be set via coverband config, not requiring ENV var support
88
- - deprecation notices on soon to be removed config options
89
- - config exceptions on invalid configuration combinations
90
- - additional testing around configurations
91
- - improved defaults and reduced configuration options
85
+ - configuration improvements - improved load order allowing more time for ENV vars (better dotenv, figaro, rails secrets support) - all config options can be set via coverband config, not requiring ENV var support - deprecation notices on soon to be removed config options - config exceptions on invalid configuration combinations - additional testing around configurations - improved defaults and reduced configuration options
92
86
  - improved resque patching pattern
93
87
  - improved default ignores
94
88
  - additional adapters
@@ -8,16 +8,18 @@ Gem::Specification.new do |spec|
8
8
  spec.name = "coverband"
9
9
  spec.version = Coverband::VERSION
10
10
  spec.authors = ["Dan Mayer", "Karl Baum"]
11
- spec.email = ["dan@mayerdan.com"]
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)"
11
+ spec.email = %w[dan@mayerdan.com]
12
+ spec.description =
13
+ "Rack middleware to measure production code usage (LOC runtime usage)"
14
+ spec.summary =
15
+ "Rack middleware to measure production code usage (LOC runtime usage)"
14
16
  spec.homepage = "https://github.com/danmayer/coverband"
15
17
  spec.license = "MIT"
16
18
 
17
19
  spec.files = `git ls-files`.split("\n").reject { |f| f.start_with?("docs") }
18
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
- spec.require_paths = ["lib"]
22
+ spec.require_paths = %w[lib]
21
23
 
22
24
  spec.add_development_dependency "benchmark-ips"
23
25
  spec.add_development_dependency "capybara"
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: ntrue
2
+
3
+ require "coverband/utils/method_definition_scanner"
4
+
5
+ module Coverband
6
+ module Utils
7
+ module ArrayToTableInConsole
8
+ refine Array do
9
+ def to_table
10
+ column_sizes =
11
+ reduce([]) { |lengths, row|
12
+ row.each_with_index.map do |iterand, index|
13
+ [lengths[index] || 0, iterand.to_s.length].max
14
+ end
15
+ }
16
+ puts head =
17
+ "-" * (column_sizes.inject(&:+) + (3 * column_sizes.count) + 1)
18
+ each do |row|
19
+ row = row.fill(nil, row.size..(column_sizes.size - 1))
20
+ row =
21
+ row.each_with_index.map { |v, i|
22
+ v.to_s + " " * (column_sizes[i] - v.to_s.length)
23
+ }
24
+ puts "| " + row.join(" | ") + " |"
25
+ end
26
+ puts head
27
+ end
28
+ end
29
+ end
30
+
31
+ class DeadMethods
32
+ using ArrayToTableInConsole
33
+ def self.scan(file_path:, coverage:)
34
+ MethodDefinitionScanner.scan(file_path).reject do |method_definition|
35
+ method_definition.body.coverage?(coverage)
36
+ end
37
+ end
38
+
39
+ def self.scan_all
40
+ coverage = Coverband.configuration.store.coverage
41
+ coverage.flat_map do |file_path, coverage|
42
+ scan(file_path: file_path, coverage: coverage["data"])
43
+ end
44
+ end
45
+
46
+ def self.output_all
47
+ rows =
48
+ scan_all.each_with_object(
49
+ [%w[file class method line_number]]
50
+ ) { |dead_method, rows|
51
+ rows <<
52
+ [
53
+ dead_method.file_path,
54
+ dead_method.class_name,
55
+ dead_method.name,
56
+ dead_method.first_line_number
57
+ ]
58
+ }
59
+ rows.to_table
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ if defined?(RubyVM::AbstractSyntaxTree)
4
+ module Coverband
5
+ module Utils
6
+ class MethodDefinitionScanner
7
+ attr_reader :path
8
+
9
+ def initialize(path)
10
+ @path = path
11
+ end
12
+
13
+ def scan
14
+ scan_node(RubyVM::AbstractSyntaxTree.parse_file(path), nil)
15
+ end
16
+
17
+ def self.scan(path)
18
+ new(path).scan
19
+ end
20
+
21
+ class MethodBody
22
+ def initialize(method_definition)
23
+ @method_definition = method_definition
24
+ end
25
+
26
+ def coverage?(file_coverage)
27
+ body_coverage =
28
+ file_coverage[(first_line_number - 1)..(last_line_number - 1)]
29
+ body_coverage.map(&:to_i).any?(&:positive?)
30
+ end
31
+
32
+ private
33
+
34
+ def first_line_number
35
+ @method_definition.first_line_number + 1
36
+ end
37
+
38
+ def last_line_number
39
+ @method_definition.last_line_number - 1
40
+ end
41
+ end
42
+
43
+ class MethodDefinition
44
+ attr_reader :last_line_number,
45
+ :first_line_number,
46
+ :name,
47
+ :class_name,
48
+ :file_path
49
+
50
+ def initialize(
51
+ first_line_number:,
52
+ last_line_number:,
53
+ name:,
54
+ class_name:,
55
+ file_path:
56
+ )
57
+ @first_line_number = first_line_number
58
+ @last_line_number = last_line_number
59
+ @name = name
60
+ @class_name = class_name
61
+ @file_path = file_path
62
+ end
63
+
64
+ def body
65
+ MethodBody.new(self)
66
+ end
67
+ end
68
+
69
+ private
70
+
71
+ def scan_node(node, class_name)
72
+ definitions = []
73
+ return definitions unless node.is_a?(RubyVM::AbstractSyntaxTree::Node)
74
+ current_class = node.type == :CLASS ? node.children.first.children.last : class_name
75
+ if node.type == :DEFN
76
+ definitions <<
77
+ MethodDefinition.new(
78
+ first_line_number: node.first_lineno,
79
+ last_line_number: node.last_lineno,
80
+ name: node.children.first,
81
+ class_name: current_class,
82
+ file_path: path
83
+ )
84
+ end
85
+ definitions + scan_children(node, current_class)
86
+ end
87
+
88
+ def scan_children(node, current_class)
89
+ node.children.flatten.compact.map { |child|
90
+ scan_node(child, current_class)
91
+ }.flatten
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -9,11 +9,25 @@ namespace :coverband do
9
9
  Coverband::Reporters::ConsoleReport.report(Coverband.configuration.store)
10
10
  end
11
11
 
12
+ if defined?(RubyVM::AbstractSyntaxTree)
13
+ require "coverband/utils/dead_methods"
14
+
15
+ desc "Output all dead methods"
16
+ task :dead_methods do
17
+ Coverband::Utils::DeadMethods.output_all
18
+ end
19
+ end
20
+
12
21
  desc "report runtime Coverband code coverage"
13
22
  task :coverage_server do
14
- Rake.application["environment"].invoke if Rake::Task.task_defined?("environment")
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", 9022).to_i
23
+ if Rake::Task.task_defined?("environment")
24
+ Rake.application["environment"].invoke
25
+ end
26
+ if Coverband.configuration.store.is_a?(Coverband::Adapters::FileStore)
27
+ Coverband.configuration.store.merge_mode = true
28
+ end
29
+ Rack::Server.start app: Coverband::Reporters::Web.new,
30
+ Port: ENV.fetch("COVERBAND_COVERAGE_PORT", 9022).to_i
17
31
  end
18
32
 
19
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 = "5.1.0.rcmailer.2"
8
+ VERSION = '5.1.0'
9
9
  end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("../../test_helper", File.dirname(__FILE__))
4
+
5
+ if defined?(RubyVM::AbstractSyntaxTree)
6
+ require "coverband/utils/dead_methods"
7
+ module Coverband
8
+ module Utils
9
+ class DeadMethodsTest < Minitest::Test
10
+ attr_accessor :coverband
11
+
12
+ def setup
13
+ super
14
+ @coverband = Coverband::Collectors::Coverage.instance
15
+ end
16
+
17
+ def test_dog_dead_methods
18
+ file_path = require_unique_file
19
+ coverage = [nil, nil, 1, 1, 0, nil, nil]
20
+ dead_methods =
21
+ DeadMethods.scan(file_path: file_path, coverage: coverage)
22
+ assert_equal(1, dead_methods.length)
23
+ dead_method = dead_methods.first
24
+ assert_equal(4, dead_method.first_line_number)
25
+ assert_equal(6, dead_method.last_line_number)
26
+ assert_equal(file_path, dead_method.file_path)
27
+ end
28
+
29
+ def test_all_dead_methods
30
+ require_unique_file
31
+ @coverband.report_coverage
32
+ dead_methods = DeadMethods.scan_all
33
+ dead_method = dead_methods.find { |method| method.class_name == :Dog }
34
+ assert(dead_method)
35
+ assert_equal(4, dead_method.first_line_number)
36
+ assert_equal(6, dead_method.last_line_number)
37
+ end
38
+
39
+ def test_output_all
40
+ require_unique_file
41
+ @coverband.report_coverage
42
+ DeadMethods.output_all
43
+ end
44
+
45
+ def test_dog_methods_not_dead
46
+ file = require_unique_file
47
+ coverage = [nil, nil, 1, 1, 1, nil, nil]
48
+ assert_empty(DeadMethods.scan(file_path: file, coverage: coverage))
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("../../test_helper", File.dirname(__FILE__))
4
+
5
+ if defined?(RubyVM::AbstractSyntaxTree)
6
+ require "coverband/utils/method_definition_scanner"
7
+ module Coverband
8
+ module Utils
9
+ class MethodBodyTest < Minitest::Test
10
+ def test_no_method_body_coverage
11
+ method_body =
12
+ MethodDefinitionScanner::MethodBody.new(
13
+ MethodDefinitionScanner::MethodDefinition.new(
14
+ first_line_number: 4,
15
+ last_line_number: 6,
16
+ name: :bark,
17
+ class_name: :Dog,
18
+ file_path: "./test/dog.rb"
19
+ )
20
+ )
21
+ refute(method_body.coverage?([nil, nil, 1, 1, 0, nil, 1]))
22
+ end
23
+
24
+ def test_method_body_coverage
25
+ method_body =
26
+ MethodDefinitionScanner::MethodBody.new(
27
+ MethodDefinitionScanner::MethodDefinition.new(
28
+ first_line_number: 4,
29
+ last_line_number: 6,
30
+ name: :bark,
31
+ class_name: :Dog,
32
+ file_path: "./test/dog.rb"
33
+ )
34
+ )
35
+ assert(method_body.coverage?([nil, nil, 1, 1, 1, nil, 1]))
36
+ end
37
+ end
38
+
39
+ class MethodDefinitionScannerTest < Minitest::Test
40
+ def test_scan
41
+ method_definitions = MethodDefinitionScanner.scan("./test/dog.rb")
42
+ assert(method_definitions)
43
+ assert_equal(1, method_definitions.length)
44
+ method_definition = method_definitions.first # assert_equal(4, method.first_line)
45
+ assert_equal(4, method_definition.first_line_number)
46
+ assert_equal(6, method_definition.last_line_number)
47
+ assert_equal(:bark, method_definition.name)
48
+ assert_equal(:Dog, method_definition.class_name)
49
+ end
50
+
51
+ def test_scan_large_class
52
+ method_definitions =
53
+ MethodDefinitionScanner.scan("./test/fixtures/casting_invitor.rb")
54
+ method_first_line_numbers =
55
+ method_definitions.map(&:first_line_number)
56
+ assert_equal(
57
+ [6, 13, 17, 35, 40, 44, 48, 52],
58
+ method_first_line_numbers
59
+ )
60
+ method_last_line_numbers = method_definitions.map(&:last_line_number)
61
+ assert_equal(
62
+ [11, 15, 31, 38, 42, 46, 50, 59],
63
+ method_last_line_numbers
64
+ )
65
+ method_names = method_definitions.map(&:name)
66
+ assert_equal(
67
+ %i[
68
+ initialize
69
+ valid?
70
+ deliver
71
+ invalid_invitees
72
+ invitee_list
73
+ valid_message?
74
+ valid_invitees?
75
+ create_invitation
76
+ ],
77
+ method_names
78
+ )
79
+ class_names = method_definitions.map(&:class_name)
80
+ assert_equal(8.times.map { :CastingInviter }, class_names)
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,60 @@
1
+ class CastingInviter
2
+ EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/
3
+
4
+ attr_reader :message, :invitees, :casting
5
+
6
+ def initialize(attributes = {})
7
+ @message = attributes[:message] || ""
8
+ @invitees = attributes[:invitees] || ""
9
+ @sender = attributes[:sender]
10
+ @casting = attributes[:casting]
11
+ end
12
+
13
+ def valid?
14
+ valid_message? && valid_invitees?
15
+ end
16
+
17
+ def deliver
18
+ if valid?
19
+ invitee_list.each do |email|
20
+ invitation = create_invitation(email)
21
+ Mailer.invitation_notification(invitation, @message)
22
+ end
23
+ else
24
+ failure_message =
25
+ "Your #{
26
+ @casting
27
+ } message couldn’t be sent. Invitees emails or message are invalid"
28
+ invitation = create_invitation(@sender)
29
+ Mailer.invitation_notification(invitation, failure_message)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def invalid_invitees
36
+ @invalid_invitees ||=
37
+ invitee_list.map { |item| item unless item.match(EMAIL_REGEX) }.compact
38
+ end
39
+
40
+ def invitee_list
41
+ @invitee_list ||= @invitees.gsub(/\s+/, "").split(/[\n,;]+/)
42
+ end
43
+
44
+ def valid_message?
45
+ @message.present?
46
+ end
47
+
48
+ def valid_invitees?
49
+ invalid_invitees.empty?
50
+ end
51
+
52
+ def create_invitation(email)
53
+ Invitation.create(
54
+ casting: @casting,
55
+ sender: @sender,
56
+ invitee_email: email,
57
+ status: "pending"
58
+ )
59
+ end
60
+ end
@@ -3,6 +3,7 @@
3
3
  original_verbosity = $VERBOSE
4
4
  $VERBOSE = nil
5
5
  require "rubygems"
6
+ require "pry-byebug" unless ENV["CI"]
6
7
  require "simplecov"
7
8
  require "coveralls"
8
9
  require "minitest/autorun"
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coverband
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0.rcmailer.2
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Mayer
8
8
  - Karl Baum
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-12-30 00:00:00.000000000 Z
12
+ date: 2020-12-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: benchmark-ips
@@ -312,11 +312,13 @@ files:
312
312
  - lib/coverband/reporters/html_report.rb
313
313
  - lib/coverband/reporters/web.rb
314
314
  - lib/coverband/utils/absolute_file_converter.rb
315
+ - lib/coverband/utils/dead_methods.rb
315
316
  - lib/coverband/utils/file_hasher.rb
316
317
  - lib/coverband/utils/file_list.rb
317
318
  - lib/coverband/utils/html_formatter.rb
318
319
  - lib/coverband/utils/jruby_ext.rb
319
320
  - lib/coverband/utils/lines_classifier.rb
321
+ - lib/coverband/utils/method_definition_scanner.rb
320
322
  - lib/coverband/utils/railtie.rb
321
323
  - lib/coverband/utils/relative_file_converter.rb
322
324
  - lib/coverband/utils/result.rb
@@ -385,10 +387,12 @@ files:
385
387
  - test/coverband/reporters/html_test.rb
386
388
  - test/coverband/reporters/web_test.rb
387
389
  - test/coverband/utils/absolute_file_converter_test.rb
390
+ - test/coverband/utils/dead_methods_test.rb
388
391
  - test/coverband/utils/file_hasher_test.rb
389
392
  - test/coverband/utils/file_list_test.rb
390
393
  - test/coverband/utils/html_formatter_test.rb
391
394
  - test/coverband/utils/lines_classifier_test.rb
395
+ - test/coverband/utils/method_definition_scanner_test.rb
392
396
  - test/coverband/utils/relative_file_converter_test.rb
393
397
  - test/coverband/utils/result_test.rb
394
398
  - test/coverband/utils/results_test.rb
@@ -399,6 +403,7 @@ files:
399
403
  - test/fake_app/basic_rack.rb
400
404
  - test/fixtures/app/controllers/sample_controller.rb
401
405
  - test/fixtures/app/models/user.rb
406
+ - test/fixtures/casting_invitor.rb
402
407
  - test/fixtures/never.rb
403
408
  - test/fixtures/sample.rb
404
409
  - test/fixtures/skipped.rb
@@ -468,7 +473,7 @@ homepage: https://github.com/danmayer/coverband
468
473
  licenses:
469
474
  - MIT
470
475
  metadata: {}
471
- post_install_message:
476
+ post_install_message:
472
477
  rdoc_options: []
473
478
  require_paths:
474
479
  - lib
@@ -479,12 +484,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
479
484
  version: '0'
480
485
  required_rubygems_version: !ruby/object:Gem::Requirement
481
486
  requirements:
482
- - - ">"
487
+ - - ">="
483
488
  - !ruby/object:Gem::Version
484
- version: 1.3.1
489
+ version: '0'
485
490
  requirements: []
486
491
  rubygems_version: 3.0.3
487
- signing_key:
492
+ signing_key:
488
493
  specification_version: 4
489
494
  summary: Rack middleware to measure production code usage (LOC runtime usage)
490
495
  test_files:
@@ -517,10 +522,12 @@ test_files:
517
522
  - test/coverband/reporters/html_test.rb
518
523
  - test/coverband/reporters/web_test.rb
519
524
  - test/coverband/utils/absolute_file_converter_test.rb
525
+ - test/coverband/utils/dead_methods_test.rb
520
526
  - test/coverband/utils/file_hasher_test.rb
521
527
  - test/coverband/utils/file_list_test.rb
522
528
  - test/coverband/utils/html_formatter_test.rb
523
529
  - test/coverband/utils/lines_classifier_test.rb
530
+ - test/coverband/utils/method_definition_scanner_test.rb
524
531
  - test/coverband/utils/relative_file_converter_test.rb
525
532
  - test/coverband/utils/result_test.rb
526
533
  - test/coverband/utils/results_test.rb
@@ -531,6 +538,7 @@ test_files:
531
538
  - test/fake_app/basic_rack.rb
532
539
  - test/fixtures/app/controllers/sample_controller.rb
533
540
  - test/fixtures/app/models/user.rb
541
+ - test/fixtures/casting_invitor.rb
534
542
  - test/fixtures/never.rb
535
543
  - test/fixtures/sample.rb
536
544
  - test/fixtures/skipped.rb