-
Notifications
You must be signed in to change notification settings - Fork 0
/
template.rb
152 lines (128 loc) · 2.84 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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# frozen_string_literal: true
# N+1 Checking
def apply_bullet
config = <<-RUBY
# N+1 Checker
config.after_initialize do
Bullet.enable = true
Bullet.bullet_logger = true
Bullet.rails_logger = true
end
RUBY
inject_into_file(
'config/environments/development.rb',
config,
after: "Rails.application.configure do\n"
)
end
# RSpec
def apply_rspec
directory 'spec'
end
# Docs
def apply_docs
remove_file 'README.md'
template 'README.md.tt'
end
# Gems
def apply_gemfile
remove_file 'Gemfile'
template 'Gemfile.tt'
end
# Dot Files
def apply_dotfiles
copy_file 'editorconfig', '.editorconfig'
copy_file 'rubocop.yml', '.rubocop.yml'
copy_file 'ruby-version', '.ruby-version'
copy_file 'env.sample', '.env.sample'
end
# Docker
def apply_docker
template 'Dockerfile.tt'
template 'docker-compose.yml.tt'
copy_file 'dockerignore', '.dockerignore'
# Database
remove_file 'config/database.yml'
template 'config/database.yml'
end
# Puma
def apply_puma
remove_file 'config/puma.rb'
copy_file 'config/puma.rb'
end
# Health checks
def apply_health_endpoint
template 'config/initializers/health_checks.rb'
end
def apply_sentry
template 'config/initializers/sentry.rb'
end
# Clean up Generators
def tidy_generators
config = <<-RUBY
config.generators do |g|
g.helper false
g.request_specs true
g.routing_specs false
g.controller_spec false
g.test_framework :rspec
g.view_specs false
g.javascripts false
g.stylesheets false
end
RUBY
inject_into_class 'config/application.rb', 'Application', config
end
# Rake tasks
def apply_tasks
# Automatically annotate
copy_file 'lib/tasks/auto_annotate_models.rake'
end
# Assertions
def api_project!
puts 'Checking that this is an Rails API project'
abort_templating unless options.api?
end
def postgres!
puts 'Checking for Postgres'
abort_templating unless options.database == 'postgresql'
end
# Utils
def abort_templating
puts 'This is not an API project. Ignoring template.'
exit
end
def add_repo_to_source
if __FILE__.match?(%r{\Ahttps?://})
require 'fileutils'
require 'shellwords'
require 'tmpdir'
source_root = Dir.mktmpdir('rails-docker-template-')
at_exit { FileUtils.remove_entry(source_root) }
git clone: [
'--quiet',
'https://github.com/rmcfadzean/rails-docker-template.git',
source_root
].map(&:shellescape).join(' ')
else
source_root = File.dirname(__FILE__)
end
source_paths.unshift(File.join(source_root, 'templates'))
end
def apply_template
api_project!
postgres!
add_repo_to_source
apply_docs
apply_gemfile
apply_dotfiles
apply_docker
apply_puma
apply_health_endpoint
apply_sentry
apply_bullet
apply_tasks
apply_rspec
tidy_generators
end
apply_template