Class: Chr::AppBuilder

Inherits:
Rails::AppBuilder
  • Object
show all
Defined in:
lib/chr/app_builder.rb

Instance Method Summary collapse

Instance Method Details

#configure_action_mailerObject



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

def configure_action_mailer
  action_mailer_host "development", %{"localhost:#{ port }"}
  action_mailer_host "test",        %{ "www.example.com" }
  action_mailer_host "staging",     %{ ENV.fetch("HOST") }
  action_mailer_host "production",  %{ ENV.fetch("HOST") }

  configure_environment "production", 'config.action_mailer.asset_host = "http://#{ ENV.fetch("ASSET_HOST") }"'
end

#configure_devise_for_characterObject



269
270
271
272
273
274
275
276
# File 'lib/chr/app_builder.rb', line 269

def configure_devise_for_character
  copy_file 'devise_overrides_passwords_controller.rb', 'app/controllers/admin/devise_overrides/passwords_controller.rb'
  copy_file 'devise_overrides_sessions_controller.rb',  'app/controllers/admin/devise_overrides/sessions_controller.rb'

  copy_file 'devise_overrides_passwords_edit.html.erb', 'app/views/admin/devise_overrides/passwords/edit.html.erb'
  copy_file 'devise_overrides_passwords_new.html.erb',  'app/views/admin/devise_overrides/passwords/new.html.erb'
  copy_file 'devise_overrides_sessions_new.html.erb',   'app/views/admin/devise_overrides/sessions/new.html.erb'
end

#configure_generatorsObject



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/chr/app_builder.rb', line 46

def configure_generators
  config = <<-RUBY

  config.generators do |generate|
    generate.helper false
    generate.javascript_engine false
    generate.stylesheets false
  end

  RUBY

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

#configure_newrelicObject



61
62
63
# File 'lib/chr/app_builder.rb', line 61

def configure_newrelic
  template 'newrelic.yml.erb', 'config/newrelic.yml'
end

#configure_pumaObject



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

def configure_puma
  copy_file "puma.rb", "config/puma.rb"
end

#configure_rack_timeoutObject



83
84
85
86
87
88
89
# File 'lib/chr/app_builder.rb', line 83

def configure_rack_timeout
  rack_timeout_config = <<-RUBY
  Rack::Timeout.timeout = (ENV["RACK_TIMEOUT"] || 10).to_i
  RUBY

  append_file "config/environments/production.rb", rack_timeout_config
end

#configure_smtpObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/chr/app_builder.rb', line 66

def configure_smtp
  copy_file 'smtp.rb', 'config/smtp.rb'

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

#copy_miscellaneous_filesObject



225
226
227
228
# File 'lib/chr/app_builder.rb', line 225

def copy_miscellaneous_files
  copy_file "errors.rb", "config/initializers/errors.rb"
  copy_file "json_encoding.rb", "config/initializers/json_encoding.rb"
end

#create_application_layoutObject



178
179
180
181
182
# File 'lib/chr/app_builder.rb', line 178

def create_application_layout
  template 'application_layout.html.erb.erb',
    'app/views/layouts/application.html.erb',
    force: true
end

#create_body_class_helperObject



185
186
187
# File 'lib/chr/app_builder.rb', line 185

def create_body_class_helper
  copy_file 'body_class_helper.rb', 'app/helpers/body_class_helper.rb'
end

#create_partials_directoryObject



158
159
160
# File 'lib/chr/app_builder.rb', line 158

def create_partials_directory
  empty_directory 'app/views/application'
end

#create_shared_analyticsObject



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

def create_shared_analytics
  copy_file '_analytics.html.erb', 'app/views/application/_analytics.html.erb'
end

#create_shared_flashesObject



168
169
170
# File 'lib/chr/app_builder.rb', line 168

def create_shared_flashes
  copy_file '_flashes.html.erb', 'app/views/application/_flashes.html.erb'
end

#create_shared_javascriptsObject



173
174
175
# File 'lib/chr/app_builder.rb', line 173

def create_shared_javascripts
  copy_file '_javascript.html.erb', 'app/views/application/_javascript.html.erb'
end

#customize_error_pagesObject



231
232
233
234
235
236
237
238
239
240
241
242
# File 'lib/chr/app_builder.rb', line 231

def customize_error_pages
  meta_tags =<<-EOS
  <meta charset="utf-8" />
  <meta name="ROBOTS" content="NOODP" />
  <meta name="viewport" content="initial-scale=1" />
  EOS

  %w(500 404 422).each do |page|
    inject_into_file "public/#{page}.html", meta_tags, after: "<head>\n"
    replace_in_file "public/#{page}.html", /<!--.+-->\n/, ''
  end
end

#enable_rack_canonical_hostObject



92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/chr/app_builder.rb', line 92

def enable_rack_canonical_host
  config = <<-RUBY

  # Ensure requests are only served from one, canonical host name
  config.middleware.use Rack::CanonicalHost, ENV.fetch("HOST")
  RUBY

  inject_into_file(
    "config/environments/production.rb",
    config,
    after: serve_static_files_line
  )
end

#enable_rack_deflaterObject



106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/chr/app_builder.rb', line 106

def enable_rack_deflater
  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: serve_static_files_line
  )
end

#gitignore_filesObject



315
316
317
318
# File 'lib/chr/app_builder.rb', line 315

def gitignore_files
  remove_file '.gitignore'
  template 'application_gitignore', '.gitignore'
end

#init_gitObject



310
311
312
# File 'lib/chr/app_builder.rb', line 310

def init_git
  run 'git init'
end

#initialize_mongoidObject



321
322
323
324
325
326
327
# File 'lib/chr/app_builder.rb', line 321

