Class: WagonRails::AppBuilder

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

Instance Method Summary collapse

Methods included from Actions

#action_mailer_host, #configure_environment, #replace_in_file

Instance Method Details

#add_host_to_application_ymlObject



213
214
215
216
217
218
219
220
# File 'lib/wagon_rails/app_builder.rb', line 213

def add_host_to_application_yml
  host = <<-EOF
production:
  HOST: https://#{heroku_app_name}.herokuapp.com
  EOF

  append_file "config/application.yml", host
end

#commit(message) ⇒ Object



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

def commit(message)
  run "git add ."
  run "git commit -m '#{message}'"
end

#configure_action_mailerObject



142
143
144
145
# File 'lib/wagon_rails/app_builder.rb', line 142

def configure_action_mailer
  action_mailer_host "development", %{"localhost:#{port}"}
  action_mailer_host "production", %{ENV.fetch("HOST")}
end

#configure_generatorsObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/wagon_rails/app_builder.rb', line 42

def configure_generators
  config = <<-RUBY

config.generators do |generate|
  generate.helper true
  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

#configure_high_voltageObject



273
274
275
# File 'lib/wagon_rails/app_builder.rb', line 273

def configure_high_voltage
  copy_file 'high_voltage.rb', 'config/initializers/high_voltage.rb'
end

#configure_i18n_for_missing_translationsObject



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

def configure_i18n_for_missing_translations
  raise_on_missing_translations_in("development")
  raise_on_missing_translations_in("test")
end

#configure_pumaObject



155
156
157
# File 'lib/wagon_rails/app_builder.rb', line 155

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

#configure_rack_timeoutObject



134
135
136
# File 'lib/wagon_rails/app_builder.rb', line 134

def configure_rack_timeout
  copy_file 'rack_timeout.rb', 'config/initializers/rack_timeout.rb'
end

#configure_simple_formObject



138
139
140
# File 'lib/wagon_rails/app_builder.rb', line 138

def configure_simple_form
  bundle_command "exec rails generate simple_form:install --bootstrap"
end

#configure_smtpObject



60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/wagon_rails/app_builder.rb', line 60

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
  RUBY

  inject_into_file 'config/environments/production.rb', config,
    :after => 'config.action_mailer.raise_delivery_errors = true'
end

#copy_application_ymlObject



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

def copy_application_yml
  copy_file 'application.yml', 'config/application.yml'
end

#copy_homeObject



269
270
271
# File 'lib/wagon_rails/app_builder.rb', line 269

def copy_home
  copy_file 'wagon_rails_home.html.erb', 'app/views/pages/home.html.erb'
end

#copy_miscellaneous_filesObject



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

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



101
102
103
104
105
# File 'lib/wagon_rails/app_builder.rb', line 101

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

#create_databaseObject



112
113
114
# File 'lib/wagon_rails/app_builder.rb', line 112

def create_database
  bundle_command 'exec rake db:create db:migrate'
end

#create_github_repoObject



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

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

#create_heroku_appObject



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

def create_heroku_app
  region = "eu"  # or 'us'
  run_heroku "create #{heroku_app_name} --region #{region}"
end

#create_partials_directoryObject



93
94
95
# File 'lib/wagon_rails/app_builder.rb', line 93

def create_partials_directory
  empty_directory 'app/views/shared'
end

#create_shared_flashesObject



97
98
99
# File 'lib/wagon_rails/app_builder.rb', line 97

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

#customize_error_pagesObject



250
251
252
253
254
255
256
257
258
259
260
261
# File 'lib/wagon_rails/app_builder.rb', line 250

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

#disable_xml_paramsObject



277
278
279
# File 'lib/wagon_rails/app_builder.rb', line 277

def disable_xml_params
  copy_file 'disable_xml_params.rb', 'config/initializers/disable_xml_params.rb'
end

#disallow_wrapping_parametersObject



89
90
91
# File 'lib/wagon_rails/app_builder.rb', line 89

def disallow_wrapping_parameters
  remove_file "config/initializers/wrap_parameters.rb"
end

#enable_database_cleanerObject



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

def enable_database_cleaner
  copy_file 'database_cleaner_rspec.rb', 'spec/support/database_cleaner.rb'
end

#enable_embed_authenticity_token_in_remote_formsObject



34
35
36
37
38
39
40
# File 'lib/wagon_rails/app_builder.rb', line 34

def enable_embed_authenticity_token_in_remote_forms
  config = <<-RUBY
config.embed_authenticity_token_in_remote_forms = true
  RUBY

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

#enable_rack_deflaterObject



75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/wagon_rails/app_builder.rb', line 75

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

#first_pushObject



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

def first_push
  run "git push -u origin master"
end

#fix_i18n_deprecation_warningObject



147
148
149
150
151
152
153
# File 'lib/wagon_rails/app_builder.rb', line 147

def fix_i18n_deprecation_warning
  config = <<-RUBY
config.i18n.enforce_available_locales = true
  RUBY

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

#generate_annotateObject

def generate_pundit

generate 'pundit:install'

end



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

def generate_annotate
  generate 'annotate:install'
end

#generate_deviseObject



