run "if uname | grep -q 'Darwin'; then pgrep spring | xargs kill -9; fi"
# Gemfile
########################################
inject_into_file "Gemfile", before: "group :development, :test do" do
<<~RUBY
gem "bootstrap", "~> 5.2"
gem "devise"
gem "autoprefixer-rails"
gem "font-awesome-sass", "~> 6.1"
gem "simple_form", github: "heartcombo/simple_form"
gem "sassc-rails"
RUBY
end
inject_into_file "Gemfile", after: "group :development, :test do" do
"\n gem \"dotenv-rails\""
end
# Assets
########################################
run "rm -rf app/assets/stylesheets"
run "rm -rf vendor"
run "curl -L https://github.com/lewagon/rails-stylesheets/archive/master.zip > stylesheets.zip"
run "unzip stylesheets.zip -d app/assets && rm -f stylesheets.zip && rm -f app/assets/rails-stylesheets-master/README.md"
run "mv app/assets/rails-stylesheets-master app/assets/stylesheets"
# Layout
########################################
gsub_file(
"app/views/layouts/application.html.erb",
'',
''
)
# Flashes
########################################
file "app/views/shared/_flashes.html.erb", <<~HTML
<% if notice %>
<%= notice %>
<% end %>
<% if alert %>
<%= alert %>
<% end %>
HTML
run "curl -L https://raw.githubusercontent.com/lewagon/awesome-navbars/master/templates/_navbar_wagon.html.erb > app/views/shared/_navbar.html.erb"
inject_into_file "app/views/layouts/application.html.erb", after: "" do
<<~HTML
<%= render "shared/navbar" %>
<%= render "shared/flashes" %>
HTML
end
# README
########################################
markdown_file_content = <<~MARKDOWN
Rails app generated with [lewagon/rails-templates](https://github.com/lewagon/rails-templates), created by the [Le Wagon coding bootcamp](https://www.lewagon.com) team.
MARKDOWN
file "README.md", markdown_file_content, force: true
# Generators
########################################
generators = <<~RUBY
config.generators do |generate|
generate.assets false
generate.helper false
generate.test_framework :test_unit, fixture: false
end
RUBY
environment generators
# General Config
########################################
general_config = <<~RUBY
config.action_controller.raise_on_missing_callback_actions = false if Rails.version >= "7.1.0"
RUBY
environment general_config
########################################
# After bundle
########################################
after_bundle do
# Generators: db + simple form + pages controller
########################################
rails_command "db:drop db:create db:migrate"
generate("simple_form:install", "--bootstrap")
generate(:controller, "pages", "home", "--skip-routes", "--no-test-framework")
# Routes
########################################
route 'root to: "pages#home"'
# Gitignore
########################################
append_file ".gitignore", <<~TXT
# Ignore .env file containing credentials.
.env*
# Ignore Mac and Linux file system files
*.swp
.DS_Store
TXT
# Devise install + user
########################################
generate("devise:install")
generate("devise", "User")
# Application controller
########################################
run "rm app/controllers/application_controller.rb"
file "app/controllers/application_controller.rb", <<~RUBY
class ApplicationController < ActionController::Base
before_action :authenticate_user!
end
RUBY
# migrate + devise views
########################################
rails_command "db:migrate"
generate("devise:views")
link_to = <<~HTML
Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %>
HTML
button_to = <<~HTML
Unhappy?
<%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete, class: "btn btn-link" %>
HTML
gsub_file("app/views/devise/registrations/edit.html.erb", link_to, button_to)
# Pages Controller
########################################
run "rm app/controllers/pages_controller.rb"
file "app/controllers/pages_controller.rb", <<~RUBY
class PagesController < ApplicationController
skip_before_action :authenticate_user!, only: [ :home ]
def home
end
end
RUBY
# Environments
########################################
environment 'config.action_mailer.default_url_options = { host: "http://localhost:3000" }', env: "development"
environment 'config.action_mailer.default_url_options = { host: "http://TODO_PUT_YOUR_DOMAIN_HERE" }', env: "production"
# Bootstrap & Popper
########################################
append_file "config/importmap.rb", <<~RUBY
pin "bootstrap", to: "bootstrap.min.js", preload: true
pin "@popperjs/core", to: "popper.js", preload: true
RUBY
append_file "config/initializers/assets.rb", <<~RUBY
Rails.application.config.assets.precompile += %w(bootstrap.min.js popper.js)
RUBY
append_file "app/javascript/application.js", <<~JS
import "@popperjs/core"
import "bootstrap"
JS
append_file "app/assets/config/manifest.js", <<~JS
//= link popper.js
//= link bootstrap.min.js
JS
# Heroku
########################################
run "bundle lock --add-platform x86_64-linux"
# Dotenv
########################################
run "touch '.env'"
# Rubocop
########################################
run "curl -L https://raw.githubusercontent.com/lewagon/rails-templates/master/.rubocop.yml > .rubocop.yml"
# Git
########################################
git :init
git add: "."
git commit: "-m 'Initial commit with devise template from https://github.com/lewagon/rails-templates'"
end