My opinionated ruby on rails template
at main 133 lines 8.7 kB view raw
1# frozen_string_literal: true 2 3say '🚃 boxcar - Rails starter kit', :cyan 4say '' 5 6# ═══════════════════════════════════════════════════════════════════════════════ 7# Template Configuration 8# ═══════════════════════════════════════════════════════════════════════════════ 9 10TEMPLATE_ROOT = if __FILE__.start_with?('http') 11 File.dirname(__FILE__) 12 else 13 __dir__ 14 end 15 16@post_install_tasks = [] 17 18def apply_module(name, tasks = []) 19 apply File.join(TEMPLATE_ROOT, 'modules', "#{name}.rb") 20 @post_install_tasks.concat(tasks) 21end 22 23# ═══════════════════════════════════════════════════════════════════════════════ 24# Remove Rails 8 defaults we'll replace 25# ═══════════════════════════════════════════════════════════════════════════════ 26 27remove_file 'config/initializers/content_security_policy.rb' 28 29# ═══════════════════════════════════════════════════════════════════════════════ 30# Base Setup 31# ═══════════════════════════════════════════════════════════════════════════════ 32 33apply_module('base_gems') 34apply_module('credentials') 35apply_module('development_tools') 36apply_module('github') 37apply_module('logging') 38 39# ═══════════════════════════════════════════════════════════════════════════════ 40# Database & Infrastructure 41# ═══════════════════════════════════════════════════════════════════════════════ 42 43apply_module('database') 44apply_module('redis') 45apply_module('caching') 46 47# ═══════════════════════════════════════════════════════════════════════════════ 48# Security 49# ═══════════════════════════════════════════════════════════════════════════════ 50 51apply_module('security') 52 53# ═══════════════════════════════════════════════════════════════════════════════ 54# Authentication & Authorization 55# ═══════════════════════════════════════════════════════════════════════════════ 56 57apply_module('public_identifiable') 58apply_module('auth', ['run `rails db:migrate`']) 59apply_module('pundit') 60 61# ═══════════════════════════════════════════════════════════════════════════════ 62# Frontend & SEO 63# ═══════════════════════════════════════════════════════════════════════════════ 64 65gem 'tailwindcss-rails' 66apply_module('tailwind') 67apply_module('seo') 68 69# ═══════════════════════════════════════════════════════════════════════════════ 70# Background Jobs & Feature Flags 71# ═══════════════════════════════════════════════════════════════════════════════ 72 73apply_module('good_job') 74apply_module('flipper') 75 76# ═══════════════════════════════════════════════════════════════════════════════ 77# Admin Dashboards 78# ═══════════════════════════════════════════════════════════════════════════════ 79 80apply_module('blazer') 81apply_module('rails_performance') 82apply_module('console1984') 83apply_module('pghero') 84 85# ═══════════════════════════════════════════════════════════════════════════════ 86# Monitoring & Analytics 87# ═══════════════════════════════════════════════════════════════════════════════ 88 89apply_module('health_checks') 90apply_module('analytics') 91apply_module('metrics') 92 93# ═══════════════════════════════════════════════════════════════════════════════ 94# Data Management 95# ═══════════════════════════════════════════════════════════════════════════════ 96 97apply_module('paper_trail') 98apply_module('soft_delete') 99apply_module('friendly_id') 100apply_module('pg_search') 101apply_module('aasm') 102 103# ═══════════════════════════════════════════════════════════════════════════════ 104# Email & Pagination 105# ═══════════════════════════════════════════════════════════════════════════════ 106 107apply_module('kaminari') 108apply_module('mailkick') 109apply_module('email') 110 111# ═══════════════════════════════════════════════════════════════════════════════ 112# Admin Routes (must be last - depends on all admin modules) 113# ═══════════════════════════════════════════════════════════════════════════════ 114 115apply_module('admin_routes') 116 117# ═══════════════════════════════════════════════════════════════════════════════ 118# Finish 119# ═══════════════════════════════════════════════════════════════════════════════ 120 121say '' 122say '' 123say '✅ boxcar setup complete!', :green 124say '' 125 126if @post_install_tasks.any? 127 say 'Next steps:', :yellow 128 @post_install_tasks.uniq.each { |task| say " - #{task}", :yellow } 129 say '' 130end 131 132say 'Run `cd #{app_name} && bin/dev` to start your app', :cyan 133say ''