Class: Rails::Generators::AppGenerator

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

Overview

:nodoc:

Constant Summary collapse

WEBPACKS =

:stopdoc:

%w( react vue angular elm stimulus )

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.



289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
# File 'lib/rails/generators/rails/app/app_generator.rb', line 289

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 yarn 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_sprockets: 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_spring: true,
      skip_system_test: true,
      skip_webpack_install: true,
      skip_turbolinks: true).tap do |option|
        if option[:webpack]
          option[:skip_webpack_install] = false
          option[:skip_javascript] = false
        end
      end.freeze
  end

  @after_bundle_callbacks = []
end

Class Method Details



556
557
558
# File 'lib/rails/generators/rails/app/app_generator.rb', line 556

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 'lib/rails/commands/application/application_command.rb', line 11

def self.exit_on_failure?
  true
end

Instance Method Details

#create_active_record_filesObject



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

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

#create_app_filesObject



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

def create_app_files
  build(:app)
end

#create_bin_filesObject



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

def create_bin_files
  build(:bin)
end

#create_boot_fileObject



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

def create_boot_file
  template "config/boot.rb"
end

#create_config_filesObject



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

def create_config_files
  build(:config)
end

#create_credentialsObject



385
386
387
# File 'lib/rails/generators/rails/app/app_generator.rb', line 385

def create_credentials
  build(:credentials)
end

#create_db_filesObject



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

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

#create_lib_filesObject



408
409
410
# File 'lib/rails/generators/rails/app/app_generator.rb', line 408

def create_lib_files
  build(:lib)
end

#create_log_filesObject



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

def create_log_files
  build(:log)
end

#create_master_keyObject



381
382
383
# File 'lib/rails/generators/rails/app/app_generator.rb', line 381

def create_master_key
  build(:master_key)
end

#create_public_filesObject



416
417
418
# File 'lib/rails/generators/rails/app/app_generator.rb', line 416

def create_public_files
  build(:public_directory)
end

#create_root_filesObject



331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
# File 'lib/rails/generators/rails/app/app_generator.rb', line 331

def create_root_files
  build(:readme)
  build(:rakefile)
  build(:ruby_version)
  build(:configru)

  unless options[:skip_git]
    build(:gitignore)
    build(:gitattributes)
  end

  build(:gemfile) unless options[:skip_gemfile]
  build(:version_control)
  build(:package_json) unless options[:skip_javascript]
end

#create_storage_filesObject



436
437
438
# File 'lib/rails/generators/rails/app/app_generator.rb', line 436

def create_storage_files
  build(:storage) unless skip_active_storage?
end

#create_system_test_filesObject



432
433
434
# File 'lib/rails/generators/rails/app/app_generator.rb', line 432

def create_system_test_files
  build(:system_test) if depends_on_system_test?
end

#create_test_filesObject



428
429
430
# File 'lib/rails/generators/rails/app/app_generator.rb', line 428

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

#create_tmp_filesObject



420
421
422
# File 'lib/rails/generators/rails/app/app_generator.rb', line 420

def create_tmp_files
  build(:tmp)
end

#create_vendor_filesObject



424
425
426
# File 'lib/rails/generators/rails/app/app_generator.rb', line 424

def create_vendor_files
  build(:vendor)
end

#delete_action_cable_files_skipping_action_cableObject



516
517
518
519
520
521
522
# File 'lib/rails/generators/rails/app/app_generator.rb', line 516

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



507
508
509
510
511
512
513
514
# File 'lib/rails/generators/rails/app/app_generator.rb', line 507

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



501
502
503
504
505
# File 'lib/rails/generators/rails/app/app_generator.rb', line 501

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

#delete_api_initializersObject



532
533
534
535
536
# File 'lib/rails/generators/rails/app/app_generator.rb', line 532

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

#delete_app_assets_if_api_optionObject



440
441
442
443
444
445
446
# File 'lib/rails/generators/rails/app/app_generator.rb', line 440

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



448
449
450
451
452
453
# File 'lib/rails/generators/rails/app/app_generator.rb', line 448

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



455
456
457
458
459
460
461
462
463
# File 'lib/rails/generators/rails/app/app_generator.rb', line 455

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



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

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_sprocketsObject



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

def delete_assets_initializer_skipping_sprockets
  if options[:skip_sprockets]
    remove_file "config/initializers/assets.rb"
  end
end

#delete_js_folder_skipping_javascriptObject



476
477
478
479
480
# File 'lib/rails/generators/rails/app/app_generator.rb', line 476

def delete_js_folder_skipping_javascript
  if options[:skip_javascript] && !options[:minimal]
    remove_dir "app/javascript"
  end
end

#delete_js_packs_when_minimal_skipping_webpackObject



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

def delete_js_packs_when_minimal_skipping_webpack
  if options[:minimal] && options[:skip_webpack_install]
    remove_dir "app/javascript/packs"
    keep_file  "app/javascript"
  end
end

#delete_new_framework_defaultsObject



538
539
540
541
542
# File 'lib/rails/generators/rails/app/app_generator.rb', line 538

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

#delete_non_api_initializers_if_api_optionObject



524
525
526
527
528
529
530
# File 'lib/rails/generators/rails/app/app_generator.rb', line 524

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

#delete_public_files_if_api_optionObject



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

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



389
390
391
# File 'lib/rails/generators/rails/app/app_generator.rb', line 389

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



544
545
546
# File 'lib/rails/generators/rails/app/app_generator.rb', line 544

def finish_template
  build(:leftovers)
end

#run_after_bundle_callbacksObject



552
553
554
# File 'lib/rails/generators/rails/app/app_generator.rb', line 552

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

#update_active_storageObject



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

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

#update_bin_filesObject



355
356
357
# File 'lib/rails/generators/rails/app/app_generator.rb', line 355

def update_bin_files
  build(:bin_when_updating)
end

#update_bin_yarnObject



360
361
362
# File 'lib/rails/generators/rails/app/app_generator.rb', line 360

def update_bin_yarn
  build(:yarn_when_updating)
end

#update_config_filesObject



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

def update_config_files
  build(:config_when_updating)
end