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
Source
# File 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
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 111 def bin exclude_pattern = Regexp.union([(/thrust/ if skip_thruster?), (/rubocop/ if skip_rubocop?), (/brakeman/ if skip_brakeman?), (/bundler-audit/ if skip_bundler_audit?)].compact) directory "bin", { exclude_pattern: exclude_pattern } do |content| "#{shebang}\n" + content end chmod "bin", 0755 & ~File.umask, verbose: false end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 119 def bin_when_updating bin end
Source
# File 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
Source
# File 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 "bundler-audit.yml" unless skip_bundler_audit? template "cable.yml" unless options[:update] || skip_action_cable? template "ci.rb" template "puma.rb" template "storage.yml" unless options[:update] || skip_active_storage? directory "environments" directory "initializers" directory "locales" unless options[:update] end end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 273 def config_target_version @config_target_version || Rails::VERSION::STRING.to_f end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 142 def config_when_updating action_cable_config_exist = File.exist?("config/cable.yml") active_storage_config_exist = File.exist?("config/storage.yml") ci_config_exist = File.exist?("config/ci.rb") bundle_audit_config_exist = File.exist?("config/bundler-audit.yml") rack_cors_config_exist = File.exist?("config/initializers/cors.rb") assets_config_exist = File.exist?("config/initializers/assets.rb") asset_app_stylesheet_exist = File.exist?("app/assets/stylesheets/application.css") csp_config_exist = File.exist?("config/initializers/content_security_policy.rb") @config_target_version = Rails.application.config.loaded_config_version || "5.0" config if !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 !ci_config_exist template "config/ci.rb" end if skip_asset_pipeline? && !assets_config_exist remove_file "config/initializers/assets.rb" end if skip_asset_pipeline? && !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 !skip_bundler_audit? && !bundle_audit_config_exist template "config/bundler-audit.yml" end if options[:api] unless csp_config_exist remove_file "config/initializers/content_security_policy.rb" end end end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 66 def configru template "config.ru" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 199 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
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 206 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
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 214 def database_yml template database.template, "config/database.yml" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 218 def db directory "db" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 277 def devcontainer devcontainer_options = { database: options[:database], redis: options[:skip_solid] && !(options[:skip_action_cable] && options[:skip_active_job]), kamal: !options[:skip_kamal], system_test: depends_on_system_test?, active_storage: !options[:skip_active_storage], dev: options[:dev], node: using_node?, app_name: app_name, app_folder: File.basename(app_path), skip_solid: options[:skip_solid], pretend: options[:pretend] } Rails::Generators::DevcontainerGenerator.new([], devcontainer_options).invoke_all end
Source
# File 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
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 62 def gemfile template "Gemfile" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 74 def gitattributes template "gitattributes", ".gitattributes" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 70 def gitignore template "gitignore", ".gitignore" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 222 def lib empty_directory "lib" empty_directory_with_keep_file "lib/tasks" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 227 def log empty_directory_with_keep_file "log" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 191 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 end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 58 def node_version template "node-version", ".node-version" end
Source
# File 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
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 46 def rakefile template "Rakefile" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 50 def readme copy_file "README.md", "README.md" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 92 def rubocop template "rubocop.yml", ".rubocop.yml" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 54 def ruby_version template "ruby-version", ".ruby-version" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 237 def script empty_directory_with_keep_file "script" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 241 def storage empty_directory_with_keep_file "storage" empty_directory_with_keep_file "tmp/storage" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 257 def system_test if devcontainer? && depends_on_system_test? empty_directory_with_keep_file "test/system" template "test/application_system_test_case.rb" end end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 246 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/test_helper.rb" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 264 def tmp empty_directory_with_keep_file "tmp" empty_directory_with_keep_file "tmp/pids" end
Source
# File lib/rails/generators/rails/app/app_generator.rb, line 269 def vendor empty_directory_with_keep_file "vendor" end
Source
# File 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