rubycritic 3.4.0 → 3.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/CHANGELOG.md +10 -2
- data/README.md +12 -10
- data/lib/rubycritic/cli/options.rb +25 -3
- data/lib/rubycritic/command_factory.rb +3 -0
- data/lib/rubycritic/commands/ci.rb +2 -8
- data/lib/rubycritic/commands/compare.rb +105 -0
- data/lib/rubycritic/commands/utils/build_number_file.rb +35 -0
- data/lib/rubycritic/configuration.rb +18 -1
- data/lib/rubycritic/core/analysed_modules_collection.rb +23 -3
- data/lib/rubycritic/generators/html/assets/stylesheets/application.css +20 -0
- data/lib/rubycritic/generators/html/base.rb +1 -1
- data/lib/rubycritic/generators/html/code_file.rb +11 -0
- data/lib/rubycritic/generators/html/code_index.rb +7 -0
- data/lib/rubycritic/generators/html/overview.rb +7 -0
- data/lib/rubycritic/generators/html/smells_index.rb +7 -0
- data/lib/rubycritic/generators/html/templates/code_index.html.erb +10 -0
- data/lib/rubycritic/generators/html/templates/layouts/application.html.erb +7 -0
- data/lib/rubycritic/generators/html/view_helpers.rb +10 -1
- data/lib/rubycritic/source_control_systems/git.rb +27 -1
- data/lib/rubycritic/version.rb +1 -1
- metadata +7 -131
- data/.gitignore +0 -23
- data/.rubocop.yml +0 -37
- data/.rubocop_todo.yml +0 -45
- data/.todo.reek +0 -142
- data/.travis.yml +0 -29
- data/.yardopts +0 -5
- data/docs/building-own-code-climate.md +0 -156
- data/docs/core-metrics.md +0 -72
- data/docs/jenkins-pr-reviews.md +0 -64
- data/features/command_line_interface/minimum_score.feature +0 -39
- data/features/command_line_interface/options.feature +0 -37
- data/features/rake_task.feature +0 -65
- data/features/step_definitions/rake_task_steps.rb +0 -5
- data/features/step_definitions/rubycritic_steps.rb +0 -33
- data/features/step_definitions/sample_file_steps.rb +0 -32
- data/features/support/env.rb +0 -43
- data/images/churn-vs-complexity.png +0 -0
- data/images/code.png +0 -0
- data/images/logo.png +0 -0
- data/images/overview.png +0 -0
- data/images/rating.png +0 -0
- data/images/reek.png +0 -0
- data/images/smell-details.png +0 -0
- data/images/smells.png +0 -0
- data/images/whitesmith.png +0 -0
- data/rubycritic.gemspec +0 -45
- data/test/analysers_test_helper.rb +0 -12
- data/test/lib/rubycritic/analysers/churn_test.rb +0 -35
- data/test/lib/rubycritic/analysers/complexity_test.rb +0 -18
- data/test/lib/rubycritic/analysers/helpers/methods_counter_test.rb +0 -31
- data/test/lib/rubycritic/analysers/helpers/modules_locator_test.rb +0 -55
- data/test/lib/rubycritic/analysers/smells/flay_test.rb +0 -41
- data/test/lib/rubycritic/analysers/smells/flog_test.rb +0 -28
- data/test/lib/rubycritic/analysers/smells/reek_test.rb +0 -32
- data/test/lib/rubycritic/analysis_summary_test.rb +0 -30
- data/test/lib/rubycritic/browser_test.rb +0 -18
- data/test/lib/rubycritic/commands/status_reporter_test.rb +0 -81
- data/test/lib/rubycritic/configuration_test.rb +0 -31
- data/test/lib/rubycritic/core/analysed_module_test.rb +0 -90
- data/test/lib/rubycritic/core/analysed_modules_collection_test.rb +0 -111
- data/test/lib/rubycritic/core/location_test.rb +0 -39
- data/test/lib/rubycritic/core/smell_test.rb +0 -105
- data/test/lib/rubycritic/core/smells_array_test.rb +0 -30
- data/test/lib/rubycritic/generators/console_report_test.rb +0 -83
- data/test/lib/rubycritic/generators/json_report_test.rb +0 -38
- data/test/lib/rubycritic/generators/lint_report_test.rb +0 -37
- data/test/lib/rubycritic/generators/turbulence_test.rb +0 -19
- data/test/lib/rubycritic/generators/view_helpers_test.rb +0 -85
- data/test/lib/rubycritic/revision_comparator_test.rb +0 -66
- data/test/lib/rubycritic/smells_status_setter_test.rb +0 -24
- data/test/lib/rubycritic/source_control_systems/base_test.rb +0 -31
- data/test/lib/rubycritic/source_control_systems/double_test.rb +0 -13
- data/test/lib/rubycritic/source_control_systems/git_test.rb +0 -15
- data/test/lib/rubycritic/source_control_systems/interfaces/basic.rb +0 -9
- data/test/lib/rubycritic/source_control_systems/interfaces/time_travel.rb +0 -9
- data/test/lib/rubycritic/source_control_systems/mercurial_test.rb +0 -13
- data/test/lib/rubycritic/source_control_systems/perforce_test.rb +0 -176
- data/test/lib/rubycritic/source_locator_test.rb +0 -80
- data/test/lib/rubycritic/version_test.rb +0 -10
- data/test/samples/empty.rb +0 -0
- data/test/samples/flay/smelly.rb +0 -8
- data/test/samples/flay/smelly2.rb +0 -8
- data/test/samples/flog/complex.rb +0 -11
- data/test/samples/flog/smelly.rb +0 -11
- data/test/samples/location/dir1/file1.rb +0 -0
- data/test/samples/location/file0.rb +0 -0
- data/test/samples/location/file0_symlink.rb +0 -1
- data/test/samples/location/file_with_different_extension.py +0 -0
- data/test/samples/location/file_with_no_extension +0 -0
- data/test/samples/methods_count.rb +0 -7
- data/test/samples/module_names.rb +0 -18
- data/test/samples/no_methods.rb +0 -4
- data/test/samples/reek/not_smelly.rb +0 -35
- data/test/samples/reek/smelly.rb +0 -17
- data/test/samples/unparsable.rb +0 -1
- data/test/test_helper.rb +0 -64
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
Feature: Break if overall score is below minimum
|
|
2
|
-
In order to break the Continuous Integration builds based on a score threshold
|
|
3
|
-
RubyCritic returns the exit status according with the score
|
|
4
|
-
|
|
5
|
-
Scenario: Status indicates a success when not using --minimum-score
|
|
6
|
-
Given the smelly file 'smelly.rb' with a score of 93.19
|
|
7
|
-
When I run rubycritic smelly.rb
|
|
8
|
-
Then the exit status indicates a success
|
|
9
|
-
|
|
10
|
-
Scenario: Status indicates an error when score below the minimum
|
|
11
|
-
Given the smelly file 'smelly.rb' with a score of 93.19
|
|
12
|
-
When I run rubycritic --minimum-score 100 smelly.rb
|
|
13
|
-
Then the exit status indicates an error
|
|
14
|
-
|
|
15
|
-
Scenario: Status indicates a success when score is above the minimum
|
|
16
|
-
Given the smelly file 'smelly.rb' with a score of 93.19
|
|
17
|
-
When I run rubycritic --minimum-score 93 smelly.rb
|
|
18
|
-
Then the exit status indicates a success
|
|
19
|
-
|
|
20
|
-
Scenario: Status indicates a success when score is equal the minimum
|
|
21
|
-
Given the clean file 'clean.rb' with a score of 100
|
|
22
|
-
When I run rubycritic --minimum-score 100 clean.rb
|
|
23
|
-
Then the exit status indicates a success
|
|
24
|
-
|
|
25
|
-
Scenario: Prints the score on output
|
|
26
|
-
Given the smelly file 'smelly.rb' with a score of 93.19
|
|
27
|
-
When I run rubycritic smelly.rb
|
|
28
|
-
Then the output should contain:
|
|
29
|
-
"""
|
|
30
|
-
Score: 93.19
|
|
31
|
-
"""
|
|
32
|
-
|
|
33
|
-
Scenario: Prints a message informing the score is below the minimum
|
|
34
|
-
Given the empty file 'empty.rb' with a score of 0
|
|
35
|
-
When I run rubycritic --minimum-score 100 empty.rb
|
|
36
|
-
Then the output should contain:
|
|
37
|
-
"""
|
|
38
|
-
Score (0.0) is below the minimum 100
|
|
39
|
-
"""
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
Feature: RubyCritic can be controlled using command-line options
|
|
2
|
-
In order to change RubyCritic's default behaviour
|
|
3
|
-
As a developer
|
|
4
|
-
I want to supply options on the command line
|
|
5
|
-
|
|
6
|
-
Scenario: return non-zero status on bad option
|
|
7
|
-
When I run rubycritic --no-such-option
|
|
8
|
-
Then the exit status indicates an error
|
|
9
|
-
And it reports the error "Error: invalid option: --no-such-option"
|
|
10
|
-
And there is no output on stdout
|
|
11
|
-
|
|
12
|
-
Scenario: display the current version number
|
|
13
|
-
When I run rubycritic --version
|
|
14
|
-
Then it succeeds
|
|
15
|
-
And it reports the current version
|
|
16
|
-
|
|
17
|
-
Scenario: display the help information
|
|
18
|
-
When I run rubycritic --help
|
|
19
|
-
Then it succeeds
|
|
20
|
-
And it reports:
|
|
21
|
-
"""
|
|
22
|
-
Usage: rubycritic [options] [paths]
|
|
23
|
-
-p, --path [PATH] Set path where report will be saved (tmp/rubycritic by default)
|
|
24
|
-
-f, --format [FORMAT] Report smells in the given format:
|
|
25
|
-
html (default; will open in a browser)
|
|
26
|
-
json
|
|
27
|
-
console
|
|
28
|
-
lint
|
|
29
|
-
-s, --minimum-score [MIN_SCORE] Set a minimum score
|
|
30
|
-
-m, --mode-ci Use CI mode (faster, but only analyses last commit)
|
|
31
|
-
--deduplicate-symlinks De-duplicate symlinks based on their final target
|
|
32
|
-
--suppress-ratings Suppress letter ratings
|
|
33
|
-
--no-browser Do not open html report with browser
|
|
34
|
-
-v, --version Show gem's version
|
|
35
|
-
-h, --help Show this message
|
|
36
|
-
|
|
37
|
-
"""
|
data/features/rake_task.feature
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
Feature: RubyCritic can be run via Rake task
|
|
2
|
-
In order to allow for a better CI usage
|
|
3
|
-
As a developer
|
|
4
|
-
I want to use RubyCritic as a Rake task
|
|
5
|
-
|
|
6
|
-
Scenario: ‘paths' attribute is respected
|
|
7
|
-
Given the smelly file 'smelly.rb'
|
|
8
|
-
When I run rake rubycritic with:
|
|
9
|
-
"""
|
|
10
|
-
RubyCritic::RakeTask.new do |t|
|
|
11
|
-
t.paths = FileList['smelly.*']
|
|
12
|
-
t.options = '--no-browser -f console'
|
|
13
|
-
end
|
|
14
|
-
"""
|
|
15
|
-
Then the output should contain:
|
|
16
|
-
"""
|
|
17
|
-
(HighComplexity) AllTheMethods#method_missing has a flog score of 27
|
|
18
|
-
"""
|
|
19
|
-
And the exit status indicates a success
|
|
20
|
-
|
|
21
|
-
Scenario: 'name' option changes the task name
|
|
22
|
-
Given the smelly file 'smelly.rb'
|
|
23
|
-
When I run rake silky with:
|
|
24
|
-
"""
|
|
25
|
-
RubyCritic::RakeTask.new('silky') do |t|
|
|
26
|
-
t.paths = FileList['smelly.*']
|
|
27
|
-
t.verbose = true
|
|
28
|
-
t.options = '--no-browser'
|
|
29
|
-
end
|
|
30
|
-
"""
|
|
31
|
-
Then the output should contain:
|
|
32
|
-
"""
|
|
33
|
-
Running `silky` rake command
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
Scenario: 'verbose' prints details about the execution
|
|
37
|
-
Given the smelly file 'smelly.rb'
|
|
38
|
-
When I run rake rubycritic with:
|
|
39
|
-
"""
|
|
40
|
-
RubyCritic::RakeTask.new do |t|
|
|
41
|
-
t.paths = FileList['smelly.*']
|
|
42
|
-
t.verbose = true
|
|
43
|
-
t.options = '--no-browser'
|
|
44
|
-
end
|
|
45
|
-
"""
|
|
46
|
-
Then the output should contain:
|
|
47
|
-
"""
|
|
48
|
-
!!! Running `rubycritic` rake command
|
|
49
|
-
!!! Inspecting smelly.rb with options --no-browser
|
|
50
|
-
"""
|
|
51
|
-
|
|
52
|
-
Scenario: respect --minimum-score
|
|
53
|
-
Given the smelly file 'smelly.rb'
|
|
54
|
-
When I run rake rubycritic with:
|
|
55
|
-
"""
|
|
56
|
-
RubyCritic::RakeTask.new do |t|
|
|
57
|
-
t.paths = FileList['smelly.*']
|
|
58
|
-
t.verbose = true
|
|
59
|
-
t.options = '--no-browser -f console --minimum-score 95'
|
|
60
|
-
end
|
|
61
|
-
"""
|
|
62
|
-
Then the output should contain:
|
|
63
|
-
"""
|
|
64
|
-
Score (93.19) is below the minimum 95
|
|
65
|
-
"""
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
When(/^I run rubycritic (.*)$/) do |args|
|
|
4
|
-
rubycritic(args)
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
Then(/^the exit status indicates an error$/) do
|
|
8
|
-
expect(last_command_started).to have_exit_status(RubyCritic::Command::StatusReporter::SCORE_BELOW_MINIMUM)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
Then(/^the exit status indicates a success$/) do
|
|
12
|
-
expect(last_command_started).to have_exit_status(RubyCritic::Command::StatusReporter::SUCCESS)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
Then(/^it reports:$/) do |report|
|
|
16
|
-
expect(last_command_started).to have_output_on_stdout(report.gsub('\n', "\n"))
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
Then(/^there is no output on stdout$/) do
|
|
20
|
-
expect(last_command_started).to have_output_on_stdout('')
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
Then(/^it reports the current version$/) do
|
|
24
|
-
expect(last_command_started).to have_output("RubyCritic #{RubyCritic::VERSION}\n")
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
Then(/^it reports the error ['"](.*)['"]$/) do |string|
|
|
28
|
-
expect(last_command_started).to have_output_on_stderr(/#{Regexp.escape(string)}/)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
Then(/^it succeeds$/) do
|
|
32
|
-
expect(last_command_started).to have_exit_status(RubyCritic::Command::StatusReporter::SUCCESS)
|
|
33
|
-
end
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
Given(/^the smelly file 'smelly.rb'/) do
|
|
4
|
-
contents = <<-RUBY.strip_heredoc
|
|
5
|
-
class AllTheMethods
|
|
6
|
-
def method_missing(method, *args, &block)
|
|
7
|
-
message = "I"
|
|
8
|
-
eval "message = ' did not'"
|
|
9
|
-
eval "message << ' exist,'"
|
|
10
|
-
eval "message << ' but now'"
|
|
11
|
-
eval "message << ' I do.'"
|
|
12
|
-
self.class.send(:define_method, method) { "I did not exist, but now I do." }
|
|
13
|
-
self.send(method)
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
RUBY
|
|
17
|
-
write_file('smelly.rb', contents)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
Given(/^the clean file 'clean.rb'/) do
|
|
21
|
-
contents = <<-RUBY.strip_heredoc
|
|
22
|
-
# Explanatory comment
|
|
23
|
-
class Clean
|
|
24
|
-
def foo; end
|
|
25
|
-
end
|
|
26
|
-
RUBY
|
|
27
|
-
write_file('clean.rb', contents)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
Given(/^the empty file 'empty.rb'/) do
|
|
31
|
-
write_file('clean.rb', '')
|
|
32
|
-
end
|
data/features/support/env.rb
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../lib/rubycritic'
|
|
4
|
-
require_relative '../../lib/rubycritic/cli/application'
|
|
5
|
-
require_relative '../../lib/rubycritic/commands/status_reporter'
|
|
6
|
-
require 'aruba/cucumber'
|
|
7
|
-
require 'minitest/spec'
|
|
8
|
-
|
|
9
|
-
#
|
|
10
|
-
# Provides runner methods used in the cucumber steps.
|
|
11
|
-
#
|
|
12
|
-
class RubyCriticWorld
|
|
13
|
-
extend MiniTest::Assertions
|
|
14
|
-
attr_accessor :assertions
|
|
15
|
-
|
|
16
|
-
def initialize
|
|
17
|
-
self.assertions = 0
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def rubycritic(args)
|
|
21
|
-
run_simple("rubycritic #{args} --no-browser", false)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def rake(name, task_def)
|
|
25
|
-
header = <<-RUBY.strip_heredoc
|
|
26
|
-
require 'rubycritic'
|
|
27
|
-
require 'rubycritic/rake_task'
|
|
28
|
-
|
|
29
|
-
RUBY
|
|
30
|
-
write_file 'Rakefile', header + task_def
|
|
31
|
-
run_simple("rake #{name}", false)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
World do
|
|
36
|
-
RubyCriticWorld.new
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
Before do
|
|
40
|
-
Aruba.configure do |config|
|
|
41
|
-
config.exit_timeout = 30
|
|
42
|
-
end
|
|
43
|
-
end
|
|
Binary file
|
data/images/code.png
DELETED
|
Binary file
|
data/images/logo.png
DELETED
|
Binary file
|
data/images/overview.png
DELETED
|
Binary file
|
data/images/rating.png
DELETED
|
Binary file
|
data/images/reek.png
DELETED
|
Binary file
|
data/images/smell-details.png
DELETED
|
Binary file
|
data/images/smells.png
DELETED
|
Binary file
|
data/images/whitesmith.png
DELETED
|
Binary file
|
data/rubycritic.gemspec
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
lib = File.expand_path('lib', __dir__)
|
|
4
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
-
require 'rubycritic/version'
|
|
6
|
-
|
|
7
|
-
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name = 'rubycritic'
|
|
9
|
-
spec.version = RubyCritic::VERSION
|
|
10
|
-
spec.authors = ['Guilherme Simoes']
|
|
11
|
-
spec.email = ['guilherme.rdems@gmail.com']
|
|
12
|
-
spec.description = 'RubyCritic is a tool that wraps around various static analysis gems '\
|
|
13
|
-
'to provide a quality report of your Ruby code.'
|
|
14
|
-
spec.summary = 'RubyCritic is a Ruby code quality reporter'
|
|
15
|
-
spec.homepage = 'https://github.com/whitesmith/rubycritic'
|
|
16
|
-
spec.license = 'MIT'
|
|
17
|
-
spec.required_ruby_version = '>= 2.1.0'
|
|
18
|
-
|
|
19
|
-
spec.files = `git ls-files`.split("\n")
|
|
20
|
-
spec.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
|
21
|
-
spec.test_files = `git ls-files -- test/*`.split("\n")
|
|
22
|
-
spec.require_path = 'lib'
|
|
23
|
-
|
|
24
|
-
spec.add_runtime_dependency 'flay', '~> 2.8'
|
|
25
|
-
spec.add_runtime_dependency 'flog', '~> 4.4'
|
|
26
|
-
spec.add_runtime_dependency 'launchy', '2.4.3'
|
|
27
|
-
spec.add_runtime_dependency 'parser', '~> 2.5.0'
|
|
28
|
-
spec.add_runtime_dependency 'rainbow', '~> 3.0'
|
|
29
|
-
spec.add_runtime_dependency 'reek', '~> 4.4'
|
|
30
|
-
spec.add_runtime_dependency 'ruby_parser', '~> 3.8'
|
|
31
|
-
spec.add_runtime_dependency 'tty-which', '~> 0.3.0'
|
|
32
|
-
spec.add_runtime_dependency 'virtus', '~> 1.0'
|
|
33
|
-
|
|
34
|
-
spec.add_development_dependency 'aruba', '~> 0.12', '>= 0.12.0'
|
|
35
|
-
spec.add_development_dependency 'bundler', '~> 1.3', '>= 1.3.0'
|
|
36
|
-
spec.add_development_dependency 'byebug', '~> 9.0', '>= 8.0'
|
|
37
|
-
spec.add_development_dependency 'cucumber', '~> 3.0', '>= 2.2.0'
|
|
38
|
-
spec.add_development_dependency 'diff-lcs', '~> 1.3'
|
|
39
|
-
spec.add_development_dependency 'fakefs', '~> 0.10', '>= 0.10.0'
|
|
40
|
-
spec.add_development_dependency 'minitest', '~> 5.3', '>= 5.3.0'
|
|
41
|
-
spec.add_development_dependency 'minitest-around', '~> 0.4.0'
|
|
42
|
-
spec.add_development_dependency 'mocha', '~> 1.1', '>= 1.1.0'
|
|
43
|
-
spec.add_development_dependency 'rake', '~> 12.0', '>= 11.0.0'
|
|
44
|
-
spec.add_development_dependency 'rubocop', '~> 0.53'
|
|
45
|
-
end
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'test_helper'
|
|
4
|
-
|
|
5
|
-
class AnalysedModuleDouble < OpenStruct; end
|
|
6
|
-
|
|
7
|
-
require_relative '../lib/rubycritic/core/analysed_modules_collection'
|
|
8
|
-
class AnalysedModulesCollectionDouble < RubyCritic::AnalysedModulesCollection
|
|
9
|
-
def initialize(module_doubles)
|
|
10
|
-
@modules = module_doubles
|
|
11
|
-
end
|
|
12
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'analysers_test_helper'
|
|
4
|
-
require 'rubycritic/analysers/churn'
|
|
5
|
-
require 'rubycritic/source_control_systems/base'
|
|
6
|
-
|
|
7
|
-
describe RubyCritic::Analyser::Churn do
|
|
8
|
-
context 'when analysing a file' do
|
|
9
|
-
before do
|
|
10
|
-
@analysed_module = AnalysedModuleDouble.new(path: 'path_to_some_file.rb')
|
|
11
|
-
analysed_modules = [@analysed_module]
|
|
12
|
-
analyser = RubyCritic::Analyser::Churn.new(analysed_modules)
|
|
13
|
-
analyser.source_control_system = SourceControlSystemDouble.new
|
|
14
|
-
analyser.run
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it 'calculates its churn' do
|
|
18
|
-
@analysed_module.churn.must_equal 1
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it 'determines the date of its last commit' do
|
|
22
|
-
@analysed_module.committed_at.must_equal '2013-10-09 12:52:49 +0100'
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
class SourceControlSystemDouble < RubyCritic::SourceControlSystem::Base
|
|
28
|
-
def revisions_count(_path)
|
|
29
|
-
1 # churn
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def date_of_last_commit(_path)
|
|
33
|
-
'2013-10-09 12:52:49 +0100'
|
|
34
|
-
end
|
|
35
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'analysers_test_helper'
|
|
4
|
-
require 'rubycritic/analysers/complexity'
|
|
5
|
-
|
|
6
|
-
describe RubyCritic::Analyser::Complexity do
|
|
7
|
-
context 'when analysing a file' do
|
|
8
|
-
before do
|
|
9
|
-
@analysed_module = AnalysedModuleDouble.new(path: 'test/samples/flog/complex.rb', smells: [])
|
|
10
|
-
analysed_modules = [@analysed_module]
|
|
11
|
-
RubyCritic::Analyser::Complexity.new(analysed_modules).run
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it 'calculates its complexity' do
|
|
15
|
-
@analysed_module.complexity.must_be :>, 0
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'analysers_test_helper'
|
|
4
|
-
require 'rubycritic/analysers/helpers/methods_counter'
|
|
5
|
-
|
|
6
|
-
describe RubyCritic::MethodsCounter do
|
|
7
|
-
describe '#count' do
|
|
8
|
-
context 'when a file contains Ruby code' do
|
|
9
|
-
it 'calculates the number of methods' do
|
|
10
|
-
analysed_module = AnalysedModuleDouble.new(path: 'test/samples/methods_count.rb')
|
|
11
|
-
RubyCritic::MethodsCounter.new(analysed_module).count.must_equal 2
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
context 'when a file is empty' do
|
|
16
|
-
it 'returns 0 as the number of methods' do
|
|
17
|
-
analysed_module = AnalysedModuleDouble.new(path: 'test/samples/empty.rb')
|
|
18
|
-
RubyCritic::MethodsCounter.new(analysed_module).count.must_equal 0
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
context 'when a file is unparsable' do
|
|
23
|
-
it 'does not blow up and returns 0 as the number of methods' do
|
|
24
|
-
analysed_module = AnalysedModuleDouble.new(path: 'test/samples/unparsable.rb')
|
|
25
|
-
capture_output_streams do
|
|
26
|
-
RubyCritic::MethodsCounter.new(analysed_module).count.must_equal 0
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'test_helper'
|
|
4
|
-
require 'rubycritic/analysers/helpers/modules_locator'
|
|
5
|
-
require 'rubycritic/core/analysed_module'
|
|
6
|
-
require 'pathname'
|
|
7
|
-
|
|
8
|
-
describe RubyCritic::ModulesLocator do
|
|
9
|
-
describe '#names' do
|
|
10
|
-
context 'when a file contains Ruby code' do
|
|
11
|
-
it 'returns the names of all the classes and modules inside the file' do
|
|
12
|
-
analysed_module = RubyCritic::AnalysedModule.new(
|
|
13
|
-
pathname: Pathname.new('test/samples/module_names.rb'),
|
|
14
|
-
methods_count: 1
|
|
15
|
-
)
|
|
16
|
-
RubyCritic::ModulesLocator.new(analysed_module).names
|
|
17
|
-
.must_equal ['Foo', 'Foo::Bar', 'Foo::Baz', 'Foo::Qux', 'Foo::Quux::Corge']
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
context 'when a file is empty' do
|
|
22
|
-
it 'returns the name of the file titleized' do
|
|
23
|
-
analysed_module = RubyCritic::AnalysedModule.new(
|
|
24
|
-
pathname: Pathname.new('test/samples/empty.rb'),
|
|
25
|
-
methods_count: 1
|
|
26
|
-
)
|
|
27
|
-
RubyCritic::ModulesLocator.new(analysed_module).names.must_equal ['Empty']
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
context 'when a file is unparsable' do
|
|
32
|
-
it 'does not blow up and returns the name of the file titleized' do
|
|
33
|
-
analysed_module = RubyCritic::AnalysedModule.new(
|
|
34
|
-
pathname: Pathname.new('test/samples/unparsable.rb'),
|
|
35
|
-
methods_count: 1
|
|
36
|
-
)
|
|
37
|
-
capture_output_streams do
|
|
38
|
-
RubyCritic::ModulesLocator.new(analysed_module).names.must_equal ['Unparsable']
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
context 'when a file has no methods' do
|
|
44
|
-
it 'returns the names of all the classes and modules inside the file' do
|
|
45
|
-
analysed_module = RubyCritic::AnalysedModule.new(
|
|
46
|
-
pathname: Pathname.new('test/samples/no_methods.rb'),
|
|
47
|
-
methods_count: 0
|
|
48
|
-
)
|
|
49
|
-
capture_output_streams do
|
|
50
|
-
RubyCritic::ModulesLocator.new(analysed_module).names.must_equal ['Foo::NoMethods']
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|