orats 0.6.5 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +231 -58
  3. data/lib/orats/cli.rb +63 -25
  4. data/lib/orats/commands/common.rb +47 -22
  5. data/lib/orats/commands/{outdated → diff}/compare.rb +5 -4
  6. data/lib/orats/commands/diff/exec.rb +86 -0
  7. data/lib/orats/commands/{outdated → diff}/parse.rb +5 -1
  8. data/lib/orats/commands/inventory.rb +121 -0
  9. data/lib/orats/commands/{play.rb → playbook.rb} +5 -5
  10. data/lib/orats/commands/project/exec.rb +74 -0
  11. data/lib/orats/commands/{new → project}/rails.rb +57 -81
  12. data/lib/orats/commands/{new → project}/server.rb +6 -4
  13. data/lib/orats/templates/auth.rb +26 -481
  14. data/lib/orats/templates/base.rb +74 -716
  15. data/lib/orats/templates/includes/common/LICENSE +22 -0
  16. data/lib/orats/templates/includes/new/rails/.env +43 -0
  17. data/lib/orats/templates/includes/{Gemfile → new/rails/Gemfile} +1 -1
  18. data/lib/orats/templates/includes/new/rails/Procfile +3 -0
  19. data/lib/orats/templates/includes/new/rails/README.md +3 -0
  20. data/lib/orats/templates/includes/{app → new/rails/app}/assets/favicon/favicon_base.png +0 -0
  21. data/lib/orats/templates/includes/new/rails/app/helpers/application_helper.rb +53 -0
  22. data/lib/orats/templates/includes/new/rails/app/models/account.rb +40 -0
  23. data/lib/orats/templates/includes/new/rails/app/views/devise/confirmations/new.html.erb +26 -0
  24. data/lib/orats/templates/includes/new/rails/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  25. data/lib/orats/templates/includes/new/rails/app/views/devise/mailer/reset_password_instructions.html.erb +10 -0
  26. data/lib/orats/templates/includes/new/rails/app/views/devise/mailer/unlock_instructions.html.erb +8 -0
  27. data/lib/orats/templates/includes/new/rails/app/views/devise/passwords/edit.html.erb +28 -0
  28. data/lib/orats/templates/includes/new/rails/app/views/devise/passwords/new.html.erb +26 -0
  29. data/lib/orats/templates/includes/new/rails/app/views/devise/registrations/edit.html.erb +51 -0
  30. data/lib/orats/templates/includes/new/rails/app/views/devise/registrations/new.html.erb +31 -0
  31. data/lib/orats/templates/includes/new/rails/app/views/devise/sessions/new.html.erb +39 -0
  32. data/lib/orats/templates/includes/new/rails/app/views/devise/shared/_links.html.erb +38 -0
  33. data/lib/orats/templates/includes/new/rails/app/views/devise/unlocks/new.html.erb +26 -0
  34. data/lib/orats/templates/includes/new/rails/app/views/layouts/_disqus_comments_snippet.html.erb +19 -0
  35. data/lib/orats/templates/includes/new/rails/app/views/layouts/_disqus_count_snippet.html.erb +12 -0
  36. data/lib/orats/templates/includes/new/rails/app/views/layouts/_flash.html.erb +10 -0
  37. data/lib/orats/templates/includes/new/rails/app/views/layouts/_footer.html.erb +2 -0
  38. data/lib/orats/templates/includes/new/rails/app/views/layouts/_google_analytics_snippet.html.erb +13 -0
  39. data/lib/orats/templates/includes/new/rails/app/views/layouts/_google_analytics_tracker.html.erb +4 -0
  40. data/lib/orats/templates/includes/new/rails/app/views/layouts/_navigation.html.erb +18 -0
  41. data/lib/orats/templates/includes/new/rails/app/views/layouts/_navigation_auth.html.erb +15 -0
  42. data/lib/orats/templates/includes/new/rails/app/views/layouts/_navigation_links.html.erb +3 -0
  43. data/lib/orats/templates/includes/new/rails/app/views/layouts/application.html.erb +48 -0
  44. data/lib/orats/templates/includes/new/rails/app/views/pages/home.html.erb +81 -0
  45. data/lib/orats/templates/includes/new/rails/config/database.yml +19 -0
  46. data/lib/orats/templates/includes/new/rails/config/environments/staging.rb +5 -0
  47. data/lib/orats/templates/includes/new/rails/config/initializers/devise_async.rb +1 -0
  48. data/lib/orats/templates/includes/new/rails/config/initializers/mini_profiler.rb +4 -0
  49. data/lib/orats/templates/includes/new/rails/config/initializers/sidekiq.rb +16 -0
  50. data/lib/orats/templates/includes/new/rails/config/puma.rb +25 -0
  51. data/lib/orats/templates/includes/new/rails/config/secrets.yml +12 -0
  52. data/lib/orats/templates/includes/new/rails/config/sidekiq.yml +5 -0
  53. data/lib/orats/templates/includes/new/rails/config/sitemap.rb +20 -0
  54. data/lib/orats/templates/includes/new/rails/config/whenever.rb +7 -0
  55. data/lib/orats/templates/includes/new/rails/lib/backup/config.rb +116 -0
  56. data/lib/orats/templates/includes/new/rails/lib/backup/models/backup.rb +55 -0
  57. data/lib/orats/templates/includes/new/rails/lib/tasks/orats/backup.rake +18 -0
  58. data/lib/orats/templates/includes/new/rails/lib/tasks/orats/favicon.rake +48 -0
  59. data/lib/orats/templates/includes/new/rails/public/404.html +13 -0
  60. data/lib/orats/templates/includes/new/rails/public/422.html +13 -0
  61. data/lib/orats/templates/includes/new/rails/public/500.html +13 -0
  62. data/lib/orats/templates/includes/new/rails/public/502.html +13 -0
  63. data/lib/orats/templates/includes/new/rails/test/fixtures/accounts.yml +27 -0
  64. data/lib/orats/templates/includes/new/rails/test/models/account_test.rb +46 -0
  65. data/lib/orats/templates/includes/{Galaxyfile → playbook/Galaxyfile} +0 -0
  66. data/lib/orats/templates/includes/playbook/site.yml +53 -0
  67. data/lib/orats/templates/playbook.rb +115 -0
  68. data/lib/orats/version.rb +1 -1
  69. data/test/integration/cli_test.rb +122 -75
  70. data/test/test_helper.rb +16 -8
  71. metadata +63 -14
  72. data/lib/orats/commands/new/ansible.rb +0 -98
  73. data/lib/orats/commands/new/exec.rb +0 -60
  74. data/lib/orats/commands/outdated/exec.rb +0 -46
  75. data/lib/orats/templates/play.rb +0 -185
