Module: CreateRailsApp::Options::Catalog

Defined in:
lib/create_rails_app/options/catalog.rb

Overview

Registry of every rails new option create-rails-app knows about.

Each entry in DEFINITIONS describes the option’s type and CLI flags. ORDER controls the sequence in which the wizard presents options.

See Also:

Constant Summary collapse

BASE_DATABASE_VALUES =

Option definitions keyed by symbolic name.

Types:

  • :flag — opt-in; emits --flag when true, nothing when false

  • :enum — emits –flag=value; :none flag emits --skip-flag

  • :skip — opt-out; emits nothing when true (include), --skip-X when false (exclude)

Database adapters shared across all Rails versions.

Returns:

%w[sqlite3 postgresql mysql trilogy].freeze
MARIADB_DATABASE_VALUES =

Database adapters added in Rails 8.0+.

%w[mariadb-mysql mariadb-trilogy].freeze
DEFINITIONS =
{
  # Flags (opt-in)
  api: { type: :flag, on: '--api' }.freeze,
  # Enums
  database: { type: :enum, flag: '--database',
              values: (BASE_DATABASE_VALUES + MARIADB_DATABASE_VALUES).freeze }.freeze,
  javascript: { type: :enum, flag: '--javascript', none: '--skip-javascript',
                values: %w[importmap bun webpack esbuild rollup].freeze }.freeze,
  css: { type: :enum, flag: '--css', none: true,
         values: %w[tailwind bootstrap bulma postcss sass].freeze,
         rails_default: 'none' }.freeze,
  asset_pipeline: { type: :enum, flag: '--asset-pipeline', none: '--skip-asset-pipeline',
                    values: %w[propshaft sprockets].freeze, rails_default: 'sprockets' }.freeze,
  # Skip (included by default, --skip-X to exclude)
  active_record: { type: :skip, skip_flag: '--skip-active-record' }.freeze,
  action_mailer: { type: :skip, skip_flag: '--skip-action-mailer' }.freeze,
  action_mailbox: { type: :skip, skip_flag: '--skip-action-mailbox' }.freeze,
  action_text: { type: :skip, skip_flag: '--skip-action-text' }.freeze,
  active_job: { type: :skip, skip_flag: '--skip-active-job' }.freeze,
  active_storage: { type: :skip, skip_flag: '--skip-active-storage' }.freeze,
  action_cable: { type: :skip, skip_flag: '--skip-action-cable' }.freeze,
  hotwire: { type: :skip, skip_flag: '--skip-hotwire' }.freeze,
  jbuilder: { type: :skip, skip_flag: '--skip-jbuilder' }.freeze,
  test: { type: :skip, skip_flag: '--skip-test' }.freeze,
  system_test: { type: :skip, skip_flag: '--skip-system-test' }.freeze,
  brakeman: { type: :skip, skip_flag: '--skip-brakeman' }.freeze,
  bundler_audit: { type: :skip, skip_flag: '--skip-bundler-audit' }.freeze,
  rubocop: { type: :skip, skip_flag: '--skip-rubocop' }.freeze,
  ci: { type: :skip, skip_flag: '--skip-ci' }.freeze,
  docker: { type: :skip, skip_flag: '--skip-docker' }.freeze,
  kamal: { type: :skip, skip_flag: '--skip-kamal' }.freeze,
  thruster: { type: :skip, skip_flag: '--skip-thruster' }.freeze,
  solid: { type: :skip, skip_flag: '--skip-solid' }.freeze,
  devcontainer: { type: :flag, on: '--devcontainer' }.freeze,
  bootsnap: { type: :skip, skip_flag: '--skip-bootsnap' }.freeze,
  dev_gems: { type: :skip, skip_flag: '--skip-dev-gems' }.freeze,
  keeps: { type: :skip, skip_flag: '--skip-keeps' }.freeze,
  decrypted_diffs: { type: :skip, skip_flag: '--skip-decrypted-diffs' }.freeze,
  git: { type: :skip, skip_flag: '--skip-git' }.freeze,
  bundle: { type: :skip, skip_flag: '--skip-bundle' }.freeze
}.freeze
ORDER =

Wizard step order — matches the sequence users see.

Phase 1: Core architecture (flags + enums + active_record) Phase 2: Skip options with auto-skip consequences + dependents Phase 3: Independent skips + devcontainer flag

Returns:

i[
  api
  active_record
  database
  javascript
  css
  asset_pipeline
  test
  system_test
  hotwire
  jbuilder
  action_mailbox
  action_text
  active_storage
  devcontainer
  action_mailer
  active_job
  action_cable
  brakeman
  bundler_audit
  rubocop
  ci
  docker
  kamal
  thruster
  solid
  bootsnap
  dev_gems
  keeps
  decrypted_diffs
  git
  bundle
].freeze

Class Method Summary collapse

Class Method Details

.fetch(key) ⇒ Hash

Fetches the definition for a given option key.

Parameters:

Returns:

  • the option definition

Raises:

  • if the key is unknown



115
116
117
# File 'lib/create_rails_app/options/catalog.rb', line 115

def self.fetch(key)
  DEFINITIONS.fetch(key.to_sym)
end