Class: Bluebase::AppBuilder

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

Instance Method Summary collapse

Methods included from Actions

#action_mailer_host, #configure_environment, #replace_in_file

Instance Method Details

#add_application_folder_and_files_to_viewsObject



64
65
66
67
68
69
70
# File 'lib/bluebase/app_builder.rb', line 64

def add_application_folder_and_files_to_views
  base_dir = "app/views/application"
  empty_directory base_dir
  copy_file "app/_flash.html.slim", "#{base_dir}/_flash.html.slim"
  copy_file "app/_ga_boiler.html.slim", "#{base_dir}/_ga_boiler.html.slim"
  copy_file "app/_fb_meta_tags.html.slim", "#{base_dir}/_fb_meta_tags.html.slim"
end

#add_application_ymlObject



177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/bluebase/app_builder.rb', line 177

def add_application_yml
  template "config/application.yml.sample.erb", "config/application.yml.sample"

  template "config/application.yml.sample.erb", "config/application.yml"
  replace_in_file "config/application.yml",
    "# Copy this file into application.yml and change env variables as necessary.",
    "# Change env variables as necessary."

  template "config/application.yml.sample.erb", "config/application.yml.travis"
  replace_in_file "config/application.yml.travis",
    "# Copy this file into application.yml and change env variables as necessary.",
    "# Change env variables as necessary for Travis."
end

#add_database_ymlObject



191
192
193
194
195
196
197
198
# File 'lib/bluebase/app_builder.rb', line 191

def add_database_yml
  template "config/database.yml.sample.erb", "config/database.yml.sample"

  remove_file "config/database.yml"
  template "config/database.yml.sample.erb", "config/database.yml"
  replace_in_file "config/database.yml",
    "# and then copy the file into database.yml", ""
end

#add_devise_configObject



163
164
165
# File 'lib/bluebase/app_builder.rb', line 163

def add_devise_config
  copy_file "config/devise.rb", "config/initializers/devise.rb"
end

#add_dot_rspecObject



44
45
46
# File 'lib/bluebase/app_builder.rb', line 44

def add_dot_rspec
  copy_file ".rspec", ".rspec"
end

#add_envrcObject



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

def add_envrc
  copy_file ".envrc", ".envrc"
end

#add_figaro_configObject



167
168
169
# File 'lib/bluebase/app_builder.rb', line 167

def add_figaro_config
  copy_file "config/figaro.rb", "config/initializers/figaro.rb"
end

#add_guardfileObject



40
41
42
# File 'lib/bluebase/app_builder.rb', line 40

def add_guardfile
  copy_file "Guardfile", "Guardfile"
end

#add_heroku_addonsObject



296
297
298
299
300
301
302
303
304
305
# File 'lib/bluebase/app_builder.rb', line 296

def add_heroku_addons
  config = <<-SHELL

# Heroku addons for production
heroku addons:add mandrill --app #{heroku_app_name :production}
heroku addons:add newrelic:stark --app #{heroku_app_name :production}
heroku addons:add rollbar --app #{heroku_app_name :production}
  SHELL
  append_file "bin/setup", config
end

#add_i18n_tasks_ymlObject



204
205
206
207
# File 'lib/bluebase/app_builder.rb', line 204

def add_i18n_tasks_yml
  file = "config/i18n-tasks.yml"
  copy_file file, file
end

#add_rubocop_and_hound_configObject



26
27
28
29
# File 'lib/bluebase/app_builder.rb', line 26

def add_rubocop_and_hound_config
  copy_file ".hound.yml", ".hound.yml"
  copy_file ".rubocop.yml", ".rubocop.yml"
end

#add_rvm_configObject



31
32
33
34
# File 'lib/bluebase/app_builder.rb', line 31

def add_rvm_config
  create_file ".ruby-gemset",  "#{app_path}\n"
  create_file ".ruby-version", "#{Bluebase::RUBY_VERSION}\n"
end

#add_setup_to_binObject

bin/ directory files



81
82
83
84
# File 'lib/bluebase/app_builder.rb', line 81

def add_setup_to_bin
  copy_file "bin/setup", "bin/setup"
  run "chmod a+x bin/setup"
end

#add_smtp_settingsObject