@@ -30,12 +30,21 @@ def git_commit(message)
30
30
  git commit: "-m '#{message}'"
31
31
  end
32
32
 
33
- def copy_from_local_gem(source, dest)
34
- base_path = "#{File.expand_path File.dirname(__FILE__)}/includes"
35
- file_name_of_source = File.basename(source)
33
+ def git_config(field)
34
+ command = "git config --global user.#{field}"
35
+ git_field_value = run(command, capture: true).gsub("\n", '')
36
+ default_value = "YOUR_#{field.upcase}"
36
37
 
37
- run "mkdir -p #{File.dirname(dest)}" if dest.present? && file_name_of_source != dest
38
- run "cp #{base_path}/#{source} #{dest}"
38
+ git_field_value.to_s.empty? ? default_value : git_field_value
39
+ end
40
+
41
+ def copy_from_local_gem(source, dest = '')
42
+ dest = source if dest.empty?
43
+
44
+ base_path = "#{File.expand_path File.dirname(__FILE__)}/includes/new/rails"
45
+
46
+ run "mkdir -p #{File.dirname(dest)}" unless Dir.exist?(File.dirname(dest))
47
+ run "cp -f #{base_path}/#{source} #{dest}"
39
48
  end
40
49
 
41
50
  # ---
@@ -74,118 +83,57 @@ end
74
83
  def copy_gemfile
75
84
  log_task __method__
76
85
 
77
- run 'rm -f Gemfile'
78
- copy_from_local_gem 'Gemfile', 'Gemfile'
86
+ copy_from_local_gem 'Gemfile'
79
87
  git_commit 'Add Gemfile'
80
88
  end
81
89
 
82
90
  def copy_base_favicon
83
91
  log_task __method__
84
92
 
85
- copy_from_local_gem 'app/assets/favicon/favicon_base.png',
86
- 'app/assets/favicon/favicon_base.png'
93
+ copy_from_local_gem 'app/assets/favicon/favicon_base.png'
87
94
  git_commit 'Add a 256x256 base favicon'
88
95
  end
89
96
 
90
97
  def add_dotenv
91
98
  log_task 'add_dotenv'
92
99
 
93
- file '.env' do
94
- <<-S
95
- RAILS_ENV: development
96
-
97
- PROJECT_PATH: /full/path/to/your/project
98
- TIME_ZONE: Eastern Time (US & Canada)
99
- DEFAULT_LOCALE: en
100
-
101
- GOOGLE_ANALYTICS_UA: ""
102
- DISQUS_SHORT_NAME: ""
103
- S3_ACCESS_KEY_ID: ""
104
- S3_SECRET_ACCESS_KEY: ""
105
- S3_REGION: ""
106
-
107
- TOKEN_RAILS_SECRET: #{generate_token}
108
-
109
- SMTP_ADDRESS: smtp.gmail.com
110
- SMTP_PORT: 587 # 465 if you use ssl
111
- SMTP_DOMAIN: gmail.com
112
- SMTP_USERNAME: #{app_name}@gmail.com
113
- SMTP_PASSWORD: thebestpassword
114
- SMTP_AUTH: plain
115
- SMTP_ENCRYPTION: starttls
116
-
117
- ACTION_MAILER_HOST: localhost:3000
118
- ACTION_MAILER_DEFAULT_FROM: info@#{app_name}.com
119
- ACTION_MAILER_DEFAULT_TO: me@#{app_name}.com
120
-
121
- DATABASE_NAME: #{app_name}
122
- DATABASE_HOST: localhost
123
- DATABASE_POOL: 25
124
- DATABASE_TIMEOUT: 5000
125
- DATABASE_USERNAME: postgres
126
- DATABASE_PASSWORD: supersecrets
127
-
128
- CACHE_HOST: localhost
129
- CACHE_PORT: 6379
130
- CACHE_DATABASE: 0
131
- CACHE_PASSWORD: ""
132
-
133
- PUMA_THREADS_MIN: 0
134
- PUMA_THREADS_MAX: 1
135
- PUMA_WORKERS: 0
136
-
137
- SIDEKIQ_CONCURRENCY: 25
138
- S
139
- end
100
+ copy_from_local_gem '.env', '.env'
101
+ gsub_file '.env', 'generate_token', generate_token
102
+ gsub_file '.env', 'app_name', app_name
140
103
  git_commit 'Add development environment file'