def initialize_mongoid
  generate 'mongoid:config'
  append_file "config/mongoid.yml", """\nproduction:
  clients:
default:
  uri: <%= ENV['MONGODB_URI'] %>"""
end

#provide_dev_prime_taskObject



41
42
43
# File 'lib/chr/app_builder.rb', line 41

def provide_dev_prime_task
  copy_file 'dev.rake', 'lib/tasks/dev.rake'
end

#provide_setup_scriptObject



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

def provide_setup_script
  template "bin_setup.erb", "bin/setup", port_number: port, force: true
  run "chmod a+x bin/setup"
end

#raise_on_delivery_errorsObject



20
21
22
23
# File 'lib/chr/app_builder.rb', line 20

def raise_on_delivery_errors
  replace_in_file 'config/environments/development.rb',
    'raise_delivery_errors = false', 'raise_delivery_errors = true'
end

#raise_on_unpermitted_parametersObject



26
27
28
29
30
31
32
# File 'lib/chr/app_builder.rb', line 26

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

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

#readmeObject



4
5
6
# File 'lib/chr/app_builder.rb', line 4

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

#replace_gemfileObject



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

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

#set_ruby_to_version_being_usedObject



15
16
17
# File 'lib/chr/app_builder.rb', line 15

def set_ruby_to_version_being_used
  create_file '.ruby-version', "#{Chr::RUBY_VERSION}\n"
end

#setup_asset_hostObject



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/chr/app_builder.rb', line 121

def setup_asset_host
  replace_in_file 'config/environments/production.rb',
    "# config.action_controller.asset_host = 'http://assets.example.com'",
    'config.action_controller.asset_host = ENV.fetch("ASSET_HOST")'

  replace_in_file 'config/initializers/assets.rb',
    "config.assets.version = '1.0'",
    'config.assets.version = (ENV["ASSETS_VERSION"] || "1.0")'

  inject_into_file(
    "config/environments/production.rb",
    '  config.static_cache_control = "public, max-age=#{1.year.to_i}"',
    after: serve_static_files_line
  )
end

#setup_bundler_auditObject



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

def setup_bundler_audit
  copy_file "bundler_audit.rake", "lib/tasks/bundler_audit.rake"
  append_file "Rakefile", %{\ntask default: "bundler:audit"\n}
end

#setup_carrierwaveObject



305
306
307
# File 'lib/chr/app_builder.rb', line 305

def setup_carrierwave
  copy_file "carrierwave.rb", "config/initializers/carrierwave.rb"
end

#setup_character_assetsObject



298
299
300
301
302
# File 'lib/chr/app_builder.rb', line 298

def setup_character_assets
  replace_in_file 'config/initializers/assets.rb',
    "# Rails.application.config.assets.precompile += %w( search.js )",
    'Rails.application.config.assets.precompile += %w( admin.js admin.css )'
end

#setup_character_base_controllerObject



264
265
266
# File 'lib/chr/app_builder.rb', line 264

def setup_character_base_controller
  copy_file 'character_base_controller.rb', 'app/controllers/admin/base_controller.rb'
end

#setup_character_javascriptsObject



293
294
295
# File 'lib/chr/app_builder.rb', line 293

def setup_character_javascripts
  copy_file 'character_admin.scss', 'app/assets/stylesheets/admin.scss'
end

#setup_character_routesObject



258
259
260
261
# File 'lib/chr/app_builder.rb', line 258

def setup_character_routes
  remove_file 'config/routes.rb'
  copy_file 'routes.rb', 'config/routes.rb'
end

#setup_character_stylesheetsObject



288
289
290
# File 'lib/chr/app_builder.rb', line 288

def setup_character_stylesheets
  template 'character_admin.coffee.erb', 'app/assets/javascripts/admin.coffee'
end

#setup_character_viewsObject



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

def setup_character_views
  template 'character_admin_layout.html.erb.erb',
    'app/views/layouts/admin.html.erb',
    force: true

  copy_file 'character_admin_index.html.erb',  'app/views/admin/index.html.erb'
end

#setup_deviseObject



245
246
247
248
249
250
251
252
253
254
255
# File 'lib/chr/app_builder.rb', line 245

def setup_devise
  generate 'devise:install'

  replace_in_file 'config/initializers/devise.rb',
    '# config.scoped_views = false',
    'config.scoped_views = true'

  replace_in_file 'config/initializers/devise.rb',
    '# config.sign_out_all_scopes = true',
    'config.sign_out_all_scopes = false'
end

#setup_foremanObject



205
206
207
208
# File 'lib/chr/app_builder.rb', line 205

def setup_foreman
  copy_file 'sample.env', '.sample.env'
  copy_file 'Procfile', 'Procfile'
end

#setup_javascriptsObject



218
219
220
221
222
# File 'lib/chr/app_builder.rb', line 218

def setup_javascripts
  remove_file "app/assets/stylesheets/application.css"
  copy_file "application.scss",
            "app/assets/stylesheets/application.scss"
end

#setup_secret_tokenObject



153
154
155
# File 'lib/chr/app_builder.rb', line 153

def setup_secret_token
  template 'secrets.yml', 'config/secrets.yml', force: true
end

#setup_springObject



336
337
338
# File 'lib/chr/app_builder.rb', line 336

def setup_spring
  bundle_command "exec spring binstub --all"
end

#setup_staging_environmentObject



138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/chr/app_builder.rb', line 138

def setup_staging_environment
  staging_file = 'config/environments/staging.rb'
  copy_file 'staging.rb', staging_file

  config = <<-RUBY

  Rails.application.configure do
  # ...
  end
  RUBY

  append_file staging_file, config
end

#setup_stylesheetsObject



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

def setup_stylesheets
  remove_file "app/assets/javascripts/application.js"
  copy_file "application.coffee",
            "app/assets/javascripts/application.coffee"
end