skunk 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +53 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +47 -0
- data/.github/workflows/main.yml +89 -0
- data/.github/workflows/skunk.yml +29 -0
- data/.gitignore +1 -0
- data/.reek.yml +18 -13
- data/.rubocop_todo.yml +39 -17
- data/CHANGELOG.md +41 -6
- data/CODEOWNERS +5 -0
- data/Gemfile-Ruby-2-4 +10 -0
- data/README.md +78 -25
- data/fastruby-logo.png +0 -0
- data/lib/skunk.rb +1 -1
- data/lib/skunk/cli/application.rb +41 -6
- data/lib/skunk/cli/commands/base.rb +2 -0
- data/lib/skunk/cli/commands/compare.rb +12 -6
- data/lib/skunk/cli/commands/compare_score.rb +39 -0
- data/lib/skunk/cli/commands/default.rb +22 -1
- data/lib/skunk/cli/commands/help.rb +12 -1
- data/lib/skunk/cli/commands/output.rb +12 -0
- data/lib/skunk/cli/commands/status_reporter.rb +25 -18
- data/lib/skunk/cli/commands/status_sharer.rb +100 -0
- data/lib/skunk/cli/commands/version.rb +16 -0
- data/lib/skunk/cli/options.rb +26 -2
- data/lib/skunk/cli/options/argv.rb +45 -0
- data/lib/skunk/rubycritic/analysed_module.rb +30 -10
- data/lib/skunk/rubycritic/analysed_modules_collection.rb +2 -2
- data/lib/skunk/version.rb +1 -1
- data/logo.png +0 -0
- data/samples/engines/spec/nested_sample_spec.rb +5 -0
- data/samples/rubycritic/analysed_module.rb +9 -9
- data/skunk.gemspec +14 -8
- metadata +105 -30
- data/.travis.yml +0 -5
- data/Gemfile.lock +0 -119
- data/bin/console +0 -16
- data/bin/setup +0 -8
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "net/http"
|
4
|
+
require "net/https"
|
5
|
+
require "json"
|
6
|
+
|
7
|
+
require "skunk/cli/commands/status_reporter"
|
8
|
+
|
9
|
+
module Skunk
|
10
|
+
module Command
|
11
|
+
# Knows how to share status to an API
|
12
|
+
class StatusSharer < Skunk::Command::StatusReporter
|
13
|
+
attr_reader :status_message
|
14
|
+
|
15
|
+
DEFAULT_URL = "https://skunk.fastruby.io"
|
16
|
+
def status_reporter=(status_reporter)
|
17
|
+
self.analysed_modules = status_reporter.analysed_modules
|
18
|
+
self.score = analysed_modules.score
|
19
|
+
end
|
20
|
+
|
21
|
+
def share
|
22
|
+
return "" if not_sharing?
|
23
|
+
|
24
|
+
response = post_payload
|
25
|
+
|
26
|
+
@status_message =
|
27
|
+
if Net::HTTPOK === response
|
28
|
+
data = JSON.parse response.body
|
29
|
+
"Shared at: #{File.join(base_url, data['id'])}"
|
30
|
+
else
|
31
|
+
"Error sharing report: #{response}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
# :reek:UtilityFunction
|
38
|
+
def base_url
|
39
|
+
ENV["SHARE_URL"] || DEFAULT_URL
|
40
|
+
end
|
41
|
+
|
42
|
+
def json_summary
|
43
|
+
result = {
|
44
|
+
total_skunk_score: total_skunk_score,
|
45
|
+
analysed_modules_count: analysed_modules_count,
|
46
|
+
skunk_score_average: skunk_score_average,
|
47
|
+
skunk_version: Skunk::VERSION
|
48
|
+
}
|
49
|
+
|
50
|
+
if worst
|
51
|
+
result[:worst_skunk_score] = {
|
52
|
+
file: worst.pathname.to_s,
|
53
|
+
skunk_score: worst.skunk_score
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
result
|
58
|
+
end
|
59
|
+
|
60
|
+
def json_results
|
61
|
+
sorted_modules.map(&:to_hash)
|
62
|
+
end
|
63
|
+
|
64
|
+
# :reek:UtilityFunction
|
65
|
+
def not_sharing?
|
66
|
+
ENV["SHARE"] != "true" && ENV["SHARE_URL"].to_s == ""
|
67
|
+
end
|
68
|
+
|
69
|
+
def payload
|
70
|
+
JSON.generate(
|
71
|
+
"entries" => json_results,
|
72
|
+
"summary" => json_summary,
|
73
|
+
"options" => {
|
74
|
+
"compare" => "false"
|
75
|
+
}
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
# :reek:TooManyStatements
|
80
|
+
def post_payload
|
81
|
+
req = Net::HTTP::Post.new(url)
|
82
|
+
req.body = payload
|
83
|
+
|
84
|
+
http = Net::HTTP.new(url.hostname, url.port)
|
85
|
+
if url.scheme == "https"
|
86
|
+
http.use_ssl = true
|
87
|
+
http.ssl_version = :TLSv1_2
|
88
|
+
end
|
89
|
+
|
90
|
+
http.start do |connection|
|
91
|
+
connection.request req
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def url
|
96
|
+
URI(File.join(base_url, "reports"))
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rubycritic/commands/version"
|
4
|
+
|
5
|
+
# nodoc #
|
6
|
+
module Skunk
|
7
|
+
module Command
|
8
|
+
# Shows skunk version
|
9
|
+
class Version < RubyCritic::Command::Version
|
10
|
+
def execute
|
11
|
+
print Skunk::VERSION
|
12
|
+
status_reporter
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/skunk/cli/options.rb
CHANGED
@@ -1,10 +1,34 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "skunk/cli/options/argv"
|
4
|
+
require "rubycritic/cli/options/file"
|
4
5
|
|
5
6
|
module Skunk
|
6
7
|
module Cli
|
7
|
-
|
8
|
+
# Knows how to parse options passed to the CLI application
|
9
|
+
class Options
|
10
|
+
attr_reader :argv_options, :file_options
|
11
|
+
|
12
|
+
def initialize(argv)
|
13
|
+
@argv_options = Argv.new(argv)
|
14
|
+
@file_options = RubyCritic::Cli::Options::File.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def parse
|
18
|
+
argv_options.parse
|
19
|
+
file_options.parse
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
# :reek:NilCheck
|
24
|
+
def to_h
|
25
|
+
file_hash = file_options.to_h
|
26
|
+
argv_hash = argv_options.to_h
|
27
|
+
|
28
|
+
file_hash.merge(argv_hash) do |_, file_option, argv_option|
|
29
|
+
Array(argv_option).empty? ? file_option : argv_option
|
30
|
+
end
|
31
|
+
end
|
8
32
|
end
|
9
33
|
end
|
10
34
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rubycritic/cli/options/argv"
|
4
|
+
|
5
|
+
module Skunk
|
6
|
+
module Cli
|
7
|
+
# :nodoc:
|
8
|
+
class Options
|
9
|
+
# Extends RubyCritic::Cli::Options::Argv to parse a subset of the
|
10
|
+
# parameters accepted by RubyCritic
|
11
|
+
class Argv < RubyCritic::Cli::Options::Argv
|
12
|
+
# :reek:Attribute
|
13
|
+
attr_accessor :output_filename
|
14
|
+
|
15
|
+
def parse # rubocop:disable Metrics/MethodLength
|
16
|
+
parser.new do |opts|
|
17
|
+
opts.banner = "Usage: skunk [options] [paths]\n"
|
18
|
+
|
19
|
+
opts.on("-b", "--branch BRANCH", "Set branch to compare") do |branch|
|
20
|
+
self.base_branch = String(branch)
|
21
|
+
set_current_branch
|
22
|
+
self.mode = :compare_branches
|
23
|
+
end
|
24
|
+
|
25
|
+
opts.on("-o", "--out FILE", "Output report to file") do |filename|
|
26
|
+
self.output_filename = filename
|
27
|
+
end
|
28
|
+
|
29
|
+
opts.on_tail("-v", "--version", "Show gem's version") do
|
30
|
+
self.mode = :version
|
31
|
+
end
|
32
|
+
|
33
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
34
|
+
self.mode = :help
|
35
|
+
end
|
36
|
+
end.parse!(@argv)
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_h
|
40
|
+
super.merge(output_filename: output_filename)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -3,34 +3,34 @@
|
|
3
3
|
require "rubycritic/core/analysed_module"
|
4
4
|
|
5
5
|
module RubyCritic
|
6
|
-
# Monkey-patches RubyCritic::AnalysedModule to add a
|
6
|
+
# Monkey-patches RubyCritic::AnalysedModule to add a skunk_score method
|
7
7
|
class AnalysedModule
|
8
8
|
PERFECT_COVERAGE = 100
|
9
9
|
|
10
|
-
# Returns a numeric value that represents the
|
10
|
+
# Returns a numeric value that represents the skunk_score of a module:
|
11
11
|
#
|
12
|
-
# If module is perfectly covered,
|
12
|
+
# If module is perfectly covered, skunk score is the same as the
|
13
13
|
# `churn_times_cost`
|
14
14
|
#
|
15
|
-
# If module has no coverage,
|
15
|
+
# If module has no coverage, skunk score is a penalized value of
|
16
16
|
# `churn_times_cost`
|
17
17
|
#
|
18
|
-
# For now the
|
18
|
+
# For now the skunk_score is calculated by multiplying `churn_times_cost`
|
19
19
|
# times the lack of coverage.
|
20
20
|
#
|
21
21
|
# For example:
|
22
22
|
#
|
23
23
|
# When `churn_times_cost` is 100 and module is perfectly covered:
|
24
|
-
#
|
24
|
+
# skunk_score => 100
|
25
25
|
#
|
26
26
|
# When `churn_times_cost` is 100 and module is not covered at all:
|
27
|
-
#
|
27
|
+
# skunk_score => 100 * 100 = 10_000
|
28
28
|
#
|
29
29
|
# When `churn_times_cost` is 100 and module is covered at 75%:
|
30
|
-
#
|
30
|
+
# skunk_score => 100 * 25 (percentage uncovered) = 2_500
|
31
31
|
#
|
32
32
|
# @return [Float]
|
33
|
-
def
|
33
|
+
def skunk_score
|
34
34
|
return cost.round(2) if coverage == PERFECT_COVERAGE
|
35
35
|
|
36
36
|
(cost * (PERFECT_COVERAGE - coverage.to_i)).round(2)
|
@@ -41,7 +41,27 @@ module RubyCritic
|
|
41
41
|
# @return [Integer]
|
42
42
|
def churn_times_cost
|
43
43
|
safe_churn = churn.positive? ? churn : 1
|
44
|
-
@churn_times_cost ||= safe_churn * cost
|
44
|
+
@churn_times_cost ||= (safe_churn * cost).round(2)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns a hash with these attributes:
|
48
|
+
# - file
|
49
|
+
# - skunk_score
|
50
|
+
# - churn_times_cost
|
51
|
+
# - churn
|
52
|
+
# - cost
|
53
|
+
# - coverage
|
54
|
+
#
|
55
|
+
# @return [Hash]
|
56
|
+
def to_hash
|
57
|
+
{
|
58
|
+
file: pathname.to_s,
|
59
|
+
skunk_score: skunk_score,
|
60
|
+
churn_times_cost: churn_times_cost,
|
61
|
+
churn: churn,
|
62
|
+
cost: cost.round(2),
|
63
|
+
coverage: coverage.round(2)
|
64
|
+
}
|
45
65
|
end
|
46
66
|
end
|
47
67
|
end
|
@@ -5,10 +5,10 @@ require "rubycritic/core/analysed_modules_collection"
|
|
5
5
|
module RubyCritic
|
6
6
|
# nodoc #
|
7
7
|
class AnalysedModulesCollection
|
8
|
-
def
|
8
|
+
def skunk_score_average
|
9
9
|
num_modules = @modules.size
|
10
10
|
if num_modules.positive?
|
11
|
-
|
11
|
+
sum(&:skunk_score) / num_modules.to_f
|
12
12
|
else
|
13
13
|
0.0
|
14
14
|
end
|
data/lib/skunk/version.rb
CHANGED
data/logo.png
ADDED
Binary file
|
@@ -3,34 +3,34 @@
|
|
3
3
|
require "rubycritic/core/analysed_module"
|
4
4
|
|
5
5
|
module RubyCritic
|
6
|
-
# Monkey-patches RubyCritic::AnalysedModule to add a
|
6
|
+
# Monkey-patches RubyCritic::AnalysedModule to add a skunk_score method
|
7
7
|
class AnalysedModule
|
8
8
|
PERFECT_COVERAGE = 100
|
9
9
|
|
10
|
-
# Returns a numeric value that represents the
|
10
|
+
# Returns a numeric value that represents the skunk_score of a module:
|
11
11
|
#
|
12
|
-
# If module is perfectly covered,
|
12
|
+
# If module is perfectly covered, skunk score is the same as the
|
13
13
|
# `churn_times_cost`
|
14
14
|
#
|
15
|
-
# If module has no coverage,
|
15
|
+
# If module has no coverage, skunk score is a penalized value of
|
16
16
|
# `churn_times_cost`
|
17
17
|
#
|
18
|
-
# For now the
|
18
|
+
# For now the skunk_score is calculated by multiplying `churn_times_cost`
|
19
19
|
# times the lack of coverage.
|
20
20
|
#
|
21
21
|
# For example:
|
22
22
|
#
|
23
23
|
# When `churn_times_cost` is 100 and module is perfectly covered:
|
24
|
-
#
|
24
|
+
# skunk_score => 100
|
25
25
|
#
|
26
26
|
# When `churn_times_cost` is 100 and module is not covered at all:
|
27
|
-
#
|
27
|
+
# skunk_score => 100 * 100 = 10_000
|
28
28
|
#
|
29
29
|
# When `churn_times_cost` is 100 and module is covered at 75%:
|
30
|
-
#
|
30
|
+
# skunk_score => 100 * 25 (percentage uncovered) = 2_500
|
31
31
|
#
|
32
32
|
# @return [Float]
|
33
|
-
def
|
33
|
+
def skunk_score
|
34
34
|
return cost.round(2) if coverage == PERFECT_COVERAGE
|
35
35
|
|
36
36
|
(cost * (PERFECT_COVERAGE - coverage.to_i)).round(2)
|
data/skunk.gemspec
CHANGED
@@ -11,9 +11,11 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.email = ["ernesto+github@ombulabs.com"]
|
12
12
|
spec.licenses = ["MIT"]
|
13
13
|
spec.summary = "A library to assess code quality vs. code coverage"
|
14
|
-
spec.description = "Knows how to calculate the
|
14
|
+
spec.description = "Knows how to calculate the SkunkScore for a set of Ruby modules"
|
15
15
|
spec.homepage = "https://github.com/fastruby/skunk"
|
16
16
|
|
17
|
+
spec.required_ruby_version = [">= 2.4.0", "< 3.1.0"]
|
18
|
+
|
17
19
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
20
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
21
|
if spec.respond_to?(:metadata)
|
@@ -30,22 +32,26 @@ Gem::Specification.new do |spec|
|
|
30
32
|
# Specify which files should be added to the gem when it is released.
|
31
33
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
32
34
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
33
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
35
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(bin|test|spec|features)/}) }
|
34
36
|
end
|
35
37
|
spec.bindir = "exe"
|
36
38
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
37
39
|
spec.require_paths = ["lib"]
|
38
40
|
|
39
|
-
spec.add_dependency "rubycritic", "
|
41
|
+
spec.add_dependency "rubycritic", ">= 4.5.2", "< 5.0"
|
40
42
|
spec.add_dependency "terminal-table", "~> 1.8.0"
|
41
43
|
|
42
|
-
spec.add_development_dependency "bundler", "~> 2.0"
|
43
44
|
spec.add_development_dependency "byebug", "~> 11"
|
45
|
+
spec.add_development_dependency "codecov", "~> 0.1.16"
|
44
46
|
spec.add_development_dependency "minitest", "~> 5.8.4"
|
45
47
|
spec.add_development_dependency "minitest-around", "~> 0.5.0"
|
46
|
-
spec.add_development_dependency "
|
47
|
-
spec.add_development_dependency "
|
48
|
-
spec.add_development_dependency "
|
49
|
-
spec.add_development_dependency "
|
48
|
+
spec.add_development_dependency "minitest-stub_any_instance", "~> 1.0.2"
|
49
|
+
spec.add_development_dependency "minitest-stub-const", "~> 0.6"
|
50
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
51
|
+
spec.add_development_dependency "reek", "~> 6.0.0"
|
52
|
+
spec.add_development_dependency "rubocop", "~> 1.0"
|
53
|
+
spec.add_development_dependency "simplecov", "~> 0.18"
|
50
54
|
spec.add_development_dependency "simplecov-console", "0.5.0"
|
55
|
+
spec.add_development_dependency "vcr", "~> 6.0.0"
|
56
|
+
spec.add_development_dependency "webmock", "~> 3.10.0"
|
51
57
|
end
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skunk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ernesto Tagwerker
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubycritic
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.5.2
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
22
|
+
version: '5.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.2
|
29
|
+
version: 4.5.2
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: terminal-table
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,33 +45,33 @@ dependencies:
|
|
39
45
|
- !ruby/object:Gem::Version
|
40
46
|
version: 1.8.0
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
48
|
+
name: byebug
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
53
|
+
version: '11'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
58
|
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
60
|
+
version: '11'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
62
|
+
name: codecov
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
65
|
- - "~>"
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
67
|
+
version: 0.1.16
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
72
|
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
74
|
+
version: 0.1.16
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: minitest
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,46 +100,74 @@ dependencies:
|
|
94
100
|
- - "~>"
|
95
101
|
- !ruby/object:Gem::Version
|
96
102
|
version: 0.5.0
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: minitest-stub_any_instance
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.0.2
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 1.0.2
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: minitest-stub-const
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0.6'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0.6'
|
97
131
|
- !ruby/object:Gem::Dependency
|
98
132
|
name: rake
|
99
133
|
requirement: !ruby/object:Gem::Requirement
|
100
134
|
requirements:
|
101
135
|
- - "~>"
|
102
136
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
137
|
+
version: '13.0'
|
104
138
|
type: :development
|
105
139
|
prerelease: false
|
106
140
|
version_requirements: !ruby/object:Gem::Requirement
|
107
141
|
requirements:
|
108
142
|
- - "~>"
|
109
143
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
144
|
+
version: '13.0'
|
111
145
|
- !ruby/object:Gem::Dependency
|
112
146
|
name: reek
|
113
147
|
requirement: !ruby/object:Gem::Requirement
|
114
148
|
requirements:
|
115
149
|
- - "~>"
|
116
150
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
151
|
+
version: 6.0.0
|
118
152
|
type: :development
|
119
153
|
prerelease: false
|
120
154
|
version_requirements: !ruby/object:Gem::Requirement
|
121
155
|
requirements:
|
122
156
|
- - "~>"
|
123
157
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
158
|
+
version: 6.0.0
|
125
159
|
- !ruby/object:Gem::Dependency
|
126
160
|
name: rubocop
|
127
161
|
requirement: !ruby/object:Gem::Requirement
|
128
162
|
requirements:
|
129
|
-
- - "
|
163
|
+
- - "~>"
|
130
164
|
- !ruby/object:Gem::Version
|
131
165
|
version: '1.0'
|
132
166
|
type: :development
|
133
167
|
prerelease: false
|
134
168
|
version_requirements: !ruby/object:Gem::Requirement
|
135
169
|
requirements:
|
136
|
-
- - "
|
170
|
+
- - "~>"
|
137
171
|
- !ruby/object:Gem::Version
|
138
172
|
version: '1.0'
|
139
173
|
- !ruby/object:Gem::Dependency
|
@@ -142,14 +176,14 @@ dependencies:
|
|
142
176
|
requirements:
|
143
177
|
- - "~>"
|
144
178
|
- !ruby/object:Gem::Version
|
145
|
-
version: 0.
|
179
|
+
version: '0.18'
|
146
180
|
type: :development
|
147
181
|
prerelease: false
|
148
182
|
version_requirements: !ruby/object:Gem::Requirement
|
149
183
|
requirements:
|
150
184
|
- - "~>"
|
151
185
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.
|
186
|
+
version: '0.18'
|
153
187
|
- !ruby/object:Gem::Dependency
|
154
188
|
name: simplecov-console
|
155
189
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,7 +198,35 @@ dependencies:
|
|
164
198
|
- - '='
|
165
199
|
- !ruby/object:Gem::Version
|
166
200
|
version: 0.5.0
|
167
|
-
|
201
|
+
- !ruby/object:Gem::Dependency
|
202
|
+
name: vcr
|
203
|
+
requirement: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - "~>"
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: 6.0.0
|
208
|
+
type: :development
|
209
|
+
prerelease: false
|
210
|
+
version_requirements: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - "~>"
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: 6.0.0
|
215
|
+
- !ruby/object:Gem::Dependency
|
216
|
+
name: webmock
|
217
|
+
requirement: !ruby/object:Gem::Requirement
|
218
|
+
requirements:
|
219
|
+
- - "~>"
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: 3.10.0
|
222
|
+
type: :development
|
223
|
+
prerelease: false
|
224
|
+
version_requirements: !ruby/object:Gem::Requirement
|
225
|
+
requirements:
|
226
|
+
- - "~>"
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: 3.10.0
|
229
|
+
description: Knows how to calculate the SkunkScore for a set of Ruby modules
|
168
230
|
email:
|
169
231
|
- ernesto+github@ombulabs.com
|
170
232
|
executables:
|
@@ -172,33 +234,43 @@ executables:
|
|
172
234
|
extensions: []
|
173
235
|
extra_rdoc_files: []
|
174
236
|
files:
|
237
|
+
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
238
|
+
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
239
|
+
- ".github/workflows/main.yml"
|
240
|
+
- ".github/workflows/skunk.yml"
|
175
241
|
- ".gitignore"
|
176
242
|
- ".reek.yml"
|
177
243
|
- ".rubocop.yml"
|
178
244
|
- ".rubocop_todo.yml"
|
179
|
-
- ".travis.yml"
|
180
245
|
- CHANGELOG.md
|
246
|
+
- CODEOWNERS
|
181
247
|
- CODE_OF_CONDUCT.md
|
182
248
|
- Gemfile
|
183
|
-
- Gemfile
|
249
|
+
- Gemfile-Ruby-2-4
|
184
250
|
- LICENSE.txt
|
185
251
|
- README.md
|
186
252
|
- Rakefile
|
187
|
-
- bin/console
|
188
|
-
- bin/setup
|
189
253
|
- exe/skunk
|
254
|
+
- fastruby-logo.png
|
190
255
|
- lib/skunk.rb
|
191
256
|
- lib/skunk/cli/application.rb
|
192
257
|
- lib/skunk/cli/command_factory.rb
|
193
258
|
- lib/skunk/cli/commands/base.rb
|
194
259
|
- lib/skunk/cli/commands/compare.rb
|
260
|
+
- lib/skunk/cli/commands/compare_score.rb
|
195
261
|
- lib/skunk/cli/commands/default.rb
|
196
262
|
- lib/skunk/cli/commands/help.rb
|
263
|
+
- lib/skunk/cli/commands/output.rb
|
197
264
|
- lib/skunk/cli/commands/status_reporter.rb
|
265
|
+
- lib/skunk/cli/commands/status_sharer.rb
|
266
|
+
- lib/skunk/cli/commands/version.rb
|
198
267
|
- lib/skunk/cli/options.rb
|
268
|
+
- lib/skunk/cli/options/argv.rb
|
199
269
|
- lib/skunk/rubycritic/analysed_module.rb
|
200
270
|
- lib/skunk/rubycritic/analysed_modules_collection.rb
|
201
271
|
- lib/skunk/version.rb
|
272
|
+
- logo.png
|
273
|
+
- samples/engines/spec/nested_sample_spec.rb
|
202
274
|
- samples/rubycritic/analysed_module.rb
|
203
275
|
- skunk.gemspec
|
204
276
|
homepage: https://github.com/fastruby/skunk
|
@@ -209,7 +281,7 @@ metadata:
|
|
209
281
|
homepage_uri: https://github.com/fastruby/skunk
|
210
282
|
source_code_uri: https://github.com/fastruby/skunk
|
211
283
|
changelog_uri: https://github.com/fastruby/skunk/changelog
|
212
|
-
post_install_message:
|
284
|
+
post_install_message:
|
213
285
|
rdoc_options: []
|
214
286
|
require_paths:
|
215
287
|
- lib
|
@@ -217,15 +289,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
217
289
|
requirements:
|
218
290
|
- - ">="
|
219
291
|
- !ruby/object:Gem::Version
|
220
|
-
version:
|
292
|
+
version: 2.4.0
|
293
|
+
- - "<"
|
294
|
+
- !ruby/object:Gem::Version
|
295
|
+
version: 3.1.0
|
221
296
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
297
|
requirements:
|
223
298
|
- - ">="
|
224
299
|
- !ruby/object:Gem::Version
|
225
300
|
version: '0'
|
226
301
|
requirements: []
|
227
|
-
rubygems_version: 3.
|
228
|
-
signing_key:
|
302
|
+
rubygems_version: 3.2.3
|
303
|
+
signing_key:
|
229
304
|
specification_version: 4
|
230
305
|
summary: A library to assess code quality vs. code coverage
|
231
306
|
test_files: []
|