281
282
283
# File 'lib/wagon_rails/app_builder.rb', line 281

def generate_devise
  generate 'devise:install'
end

#generate_devise_viewsObject



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

def generate_devise_views
  generate 'devise:views:i18n_templates'
  remove_file 'app/views/devise/registrations/new.html.erb'
  copy_file 'devise_registrations_new.html.erb', 'app/views/devise/registrations/new.html.erb'
  remove_file 'app/views/devise/sessions/new.html.erb'
  copy_file 'devise_sessions_new.html.erb', 'app/views/devise/sessions/new.html.erb'
end

#generate_userObject



285
286
287
# File 'lib/wagon_rails/app_builder.rb', line 285

def generate_user
  generate 'devise User'
end

#gitignore_filesObject



184
185
186
187
188
189
190
191
192
193
# File 'lib/wagon_rails/app_builder.rb', line 184

def gitignore_files
  remove_file '.gitignore'
  copy_file 'wagon_rails_gitignore', '.gitignore'
  # [
  #   'app/views/shared'
  # ].each do |dir|
  #   run "mkdir #{dir}"
  #   run "touch #{dir}/.keep"
  # end
end

#init_gitObject



195
196
197
# File 'lib/wagon_rails/app_builder.rb', line 195

def init_git
  run 'git init'
end

#install_navbarObject



297
298
299
300
# File 'lib/wagon_rails/app_builder.rb', line 297

def install_navbar
  run 'curl https://raw.githubusercontent.com/lewagon/awesome-navbars/master/templates/_navbar_wagon.html.erb > app/views/shared/_navbar.html.erb'
  run 'curl https://raw.githubusercontent.com/lewagon/ui-components/master/source/images/lewagon.png > app/assets/images/logo.png'
end

#provide_deploy_scriptObject



226
227
228
229
230
231
232
233
234
235
236
237
238
# File 'lib/wagon_rails/app_builder.rb', line 226

def provide_deploy_script
  copy_file "bin_deploy", "bin/deploy"

  instructions = <<-MARKDOWN

## Deploying

$ bin/deploy
  MARKDOWN

  append_file "README.md", instructions
  run "chmod u+x bin/deploy"
end

#push_env_to_herokuObject



222
223
224
# File 'lib/wagon_rails/app_builder.rb', line 222

def push_env_to_heroku
  run "figaro heroku:set -e production"
end

#raise_on_delivery_errorsObject



9
10
11
12
13
14
15
16
# File 'lib/wagon_rails/app_builder.rb', line 9

def raise_on_delivery_errors
  %w(development production).each do |environment|
    replace_in_file "config/environments/#{environment}.rb",
      'raise_delivery_errors = false', 'raise_delivery_errors = true'
    config = "config.action_mailer.raise_delivery_errors = true"
    uncomment_lines("config/environments/#{environment}.rb", config)
  end
end

#raise_on_unpermitted_parametersObject



26
27
28
29
30
31
32
# File 'lib/wagon_rails/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



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

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

#remove_routes_comment_linesObject



263
264
265
266
267
# File 'lib/wagon_rails/app_builder.rb', line 263

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_gemfileObject



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

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

#set_development_delivery_methodObject



18
19
20
21
22
23
24
# File 'lib/wagon_rails/app_builder.rb', line 18

def set_development_delivery_method
  inject_into_file(
    "config/environments/development.rb",
    "\n  config.action_mailer.delivery_method = :letter_opener",
    after: "config.action_mailer.raise_delivery_errors = true",
  )
end

#set_heroku_remoteObject



209
210
211
# File 'lib/wagon_rails/app_builder.rb', line 209

def set_heroku_remote
  run "git remote add heroku [email protected]:#{heroku_app_name}.git"
end

#set_ruby_to_version_being_usedObject



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

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

#setup_application_controllerObject



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

def setup_application_controller
  remove_file 'app/controllers/application_controller.rb'
  copy_file 'application_controller.rb', 'app/controllers/application_controller.rb'
end

#setup_foremanObject



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

def setup_foreman
  copy_file 'Procfile', 'Procfile'
end

#setup_javascriptsObject



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

def setup_javascripts
  remove_file 'app/assets/javascripts/application.js'
  copy_file 'application.js', 'app/assets/javascripts/application.js'
  run 'mkdir app/assets/javascripts/app'
  run 'touch app/assets/javascripts/app/.keep'
end

#setup_paperclipObject



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

def setup_paperclip
  copy_file 'paperclip.rb', 'config/initializers/paperclip.rb'
end

#setup_stylesheetsObject



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

def setup_stylesheets
  run 'rm -rf app/assets/stylesheets'
  run 'curl -L https://github.com/lewagon/rails-stylesheets/archive/master.zip > app/assets/stylesheets.zip'
  run 'cd app/assets &&  unzip stylesheets.zip && rm stylesheets.zip && mv rails-stylesheets-master stylesheets & cd ../..'
end

#use_postgres_config_templateObject



107
108
109
110
# File 'lib/wagon_rails/app_builder.rb', line 107

def use_postgres_config_template
  template 'postgresql_database.yml.erb', 'config/database.yml',
    force: true
end