generated from tingtinghsu/kickoff_tailwind
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
template.rb
130 lines (103 loc) · 3.12 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
=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.2'
gem 'sidekiq', '~> 6.1', '>= 6.1.1'
gem 'name_of_person', '~> 1.1', '>= 1.1.1'
gem 'friendly_id', git: 'https://github.com/norman/friendly_id'
end
gem_group :development, :test do
gem 'foreman', '~> 0.87.1'
gem 'hirb-unicode', '~> 0.0.5'
gem 'rspec-rails', '~> 4.0'
gem 'factory_bot_rails', '~> 5.1', '>= 5.1.1'
gem 'faker', '~> 2.11'
gem 'pry-rails', '~> 0.3.9'
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
run "yarn add tailwindcss"
run "yarn add @fullhuman/postcss-purgecss"
run "mkdir -p app/javascript/stylesheets"
append_to_file("app/javascript/packs/application.js", 'import "stylesheets/application"')
inject_into_file("./postcss.config.js",
"let tailwindcss = require('tailwindcss');\n", before: "module.exports")
inject_into_file("./postcss.config.js", "\n tailwindcss('./app/javascript/stylesheets/tailwind.config.js'),", after: "plugins: [")
run "mkdir -p app/javascript/stylesheets/components"
end
def copy_postcss_config
run "rm postcss.config.js"
copy_file "postcss.config.js"
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"
copy_file "Procfile.dev"
end
# Main setup
source_paths
add_gems
after_bundle do
add_users
remove_app_css
add_sidekiq
add_foreman
copy_templates
add_tailwind
copy_postcss_config
# Migrate
rails_command "db:create"
rails_command "db:migrate"
git :init
git add: "."
git commit: %Q{ -m "Initial commit" }
say
say "Successfully created your Rails App with this template! 👍", :green
say
say "Switch to your app by running:"
say "$ cd #{app_name}", :yellow
say
say "Then run:"
say "$ foreman start -f Procfile.dev", :green
end