Class: BlueberryRails::AppBuilder

Inherits:
Rails::AppBuilder
  • Object
show all
Includes:
ActionHelpers
Defined in:
lib/blueberry_rails/app_builder.rb

Instance Method Summary collapse

Methods included from ActionHelpers

#action_mailer_host, #configure_environment, #rename_file, #replace_in_file

Instance Method Details

#add_ruby_version_fileObject



221
222
223
224
225
226
227
228
229
# File 'lib/blueberry_rails/app_builder.rb', line 221

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"
end

#cache_and_compressObject



280
281
282
283
284
285
# File 'lib/blueberry_rails/app_builder.rb', line 280

def cache_and_compress
  configure_environment 'production',
    'config.static_cache_control = \'public, max-age=31536000\''
  configure_environment 'production',
    'config.middleware.insert_before ActionDispatch::Static, Rack::Deflater'
end

#configure_bin_setupObject



331
332
333
# File 'lib/blueberry_rails/app_builder.rb', line 331

def configure_bin_setup
  copy_file 'setup', 'bin/setup', force: true
end

#configure_circleObject



217
218
219
# File 'lib/blueberry_rails/app_builder.rb', line 217

def configure_circle
  template 'circle.yml.erb', 'circle.yml'
end

#configure_generatorsObject



181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'lib/blueberry_rails/app_builder.rb', line 181

def configure_generators
  config = "config.generators do |generate|\n  generate.helper false\n  generate.javascript_engine false\n  generate.request_specs false\n  generate.routing_specs false\n  generate.stylesheets false\n  generate.test_framework :rspec\n  generate.view_specs false\nend\n\n  RUBY\n\n  inject_into_class 'config/application.rb', 'Application', config\nend\n"

#configure_i18nObject



198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/blueberry_rails/app_builder.rb', line 198

def configure_i18n
  inject_into_file "config/application.rb",
                   "\n\n    config.i18n.load_path += Dir[Rails.root.join 'config/locales/**/*.{rb,yml}']",
                   before: "\n    # Settings"

  inject_into_file 'config/application.rb',
                   "\n\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

#configure_i18n_loggerObject



211
212
213
214
215
# File 'lib/blueberry_rails/app_builder.rb', line 211

def configure_i18n_logger
  configure_environment 'development',
                        "# I18n debug\n  I18nLogger = ActiveSupport::" \
                        "Logger.new(Rails.root.join('log/i18n.log'))"
end

#configure_mailcatcherObject



174
175
176
177
178
179
# File 'lib/blueberry_rails/app_builder.rb', line 174

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

#configure_rspecObject



145
146
147
# File 'lib/blueberry_rails/app_builder.rb', line 145

def configure_rspec
  copy_file 'spec/spec_helper.rb', 'spec/spec_helper.rb', force: true
end

#configure_simple_formObject



251
252
253
254
255
256
257
258
259
260
261
262
263
264
# File 'lib/blueberry_rails/app_builder.rb', line 251

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_directoryObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/blueberry_rails/app_builder.rb', line 83

def copy_assets_directory
  remove_file 'app/assets/stylesheets/application.css'
  remove_file 'app/assets/javascripts/application.js'

  directory 'assets', 'app/assets'

  remove_file 'app/assets/icons'

  replace_in_file 'config/initializers/assets.rb',
    '# Rails.application.config.assets.precompile += %w( search.js )',
    'Rails.application.config.assets.precompile += %w( ie.css )'

  if options[:administration]
    directory 'admin_assets', 'app/assets'

    replace_in_file 'config/initializers/assets.rb',
                    '.precompile += %w( ',
                    '.precompile += %w( admin.css admin.js '
  end
end

#copy_custom_errorsObject



310
311
312
313
314
315
316
317
318
319
320
321
322
323
# File 'lib/blueberry_rails/app_builder.rb', line 310

def copy_custom_errors
  copy_file 'controllers/errors_controller.rb', 'app/controllers/errors_controller.rb'

  config = "config.exceptions_app = self.routes\n\n  RUBY\n\n  inject_into_class 'config/application.rb', 'Application', config\n\n  remove_file 'public/404.html'\n  remove_file 'public/422.html'\n  remove_file 'public/500.html'\nend\n"

