Class: Gimbal::AppBuilder

Inherits:
Rails::AppBuilder
  • Object
show all
Extended by:
Forwardable
Includes:
Actions
Defined in:
lib/gimbal/app_builder.rb

Instance Method Summary collapse

Methods included from Actions

#action_mailer_host, #configure_application_file, #configure_environment, #replace_in_file

Instance Method Details

#add_bullet_gem_configurationObject



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

def add_bullet_gem_configuration
  config = "\n  config.after_initialize do\nBullet.enable = true\nBullet.bullet_logger = true\nBullet.rails_logger = true\n  end\n\n  RUBY\n\n  inject_into_file(\n      \"config/environments/development.rb\",\n      config,\n      after: \"config.action_mailer.delivery_method = :letter_opener\\n\",\n  )\nend\n"

#configure_action_mailer_in_specsObject



115
116
117
# File 'lib/gimbal/app_builder.rb', line 115

def configure_action_mailer_in_specs
  copy_file 'action_mailer.rb', 'spec/support/action_mailer.rb'
end

#configure_deviseObject



171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/gimbal/app_builder.rb', line 171

def configure_devise
  inject_into_file 'app/models/user.rb',
                   "\n         :confirmable, :lockable, :timeoutable,",
                   after: 'devise :database_authenticatable, :registerable,'

  devise_migration = Dir['db/migrate/*devise_create*.rb'].first

  uncomment_lines(devise_migration, 't.string   :confirmation_token')
  uncomment_lines(devise_migration, 't.datetime :confirmed_at')
  uncomment_lines(devise_migration, 't.datetime :confirmation_sent_at')
  uncomment_lines(devise_migration, 't.string   :unconfirmed_email')

  uncomment_lines(devise_migration, 't.integer  :failed_attempts')
  uncomment_lines(devise_migration, 't.string   :unlock_token')
  uncomment_lines(devise_migration, 't.datetime :locked_at')

  uncomment_lines(devise_migration, 'add_index :users, :confirmation_token')
  uncomment_lines(devise_migration, 'add_index :users, :unlock_token')

  inject_into_file(
    "config/environments/development.rb",
    "config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }\n",
    after: "config.action_mailer.delivery_method = :letter_opener\n",
  )
end

#configure_generatorsObject



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/gimbal/app_builder.rb', line 68

def configure_generators
  config = "\nconfig.generators do |generate|\n  generate.helper false\n  generate.javascript_engine false\n  generate.request_specs false\n  generate.routing_specs false\n  generate.skip_routes true\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_i18n_for_missing_translationsObject



91
92
93
94
# File 'lib/gimbal/app_builder.rb', line 91

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

#configure_i18n_for_test_environmentObject



96
97
98
# File 'lib/gimbal/app_builder.rb', line 96

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

#configure_i18n_tasksObject



100
101
102
103
# File 'lib/gimbal/app_builder.rb', line 100

def configure_i18n_tasks
  run "cp $(i18n-tasks gem-path)/templates/rspec/i18n_spec.rb spec/"
  copy_file "config_i18n_tasks.yml", "config/i18n-tasks.yml"
end

#configure_pumaObject



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

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

#configure_rspecObject



155
156
157
158
159
160
# File 'lib/gimbal/app_builder.rb', line 155

def configure_rspec
  remove_file "spec/rails_helper.rb"
  remove_file "spec/spec_helper.rb"
  copy_file "rails_helper.rb", "spec/rails_helper.rb"
  copy_file "spec_helper.rb", "spec/spec_helper.rb"
end

#configure_spec_support_featuresObject



109
110
111
112
113
# File 'lib/gimbal/app_builder.rb', line 109

def configure_spec_support_features
  empty_directory_with_keep_file 'spec/features'
  empty_directory_with_keep_file 'spec/factories'
  empty_directory_with_keep_file 'spec/support/features'
end

#configure_time_formatsObject



239
240
241
242
# File 'lib/gimbal/app_builder.rb', line 239

def configure_time_formats
  remove_file "config/locales/en.yml"
  template "config_locales_en.yml.erb", "config/locales/en.yml"
end

#create_analytics_partialObject



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

def create_analytics_partial
  copy_file '_analytics.html.haml',
            'app/views/application/_analytics.html.haml'
end

#create_application_layoutObject



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

def create_application_layout
  remove_file 'app/views/layouts/application.html.erb'
  template 'gimbal_layout.html.haml.erb',
           'app/views/layouts/application.html.haml'
end

#create_databaseObject



221
222
223
# File 'lib/gimbal/app_builder.rb', line 221

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

#create_github_repo(repo_name) ⇒ Object



244
245
246
# File 'lib/gimbal/app_builder.rb', line 244

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

