generated from justalever/kickoff_tailwind
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtemplate.rb
116 lines (92 loc) · 2.83 KB
/
template.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
=begin
Template Name: Kickoff - Tailwind CSS
Author: Andy Leverenz
Author URI: https://web-crunch.com
Instructions: $ rails new myapp -d <postgresql, mysql, sqlite3> -m template.rb
=end
def source_paths
[File.expand_path(File.dirname(__FILE__))]
end
def add_gems
gem 'devise', '~> 4.7', '>= 4.7.3'
gem 'friendly_id', '~> 5.4', '>= 5.4.1'
gem 'sidekiq', '~> 6.1', '>= 6.1.2'
gem 'name_of_person', '~> 1.1', '>= 1.1.1'
end
def 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'"
# Create Devise User
generate :devise, "User", "first_name", "last_name", "admin:boolean"
# set admin boolean to false by default
in_root do
migration = Dir.glob("db/migrate/*").max_by{ |f| File.mtime(f) }
gsub_file migration, /:admin/, ":admin, default: false"
end
# name_of_person gem
append_to_file("app/models/user.rb", "\nhas_person_name\n", after: "class User < ApplicationRecord")
end
def copy_templates
directory "app", force: true
end
def add_tailwind
# Until PostCSS 8 ships with Webpacker/Rails we need to run this compatability version
# See: https://tailwindcss.com/docs/installation#post-css-7-compatibility-build
run "yarn add tailwindcss@npm:@tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9"
run "mkdir -p app/javascript/stylesheets"
append_to_file("app/javascript/packs/application.js", 'import "stylesheets/application"')
inject_into_file("./postcss.config.js", "\n require('tailwindcss')('./app/javascript/stylesheets/tailwind.config.js'),", after: "plugins: [")
run "mkdir -p app/javascript/stylesheets/components"
end
# Remove Application CSS
def remove_app_css
remove_file "app/assets/stylesheets/application.css"
end
def 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"
content = <<-RUBY
authenticate :user, lambda { |u| u.admin? } do
mount Sidekiq::Web => '/sidekiq'
end
RUBY
insert_into_file "config/routes.rb", "#{content}\n\n", after: "Rails.application.routes.draw do\n"
end
def add_foreman
copy_file "Procfile"
end
def add_friendly_id
generate "friendly_id"
end
# Main setup
source_paths
add_gems
after_bundle do
add_users
remove_app_css
add_sidekiq
add_foreman
copy_templates
add_tailwind
add_friendly_id
# Migrate
rails_command "db:create"
rails_command "db:migrate"
git :init
git add: "."
git commit: %Q{ -m "Initial commit" }
say
say "Kickoff app successfully created! 👍", :green
say
say "Switch to your app by running:"
say "$ cd #{app_name}", :yellow
say
say "Then run:"
say "$ rails server", :green
end