#copy_fontcustom_configObject



325
326
327
328
329
# File 'lib/blueberry_rails/app_builder.rb', line 325

def copy_fontcustom_config
  copy_file 'fontcustom.yml', 'fontcustom.yml'
  copy_file 'assets/icons/_font_icons.scss',
            'app/assets/icons/_font_icons.scss'
end

#copy_initializersObject



104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/blueberry_rails/app_builder.rb', line 104

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'
end

#copy_rake_tasksObject



303
304
305
306
307
308
# File 'lib/blueberry_rails/app_builder.rb', line 303

def copy_rake_tasks
  copy_file 'tasks/images.rake', 'lib/tasks/images.rake'
  if options[:fontcustom]
    copy_file 'tasks/icons.rake', 'lib/tasks/icons.rake'
  end
end

#create_application_layoutObject



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/blueberry_rails/app_builder.rb', line 71

def create_application_layout
  remove_file 'app/views/layouts/application.html.erb'

  template 'views/layouts/application.html.slim.erb',
           'app/views/layouts/application.html.slim'

  directory 'helpers', 'app/helpers', force: true

  remove_file 'public/favicon.ico'
  directory 'public/icons', 'public'
end

#create_databaseObject



130
131
132
# File 'lib/blueberry_rails/app_builder.rb', line 130

def create_database
  bundle_command 'exec rake db:create'
end

#create_partials_directoryObject



67
68
69
# File 'lib/blueberry_rails/app_builder.rb', line 67

def create_partials_directory
  directory 'views/application', 'app/views/application'
end

#create_procfileObject



121
122
123
# File 'lib/blueberry_rails/app_builder.rb', line 121

def create_procfile
  copy_file 'Procfile', 'Procfile'
end

#create_pryrcObject



117
118
119
# File 'lib/blueberry_rails/app_builder.rb', line 117

def create_pryrc
  copy_file 'pryrc.rb', '.pryrc'
end

#create_puma_configObject



125
126
127
128
# File 'lib/blueberry_rails/app_builder.rb', line 125

def create_puma_config
  remove_file 'config/puma.rb'
  copy_file 'puma.rb', 'config/puma.rb'
end

#create_root_pageObject



342
343
344
# File 'lib/blueberry_rails/app_builder.rb', line 342

def create_root_page
  generate_root_controller_and_route
end

#gemfileObject



13
14
15
# File 'lib/blueberry_rails/app_builder.rb', line 13

def gemfile
  template 'Gemfile_custom.erb', 'Gemfile'
end

#generate_root_controller_and_routeObject



335
336
337
338
339
340
# File 'lib/blueberry_rails/app_builder.rb', line 335

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_rspecObject



134
135
136
137
138
139
140
141
142
143
# File 'lib/blueberry_rails/app_builder.rb', line 134

def generate_rspec
  generate 'rspec:install'

  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

#gitignoreObject



9
10
11
# File 'lib/blueberry_rails/app_builder.rb', line 9

def gitignore
  template 'gitignore_custom.erb', '.gitignore'
end

#gulp_filesObject

Gulp



351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
# File 'lib/blueberry_rails/app_builder.rb', line 351

def gulp_files
  copy_file 'gulp/gulp_helper.rb', 'app/helpers/gulp_helper.rb'
  remove_file 'app/assets/stylesheets/application.css'
  copy_file 'gulp/application.sass',
            'app/assets/stylesheets/application.sass'
  remove_file 'app/assets/javascripts/application.js'
  copy_file 'gulp/application.js.coffee',
            'app/assets/javascripts/application.js.coffee'

  application do
    "# Make public assets requireable in manifest files\n    "  \
    "config.assets.paths << Rails.root.join('public', 'assets', 'stylesheets')\n    " \
    "config.assets.paths << Rails.root.join('public', 'assets', 'javascripts')\n"
  end

  inject_into_file 'config/environments/development.rb',
                   "config.assets.digest = false\n",
                   before: 'config.assets.quiet = true'

  copy_file 'gulp/rev_manifest.rb', 'config/initializers/rev_manifest.rb'
  copy_file 'gulp/global.coffee',   'gulp/assets/javascripts/global.coffee'
  copy_file 'gulp/message.coffee',  'gulp/assets/javascripts/message.coffee'
  copy_file 'gulp/global.sass',     'gulp/assets/stylesheets/global.sass'
  copy_file 'gulp/config.coffee'
  directory 'gulp/tasks'
  directory 'gulp/util'
  copy_file 'gulp/gulpfile.js',  'gulpfile.js'
  copy_file 'gulp/package.json', 'package.json'
