| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | def source_paths  [File.expand_path(File.dirname(__FILE__))]enddef add_gems  gem 'administrate', '~> 0.8.1'  gem 'devise', '~> 4.3.0'  gem 'devise-bootstrapped', github: 'excid3/devise-bootstrapped', branch: 'bootstrap4'  gem 'jquery-rails', '~> 4.3.1'  gem 'bootstrap', '~> 4.0.0.alpha6'  gem 'rails-assets-tether', '>= 1.3.3', source: 'https://rails-assets.org'  gem 'webpacker', '~> 1.1'  gem 'sidekiq', '~> 5.0'  gem 'foreman', '~> 0.84.0'enddef add_users  # Install Devise  generate "devise:install"  # Configure Devise  environment "config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }",              env: 'development'  route "root to: 'home#index'"  # Devise notices are installed via Bootstrap  generate "devise:views:bootstrapped"  # Create Devise User  generate :devise, "User",           "first_name",           "last_name",           "announcements_last_read_at:datetime",           "admin:boolean"  # Set admin default to false  in_root do    migration = Dir.glob("db/migrate/*").max_by{ |f| File.mtime(f) }    gsub_file migration, /:admin/, ":admin, default: false"  endenddef add_bootstrap  # Remove Application CSS  run "rm app/assets/stylesheets/application.css"  # Add Bootstrap JS  insert_into_file(    "app/assets/javascripts/application.js",    "\n//= require jquery\n//= require tether\n//= require bootstrap",    after: "//= require rails-ujs"  )enddef copy_templates  directory "app", force: true  route "get '/terms', to: 'home#terms'"  route "get '/privacy', to: 'home#privacy'"enddef add_webpack  rails_command 'webpacker:install'enddef add_sidekiq  environment "config.active_job.queue_adapter = :sidekiq"  insert_into_file "config/routes.rb",    "require 'sidekiq/web'\n\n",    before: "Rails.application.routes.draw do"  insert_into_file "config/routes.rb",    "  authenticate :user, lambda { |u| u.admin? } do\n    mount Sidekiq::Web => '/sidekiq'\n  end\n\n",    after: "Rails.application.routes.draw do\n"enddef add_foreman  copy_file "Procfile"enddef add_announcements  generate "model Announcement published_at:datetime announcement_type name description:text"  route "resources :announcements, only: [:index]"enddef add_administrate  generate "administrate:install"  gsub_file "app/dashboards/announcement_dashboard.rb",    /announcement_type: Field::String/,    "announcement_type: Field::Select.with_options(collection: Announcement::TYPES)"end# Main setupadd_gemsafter_bundle do  add_users  add_bootstrap  add_sidekiq  add_foreman  add_webpack  add_announcements  # Migrate  rails_command "db:create"  rails_command "db:migrate"  # Migrations must be done before this  add_administrate  copy_templates  git :init  git add: "."  git commit: %Q{ -m 'Initial commit' }end
 |