class Rails::AppBuilder
The application builder allows you to override elements of the application generator without being forced to reverse the operations of the default generator.
This allows you to override entire operations, like the creation of the Gemfile, README, or JavaScript files, without needing to know exactly what those operations do so you can create another template action.
class CustomAppBuilder < Rails::AppBuilder def test @generator.gem "rspec-rails", group: [:development, :test] run "bundle install" generate "rspec:install" end end
Public Instance Methods
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 102 def app directory "app" empty_directory_with_keep_file "app/assets/images" keep_file "app/controllers/concerns" keep_file "app/models/concerns" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 111 def bin exclude_pattern = Regexp.union([(/rubocop/ if skip_rubocop?), (/brakeman/ if skip_brakeman?)].compact) directory "bin", { exclude_pattern: exclude_pattern } do |content| "#{shebang}\n" + content end chmod "bin", 0755 & ~File.umask, verbose: false end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 119 def bin_when_updating bin end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 86 def cifiles empty_directory ".github/workflows" template "github/ci.yml", ".github/workflows/ci.yml" template "github/dependabot.yml", ".github/dependabot.yml" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 123 def config empty_directory "config" inside "config" do template "routes.rb" unless options[:update] template "application.rb" template "environment.rb" template "cable.yml" unless options[:update] || options[:skip_action_cable] template "puma.rb" template "storage.yml" unless options[:update] || skip_active_storage? directory "environments" directory "initializers" directory "locales" unless options[:update] end end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 269 def config_target_version @config_target_version || Rails::VERSION::STRING.to_f end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 140 def config_when_updating action_cable_config_exist = File.exist?("config/cable.yml") active_storage_config_exist = File.exist?("config/storage.yml") rack_cors_config_exist = File.exist?("config/initializers/cors.rb") assets_config_exist = File.exist?("config/initializers/assets.rb") asset_manifest_exist = File.exist?("app/assets/config/manifest.js") asset_app_stylesheet_exist = File.exist?("app/assets/stylesheets/application.css") csp_config_exist = File.exist?("config/initializers/content_security_policy.rb") permissions_policy_config_exist = File.exist?("config/initializers/permissions_policy.rb") @config_target_version = Rails.application.config.loaded_config_version || "5.0" config if !options[:skip_action_cable] && !action_cable_config_exist template "config/cable.yml" end if !skip_active_storage? && !active_storage_config_exist template "config/storage.yml" end if skip_sprockets? && skip_propshaft? && !assets_config_exist remove_file "config/initializers/assets.rb" end if skip_sprockets? && !asset_manifest_exist remove_file "app/assets/config/manifest.js" end if skip_sprockets? && !asset_app_stylesheet_exist remove_file "app/assets/stylesheets/application.css" end unless rack_cors_config_exist remove_file "config/initializers/cors.rb" end if options[:api] unless csp_config_exist remove_file "config/initializers/content_security_policy.rb" end unless permissions_policy_config_exist remove_file "config/initializers/permissions_policy.rb" end end end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 66 def configru template "config.ru" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 198 def credentials return if options[:pretend] || options[:dummy_app] require "rails/generators/rails/credentials/credentials_generator" Rails::Generators::CredentialsGenerator.new([], quiet: true).add_credentials_file end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 205 def credentials_diff_enroll return if options[:skip_decrypted_diffs] || options[:dummy_app] || options[:pretend] @generator.shell.mute do rails_command "credentials:diff --enroll", inline: true, shell: @generator.shell end end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 213 def database_yml template "config/databases/#{options[:database]}.yml", "config/database.yml" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 217 def db directory "db" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 273 def devcontainer devcontainer_options = { database: options[:database], redis: !(options[:skip_action_cable] && options[:skip_active_job]), system_test: depends_on_system_test?, active_storage: !options[:skip_active_storage], dev: options[:dev], node: using_node?, app_name: app_name } Rails::Generators::DevcontainerGenerator.new([], devcontainer_options).invoke_all end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 78 def dockerfiles template "Dockerfile" template "dockerignore", ".dockerignore" template "docker-entrypoint", "bin/docker-entrypoint" chmod "bin/docker-entrypoint", 0755 & ~File.umask, verbose: false end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 62 def gemfile template "Gemfile" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 74 def gitattributes template "gitattributes", ".gitattributes" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 70 def gitignore template "gitignore", ".gitignore" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 221 def lib empty_directory "lib" empty_directory_with_keep_file "lib/tasks" empty_directory_with_keep_file "lib/assets" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 227 def log empty_directory_with_keep_file "log" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 189 def master_key return if options[:pretend] || options[:dummy_app] require "rails/generators/rails/master_key/master_key_generator" master_key_generator = Rails::Generators::MasterKeyGenerator.new([], quiet: options[:quiet], force: options[:force]) master_key_generator.add_master_key_file_silently master_key_generator.ignore_master_key_file_silently end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 58 def node_version template "node-version", ".node-version" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 231 def public_directory return if options[:update] && options[:api] directory "public", "public", recursive: false end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 46 def rakefile template "Rakefile" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 50 def readme copy_file "README.md", "README.md" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 92 def rubocop template "rubocop.yml", ".rubocop.yml" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 54 def ruby_version template "ruby-version", ".ruby-version" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 237 def storage empty_directory_with_keep_file "storage" empty_directory_with_keep_file "tmp/storage" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 254 def system_test empty_directory_with_keep_file "test/system" template "test/application_system_test_case.rb" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 242 def test empty_directory_with_keep_file "test/fixtures/files" empty_directory_with_keep_file "test/controllers" empty_directory_with_keep_file "test/mailers" empty_directory_with_keep_file "test/models" empty_directory_with_keep_file "test/helpers" empty_directory_with_keep_file "test/integration" template "test/channels/application_cable/connection_test.rb" template "test/test_helper.rb" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 260 def tmp empty_directory_with_keep_file "tmp" empty_directory_with_keep_file "tmp/pids" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 265 def vendor empty_directory_with_keep_file "vendor" end
# File railties/lib/rails/generators/rails/app/app_generator.rb, line 96 def version_control if !options[:skip_git] && !options[:pretend] run git_init_command, capture: options[:quiet], abort_on_failure: false end end