class Rails::Generators::AppGenerator

:nodoc:

def self.banner

def self.banner
  "rails new #{arguments.map(&:usage).join(' ')} [options]"
end

def self.exit_on_failure?

This is only when accessing via CLI
We want to exit on failure to be kind to other libraries
:nodoc:
def self.exit_on_failure?
  true
end

def after_bundle(&block) # :doc:

:doc:
end
git add: '.'
after_bundle do

have run.
Registers a callback to be executed after bundle binstubs
def after_bundle(&block) # :doc:
  @after_bundle_callbacks << block
end

def create_active_record_files

def create_active_record_files
  return if options[:skip_active_record]
  build(:database_yml)
end

def create_app_files

def create_app_files
  build(:app)
end

def create_bin_files

def create_bin_files
  build(:bin)
end

def create_boot_file

def create_boot_file
  template "config/boot.rb"
end

def create_config_files

def create_config_files
  build(:config)
end

def create_credentials

def create_credentials
  build(:credentials)
end

def create_db_files

def create_db_files
  return if options[:skip_active_record]
  build(:db)
end

def create_lib_files

def create_lib_files
  build(:lib)
end

def create_log_files

def create_log_files
  build(:log)
end

def create_master_key

def create_master_key
  build(:master_key)
end

def create_public_files

def create_public_files
  build(:public_directory)
end

def create_root_files

def create_root_files
  build(:readme)
  build(:rakefile)
  build(:ruby_version)
  build(:configru)
  unless options[:skip_git]
    build(:gitignore)
    build(:gitattributes)
  end
  build(:gemfile)
  build(:version_control)
end

def create_storage_files

def create_storage_files
  build(:storage) unless skip_active_storage?
end

def create_system_test_files

def create_system_test_files
  build(:system_test) if depends_on_system_test?
end

def create_test_files

def create_test_files
  build(:test) unless options[:skip_test]
end

def create_tmp_files

def create_tmp_files
  build(:tmp)
end

def create_vendor_files

def create_vendor_files
  build(:vendor)
end

def delete_action_cable_files_skipping_action_cable

def delete_action_cable_files_skipping_action_cable
  if options[:skip_action_cable]
    remove_dir "app/javascript/channels"
    remove_dir "app/channels"
    remove_dir "test/channels"
  end
end

def delete_action_mailer_files_skipping_action_mailer

def delete_action_mailer_files_skipping_action_mailer
  if skip_action_mailer?
    remove_file "app/views/layouts/mailer.html.erb"
    remove_file "app/views/layouts/mailer.text.erb"
    remove_dir "app/mailers"
    remove_dir "test/mailers"
  end
end

def delete_active_job_folder_if_skipping_active_job

def delete_active_job_folder_if_skipping_active_job
  if options[:skip_active_job]
    remove_dir "app/jobs"
  end
end

def delete_api_initializers

def delete_api_initializers
  unless options[:api]
    remove_file "config/initializers/cors.rb"
  end
end

def delete_app_assets_if_api_option

def delete_app_assets_if_api_option
  if options[:api]
    remove_dir "app/assets"
    remove_dir "lib/assets"
    remove_dir "tmp/cache/assets"
  end
end

def delete_app_helpers_if_api_option

def delete_app_helpers_if_api_option
  if options[:api]
    remove_dir "app/helpers"
    remove_dir "test/helpers"
  end
end

def delete_app_views_if_api_option

def delete_app_views_if_api_option
  if options[:api]
    if skip_action_mailer?
      remove_dir "app/views"
    else
      remove_file "app/views/layouts/application.html.erb"
    end
  end
end

def delete_application_record_skipping_active_record

def delete_application_record_skipping_active_record
  if options[:skip_active_record]
    remove_file "app/models/application_record.rb"
  end
end

def delete_assets_initializer_skipping_sprockets_and_propshaft

def delete_assets_initializer_skipping_sprockets_and_propshaft
  if skip_sprockets? && skip_propshaft?
    remove_file "config/initializers/assets.rb"
  end
  if skip_sprockets?
    remove_file "app/assets/config/manifest.js"
    remove_dir  "app/assets/config"
    remove_file "app/assets/stylesheets/application.css"
    create_file "app/assets/stylesheets/application.css", "/* Application styles */\n" unless options[:api]
  end
end

def delete_new_framework_defaults

def delete_new_framework_defaults
  unless options[:update]
    remove_file "config/initializers/new_framework_defaults_7_0.rb"
  end
end

def delete_non_api_initializers_if_api_option

def delete_non_api_initializers_if_api_option
  if options[:api]
    remove_file "config/initializers/content_security_policy.rb"
    remove_file "config/initializers/permissions_policy.rb"
  end
end

def delete_public_files_if_api_option

def delete_public_files_if_api_option
  if options[:api]
    remove_file "public/404.html"
    remove_file "public/422.html"
    remove_file "public/500.html"
    remove_file "public/apple-touch-icon-precomposed.png"
    remove_file "public/apple-touch-icon.png"
    remove_file "public/favicon.ico"
  end
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 file(*args, &block)

Define file as an alias to create_file for backwards compatibility.
def file(*args, &block)
  create_file(*args, &block)
end

def finish_template

def finish_template
  build(:leftovers)
end

def get_builder_class

def get_builder_class
  defined?(::AppBuilder) ? ::AppBuilder : Rails::AppBuilder
end

def initialize(*args)

def initialize(*args)
  super
  if !options[:skip_active_record] && !DATABASES.include?(options[:database])
    raise Error, "Invalid value for --database option. Supported preconfigurations are: #{DATABASES.join(", ")}."
  end
  # Force sprockets and JavaScript to be skipped when generating API only apps.
  # Can't modify options hash as it's frozen by default.
  if options[:api]
    self.options = options.merge(skip_asset_pipeline: true, skip_javascript: true).freeze
  end
  if options[:minimal]
    self.options = options.merge(
      skip_action_cable: true,
      skip_action_mailer: true,
      skip_action_mailbox: true,
      skip_action_text: true,
      skip_active_job: true,
      skip_active_storage: true,
      skip_bootsnap: true,
      skip_dev_gems: true,
      skip_javascript: true,
      skip_jbuilder: true,
      skip_system_test: true,
      skip_hotwire: true).freeze
  end
  @after_bundle_callbacks = []
end

def run_after_bundle_callbacks

def run_after_bundle_callbacks
  @after_bundle_callbacks.each(&:call)
end

def update_active_storage

def update_active_storage
  unless skip_active_storage?
    rails_command "active_storage:update", inline: true
  end
end

def update_bin_files

def update_bin_files
  build(:bin_when_updating)
end

def update_config_files

def update_config_files
  build(:config_when_updating)
end

def update_db_schema

def update_db_schema
  build(:db_when_updating)
end