215
216
217
218
# File 'lib/bluebase/app_builder.rb', line 215

def add_smtp_settings
  file = "config/smtp.rb"
  copy_file file, file
end

#add_spec_dirsObject

spec/ directory files



229
230
231
232
233
# File 'lib/bluebase/app_builder.rb', line 229

def add_spec_dirs
  empty_directory "spec"
  empty_directory_with_keep_file "spec/features"
  empty_directory_with_keep_file "spec/factories"
end

#add_staging_environmentObject



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

def add_staging_environment
  template "config/staging.rb.erb", "config/environments/staging.rb"
end

#add_travis_configObject



36
37
38
# File 'lib/bluebase/app_builder.rb', line 36

def add_travis_config
  template ".travis.yml.erb", ".travis.yml"
end

#add_travis_database_ymlObject



200
201
202
# File 'lib/bluebase/app_builder.rb', line 200

def add_travis_database_yml
  template "config/database.yml.travis.erb", "config/database.yml.travis"
end

#add_vendor_dirsObject

app/ directory files



51
52
53
54
55
56
# File 'lib/bluebase/app_builder.rb', line 51

def add_vendor_dirs
  %w(app/assets/javascripts/vendor app/assets/stylesheets/vendor).each do |dir|
    run "mkdir #{dir}"
    run "touch #{dir}/.keep"
  end
end

#configure_actionmailerObject



245
246
247
# File 'lib/bluebase/app_builder.rb', line 245

def configure_actionmailer
  copy_file "spec/action_mailer.rb", "spec/support/action_mailer.rb"
end

#configure_application_environmentObject

config/ directory files



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
# File 'lib/bluebase/app_builder.rb', line 89

def configure_application_environment
  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

  config = <<-RUBY
config.active_record.default_timezone = :utc
  RUBY
  inject_into_class "config/application.rb", "Application", config

  config = <<-RUBY
config.i18n.enforce_available_locales = true
  RUBY
  inject_into_class "config/application.rb", "Application", config

  config = <<-RUBY
config.action_controller.action_on_unpermitted_parameters = :raise
  RUBY

  inject_into_class "config/application.rb", "Application", config
end

#configure_database_cleanerObject



253
254
255
256
# File 'lib/bluebase/app_builder.rb', line 253

def configure_database_cleaner
  copy_file "spec/database_cleaner_and_factory_girl_lint.rb",
    "spec/support/database_cleaner_and_factory_girl_lint.rb"
end

#configure_development_environmentObject



122
123
124
125
126
127
128
129
130
# File 'lib/bluebase/app_builder.rb', line 122

def configure_development_environment
  replace_in_file "config/environments/development.rb",
    "raise_delivery_errors = false", "raise_delivery_errors = true"
  inject_into_file "config/environments/development.rb",
    "  # Don't send emails in development\n  config.action_mailer.perform_deliveries = false",
    after: "raise_delivery_errors = true\n"
  raise_on_missing_translations_in "development"
  action_mailer_host "development", "localhost:3000"
end

#configure_factorygirlObject



241
242
243
# File 'lib/bluebase/app_builder.rb', line 241

def configure_factorygirl
  copy_file "spec/factory_girl.rb", "spec/support/factory_girl.rb"
end

#configure_i18nObject



249
250
251
# File 'lib/bluebase/app_builder.rb', line 249

def configure_i18n
  copy_file "spec/i18n.rb", "spec/support/i18n.rb"
end

#configure_production_environmentObject



136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/bluebase/app_builder.rb', line 136

def configure_production_environment
  prepend_file "config/environments/production.rb",
    %{require Rails.root.join("config/smtp")\n}

  config = <<-RUBY

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = SMTP_SETTINGS
  RUBY
  inject_into_file "config/environments/production.rb", config,
    after: "config.action_mailer.raise_delivery_errors = false"

  config = <<-RUBY

  # Enable deflate / gzip compression of controller-generated responses
  config.middleware.use Rack::Deflater
  RUBY
  inject_into_file "config/environments/production.rb", config,
    after: "config.serve_static_assets = false\n"

  action_mailer_host "production", "please-change-me.com"
end

#configure_rspecObject



235
236
237
238
239
# File 'lib/bluebase/app_builder.rb', line 235

