Class: BlueberryRails::AppBuilder
- Inherits:
-
Rails::AppBuilder
- Object
- Rails::AppBuilder
- BlueberryRails::AppBuilder
show all
- Includes:
- ActionHelpers
- Defined in:
- lib/blueberry_rails/app_builder.rb
Instance Method Summary
collapse
#action_mailer_host, #configure_environment, #rename_file, #replace_in_file
Instance Method Details
#add_ruby_version_file ⇒ Object
229
230
231
232
233
234
235
236
237
|
# File 'lib/blueberry_rails/app_builder.rb', line 229
def add_ruby_version_file
current_version = RUBY_VERSION.split('.').map(&:to_i)
version = if current_version[0] >= 2 && current_version[1] >= 0
RUBY_VERSION
else
"#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
end
add_file '.ruby-version', "#{version}\n", force: true
end
|
#cache_and_compress ⇒ Object
288
289
290
291
292
293
|
# File 'lib/blueberry_rails/app_builder.rb', line 288
def cache_and_compress
configure_environment 'production',
"config.public_file_server.headers = {\n 'Cache-Control' => 'public, max-age=31536000'\n }"
configure_environment 'production',
'config.middleware.insert_before ActionDispatch::Static, Rack::Deflater'
end
|
#cocoon_config ⇒ Object
25
26
27
28
29
30
|
# File 'lib/blueberry_rails/app_builder.rb', line 25
def cocoon_config
run 'yarn add https://github.com/1776/cocoon'
inject_into_file 'app/javascript/packs/application.js',
"import 'cocoon';\n",
before: 'import { Application } from "stimulus"'
end
|
332
333
334
|
# File 'lib/blueberry_rails/app_builder.rb', line 332
def configure_bin_setup
copy_file 'setup', 'bin/setup', force: true
end
|
224
225
226
227
|
# File 'lib/blueberry_rails/app_builder.rb', line 224
def configure_circle
empty_directory '.circleci'
template 'circle.yml.erb', '.circleci/config.yml'
end
|
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
|
# File 'lib/blueberry_rails/app_builder.rb', line 188
def configure_generators
config = <<-RUBY
config.generators do |generate|
generate.helper false
generate.javascript_engine false
generate.request_specs false
generate.routing_specs false
generate.stylesheets false
generate.test_framework :rspec
generate.view_specs false
end
RUBY
inject_into_class 'config/application.rb', 'Application', config
end
|
205
206
207
208
209
210
211
212
213
214
215
216
|
# File 'lib/blueberry_rails/app_builder.rb', line 205
def configure_i18n
inject_into_file "config/application.rb",
"\n config.i18n.load_path += Dir[Rails.root.join 'config/locales/**/*.{rb,yml}']",
before: "\n # Settings"
inject_into_file 'config/application.rb',
"\n config.i18n.available_locales = [:cs, :en]\n config.i18n.default_locale = :cs",
before: "\n # Settings"
remove_file 'config/locales/en.yml'
directory 'locales', 'config/locales'
end
|
218
219
220
221
222
|
# File 'lib/blueberry_rails/app_builder.rb', line 218
def configure_i18n_logger
configure_environment 'development',
"# I18n debug\n I18nLogger = ActiveSupport::" \
"Logger.new(Rails.root.join('log/i18n.log'))"
end
|
181
182
183
184
185
186
|
# File 'lib/blueberry_rails/app_builder.rb', line 181
def configure_mailcatcher
configure_environment 'development',
'config.action_mailer.delivery_method = :smtp'
configure_environment 'development',
"config.action_mailer.smtp_settings = { address: 'localhost', port: 1025 }"
end
|
152
153
154
|
# File 'lib/blueberry_rails/app_builder.rb', line 152
def configure_rspec
copy_file 'spec/spec_helper.rb', 'spec/spec_helper.rb', force: true
end
|
259
260
261
262
263
264
265
266
267
268
269
270
271
272
|
# File 'lib/blueberry_rails/app_builder.rb', line 259
def configure_simple_form
if options[:bootstrap]
generate 'simple_form:install --bootstrap'
replace_in_file 'config/initializers/simple_form.rb',
'# config.label_text = lambda { |label, required, explicit_label| "#{required} #{label}" }',
'config.label_text = lambda { |label, required, explicit_label| "#{required} #{label}" }'
else
generate 'simple_form:install'
end
rename_file 'config/locales/simple_form.en.yml',
'config/locales/en/en.simple_form.yml'
end
|
#copy_assets_directory ⇒ Object
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/blueberry_rails/app_builder.rb', line 93
def copy_assets_directory
remove_file 'app/assets/stylesheets', force: true
remove_file 'app/assets/javascripts', force: true
run 'mkdir app/javascript/stylesheets', force: true
run 'touch app/javascript/packs/application.sass', force: true
if options[:administration]
run 'touch app/javascript/packs/admin.js', force: true
run 'touch app/javascript/packs/admin.sass', force: true
end
end
|
#copy_custom_errors ⇒ Object
317
318
319
320
321
322
323
324
325
326
327
328
329
330
|
# File 'lib/blueberry_rails/app_builder.rb', line 317
def copy_custom_errors
copy_file 'controllers/errors_controller.rb', 'app/controllers/errors_controller.rb'
config = <<-RUBY
config.exceptions_app = self.routes
RUBY
inject_into_class 'config/application.rb', 'Application', config
remove_file 'public/404.html', force: true
remove_file 'public/422.html', force: true
remove_file 'public/500.html', force: true
end
|
#copy_initializers ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/blueberry_rails/app_builder.rb', line 106
def copy_initializers
if options[:translation_engine]
copy_file 'config/initializers/translation_engine.rb',
'config/initializers/translation_engine.rb'
end
if options[:bootstrap]
copy_file 'config/initializers/simple_form_bootstrap.rb',
'config/initializers/simple_form_bootstrap.rb', force: true
end
copy_file 'config/initializers/airbrake.rb',
'config/initializers/airbrake.rb'
copy_file 'config/initializers/plurals.rb',
'config/initializers/plurals.rb'
end
|
#copy_rake_tasks ⇒ Object
313
314
315
|
# File 'lib/blueberry_rails/app_builder.rb', line 313
def copy_rake_tasks
copy_file 'tasks/images.rake', 'lib/tasks/images.rake'
end
|
#create_application_layout ⇒ Object
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/blueberry_rails/app_builder.rb', line 76
def create_application_layout
remove_file 'app/views/layouts/application.html.erb'
remove_file 'app/views/layouts/mailer.html.erb'
remove_file 'app/views/layouts/mailer.text.erb'
template 'views/layouts/application.html.slim.erb',
'app/views/layouts/application.html.slim', force: true
template 'views/layouts/mailer.html.slim.erb',
'app/views/layouts/mailer.html.slim', force: true
directory 'helpers', 'app/helpers', force: true
remove_file 'public/favicon.ico'
directory 'public/icons', 'public'
end
|
#create_database ⇒ Object
135
136
137
|
# File 'lib/blueberry_rails/app_builder.rb', line 135
def create_database
bundle_command 'exec rails db:create'
end
|
#create_partials_directory ⇒ Object
72
73
74
|
# File 'lib/blueberry_rails/app_builder.rb', line 72
def create_partials_directory
directory 'views/application', 'app/views/application', force: true
end
|
#create_procfile ⇒ Object
126
127
128
|
# File 'lib/blueberry_rails/app_builder.rb', line 126
def create_procfile
copy_file 'Procfile', 'Procfile'
end
|
#create_pryrc ⇒ Object
122
123
124
|
# File 'lib/blueberry_rails/app_builder.rb', line 122
def create_pryrc
copy_file 'pryrc.rb', '.pryrc'
end
|
#create_puma_config ⇒ Object
130
131
132
133
|
# File 'lib/blueberry_rails/app_builder.rb', line 130
def create_puma_config
remove_file 'config/puma.rb'
copy_file 'puma.rb', 'config/puma.rb'
end
|
#create_root_page ⇒ Object
343
344
345
|
# File 'lib/blueberry_rails/app_builder.rb', line 343
def create_root_page
generate_root_controller_and_route
end
|
#gemfile ⇒ Object
13
14
15
|
# File 'lib/blueberry_rails/app_builder.rb', line 13
def gemfile
template 'Gemfile_custom.erb', 'Gemfile'
end
|
#generate_root_controller_and_route ⇒ Object
336
337
338
339
340
341
|
# File 'lib/blueberry_rails/app_builder.rb', line 336
def generate_root_controller_and_route
generate 'controller', 'root index'
inject_into_file 'config/routes.rb',
" root to: 'root#index'\n",
after: "Rails.application.routes.draw do\n"
end
|
#generate_rspec ⇒ Object
139
140
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/blueberry_rails/app_builder.rb', line 139
def generate_rspec
generate 'rspec:install'
copy_file 'spec/drivers.rb', 'spec/support/drivers.rb'
inject_into_file 'spec/rails_helper.rb',
"\n# Screenshots\n" \
"require 'capybara-screenshot/rspec'\n" \
"Capybara::Screenshot.autosave_on_failure =\n" \
" (ENV['SCR'] || ENV['AUTO_SCREENSHOT']) == '1'\n",
after: "Rails is not loaded until this point!\n"
end
|
#gitignore ⇒ Object
9
10
11
|
# File 'lib/blueberry_rails/app_builder.rb', line 9
def gitignore
template 'gitignore_custom.erb', '.gitignore'
end
|
#hound_config ⇒ Object
17
18
19
20
21
22
23
|
# File 'lib/blueberry_rails/app_builder.rb', line 17
def hound_config
copy_file '../.hound.yml', '.hound.yml'
copy_file '../.eslintrc', '.eslintrc'
copy_file '../.rubocop.yml', '.rubocop.yml'
run 'yarn add -D eslint eslint-config-airbnb-base eslint-config-import'
end
|
#init_git ⇒ Object
309
310
311
|
# File 'lib/blueberry_rails/app_builder.rb', line 309
def init_git
run 'git init'
end
|
#init_guard ⇒ Object
166
167
168
|
# File 'lib/blueberry_rails/app_builder.rb', line 166
def init_guard
bundle_command 'exec guard init'
end
|
#install_devise ⇒ Object
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
|
# File 'lib/blueberry_rails/app_builder.rb', line 239
def install_devise
generate 'devise:install'
generate_root_controller_and_route
if options[:devise_model].present?
generate 'devise', options[:devise_model]
end
if options[:administration]
generate 'devise', 'administrator'
replace_in_file 'app/models/administrator.rb',
' :registerable,',
''
end
copy_file 'locales/cs/cs.devise.yml', 'config/locales/cs/cs.devise.yml'
rename_file 'config/locales/devise.en.yml',
'config/locales/en/en.devise.yml'
end
|
#raise_on_unpermitted_parameters ⇒ Object
176
177
178
179
|
# File 'lib/blueberry_rails/app_builder.rb', line 176
def raise_on_unpermitted_parameters
configure_environment 'development',
'config.action_controller.action_on_unpermitted_parameters = :raise'
end
|
#readme ⇒ Object
5
6
7
|
# File 'lib/blueberry_rails/app_builder.rb', line 5
def readme
template 'README.md.erb', 'README.md'
end
|
#replace_root_controller_spec ⇒ Object
283
284
285
286
|
# File 'lib/blueberry_rails/app_builder.rb', line 283
def replace_root_controller_spec
copy_file 'spec/controllers/root_controller_spec.rb',
'spec/controllers/root_controller_spec.rb', force: true
end
|
#replace_users_factory ⇒ Object
274
275
276
277
278
279
280
281
|
# File 'lib/blueberry_rails/app_builder.rb', line 274
def replace_users_factory
copy_file 'spec/factories/users.rb',
'spec/factories/users.rb', force: true
if options[:administration]
copy_file 'spec/factories/administrators.rb',
'spec/factories/administrators.rb', force: true
end
end
|
#reviews_app ⇒ Object
347
348
349
|
# File 'lib/blueberry_rails/app_builder.rb', line 347
def reviews_app
template 'app.json.erb', 'app.json'
end
|
#setup_admin ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/blueberry_rails/app_builder.rb', line 58
def setup_admin
directory 'admin_controllers', 'app/controllers/admin'
directory 'admin_views', 'app/views/admin'
template 'views/layouts/admin.html.slim.erb',
'app/views/layouts/admin.html.slim'
inject_into_file 'config/routes.rb',
"\n namespace :admin do\n" \
" root to: 'dashboard#show'\n" \
" end\n\n",
before: ' root'
end
|
#setup_gitignore ⇒ Object
295
296
297
298
299
300
301
302
303
304
305
306
307
|
# File 'lib/blueberry_rails/app_builder.rb', line 295
def setup_gitignore
[
'spec/lib',
'spec/controllers',
'spec/features',
'spec/support/matchers',
'spec/support/mixins',
'spec/support/shared_examples'
].each do |dir|
run "mkdir -p #{dir}"
run "touch #{dir}/.keep"
end
end
|
#setup_guard ⇒ Object
170
171
172
173
174
|
# File 'lib/blueberry_rails/app_builder.rb', line 170
def setup_guard
config = 'watch(%r{^spec/factories/(.+)\.rb$}) { |m| rspec.spec.call("models/factories") }'
inject_into_file('Guardfile',
"\n\n #{config}", before: "\nend")
end
|
#setup_integration_environment ⇒ Object
53
54
55
56
|
# File 'lib/blueberry_rails/app_builder.rb', line 53
def setup_integration_environment
copy_file 'config/environments/production.rb',
'config/environments/integration.rb'
end
|
#setup_mailer_hosts ⇒ Object
32
33
34
35
36
37
38
|
# File 'lib/blueberry_rails/app_builder.rb', line 32
def setup_mailer_hosts
action_mailer_host 'development', "development.#{app_name}.com"
action_mailer_host 'test', "test.#{app_name}.com"
action_mailer_host 'staging', "staging.#{app_name}.com"
action_mailer_host 'integration', "integration.#{app_name}.com"
action_mailer_host 'production', "#{app_name}.com"
end
|
#setup_rspec_support_files ⇒ Object
160
161
162
163
164
|
# File 'lib/blueberry_rails/app_builder.rb', line 160
def setup_rspec_support_files
copy_file 'spec/factory_bot_syntax.rb', 'spec/support/factory_bot.rb'
copy_file 'spec/database_cleaner_setup.rb', 'spec/support/database_cleaner.rb'
copy_file 'spec/mail_body_helpers.rb', 'spec/support/mixins/mail_body_helpers.rb'
end
|
#setup_staging_environment ⇒ Object
45
46
47
48
49
50
51
|
# File 'lib/blueberry_rails/app_builder.rb', line 45
def setup_staging_environment
run 'cp config/environments/production.rb config/environments/staging.rb'
replace_in_file 'config/environments/staging.rb',
'config.consider_all_requests_local = false',
'config.consider_all_requests_local = true'
end
|
#test_factories_first ⇒ Object
156
157
158
|
# File 'lib/blueberry_rails/app_builder.rb', line 156
def test_factories_first
copy_file 'spec/factories_spec.rb', 'spec/models/factories_spec.rb'
end
|
#use_postgres_config_template ⇒ Object
40
41
42
43
|
# File 'lib/blueberry_rails/app_builder.rb', line 40
def use_postgres_config_template
template 'database.yml.erb', 'config/database.yml', force: true
template 'database.yml.erb', 'config/database.yml.sample'
end
|