Rails::AppBuilder (original) (raw)
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
Methods
A
B
C
- cifiles,
- config,
- config_target_version,
- config_when_updating,
- configru,
- credentials,
- credentials_diff_enroll
D
G
L
M
N
P
R
S
T
V
Instance Public methods
app()Link
def app directory "app"
empty_directory_with_keep_file "app/assets/images"
keep_file "app/controllers/concerns" keep_file "app/models/concerns" end
bin()Link
def bin exclude_pattern = Regexp.union([(/thrust/ if skip_thruster?), (/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
bin_when_updating()Link
cifiles()Link
def cifiles empty_directory ".github/workflows" template "github/ci.yml", ".github/workflows/ci.yml" template "github/dependabot.yml", ".github/dependabot.yml" end
config()Link
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
config_target_version()Link
def config_target_version @config_target_version || Rails::VERSION::STRING.to_f end
config_when_updating()Link
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_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 !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_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 options[:api] unless csp_config_exist remove_file "config/initializers/content_security_policy.rb" end end end
credentials()Link
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
credentials_diff_enroll()Link
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
database_yml()Link
def database_yml template database.template, "config/database.yml" end
devcontainer()Link
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, skip_solid: options[:skip_solid] }
Rails::Generators::DevcontainerGenerator.new([], devcontainer_options).invoke_all end
dockerfiles()Link
def dockerfiles template "Dockerfile" template "dockerignore", ".dockerignore"
template "docker-entrypoint", "bin/docker-entrypoint" chmod "bin/docker-entrypoint", 0755 & ~File.umask, verbose: false end
gitattributes()Link
def gitattributes template "gitattributes", ".gitattributes" end
gitignore()Link
def gitignore template "gitignore", ".gitignore" end
lib()Link
def lib empty_directory "lib" empty_directory_with_keep_file "lib/tasks" end
master_key()Link
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
node_version()Link
def node_version template "node-version", ".node-version" end
public_directory()Link
def public_directory return if options[:update] && options[:api]
directory "public", "public", recursive: false end
readme()Link
def readme copy_file "README.md", "README.md" end
rubocop()Link
def rubocop template "rubocop.yml", ".rubocop.yml" end
ruby_version()Link
def ruby_version template "ruby-version", ".ruby-version" end
script()Link
def script empty_directory_with_keep_file "script" end
storage()Link
def storage empty_directory_with_keep_file "storage" empty_directory_with_keep_file "tmp/storage" end
system_test()Link
def system_test empty_directory_with_keep_file "test/system"
template "test/application_system_test_case.rb" end
test()Link
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
tmp()Link
def tmp empty_directory_with_keep_file "tmp" empty_directory_with_keep_file "tmp/pids" end
vendor()Link
def vendor empty_directory_with_keep_file "vendor" end
version_control()Link
def version_control if !options[:skip_git] && !options[:pretend] run git_init_command, capture: options[:quiet], abort_on_failure: false end end