#create_partials_directoryObject



197
198
199
# File 'lib/gimbal/app_builder.rb', line 197

def create_partials_directory
  empty_directory 'app/views/application'
end

#create_shared_flashesObject



201
202
203
204
# File 'lib/gimbal/app_builder.rb', line 201

def create_shared_flashes
  copy_file "_flashes.html.haml", "app/views/application/_flashes.html.haml"
  copy_file "flashes_helper.rb", "app/helpers/flashes_helper.rb"
end

#create_shared_javascriptsObject



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

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

#enable_database_cleanerObject



136
137
138
# File 'lib/gimbal/app_builder.rb', line 136

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

#enable_devise_gemObject



87
88
89
# File 'lib/gimbal/app_builder.rb', line 87

def enable_devise_gem
  uncomment_lines('Gemfile', 'gem "devise"')
end

#generate_devise_modelObject



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

def generate_devise_model
  bundle_command 'exec rails generate devise User'
  bundle_command 'exec rails generate devise:views'
end

#generate_factories_fileObject



144
145
146
# File 'lib/gimbal/app_builder.rb', line 144

def generate_factories_file
  copy_file "factories.rb", "spec/factories.rb"
end

#generate_homepageObject



229
230
231
232
233
234
235
236
237
# File 'lib/gimbal/app_builder.rb', line 229

def generate_homepage
  bundle_command 'exec rails generate controller pages homepage'

  inject_into_file(
    'config/routes.rb',
    "\n  root to: 'pages#homepage'",
    after: 'devise_for :users'
  )
end

#generate_rspecObject



128
129
130
# File 'lib/gimbal/app_builder.rb', line 128

def generate_rspec
  bundle_command 'exec rails generate rspec:install'
end

#gitignore_filesObject



119
120
121
122
123
124
125
126
# File 'lib/gimbal/app_builder.rb', line 119

def gitignore_files
  remove_file '.gitignore'
  copy_file 'gimbal_gitignore', '.gitignore'
  %w(app/views/pages spec/lib spec/controllers spec/helpers spec/support/matchers spec/support/mixins spec/support/shared_examples).each do |dir|
    run "mkdir #{dir}"
    run "touch #{dir}/.keep"
  end
end

#init_gitObject



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

def init_git
  run 'git init'
end

#install_deviseObject



162
163
164
# File 'lib/gimbal/app_builder.rb', line 162

def install_devise
  bundle_command 'exec rails generate devise:install'
end

#migrate_databaseObject



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

def migrate_database
  bundle_command 'exec rake db:migrate'
end

#provide_shoulda_matchers_configObject



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

def provide_shoulda_matchers_config
  copy_file(
      "shoulda_matchers_config_rspec.rb",
      "spec/support/shoulda_matchers.rb"
  )
end

#raise_on_delivery_errorsObject



29
30
31
32
# File 'lib/gimbal/app_builder.rb', line 29

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

#raise_on_missing_assets_in_testObject



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

def raise_on_missing_assets_in_test
  inject_into_file(
      "config/environments/test.rb",
      "\n  config.assets.raise_runtime_errors = true",
      after: "Rails.application.configure do",
  )
end

#raise_on_unpermitted_parametersObject



60
61
62
63
64
65
66
# File 'lib/gimbal/app_builder.rb', line 60

def raise_on_unpermitted_parameters
  config = "config.action_controller.action_on_unpermitted_parameters = :raise\n  RUBY\n\n  inject_into_class \"config/application.rb\", \"Application\", config\nend\n"

#replace_gemfileObject



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

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

#set_dev_mail_delivery_methodObject



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

def set_dev_mail_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_ruby_to_version_being_usedObject



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

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

#set_up_factory_girl_for_rspecObject



140
141
142
# File 'lib/gimbal/app_builder.rb', line 140

def set_up_factory_girl_for_rspec
  copy_file 'factory_girl_rspec.rb', 'spec/support/factory_girl.rb'
end

#setup_bundler_auditObject



267
268
269
270
# File 'lib/gimbal/app_builder.rb', line 267

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

#setup_default_rake_taskObject



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

def setup_default_rake_task
  append_file 'Rakefile' do
    "task(:default).clear\ntask default: [:spec]\nif defined? RSpec\n  task(:spec).clear\n  RSpec::Core::RakeTask.new(:spec) do |t|\nt.verbose = false\n  end\nend\n    EOS\n  end\nend\n"

#setup_springObject



248
249
250
# File 'lib/gimbal/app_builder.rb', line 248

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

#use_mysql_config_templateObject



105
106
107
# File 'lib/gimbal/app_builder.rb', line 105

def use_mysql_config_template
  template 'mysql_database.yml.erb', 'config/database.yml', force: true
end