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 %> <% end %> <% if 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