def configure_rspec
  %w(spec/rails_helper.rb spec/spec_helper.rb).each do |file|
    copy_file file, file
  end
end

#configure_test_environmentObject



132
133
134
# File 'lib/bluebase/app_builder.rb', line 132

def configure_test_environment
  raise_on_missing_translations_in "test"
end

#create_github_repo(repo_name) ⇒ Object



265
266
267
268
# File 'lib/bluebase/app_builder.rb', line 265

def create_github_repo(repo_name)
  path_addition = override_path_for_tests
  run "#{path_addition} hub create #{repo_name}"
end

#create_heroku_appsObject



270
271
272
273
274
# File 'lib/bluebase/app_builder.rb', line 270

def create_heroku_apps
  run_heroku "create #{heroku_app_name :production}", "production"
  run_heroku "create #{heroku_app_name :staging}", "staging"
  run_heroku "config:add RACK_ENV=staging RAILS_ENV=staging", "staging"
end

#git_initObject

git/heroku setup



261
262
263
# File 'lib/bluebase/app_builder.rb', line 261

def git_init
  run 'git init'
end

#readmeObject

Root directory files



8
9
10
# File 'lib/bluebase/app_builder.rb', line 8

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

#remove_routes_comment_linesObject



220
221
222
223
224
# File 'lib/bluebase/app_builder.rb', line 220

def remove_routes_comment_lines
  replace_in_file "config/routes.rb",
    /Rails\.application\.routes\.draw do.*end/m,
    "Rails.application.routes.draw do\nend"
end

#replace_application_css_with_scssObject



58
59
60
61
62
# File 'lib/bluebase/app_builder.rb', line 58

def replace_application_css_with_scss
  base_dir = "app/assets/stylesheets"
  remove_file "#{base_dir}/application.css"
  copy_file "app/application.css.scss", "#{base_dir}/application.css.scss"
end

#replace_application_erb_with_slimObject



72
73
74
75
76
# File 'lib/bluebase/app_builder.rb', line 72

def replace_application_erb_with_slim
  base_dir = "app/views/layouts"
  remove_file "#{base_dir}/application.html.erb"
  copy_file "app/application.html.slim", "#{base_dir}/application.html.slim"
end

#replace_en_ymlObject



171
172
173
174
175
# File 'lib/bluebase/app_builder.rb', line 171

def replace_en_yml
  file = "config/locales/en.yml"
  remove_file file
  template "config/en.yml.erb", file
end

#replace_gemfileObject



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

def replace_gemfile
  remove_file "Gemfile"
  template "Gemfile.erb", "Gemfile"
end

#replace_gitignoreObject



21
22
23
24
# File 'lib/bluebase/app_builder.rb', line 21

def replace_gitignore
  remove_file ".gitignore"
  copy_file "bluebase_gitignore", ".gitignore"
end

#replace_secrets_ymlObject



209
210
211
212
213
# File 'lib/bluebase/app_builder.rb', line 209

def replace_secrets_yml
  file = "config/secrets.yml"
  remove_file file
  copy_file "config/bluebase_secrets.yml", file
end

#set_heroku_env_variablesObject



287
288
289
290
291
292
293
294
# File 'lib/bluebase/app_builder.rb', line 287

def set_heroku_env_variables
  config = <<-SHELL
# Sets Heroku env variables
figaro heroku:set -a #{heroku_app_name :production} -e production
figaro heroku:set -a #{heroku_app_name :staging} -e production
  SHELL
  append_file "bin/setup", config
end

#set_heroku_remotesObject



276
277
278
279
280
281
282
283
284
285
# File 'lib/bluebase/app_builder.rb', line 276

def set_heroku_remotes
  remotes = <<-SHELL

# Set up the staging and production apps.
#{join_heroku_app :staging}
#{join_heroku_app :production}
  SHELL

  append_file "bin/setup", remotes
end

#set_memory_management_variableObject



307
308
309
310
311
# File 'lib/bluebase/app_builder.rb', line 307

def set_memory_management_variable
  %w(staging production).each do |environment|
    run_heroku "config:add NEW_RELIC_AGGRESSIVE_KEEPALIVE=1", environment
  end
end