Skip to content

Commit 780afb3

Browse files
committed
Allow registering test directories for CodeStatistics
Make it easier for third party gems, to register test directories. For example `rspec-rails` currently appends to the TEST_TYPES constant: ::STATS_DIRECTORIES << ["#{name} specs", dir] ::CodeStatistics::TEST_TYPES << "#{name} specs" https://github.com/rspec/rspec-rails/blob/418daeb0f492e693b7bd2c6bba1c2c1aee3a4d37/lib/rspec/rails/tasks/rspec.rake#L44 With this change it can be simplified to: ::Rails::CodeStatistics.register_directory "#{name} specs", dir, test_directory: true
1 parent 35bfb52 commit 780afb3

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

railties/lib/rails/code_statistics.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,18 @@ class CodeStatistics
4343
HEADERS = { lines: " Lines", code_lines: " LOC", classes: "Classes", methods: "Methods" }
4444

4545
class_attribute :directories, default: DIRECTORIES
46+
class_attribute :test_types, default: TEST_TYPES
4647

4748
# Add directories to the output of the `bin/rails stats` command.
4849
#
4950
# Rails::CodeStatistics.register_directory("My Directory", "path/to/dir")
50-
def self.register_directory(label, path)
51+
#
52+
# For directories that contain test code, set the `test_directory` argument to true.
53+
#
54+
# Rails::CodeStatistics.register_directory("Model specs", "spec/models", test_directory: true)
55+
def self.register_directory(label, path, test_directory: false)
5156
self.directories << [label, path]
57+
self.test_types << label
5258
end
5359

5460
def initialize(*pairs)
@@ -99,13 +105,13 @@ def calculate_total
99105

100106
def calculate_code
101107
code_loc = 0
102-
@statistics.each { |k, v| code_loc += v.code_lines unless TEST_TYPES.include? k }
108+
@statistics.each { |k, v| code_loc += v.code_lines unless test_types.include? k }
103109
code_loc
104110
end
105111

106112
def calculate_tests
107113
test_loc = 0
108-
@statistics.each { |k, v| test_loc += v.code_lines if TEST_TYPES.include? k }
114+
@statistics.each { |k, v| test_loc += v.code_lines if test_types.include? k }
109115
test_loc
110116
end
111117

railties/test/code_statistics_test.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,20 @@ def teardown
1414
FileUtils.rm_rf(@tmp_path)
1515
end
1616

17+
test "register directories" do
18+
Rails::CodeStatistics.register_directory("My Directory", "path/to/dir")
19+
assert Rails::CodeStatistics.directories.include?(["My Directory", "path/to/dir"])
20+
ensure
21+
Rails::CodeStatistics.directories.delete(["My Directory", "path/to/dir"])
22+
end
23+
24+
test "register test directories" do
25+
Rails::CodeStatistics.register_directory("Model specs", "spec/models", test_directory: true)
26+
assert Rails::CodeStatistics.test_types.include?("Model specs")
27+
ensure
28+
Rails::CodeStatistics.test_types.delete("Model specs")
29+
end
30+
1731
test "ignores directories that happen to have source files extensions" do
1832
assert_nothing_raised do
1933
@code_statistics = Rails::CodeStatistics.new(["tmp dir", @tmp_path])

0 commit comments

Comments
 (0)