class Rails::Command::App::UpdateCommand

:nodoc:

def active_storage

def active_storage
  require_application!
  app_generator.update_active_storage
end

def app_generator

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 asset_pipeline

def asset_pipeline
  case
  when defined?(Sprockets::Railtie)
    "sprockets"
  when defined?(Propshaft::Railtie)
    "propshaft"
  else
    nil
  end
end

def bin

def bin
  require_application!
  app_generator.update_bin_files
end

def configs

def configs
  require_application!
  app_generator.create_boot_file
  app_generator.update_config_files
end

def display_upgrade_guide_info

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 generator_options

def generator_options
  {
    api:                 !!Rails.application.config.api_only,
    update:              true,
    name:                Rails.application.class.name.chomp("::Application").underscore,
    skip_active_job:     !defined?(ActiveJob::Railtie),
    skip_active_record:  !defined?(ActiveRecord::Railtie),
    skip_active_storage: !defined?(ActiveStorage::Engine),
    skip_action_mailer:  !defined?(ActionMailer::Railtie),
    skip_action_mailbox: !defined?(ActionMailbox::Engine),
    skip_action_text:    !defined?(ActionText::Engine),
    skip_action_cable:   !defined?(ActionCable::Engine),
    skip_brakeman:       skip_gem?("brakeman"),
    skip_rubocop:        skip_gem?("rubocop"),
    skip_test:           !defined?(Rails::TestUnitRailtie),
    skip_system_test:    Rails.application.config.generators.system_tests.nil?,
    asset_pipeline:      asset_pipeline,
    skip_asset_pipeline: asset_pipeline.nil?,
    skip_bootsnap:       !defined?(Bootsnap),
  }.merge(options)
end

def perform

def perform
  configs
  bin
  public_directory
  active_storage
  display_upgrade_guide_info
end

def public_directory

def public_directory
  require_application!
  app_generator.create_public_files
end

def skip_gem?(gem_name)

def skip_gem?(gem_name)
  gem gem_name
  false
rescue LoadError
  true
end