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 +4 -4
- data/Gemfile +2 -5
- data/README.md +26 -0
- data/changes.md +4 -10
- data/coverband.gemspec +6 -4
- data/lib/coverband/utils/dead_methods.rb +63 -0
- data/lib/coverband/utils/method_definition_scanner.rb +96 -0
- data/lib/coverband/utils/tasks.rb +17 -3
- data/lib/coverband/version.rb +1 -1
- data/test/coverband/utils/dead_methods_test.rb +53 -0
- data/test/coverband/utils/method_definition_scanner_test.rb +85 -0
- data/test/fixtures/casting_invitor.rb +60 -0
- data/test/test_helper.rb +1 -0
- metadata +15 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5cd2e1c2877aa5eefb57baf7b1c51c5e708ef8d5869f01b51a37c3b6e37c931
|
4
|
+
data.tar.gz: 4f0a6bc520d84917f989b3c13ec1c5bba2d6ab04db26fb87331cfed536b142f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
11
|
-
|
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
|
data/coverband.gemspec
CHANGED
@@ -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 = [
|
12
|
-
spec.description =
|
13
|
-
|
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 = [
|
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
|
-
|
15
|
-
|
16
|
-
|
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
|
###
|
data/lib/coverband/version.rb
CHANGED
@@ -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
|
data/test/test_helper.rb
CHANGED
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
|
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-
|
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:
|
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
|