diff --git a/railties/lib/rails/app_updater.rb b/railties/lib/rails/app_updater.rb deleted file mode 100644 index d1a1219ffc979..0000000000000 --- a/railties/lib/rails/app_updater.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: true - -require "rails/generators" -require "rails/generators/rails/app/app_generator" - -module Rails - class AppUpdater # :nodoc: - class << self - def invoke_from_app_generator(method) - app_generator.send(method) - end - - def app_generator - @app_generator ||= begin - gen = Rails::Generators::AppGenerator.new ["rails"], generator_options, destination_root: Rails.root - gen.send(:valid_const?) unless File.exist?(Rails.root.join("config", "application.rb")) - gen - end - end - - private - def generator_options - options = { api: !!Rails.application.config.api_only, update: true } - options[:name] = Rails.application.class.name.chomp("::Application").underscore - options[:skip_active_job] = !defined?(ActiveJob::Railtie) - options[:skip_active_record] = !defined?(ActiveRecord::Railtie) - options[:skip_active_storage] = !defined?(ActiveStorage::Engine) - options[:skip_action_mailer] = !defined?(ActionMailer::Railtie) - options[:skip_action_mailbox] = !defined?(ActionMailbox::Engine) - options[:skip_action_text] = !defined?(ActionText::Engine) - options[:skip_action_cable] = !defined?(ActionCable::Engine) - options[:skip_test] = !defined?(Rails::TestUnitRailtie) - options[:skip_system_test] = Rails.application.config.generators.system_tests.nil? - options[:asset_pipeline] = asset_pipeline - options[:skip_asset_pipeline] = asset_pipeline.nil? - options[:skip_bootsnap] = !defined?(Bootsnap) - options - end - - def asset_pipeline - case - when defined?(Sprockets::Railtie) - "sprockets" - when defined?(Propshaft::Railtie) - "propshaft" - else - nil - end - end - end - end -end diff --git a/railties/lib/rails/commands/app/update_command.rb b/railties/lib/rails/commands/app/update_command.rb index a4919b7225158..826d8f4684e9a 100644 --- a/railties/lib/rails/commands/app/update_command.rb +++ b/railties/lib/rails/commands/app/update_command.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true -require "rails/app_updater" +require "rails/generators" +require "rails/generators/rails/app/app_generator" module Rails module Command @@ -11,27 +12,69 @@ def perform configs bin active_storage - Rails::AppUpdater.invoke_from_app_generator :display_upgrade_guide_info + display_upgrade_guide_info end - desc "configs", "Update configuration files in the application config/ directory", hide: true + desc "configs", "Update config files in the application config/ directory", hide: true def configs require_application! - Rails::AppUpdater.invoke_from_app_generator :create_boot_file - Rails::AppUpdater.invoke_from_app_generator :update_config_files + app_generator.create_boot_file + app_generator.update_config_files end - desc "bin", "Update executables in the application bin/ directory", hide: true + desc "bin", "Add or update executables in the application bin/ directory", hide: true def bin require_application! - Rails::AppUpdater.invoke_from_app_generator :update_bin_files + app_generator.update_bin_files end desc "active_storage", "Run the active_storage:update command", hide: true def active_storage require_application! - Rails::AppUpdater.invoke_from_app_generator :update_active_storage + app_generator.update_active_storage end + + private + def display_upgrade_guide_info + say "\nAfter this, check Rails upgrade guide at https://guides.rubyonrails.org/upgrading_ruby_on_rails.html for more details about upgrading your app." + end + + def app_generator + @app_generator ||= begin + gen = Rails::Generators::AppGenerator.new(["rails"], generator_options, destination_root: Rails.root) + gen.send(:valid_const?) unless File.exist?(Rails.root.join("config", "application.rb")) + gen + end + end + + def generator_options + options = { api: !!Rails.application.config.api_only, update: true } + options[:name] = Rails.application.class.name.chomp("::Application").underscore + options[:skip_active_job] = !defined?(ActiveJob::Railtie) + options[:skip_active_record] = !defined?(ActiveRecord::Railtie) + options[:skip_active_storage] = !defined?(ActiveStorage::Engine) + options[:skip_action_mailer] = !defined?(ActionMailer::Railtie) + options[:skip_action_mailbox] = !defined?(ActionMailbox::Engine) + options[:skip_action_text] = !defined?(ActionText::Engine) + options[:skip_action_cable] = !defined?(ActionCable::Engine) + options[:skip_test] = !defined?(Rails::TestUnitRailtie) + options[:skip_system_test] = Rails.application.config.generators.system_tests.nil? + options[:asset_pipeline] = asset_pipeline + options[:skip_asset_pipeline] = asset_pipeline.nil? + options[:skip_bootsnap] = !defined?(Bootsnap) + options + end + + def asset_pipeline + case + when defined?(Sprockets::Railtie) + "sprockets" + when defined?(Propshaft::Railtie) + "propshaft" + else + nil + end + end end end end diff --git a/railties/lib/rails/generators/rails/app/app_generator.rb b/railties/lib/rails/generators/rails/app/app_generator.rb index d8adb76a56782..3c595836fb300 100644 --- a/railties/lib/rails/generators/rails/app/app_generator.rb +++ b/railties/lib/rails/generators/rails/app/app_generator.rb @@ -412,11 +412,6 @@ def create_credentials build(:credentials_diff_enroll) end - def display_upgrade_guide_info - say "\nAfter this, check Rails upgrade guide at https://guides.rubyonrails.org/upgrading_ruby_on_rails.html for more details about upgrading your app." - end - remove_task :display_upgrade_guide_info - def create_boot_file template "config/boot.rb" end