Class: Rails::Generators::AppGenerator

Inherits:
AppBase show all
Defined in:
railties/lib/rails/commands/application/application_command.rb,
railties/lib/rails/generators/rails/app/app_generator.rb

Overview

:nodoc:

Constant Summary

Constants included from AppName

Rails::Generators::AppName::RESERVED_NAMES

Constants included from Database

Database::DATABASES, Database::JDBC_DATABASES

Instance Attribute Summary

Attributes inherited from AppBase

#rails_template

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from AppBase

add_shared_options_for, strict_args_position

Methods included from Database

#convert_database_option_for_jruby, #gem_for_database

Methods inherited from Base

base_root, class_option, default_source_root, desc, hide!, hook_for, inherited, namespace, remove_hook_for, source_root

Methods included from Actions

#add_source, #environment, #gem, #gem_group, #generate, #git, #github, #initializer, #lib, #rails_command, #rake, #rakefile, #readme, #route, #vendor

Constructor Details

#initialize(*args) ⇒ AppGenerator

Returns a new instance of AppGenerator.


264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 264

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

Class Method Details


514
515
516
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 514

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

.exit_on_failure?Boolean

We want to exit on failure to be kind to other libraries This is only when accessing via CLI

Returns:

  • (Boolean)

11
12
13
# File 'railties/lib/rails/commands/application/application_command.rb', line 11

def self.exit_on_failure?
  true
end

Instance Method Details

#create_active_record_filesObject


361
362
363
364
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 361

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

#create_app_filesObject


315
316
317
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 315

def create_app_files
  build(:app)
end

#create_bin_filesObject


319
320
321
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 319

def create_bin_files
  build(:bin)
end

#create_boot_fileObject


357
358
359
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 357

def create_boot_file
  template "config/boot.rb"
end

#create_config_filesObject


335
336
337
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 335

def create_config_files
  build(:config)
end

#create_credentialsObject


348
349
350
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 348

def create_credentials
  build(:credentials)
end

#create_db_filesObject


366
367
368
369
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 366

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

#create_lib_filesObject


371
372
373
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 371

def create_lib_files
  build(:lib)
end

#create_log_filesObject


375
376
377
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 375

def create_log_files
  build(:log)
end

#create_master_keyObject


344
345
346
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 344

def create_master_key
  build(:master_key)
end

#create_public_filesObject


379
380
381
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 379

def create_public_files
  build(:public_directory)
end

#create_root_filesObject


300
301
302
303
304
305
306
307
308
309
310
311
312
313
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 300

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

#create_storage_filesObject


399
400
401
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 399

def create_storage_files
  build(:storage) unless skip_active_storage?
end

#create_system_test_filesObject


395
396
397
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 395

def create_system_test_files
  build(:system_test) if depends_on_system_test?
end

#create_test_filesObject


391
392
393
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 391

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

#create_tmp_filesObject


383
384
385
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 383

def create_tmp_files
  build(:tmp)
end

#create_vendor_filesObject


387
388
389
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 387

def create_vendor_files
  build(:vendor)
end

#delete_action_cable_files_skipping_action_cableObject


473
474
475
476
477
478
479
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 473

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

#delete_action_mailer_files_skipping_action_mailerObject


464
465
466
467
468
469
470
471
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 464

def delete_action_mailer_files_skipping_action_mailer
  if options[: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

#delete_active_job_folder_if_skipping_active_jobObject


458
459
460
461
462
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 458

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

#delete_api_initializersObject


488
489
490
491
492
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 488

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

#delete_app_assets_if_api_optionObject


403
404
405
406
407
408
409
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 403

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

#delete_app_helpers_if_api_optionObject


411
412
413
414
415
416
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 411

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

#delete_app_views_if_api_optionObject


418
419
420
421
422
423
424
425
426
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 418

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

#delete_application_record_skipping_active_recordObject


452
453
454
455
456
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 452

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

#delete_assets_initializer_skipping_sprockets_and_propshaftObject


439
440
441
442
443
444
445
446
447
448
449
450
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 439

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

#delete_new_framework_defaultsObject


494
495
496
497
498
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 494

def delete_new_framework_defaults
  unless options[:update]
    remove_file "config/initializers/new_framework_defaults_#{Rails::VERSION::MAJOR}_#{Rails::VERSION::MINOR}.rb"
  end
end

#delete_non_api_initializers_if_api_optionObject


481
482
483
484
485
486
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 481

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

#delete_public_files_if_api_optionObject


428
429
430
431
432
433
434
435
436
437
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 428

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

#display_upgrade_guide_infoObject


352
353
354
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 352

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

#finish_templateObject


500
501
502
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 500

def finish_template
  build(:leftovers)
end

#run_after_bundle_callbacksObject


510
511
512
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 510

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

#update_active_storageObject


328
329
330
331
332
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 328

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

#update_bin_filesObject


323
324
325
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 323

def update_bin_files
  build(:bin_when_updating)
end

#update_config_filesObject


339
340
341
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 339

def update_config_files
  build(:config_when_updating)
end