end

#hound_configObject



28
29
30
31
# File 'lib/blueberry_rails/app_builder.rb', line 28

def hound_config
  copy_file '../.hound.yml', '.hound.yml'
  copy_file '../.rubocop.yml', '.rubocop.yml'
end

#init_gitObject



299
300
301
# File 'lib/blueberry_rails/app_builder.rb', line 299

def init_git
  run 'git init'
end

#init_guardObject



159
160
161
# File 'lib/blueberry_rails/app_builder.rb', line 159

def init_guard
  bundle_command 'exec guard init'
end

#install_deviseObject



231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
# File 'lib/blueberry_rails/app_builder.rb', line 231

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_parametersObject



169
170
171
172
# File 'lib/blueberry_rails/app_builder.rb', line 169

def raise_on_unpermitted_parameters
  configure_environment 'development',
    'config.action_controller.action_on_unpermitted_parameters = :raise'
end

#readmeObject



5
6
7
# File 'lib/blueberry_rails/app_builder.rb', line 5

def readme
  template 'README.md.erb', 'README.md'
end

#replace_root_controller_specObject



275
276
277
278
# File 'lib/blueberry_rails/app_builder.rb', line 275

def replace_root_controller_spec
  copy_file 'spec/controllers/root_controller_spec.rb',
            'spec/controllers/root_controller_spec.rb', force: true
end

#replace_users_factoryObject



266
267
268
269
270
271
272
273
# File 'lib/blueberry_rails/app_builder.rb', line 266

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_appObject



346
347
348
# File 'lib/blueberry_rails/app_builder.rb', line 346

def reviews_app
  template 'app.json.erb', 'app.json'
end

#secret_tokenObject



17
18
19
# File 'lib/blueberry_rails/app_builder.rb', line 17

def secret_token
  template 'secret_token.rb.erb', 'config/initializers/secret_token.rb'
end

#setup_adminObject



53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/blueberry_rails/app_builder.rb', line 53

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_gitignoreObject



287
288
289
290
291
292
293
294
295
296
297
# File 'lib/blueberry_rails/app_builder.rb', line 287

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_guardObject



163
164
165
166
167
# File 'lib/blueberry_rails/app_builder.rb', line 163

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_mailer_hostsObject



33
34
35
36
37
38
# File 'lib/blueberry_rails/app_builder.rb', line 33

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 'production', "#{app_name}.com"
end

#setup_rspec_support_filesObject



153
154
155
156
157
# File 'lib/blueberry_rails/app_builder.rb', line 153

def setup_rspec_support_files
  copy_file 'spec/factory_girl_syntax.rb', 'spec/support/factory_girl.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_secret_tokenObject



21
22
23
24
25
26
# File 'lib/blueberry_rails/app_builder.rb', line 21

def setup_secret_token
  inject_into_file 'config/secrets.yml',
                   "\nstaging:\n" \
                   "  secret_key_base: <%= ENV[\"SECRET_KEY_BASE\"] %>\n",
                   after: "  secret_key_base: <%= ENV[\"SECRET_KEY_BASE\"] %>\n"
end

#setup_staging_environmentObject



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_firstObject



149
150
151
# File 'lib/blueberry_rails/app_builder.rb', line 149

def test_factories_first
  copy_file 'spec/factories_spec.rb', 'spec/models/factories_spec.rb'
end

#use_postgres_config_templateObject



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