141
104
  end
142
105
 
143
106
  def add_procfile
144
107
  log_task __method__
145
108
 
146
- file 'Procfile' do
147
- <<-S
148
- web: puma -C config/puma.rb | grep -v --line-buffered ' 304 -'
149
- worker: sidekiq -C config/sidekiq.yml
150
- log: tail -f log/development.log | grep -xv --line-buffered '^[[:space:]]*' | grep -v --line-buffered '/assets/'
151
- S
152
- end
109
+ copy_from_local_gem 'Procfile'
153
110
  git_commit 'Add Procfile'
154
111
  end
155
112
 
156
113
  def add_markdown_readme
157
114
  log_task __method__
158
115
 
159
- run 'rm README.rdoc'
160
- file 'README.md' do
161
- <<-S
162
- ## Project information
163
-
164
- This project was generated with [orats](https://github.com/nickjj/orats) vVERSION.
165
- S
166
- end
116
+ copy_from_local_gem 'README.md'
167
117
  git_commit 'Add markdown readme'
168
118
  end
169
119
 
170
- def update_app_secrets
120
+ def add_license
171
121
  log_task __method__
172
122
 
173
- gsub_file 'config/secrets.yml', /.*\n/, ''
174
- append_file 'config/secrets.yml' do
175
- <<-S
176
- development: &default
177
- secret_key_base: <%= ENV['TOKEN_RAILS_SECRET'] %>
123
+ author_name = git_config 'name'
124
+ author_email = git_config 'email'
178
125
 
179
- test:
180
- <<: *default
126
+ copy_from_local_gem '../../common/LICENSE', 'LICENSE'
127
+ gsub_file 'LICENSE', 'Time.now.year', Time.now.year.to_s
128
+ gsub_file 'LICENSE', 'author_name', author_name
129
+ gsub_file 'LICENSE', 'author_email', author_email
130
+ git_commit 'Add MIT license'
131
+ end
181
132
 
182
- staging:
183
- <<: *default
133
+ def update_app_secrets
134
+ log_task __method__
184
135
 
185
- production:
186
- <<: *default
187
- S
188
- end
136
+ copy_from_local_gem 'config/secrets.yml'
189
137
  git_commit 'DRY out the yaml'
190
138
  end
191
139
 
@@ -245,103 +193,28 @@ end
245
193
  def update_database_config
246
194
  log_task __method__
247
195
 
248
- gsub_file 'config/database.yml', /.*\n/, ''
249
- append_file 'config/database.yml' do
250
- <<-S
251
- development: &default
252
- adapter: postgresql
253
- database: <%= ENV['DATABASE_NAME'] %>
254
- host: <%= ENV['DATABASE_HOST'] %>
255
- pool: <%= ENV['DATABASE_POOL'] %>
256
- timeout: <%= ENV['DATABASE_TIMEOUT'] %>
257
- username: <%= ENV['DATABASE_USERNAME'] %>
258
- password: <%= ENV['DATABASE_PASSWORD'] %>
259
-
260
- test:
261
- <<: *default
262
- database: <%= ENV['DATABASE_NAME'] %>_test
263
-
264
- staging:
265
- <<: *default
266
-
267
- production:
268
- <<: *default
269
- S
270
- end
196
+ copy_from_local_gem 'config/database.yml'
271
197
  git_commit 'DRY out the yaml'
272
198
  end
273
199
 
274
200
  def add_puma_config
275
201
  log_task __method__
276
202
 
277
- file 'config/puma.rb', <<-'S'
278
- environment ENV['RAILS_ENV']
279
-
280
- threads ENV['PUMA_THREADS_MIN'].to_i,ENV['PUMA_THREADS_MAX'].to_i
281
- workers ENV['PUMA_WORKERS'].to_i
282
-
283
- pidfile "#{ENV['PROJECT_PATH']}/tmp/puma.pid"
284
-
285
- if ENV['RAILS_ENV'] == 'production'
286
- bind "unix://#{ENV['PROJECT_PATH']}/tmp/puma.sock"
287
- else
288
- port '3000'
289
- end
290
-
291
- # https://github.com/puma/puma/blob/master/examples/config.rb#L125
292
- prune_bundler
293
-
294
- restart_command 'bundle exec bin/puma'
295
-
296
- on_worker_boot do
297
- require 'active_record'
298
-
299
- config_path = File.expand_path('../database.yml', __FILE__)
300
- ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
301
- ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'] || YAML.load_file(config_path)[ENV['RAILS_ENV']])
302
- end
303
- S
203
+ copy_from_local_gem 'config/puma.rb'
304
204
  git_commit 'Add the puma config'
305
205
  end
306
206
 
307
207
  def add_sidekiq_config
308
208
  log_task __method__
309
209
 
310
- file 'config/sidekiq.yml', <<-S
311
- ---
312
- :pidfile: <%= ENV['PROJECT_PATH'] %>/tmp/sidekiq.pid
313
- :concurrency: <%= ENV['SIDEKIQ_CONCURRENCY'].to_i %>
314
- :queues:
315
- - default
316
- S
210
+ copy_from_local_gem 'config/sidekiq.yml'
317
211
  git_commit 'Add the sidekiq config'
318
212
  end
319
213
 
320
214
  def add_sitemap_config
321
215
  log_task __method__
322
216
 
323
- file 'config/sitemap.rb', <<-'S'
324
- # Set the host name for URL creation
325
- SitemapGenerator::Sitemap.default_host = "http://www.app_name.com"
326
-
327
- SitemapGenerator::Sitemap.create do
328
- # Put links creation logic here.
329
- #
330
- # The root path '/' and sitemap index file are added automatically for you.
331
- # Links are added to the Sitemap in the order they are specified.
332
- #
333
- # Examples:
334
- #
335
- # add root_path
336
- # add foobar_path, priority: 0.7, changefreq: 'daily'
337
- #
338
- # Iteration example:
339
- #
340
- # Article.published.find_each do |article|
341
- # add article_path("#{article.id}-#{article.permalink}"), priority: 0.9, lastmod: article.updated_at
342
- # end
343
- end
344
- S
217
+ copy_from_local_gem 'config/sitemap.rb'
345
218
  gsub_file 'config/sitemap.rb', 'app_name', app_name
346
219
  git_commit 'Add the sitemap config'
347
220
  end
@@ -349,39 +222,14 @@ end
349
222
  def add_whenever_config
350
223
  log_task __method__
351
224
 
352
- file 'config/schedule.rb', <<-S
353
- every 1.day, at: '3:00 am' do
354
- rake 'orats:backup'
355
- end
356
-
357
- every 1.day, at: '4:00 am' do
358
- rake 'sitemap:refresh'
359
- end
360
- S
225
+ copy_from_local_gem 'config/whenever.rb'
361
226
  git_commit 'Add the whenever config'
362
227
  end
363
228
 
364
229
  def add_sidekiq_initializer
365
230
  log_task __method__
366
231
 
367
- file 'config/initializers/sidekiq.rb', <<-'S'
368
- ENV['CACHE_PASSWORD'].present? ? pass_string = ":#{ENV['CACHE_PASSWORD']}@" : pass_string = ''
369
-
370
- redis_host = "#{pass_string}#{ENV['CACHE_HOST']}"
371
-
372
- sidekiq_config = {
373
- url: "redis://#{redis_host}:#{ENV['CACHE_PORT']}/#{ENV['CACHE_DATABASE']}",
374
- namespace: "ns_app::sidekiq_#{Rails.env}"
375
- }
376
-
377
- Sidekiq.configure_server do |config|
378
- config.redis = sidekiq_config
379
- end
380
-
381
- Sidekiq.configure_client do |config|
382
- config.redis = sidekiq_config
383
- end
384
- S
232
+ copy_from_local_gem 'config/initializers/sidekiq.rb'
385
233
  gsub_file 'config/initializers/sidekiq.rb', 'ns_app', app_name
386
234
  git_commit 'Add the sidekiq initializer'
387
235
  end
@@ -389,25 +237,16 @@ end
389
237
  def add_mini_profiler_initializer
390
238
  log_task __method__
391
239
 
392
- file 'config/initializers/mini_profiler.rb', <<-S
393
- if defined? Rack::MiniProfiler
394
- # Toggle with ALT+p
395
- Rack::MiniProfiler.config.start_hidden = true
396
- end
397
- S
240
+ copy_from_local_gem 'config/initializers/mini_profiler.rb'
398
241
  git_commit 'Add the mini profiler initializer'
399
242
  end
400
243
 
401
244
  def add_staging_environment
402
245
  log_task __method__
403
246
 
404
- file 'config/environments/staging.rb', <<-S
405
- require_relative 'production.rb'
406
-
407
- #{app_name.humanize}::Application.configure do
408
- # Overwrite any production settings here, or if you want to start from scratch then remove line 1.
409
- end
410
- S
247
+ copy_from_local_gem 'config/environments/staging.rb'
248
+ gsub_file 'config/environments/staging.rb', 'app_name.humanize',
249
+ app_name.humanize
411
250
  git_commit 'Add a staging environment'
412
251
  end
413
252
 
@@ -472,264 +311,22 @@ end
472
311
  def add_backup_lib
473
312
  log_task __method__
474
313
 
475
- file 'lib/backup/config.rb', <<-'S'
476
- ##
477
- # Backup v4.x Configuration
478
- #
479
- # Documentation: http://meskyanichi.github.io/backup
480
- # Issue Tracker: https://github.com/meskyanichi/backup/issues
481
-
482
- # Config Options
483
- #
484
- # The options here may be overridden on the command line, but the result
485
- # will depend on the use of --root-path on the command line.
486
- #
487
- # If --root-path is used on the command line, then all paths set here
488
- # will be overridden. If a path (like --tmp-path) is not given along with
489
- # --root-path, that path will use it's default location _relative to --root-path_.
490
- #
491
- # If --root-path is not used on the command line, a path option (like --tmp-path)
492
- # given on the command line will override the tmp_path set here, but all other
493
- # paths set here will be used.
494
- #
495
- # Note that relative paths given on the command line without --root-path
496
- # are relative to the current directory. The root_path set here only applies
497
- # to relative paths set here.
498
- #
499
- # ---
500
- #
501
- # Sets the root path for all relative paths, including default paths.
502
- # May be an absolute path, or relative to the current working directory.
503
-
504
- root_path 'lib/backup'
505
-
506
- # Sets the path where backups are processed until they're stored.
507
- # This must have enough free space to hold apx. 2 backups.
508
- # May be an absolute path, or relative to the current directory or +root_path+.
509
-
510
- tmp_path '../../tmp'
511
-
512
- # Sets the path where backup stores persistent information.
513
- # When Backup's Cycler is used, small YAML files are stored here.
514
- # May be an absolute path, or relative to the current directory or +root_path+.
515
-
516
- data_path '../../tmp/backup/data'
517
-
518
- # Utilities
519
- #
520
- # If you need to use a utility other than the one Backup detects,
521
- # or a utility can not be found in your $PATH.
522
- #
523
- # Utilities.configure do
524
- # tar '/usr/bin/gnutar'
525
- # redis_cli '/opt/redis/redis-cli'
526
- # end
527
-
528
- # Logging
529
- #
530
- # Logging options may be set on the command line, but certain settings
531
- # may only be configured here.
532
- #
533
- # Logger.configure do
534
- # console.quiet = true # Same as command line: --quiet
535
- # logfile.max_bytes = 2_000_000 # Default: 500_000
536
- # syslog.enabled = true # Same as command line: --syslog
537
- # syslog.ident = 'my_app_backup' # Default: 'backup'
538
- # end
539
- #
540
- # Command line options will override those set here.
541
- # For example, the following would override the example settings above
542
- # to disable syslog and enable console output.
543
- # backup perform --trigger my_backup --no-syslog --no-quiet
544
-
545
- # Component Defaults
546
- #
547
- # Set default options to be applied to components in all models.
548
- # Options set within a model will override those set here.
549
- #
550
- # Storage::S3.defaults do |s3|
551
- # s3.access_key_id = "my_access_key_id"
552
- # s3.secret_access_key = "my_secret_access_key"
553
- # end
554
- #
555
- # Notifier::Mail.defaults do |mail|
556
- # mail.from = 'sender@email.com'
557
- # mail.to = 'receiver@email.com'
558
- # mail.address = 'smtp.gmail.com'
559
- # mail.port = 587
560
- # mail.domain = 'your.host.name'
561
- # mail.user_name = 'sender@email.com'
562
- # mail.password = 'my_password'
563
- # mail.authentication = 'plain'
564
- # mail.encryption = :starttls
565
- # end
566
-
567
- # Preconfigured Models
568
- #
569
- # Create custom models with preconfigured components.
570
- # Components added within the model definition will
571
- # +add to+ the preconfigured components.
572
- #
573
- # preconfigure 'MyModel' do
574
- # archive :user_pictures do |archive|
575
- # archive.add '~/pictures'
576
- # end
577
- #
578
- # notify_by Mail do |mail|
579
- # mail.to = 'admin@email.com'
580
- # end
581
- # end
582
- #
583
- # MyModel.new(:john_smith, 'John Smith Backup') do
584
- # archive :user_music do |archive|
585
- # archive.add '~/music'
586
- # end
587
- #
588
- # notify_by Mail do |mail|
589
- # mail.to = 'john.smith@email.com'
590
- # end
591
- # end
592
- S
593
-
594
- file 'lib/backup/models/backup.rb', <<-'S'
595
- Model.new(:backup, 'Backup for the current RAILS_ENV') do
596
- split_into_chunks_of 10
597
- compress_with Gzip
598
-
599
- database PostgreSQL do |db|
600
- db.sudo_user = ENV['DATABASE_USERNAME']
601
- # To dump all databases, set `db.name = :all` (or leave blank)
602
- db.name = ENV['DATABASE_NAME']
603
- db.username = ENV['DATABASE_USERNAME']
604
- db.password = ENV['DATABASE_PASSWORD']
605
- db.host = ENV['DATABASE_HOST']
606
- db.port = 5432
607
- db.socket = '/var/run/postgresql'
608
- #db.skip_tables = ['skip', 'these', 'tables']
609
- #db.only_tables = ['only', 'these', 'tables']
610
- end
611
-
612
- # uncomment the block below to archive a specific path
613
- # this may be useful if you have user supplied content
614
-
615
- # archive :app_archive do |archive|
616
- # archive.add File.join(ENV['PROJECT_PATH'], 'public', 'system')
617
- # end
618
-
619
- # uncomment the block below and fill in the required information
620
- # to use S3 to store your backups
621
-
622
- # don't want to use S3? check out the other available options:
623
- # http://meskyanichi.github.io/backup/v4/storages/
624
-
625
- # store_with S3 do |s3|
626
- # s3.access_key_id = ENV['S3_ACCESS_KEY_ID']
627
- # s3.secret_access_key = ENV['S3_SECRET_ACCESS_KEY']
628
- # s3.region = ENV['S3_REGION']
629
- # s3.bucket = 'backup'
630
- # s3.path = "/database/#{ENV['RAILS_ENV']}"
631
- # end
632
-
633
- ENV['SMTP_ENCRYPTION'].empty? ? mail_encryption = 'none' : mail_encryption = ENV['SMTP_ENCRYPTION']
634
-
635
- notify_by Mail do |mail|
636
- mail.on_success = false
637
- #mail.on_warning = true
638
- mail.on_failure = true
639
- mail.from = ENV['ACTION_MAILER_DEFAULT_FROM']
640
- mail.to = ENV['ACTION_MAILER_DEFAULT_TO']
641
- mail.address = ENV['SMTP_ADDRESS']
642
- mail.port = ENV['SMTP_PORT'].to_i
643
- mail.domain = ENV['SMTP_DOMAIN']
644
- mail.user_name = ENV['SMTP_USERNAME']
645
- mail.password = ENV['SMTP_PASSWORD']
646
- mail.authentication = ENV['SMTP_AUTH']
647
- mail.encryption = mail_encryption.to_sym
648
- end
649
- end
650
- S
314
+ copy_from_local_gem 'lib/backup/config.rb'
315
+ copy_from_local_gem 'lib/backup/models/backup.rb'
651
316
  git_commit 'Add backup library'
652
317
  end
653
318
 
654
319
  def add_favicon_task
655
320
  log_task __method__
656
321
 
657
- file 'lib/tasks/orats/favicon.rake', <<-'S'
658
- namespace :orats do
659
- desc 'Create favicons from a single base png'
660
- task :favicons do
661
- require 'favicon_maker'
662
-
663
- FaviconMaker.generate do
664
- setup do
665
- template_dir Rails.root.join('app', 'assets', 'favicon')
666
- output_dir Rails.root.join('public')
667
- end
668
-
669
- favicon_base_path = "#{template_dir}/favicon_base.png"
670
-
671
- unless File.exist?(favicon_base_path)
672
- puts
673
- puts 'A base favicon could not be found, make sure one exists at:'
674
- puts favicon_base_path
675
- puts
676
- exit 1
677
- end
678
-
679
- from File.basename(favicon_base_path) do
680
- icon 'speeddial-160x160.png'
681
- icon 'apple-touch-icon-228x228-precomposed.png'
682
- icon 'apple-touch-icon-152x152-precomposed.png'
683
- icon 'apple-touch-icon-144x144-precomposed.png'
684
- icon 'apple-touch-icon-120x120-precomposed.png'
685
- icon 'apple-touch-icon-114x114-precomposed.png'
686
- icon 'apple-touch-icon-76x76-precomposed.png'
687
- icon 'apple-touch-icon-72x72-precomposed.png'
688
- icon 'apple-touch-icon-60x60-precomposed.png'
689
- icon 'apple-touch-icon-57x57-precomposed.png'
690
- icon 'favicon-196x196.png'
691
- icon 'favicon-160x160.png'
692
- icon 'favicon-96x96.png'
693
- icon 'favicon-64x64.png'
694
- icon 'favicon-32x32.png'
695
- icon 'favicon-24x24.png'
696
- icon 'favicon-16x16.png'
697
- icon 'favicon.ico', size: '64x64,32x32,24x24,16x16'
698
- end
699
-
700
- each_icon do |filepath|
701
- puts "Creating favicon @ #{filepath}"
702
- end
703
- end
704
- end
705
- end
706
- S
322
+ copy_from_local_gem 'lib/tasks/orats/favicon.rake'
707
323
  git_commit 'Add a favicon generator task'
708
324
  end
709
325
 
710
326
  def add_backup_task
711
327
  log_task __method__
712
328
 
713
- file 'lib/tasks/orats/backup.rake', <<-'S'
714
- namespace :orats do
715
- desc 'Create a backup of your application for a specific environment'
716
- task :backup do
717
- if File.exist?('.env') && File.file?('.env')
718
- require 'dotenv'
719
- Dotenv.load
720
- source_external_env = ''
721
- else
722
- source_external_env = '. /etc/default/app_name &&'
723
- end
724
-
725
- # hack'ish way to run the backup command with elevated privileges, it won't prompt for a password on the production
726
- # server because passwordless sudo has been enabled if you use the ansible setup provided by orats
727
- system 'sudo whoami'
728
-
729
- system "#{source_external_env} backup perform -t backup -c '#{File.join('lib', 'backup', 'config.rb')}' --log-path='#{File.join('log')}'"
730
- end
731
- end
732
- S
329
+ copy_from_local_gem 'lib/tasks/orats/backup.rake'
733
330
  gsub_file 'lib/tasks/orats/backup.rake', 'app_name', app_name
734
331
  git_commit 'Add an application backup task'
735
332
  end
@@ -737,289 +334,49 @@ end
737
334
  def add_helpers
738
335
  log_task __method__
739
336
 
740
- inject_into_file 'app/helpers/application_helper.rb', after: "ApplicationHelper\n" do
741
- <<-S
742
- def title(page_title)
743
- content_for(:title) { page_title }
744
- end
745
-
746
- def meta_description(page_meta_description)
747
- content_for(:meta_description) { page_meta_description }
748
- end
749
-
750
- def heading(page_heading)
751
- content_for(:heading) { page_heading }
752
- end
753
-
754
- def link_to_all_favicons
755
- '<link href="speeddial-160x160.png" rel="icon" type="image/png" />
756
- <link href="apple-touch-icon-228x228-precomposed.png" rel="apple-touch-icon-precomposed" sizes="228x228" type="image/png" />
757
- <link href="apple-touch-icon-152x152-precomposed.png" rel="apple-touch-icon-precomposed" sizes="152x152" type="image/png" />
758
- <link href="apple-touch-icon-144x144-precomposed.png" rel="apple-touch-icon-precomposed" sizes="144x144" type="image/png" />
759
- <link href="apple-touch-icon-120x120-precomposed.png" rel="apple-touch-icon-precomposed" sizes="120x120" type="image/png" />
760
- <link href="apple-touch-icon-114x114-precomposed.png" rel="apple-touch-icon-precomposed" sizes="114x114" type="image/png" />
761
- <link href="apple-touch-icon-76x76-precomposed.png" rel="apple-touch-icon-precomposed" sizes="76x76" type="image/png" />
762
- <link href="apple-touch-icon-72x72-precomposed.png" rel="apple-touch-icon-precomposed" sizes="72x72" type="image/png" />
763
- <link href="apple-touch-icon-60x60-precomposed.png" rel="apple-touch-icon-precomposed" sizes="60x60" type="image/png" />
764
- <link href="apple-touch-icon-57x57-precomposed.png" rel="apple-touch-icon-precomposed" sizes="57x57" type="image/png" />
765
- <link href="favicon-196x196.png" rel="icon" sizes="196x196" type="image/png" />
766
- <link href="favicon-160x160.png" rel="icon" sizes="160x160" type="image/png" />
767
- <link href="favicon-96x96.png" rel="icon" sizes="96x96" type="image/png" />
768
- <link href="favicon-64x64.png" rel="icon" sizes="64x64" type="image/png" />
769
- <link href="favicon-32x32.png" rel="icon" sizes="32x32" type="image/png" />
770
- <link href="favicon-24x24.png" rel="icon" sizes="24x24" type="image/png" />
771
- <link href="favicon-16x16.png" rel="icon" sizes="16x16" type="image/png" />
772
- <link href="favicon.ico" rel="icon" type="image/x-icon" />
773
- <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />'.html_safe
774
- end
775
-
776
- def humanize_boolean(input)
777
- input ||= ''
778
- case input.to_s.downcase
779
- when 't', 'true'
780
- 'Yes'
781
- else
782
- 'No'
783
- end
784
- end
785
-
786
- def css_for_boolean(input)
787
- if input
788
- 'success'
789
- else
790
- 'danger'
791
- end
792
- end
793
- S
794
- end
337
+ copy_from_local_gem 'app/helpers/application_helper.rb'
795
338
  git_commit 'Add various helpers'
796
339
  end
797
340
 
798
341
  def add_layout
799
342
  log_task __method__
800
343
 
801
- run 'rm -f app/views/layouts/application.html.erb'
802
- file 'app/views/layouts/application.html.erb', <<-S
803
- <!doctype html>
804
- <html lang="en">
805
- <head>
806
- <title><%= yield :title %></title>
807
- <meta charset="utf-8" />
808
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
809
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
810
- <meta name="description" content="<%= yield :meta_description %>" />
811
- <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
812
- <%= javascript_include_tag '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js',
813
- 'application', 'data-turbolinks-track' => true %>
814
- <%= csrf_meta_tags %>
815
- <%= link_to_all_favicons %>
816
- <!--[if lt IE 9]>
817
- <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7/html5shiv.js"></script>
818
- <script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.3.0/json3.min.js"></script>
819
- <script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js"></script>
820
- <![endif]-->
821
- <%= render 'layouts/google_analytics_snippet' %>
822
- </head>
823
-
824
- <body>
825
- <%= render 'layouts/google_analytics_tracker' %>
826
- <header>
827
- <%= render 'layouts/navigation' %>
828
- </header>
829
-
830
- <main role="main" class="container">
831
- <div class="page-header">
832
- <h1><%= yield :heading %></h1>
833
- </div>
834
- <%= render 'layouts/flash' %>
835
- <%= yield %>
836
- </main>
837
-
838
- <footer>
839
- <hr />
840
- <div class="container">
841
- <%= render 'layouts/footer' %>
842
- </div>
843
- </footer>
844
-
845
- <%= render 'layouts/disqus_count_snippet' %>
846
- </body>
847
- </html>
848
- S
344
+ copy_from_local_gem 'app/views/layouts/application.html.erb'
849
345
  git_commit 'Add layout'
850
346
  end
851
347
 
852
348
  def add_layout_partials
853
349
  log_task __method__
854
350
 
855
- file 'app/views/layouts/_flash.html.erb', <<-'S'
856
- <% flash.each do |key, msg| %>
857
- <% unless key == :timedout %>
858
- <%= content_tag :div, class: "alert alert-dismissable alert-#{key}" do -%>
859
- <button type="button" class="close" data-dismiss="alert" aria-hidden="true">
860
- &times;
861
- </button>
862
- <%= msg %>
863
- <% end %>
864
- <% end %>
865
- <% end %>
866
- S
867
-
868
- file 'app/views/layouts/_navigation.html.erb', <<-S
869
- <nav class="navbar navbar-default">
870
- <div class="container">
871
- <div class="navbar-header">
872
- <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
873
- <span class="sr-only">Toggle navigation</span>
874
- <span class="icon-bar"></span>
875
- <span class="icon-bar"></span>
876
- <span class="icon-bar"></span>
877
- </button>
878
- <%= link_to '#{app_name}', root_path, class: 'navbar-brand' %>
879
- </div>
880
- <div class="collapse navbar-collapse">
881
- <ul class="nav navbar-nav">
882
- <%= render 'layouts/navigation_links' %>
883
- </ul>
884
- </div>
885
- </div>
886
- </nav>
887
- S
888
-
889
- file 'app/views/layouts/_navigation_links.html.erb', <<-S
890
- <li>
891
- <%= link_to 'Sidekiq dashboard', '/sidekiq' %>
892
- </li>
893
- S
894
-
895
- file 'app/views/layouts/_footer.html.erb', <<-S
896
- <p class="text-muted">&copy; #{Time.now.year.to_s} #{app_name} - All rights reserved</p>
897
- S
898
-
899
- file 'app/views/layouts/_google_analytics_snippet.html.erb', <<-S
900
- <script type="text/javascript">
901
- var _gaq = _gaq || [];
902
- <% if ENV['GOOGLE_ANALYTICS_UA'].present? %>
903
- _gaq.push(['_setAccount', '<%= ENV["GOOGLE_ANALYTICS_UA"] %>']);
904
- (function() {
905
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
906
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
907
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
908
- })();
909
- <% end %>
910
- </script>
911
- S
912
-
913
- file 'app/views/layouts/_google_analytics_tracker.html.erb', <<-S
914
- <script type="text/javascript">
915
- // This is added in the body to track both turbolinks and regular hits.
916
- _gaq.push(['_trackPageview']);
917
- </script>
918
- S
919
-
920
- file 'app/views/layouts/_disqus_comments_snippet.html.erb', <<-S
921
- <% if ENV['DISQUS_SHORT_NAME'].present? %>
922
- <div id="disqus_thread"></div>
923
- <script type="text/javascript">
924
- var disqus_shortname = '<%= ENV["DISQUS_SHORT_NAME"] %>';
925
- (function() {
926
- var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
927
- dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
928
- (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
929
- })();
930
- </script>
931
- <noscript>
932
- Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a>
933
- </noscript>
934
- <a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
935
- <% end %>
936
- S
937
-
938
- file 'app/views/layouts/_disqus_count_snippet.html.erb', <<-S
939
- <% if ENV['DISQUS_SHORT_NAME'].present? %>
940
- <div id="disqus_thread"></div>
941
- <script type="text/javascript">
942
- var disqus_shortname = '<%= ENV["DISQUS_SHORT_NAME"] %>';
943
- (function () {
944
- var s = document.createElement('script'); s.async = true;
945
- s.type = 'text/javascript';
946
- s.src = '//' + disqus_shortname + '.disqus.com/count.js';
947
- (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
948
- }());
949
- <% end %>
950
- S
351
+ copy_from_local_gem 'app/views/layouts/_flash.html.erb'
352
+
353
+ copy_from_local_gem 'app/views/layouts/_navigation.html.erb'
354
+ gsub_file 'app/views/layouts/_navigation.html.erb', 'app_name', app_name
355
+
356
+ copy_from_local_gem 'app/views/layouts/_navigation_links.html.erb'
357
+
358
+ copy_from_local_gem 'app/views/layouts/_footer.html.erb'
359
+ gsub_file 'app/views/layouts/_footer.html.erb', 'Time.now.year.to_s',
360
+ Time.now.year.to_s
361
+ gsub_file 'app/views/layouts/_footer.html.erb', 'app_name', app_name
362
+
363
+ copy_from_local_gem 'app/views/layouts/_google_analytics_snippet.html.erb'
364
+ copy_from_local_gem 'app/views/layouts/_google_analytics_tracker.html.erb'
365
+
366
+ copy_from_local_gem 'app/views/layouts/_disqus_comments_snippet.html.erb'
367
+ copy_from_local_gem 'app/views/layouts/_disqus_count_snippet.html.erb'
368
+
951
369
  git_commit 'Add layout partials'
952
370
  end
953
371
 
954
372
  def add_http_error_pages
955
373
  log_task __method__
956
374
 
957
- run 'rm -f public/404.html'
958
- run 'rm -f public/422.html'
959
- run 'rm -f public/500.html'
960
- file 'public/404.html', <<-S
961
- <!DOCTYPE html>
962
- <html>
963
- <head>
964
- <title>Error 404</title>
965
- <meta charset="utf-8" />
966
- <style>
967
- </style>
968
- </head>
969
-
970
- <body>
971
- <h1>Error 404</h1>
972
- </body>
973
- </html>
974
- S
975
-
976
- file 'public/422.html', <<-S
977
- <!DOCTYPE html>
978
- <html>
979
- <head>
980
- <title>Error 422</title>
981
- <meta charset="utf-8" />
982
- <style>
983
- </style>
984
- </head>
985
-
986
- <body>
987
- <h1>Error 422</h1>
988
- </body>
989
- </html>
990
- S
991
-
992
- file 'public/500.html', <<-S
993
- <!DOCTYPE html>
994
- <html>
995
- <head>
996
- <title>Error 500</title>
997
- <meta charset="utf-8" />
998
- <style>
999
- </style>
1000
- </head>
1001
-
1002
- <body>
1003
- <h1>Error 500</h1>
1004
- </body>
1005
- </html>
1006
- S
1007
-
1008
- file 'public/502.html', <<-S
1009
- <!DOCTYPE html>
1010
- <html>
1011
- <head>
1012
-
1013
- <title>Error 502</title>
1014
- <meta charset="utf-8" />
1015
- <style>
1016
- </style>
1017
- </head>
1018
- <body>
1019
- <h1>Error 502</h1>
1020
- </body>
1021
- </html>
1022
- S
375
+ copy_from_local_gem 'public/404.html'
376
+ copy_from_local_gem 'public/422.html'
377
+ copy_from_local_gem 'public/500.html'
378
+ copy_from_local_gem 'public/502.html'
379
+
1023
380
  git_commit 'Add http status code pages'
1024
381
  end
1025
382
 
@@ -1149,6 +506,7 @@ copy_base_favicon
1149
506
  add_dotenv
1150
507
  add_procfile
1151
508
  add_markdown_readme
509
+ add_license
1152
510
  update_app_secrets
1153
511
  update_app_config
1154
512
  update_database_config
@@ -1163,8 +521,8 @@ update_development_environment
1163
521
  update_production_environment
1164
522
  update_routes
1165
523
  add_backup_lib
1166
- add_favicon_task
1167
524
  add_backup_task
525
+ add_favicon_task
1168
526
  add_helpers
1169
527
  add_layout
1170
528
  add_layout_partials