Merge pull request #47713 from JuanVqz/railties/thor-stats-task
Use Thor for built-in stats task
This commit is contained in:
commit
292c127d46
46
railties/lib/rails/commands/stats/stats_command.rb
Normal file
46
railties/lib/rails/commands/stats/stats_command.rb
Normal file
@ -0,0 +1,46 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# While global constants are bad, many 3rd party tools depend on this one (e.g
|
||||
# rspec-rails & cucumber-rails). So a deprecation warning is needed if we want
|
||||
# to remove it.
|
||||
STATS_DIRECTORIES ||= [
|
||||
%w(Controllers app/controllers),
|
||||
%w(Helpers app/helpers),
|
||||
%w(Jobs app/jobs),
|
||||
%w(Models app/models),
|
||||
%w(Mailers app/mailers),
|
||||
%w(Mailboxes app/mailboxes),
|
||||
%w(Channels app/channels),
|
||||
%w(Views app/views),
|
||||
%w(JavaScripts app/assets/javascripts),
|
||||
%w(Stylesheets app/assets/stylesheets),
|
||||
%w(JavaScript app/javascript),
|
||||
%w(Libraries lib/),
|
||||
%w(APIs app/apis),
|
||||
%w(Controller\ tests test/controllers),
|
||||
%w(Helper\ tests test/helpers),
|
||||
%w(Job\ tests test/jobs),
|
||||
%w(Model\ tests test/models),
|
||||
%w(Mailer\ tests test/mailers),
|
||||
%w(Mailbox\ tests test/mailboxes),
|
||||
%w(Channel\ tests test/channels),
|
||||
%w(Integration\ tests test/integration),
|
||||
%w(System\ tests test/system),
|
||||
]
|
||||
|
||||
module Rails
|
||||
module Command
|
||||
class StatsCommand < Base # :nodoc:
|
||||
desc "stats", "Report code statistics (KLOCs, etc) from the application or engine"
|
||||
def perform
|
||||
require "rails/code_statistics"
|
||||
|
||||
stat_directories = STATS_DIRECTORIES.collect do |name, dir|
|
||||
[name, Rails::Command.application_root.join(dir)]
|
||||
end.select { |name, dir| File.directory?(dir) }
|
||||
|
||||
CodeStatistics.new(*stat_directories).to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -34,5 +34,11 @@ task :stats do
|
||||
stat_directories = STATS_DIRECTORIES.collect do |name, dir|
|
||||
[ name, "#{File.dirname(Rake.application.rakefile_location)}/#{dir}" ]
|
||||
end.select { |name, dir| File.directory?(dir) }
|
||||
|
||||
$stderr.puts Rails.deprecator.warn(<<~MSG, caller_locations(0..1))
|
||||
`bin/rails stats` as rake task has been deprecated and will be removed in Rails 8.0.
|
||||
Please use `bin/rails stats` as Rails command instead.\n
|
||||
MSG
|
||||
|
||||
CodeStatistics.new(*stat_directories).to_s
|
||||
end
|
||||
|
@ -1,25 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "isolation/abstract_unit"
|
||||
require "rails/command"
|
||||
|
||||
class Rails::Command::DevTest < ActiveSupport::TestCase
|
||||
setup :build_app
|
||||
teardown :teardown_app
|
||||
|
||||
test "`bin/rails stats` handles non-existing directories added by third parties" do
|
||||
Dir.chdir(app_path) do
|
||||
app_file("lib/tasks/custom.rake", <<~CODE
|
||||
task stats: "custom:statsetup"
|
||||
namespace :custom do
|
||||
task statsetup: :environment do
|
||||
require "rails/code_statistics"
|
||||
::STATS_DIRECTORIES << ["app/non_existing"]
|
||||
end
|
||||
end
|
||||
CODE
|
||||
)
|
||||
assert rails "stats"
|
||||
end
|
||||
end
|
||||
end
|
19
railties/test/commands/stats_test.rb
Normal file
19
railties/test/commands/stats_test.rb
Normal file
@ -0,0 +1,19 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "isolation/abstract_unit"
|
||||
require "rails/command"
|
||||
|
||||
class Rails::Command::StatsTest < ActiveSupport::TestCase
|
||||
include ActiveSupport::Testing::Isolation
|
||||
setup :build_app
|
||||
teardown :teardown_app
|
||||
|
||||
test "`bin/rails stats` handles non-existing directories added by third parties" do
|
||||
app_file "config/initializers/custom.rb", <<~CODE
|
||||
require "rails/code_statistics"
|
||||
::STATS_DIRECTORIES << ["Non\ Existing", "app/non_existing"]
|
||||
CODE
|
||||
|
||||
assert rails "stats"
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user