myrails 4.0.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/lib/myrails.rb +366 -167
  3. data/lib/myrails/templates/capistrano/config/deploy/templates/maintenance/index.html +41 -0
  4. data/lib/myrails/templates/capistrano/config/deploy/templates/monit.conf.erb +4 -0
  5. data/lib/myrails/templates/capistrano/config/deploy/templates/nginx.conf.erb +69 -0
  6. data/lib/myrails/templates/capistrano/config/deploy/templates/unicorn.rb.erb +26 -0
  7. data/lib/myrails/templates/capistrano/config/deploy/templates/unicorn_init.sh.erb +71 -0
  8. data/lib/myrails/templates/capistrano/lib/capistrano/tasks/maintenance.rake +16 -0
  9. data/lib/myrails/templates/capistrano/lib/capistrano/tasks/monit.rake +64 -0
  10. data/lib/myrails/templates/capistrano/lib/capistrano/tasks/nginx.rake +68 -0
  11. data/lib/myrails/templates/capistrano/lib/capistrano/tasks/unicorn.rake +114 -0
  12. data/lib/myrails/templates/{assets → rails/app/assets/javascripts}/application.js +0 -1
  13. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets}/animate.scss +0 -0
  14. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets}/application.css.sass +0 -2
  15. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/cerulean.scss +0 -0
  16. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/cosmo.scss +0 -0
  17. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/cyborg.scss +0 -0
  18. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/darkly.scss +0 -0
  19. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/flatly.scss +0 -0
  20. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/journal.scss +0 -0
  21. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/lumen.scss +0 -0
  22. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/paper.scss +0 -0
  23. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/readable.scss +0 -0
  24. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/sandstone.scss +0 -0
  25. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/simplex.scss +0 -0
  26. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/slate.scss +0 -0
  27. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/spacelab.scss +0 -0
  28. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/superhero.scss +0 -0
  29. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/united.scss +0 -0
  30. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets/bootstrap}/bootstrap_themes/yeti.scss +0 -0
  31. data/lib/myrails/templates/{assets → rails/app/assets/stylesheets}/will_paginate.scss +0 -0
  32. data/lib/myrails/templates/rails/{controller.rb → app/controllers/controller.rb} +0 -0
  33. data/lib/myrails/templates/rails/{namespace_controller.rb → app/controllers/namespace_controller.rb} +0 -0
  34. data/lib/myrails/templates/rails/{application_helper.rb → app/helpers/application_helper.rb} +0 -0
  35. data/lib/myrails/templates/{mailer → rails/app/mailers}/dev_mail_interceptor.rb +0 -0
  36. data/lib/myrails/templates/{mailer → rails/app/mailers}/sendgrid.rb +0 -0
  37. data/lib/myrails/templates/rails/{model.rb → app/models/model.rb} +0 -0
  38. data/lib/myrails/templates/rails/{namespace_model.rb → app/models/namespace_model.rb} +0 -0
  39. data/lib/myrails/templates/rails/{pundit.rb → app/policies/pundit.rb} +0 -0
  40. data/lib/myrails/templates/{presenters → rails/app/presenters}/base.rb +0 -0
  41. data/lib/myrails/templates/{presenters → rails/app/presenters}/presenter.rb +0 -0
  42. data/lib/myrails/templates/{presenters → rails/app/presenters}/presenter_config.rb +0 -0
  43. data/lib/myrails/templates/{presenters → rails/app/presenters}/presenter_spec.rb +0 -0
  44. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/_error_messages.html.haml +0 -0
  45. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/_footer.html.haml +0 -0
  46. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/_info_messages.html.haml +0 -0
  47. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/_nav.html.haml +0 -0
  48. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/_success_message.html.haml +0 -0
  49. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/application.html.haml +0 -0
  50. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/footers/css/footer-distributed-with-address-and-phones.scss +0 -0
  51. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/footers/css/footer-distributed-with-contact-form.scss +0 -0
  52. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/footers/css/footer-distributed-with-search.scss +0 -0
  53. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/footers/css/footer-distributed.scss +0 -0
  54. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/footers/footer-distributed-with-address-and-phones.html.haml +0 -0
  55. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/footers/footer-distributed-with-contact-form.html.haml +0 -0
  56. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/footers/footer-distributed-with-search.html.haml +0 -0
  57. data/lib/myrails/templates/{layout → rails/app/views/layout/bootstrap}/footers/footer-distributed.html.haml +0 -0
  58. data/lib/myrails/templates/rails/app/views/layout/material/_detailed_pagination.html.haml +4 -0
  59. data/lib/myrails/templates/rails/app/views/layout/material/_error_messages.html.haml +9 -0
  60. data/lib/myrails/templates/rails/app/views/layout/material/_footer.html.haml +24 -0
  61. data/lib/myrails/templates/rails/app/views/layout/material/_info_messages.html.haml +14 -0
  62. data/lib/myrails/templates/rails/app/views/layout/material/_nav.html.haml +27 -0
  63. data/lib/myrails/templates/rails/app/views/layout/material/_simple_pagination.html.haml +2 -0
  64. data/lib/myrails/templates/rails/app/views/layout/material/_success_message.html.haml +7 -0
  65. data/lib/myrails/templates/rails/app/views/layout/material/application.html.haml +19 -0
  66. data/lib/myrails/templates/rails/app/views/layout/material/mailer.html.haml +246 -0
  67. data/lib/myrails/templates/rails/app/views/layout/material/mailer.text.haml +1 -0
  68. data/lib/myrails/templates/rails/config/application.example.yml +40 -0
  69. data/lib/myrails/templates/spec/controller.rb +123 -0
  70. data/lib/myrails/templates/{rspec → spec}/factory.rb +1 -1
  71. data/lib/myrails/templates/spec/feature.rb +8 -0
  72. data/lib/myrails/templates/{rspec → spec}/files.rb +0 -0
  73. data/lib/myrails/templates/spec/helper.rb +2 -0
  74. data/lib/myrails/templates/{rspec → spec}/model.rb +0 -0
  75. data/lib/myrails/templates/{rspec → spec}/pundit.rb +0 -0
  76. data/lib/myrails/templates/{rspec → spec}/request.rb +0 -0
  77. data/lib/myrails/templates/{rspec → spec}/request_shared_example.rb +0 -0
  78. data/lib/myrails/templates/{rspec → spec}/shared_example.rb +0 -0
  79. data/lib/myrails/templates/{rspec → spec/support/configs}/database_cleaner.rb +0 -0
  80. data/lib/myrails/templates/{rspec → spec/support/configs}/devise.rb +1 -1
  81. data/lib/myrails/templates/spec/support/configs/factory_bot.rb +3 -0
  82. data/lib/myrails/templates/{rspec → spec/support/configs}/mailer.rb +0 -0
  83. data/lib/myrails/templates/{rspec → spec/support/configs}/shoulda_matchers.rb +0 -0
  84. data/lib/myrails/templates/{rspec → spec/support/configs}/silence_backtrace.rb +0 -0
  85. data/lib/myrails/templates/spec/support/helpers/javascript.rb +12 -0
  86. data/lib/myrails/templates/spec/support/helpers/mailer.rb +9 -0
  87. data/lib/myrails/templates/spec/support/shared_examples/requires_authentication.rb +14 -0
  88. data/lib/myrails/templates/spec/support/shared_examples/requires_authorization.rb +16 -0
  89. data/lib/myrails/templates/spec/support/shared_examples/supports_file_type.rb +25 -0
  90. data/lib/myrails/version.rb +1 -1
  91. metadata +91 -68
  92. data/lib/myrails/templates/initializers/application_vars.rb +0 -2
  93. data/lib/myrails/templates/rails/application.yml +0 -19
  94. data/lib/myrails/templates/rspec/controller.rb +0 -98
  95. data/lib/myrails/templates/rspec/factory_girl.rb +0 -3
  96. data/lib/myrails/templates/rspec/javascript.rb +0 -8
  97. data/lib/myrails/templates/rspec/router.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1336a1a47633d28ea0c42ced89b6ba783ef9cb87
4
- data.tar.gz: a8eefc52f62bb9108944b4a919cefd24228c9154
3
+ metadata.gz: 7af89ba21720951b5f321eaa480e657d524b16c9
4
+ data.tar.gz: d3a11a743f04736f6ce534a0ef48543d00616732
5
5
  SHA512:
6
- metadata.gz: 243005cd4fbaf21defb5cdde9c697cafc66582b4647a5cb814d35d6da9e26b44f89939dfd4a54e3bf86eef3e76e119e24d6e952ac1faef9cd7425270772f5080
7
- data.tar.gz: a9d2b1b0a771a116c625ca882ceb9b82a1d878bd2f08788f1688ecf9ab322a0409dd9f2109ec45aa000997503a023dde6a2adc7112ea999b0303fb374391afeb
6
+ metadata.gz: dd366e4bc56d862be02e2f68669b80dfcf7a2dcd2fba3f3e49c860c3ab64f31167352bce9840dfc30b9d04b3556e09c931c0c61cbf51034a3fb9e8f35c9498ed
7
+ data.tar.gz: e5889ff4a08db266f0e18ed64e4e35e4382650910c1b900b82a96b2142fe79e91bcef8d02ec54077012ff10aaa7e0cb7da468aaaddd3d86536e603996792a960
@@ -12,7 +12,7 @@ module Myrails
12
12
  no_tasks do
13
13
  desc 'install_application_helper', 'Replace current application helper with one that has commonly used code'
14
14
  def install_application_helper
15
- copy_file 'rails/application_helper.rb', 'app/helpers/application_helper.rb'
15
+ copy_file 'rails/app/helpers/application_helper.rb', 'app/helpers/application_helper.rb'
16
16
  end
17
17
 
18
18
  desc 'install_gems', 'Add & Install gems that I commonly use'
@@ -21,7 +21,7 @@ module Myrails
21
21
  group :test do
22
22
  gem 'simplecov'
23
23
  gem 'shoulda-matchers'
24
- gem 'factory_girl_rails'
24
+ gem 'factory_bot_rails'
25
25
  gem 'database_cleaner'
26
26
  gem 'chromedriver-helper'
27
27
  gem 'launchy'
@@ -39,37 +39,35 @@ CODE
39
39
  end
40
40
 
41
41
  insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
42
- gem 'bootstrap-sass', '~> 3.3.1'
43
- gem 'autoprefixer-rails'
44
42
  gem 'haml-rails'
45
43
  gem "ransack"
46
44
  gem 'will_paginate'
47
45
  gem "font-awesome-rails"
48
46
  gem 'trix'
49
47
  gem 'record_tag_helper'
50
- CODE
48
+ gem 'jquery-rails'
49
+ CODE
51
50
  end
52
51
  run 'bundle install'
53
52
 
54
53
  insert_into_file 'app/controllers/application_controller.rb', before: 'end' do <<-CODE
55
- private
56
- CODE
54
+ private
55
+ CODE
57
56
  end
58
57
  end
59
58
 
60
59
  desc 'install_assets', 'Generate common asset pipeline files'
61
60
  def install_assets
62
61
  run "rm app/assets/stylesheets/application.css"
63
- copy_file 'assets/application.css.sass', 'app/assets/stylesheets/application.css.sass'
64
- copy_file 'assets/application.js', 'app/assets/javascripts/application.js'
65
- copy_file 'assets/animate.scss', 'app/assets/stylesheets/animate.scss'
66
- copy_file 'assets/will_paginate.scss', 'app/assets/stylesheets/will_paginate.scss'
62
+ copy_file 'rails/app/assets/stylesheets/application.css.sass', 'app/assets/stylesheets/application.css.sass'
63
+ copy_file 'rails/app/assets/javascripts/application.js', 'app/assets/javascripts/application.js'
64
+ copy_file 'rails/app/assets/stylesheets/animate.scss', 'app/assets/stylesheets/animate.scss'
65
+ copy_file 'rails/app/assets/stylesheets/will_paginate.scss', 'app/assets/stylesheets/will_paginate.scss'
67
66
  end
68
67
 
69
68
 
70
- desc 'install_css', 'Generate & include application css theme'
71
- def install_css
72
- themes = Dir[File.join(TEMPLATES, 'assets', 'bootstrap_themes', '*')]
69
+ def choose_bootstrap_theme
70
+ themes = Dir[File.join(TEMPLATES, 'rails', 'app','assets', 'stylesheets', 'bootstrap', 'bootstrap_themes', '*')]
73
71
 
74
72
  themes.each_with_index do |theme, index|
75
73
  say "[#{index}] #{File.basename(theme,'.*')}"
@@ -77,18 +75,18 @@ gem 'record_tag_helper'
77
75
 
78
76
  idx = ask("Choose a color theme (by number) for the application. Default: 'spacelab'")
79
77
  idx = idx.empty? ? themes.index{|theme| theme if theme.include?('spacelab')} : idx.to_i
78
+
80
79
  copy_file(themes[idx], "app/assets/stylesheets/#{File.basename(themes[idx])}")
81
80
 
82
81
  inject_into_file 'app/assets/stylesheets/application.css.sass', before: "@import will_paginate" do <<-CODE
83
- @import #{File.basename(themes[idx], '.*')}
84
- CODE
82
+ @import #{File.basename(themes[idx], '.*')}
83
+ CODE
85
84
  end
86
85
  end
87
86
 
88
- desc 'install_footer', 'Generate & include application footer'
89
- def install_footer
90
- footers = Dir[File.join(TEMPLATES, 'layout', 'footers', '*.haml')]
91
- footers_css = Dir[File.join(TEMPLATES, 'layout', 'footers', 'css', '*')]
87
+ def choose_bootstrap_footer
88
+ footers = Dir[File.join(TEMPLATES, 'rails', 'app', 'views','layout', 'bootstrap', 'footers', '*.haml')]
89
+ footers_css = Dir[File.join(TEMPLATES, 'rails', 'app', 'views', 'layout', 'bootstrap', 'footers', 'css', '*')]
92
90
 
93
91
  footers.each_with_index do |footer, index|
94
92
  say "[#{index}] #{File.basename(footer,'.html.*')}"
@@ -100,42 +98,114 @@ gem 'record_tag_helper'
100
98
  copy_file footers_css[idx], "app/assets/stylesheets/#{File.basename(footers_css[idx])}"
101
99
 
102
100
  inject_into_file 'app/assets/stylesheets/application.css.sass', after: "@import animate\n" do <<-CODE
103
- @import #{File.basename(footers_css[idx], '.*')}
104
- CODE
101
+ @import #{File.basename(footers_css[idx], '.*')}
102
+ CODE
103
+ end
104
+ end
105
+
106
+ def copy_bootstrap_files
107
+ template 'rails/app/views/layout/bootstrap/application.html.haml', 'app/views/layouts/application.html.haml'
108
+ template 'rails/app/views/layout/bootstrap/_nav.html.haml', 'app/views/layouts/_nav.html.haml'
109
+ copy_file 'rails/app/views/layout/bootstrap/_info_messages.html.haml', 'app/views/layouts/_info_messages.html.haml'
110
+ copy_file 'rails/app/views/layout/bootstrap/_success_message.html.haml', 'app/views/layouts/_success_message.html.haml'
111
+ copy_file 'rails/app/views/layout/bootstrap/_error_messages.html.haml', 'app/views/layouts/_error_messages.html.haml'
112
+ # copy_file 'rails/app/views/layout/bootstrap/_footer.html.haml', 'app/views/layouts/_footer.html.haml'
113
+ end
114
+
115
+ desc 'install_bootstrap', 'Generate Bootrap css theme'
116
+ def install_bootstrap
117
+ insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
118
+ gem 'bootstrap-sass', '~> 3.3.1'
119
+ gem 'autoprefixer-rails'
120
+ CODE
121
+ end
122
+
123
+ insert_into_file 'app/assets/stylesheets/application.css.sass', before: '@import trix' do <<-CODE
124
+ @import bootstrap-sprockets
125
+ @import bootstrap
126
+ CODE
127
+ end
128
+
129
+ insert_into_file 'app/assets/javascripts/application.js', before: '//= require trix' do <<-CODE
130
+ //= require bootstrap-sprockets
131
+ CODE
132
+ end
133
+ run 'bundle install'
134
+ choose_bootstrap_theme
135
+ choose_bootstrap_footer
136
+ copy_bootstrap_files
137
+
138
+ end
139
+
140
+ def copy_material_files
141
+ Dir["#{__dir__}/myrails/templates/rails/app/views/layout/material/**/*"].each do |file|
142
+ copy_file file, "app/views/layouts/#{File.basename(file)}"
143
+ end
144
+ end
145
+
146
+ desc 'install_material', 'Generate Material css theme'
147
+ def install_material
148
+ insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
149
+ gem 'materialize-sass'
150
+ gem 'material_icons'
151
+ CODE
152
+ end
153
+
154
+ run 'bundle install'
155
+
156
+ copy_material_files
157
+
158
+ insert_into_file 'app/assets/stylesheets/application.css.sass', before: '@import trix' do <<-CODE
159
+ @import "materialize/components/color"
160
+ $primary-color: color("grey", "darken-3") !default
161
+ $secondary-color: color("grey", "base") !default
162
+ @import materialize
163
+ @import material_icons
164
+ CODE
165
+ end
166
+
167
+ insert_into_file 'app/assets/javascripts/application.js', before: "//= require trix" do <<-CODE
168
+ //= require materialize
169
+ CODE
105
170
  end
106
171
  end
107
172
 
108
173
  desc 'install_layout', 'Generate common layout files'
109
174
  def install_layout
175
+ answer = ask 'Would you like to use [B]ootstrap or [M]aterial'
176
+
110
177
  run 'rm app/views/layouts/application.html.erb'
111
- template 'layout/application.html.haml', 'app/views/layouts/application.html.haml'
112
- template 'layout/_nav.html.haml', 'app/views/layouts/_nav.html.haml'
113
- copy_file 'layout/_info_messages.html.haml', 'app/views/layouts/_info_messages.html.haml'
114
- copy_file 'layout/_success_message.html.haml', 'app/views/layouts/_success_message.html.haml'
115
- copy_file 'layout/_error_messages.html.haml', 'app/views/layouts/_error_messages.html.haml'
116
- copy_file 'layout/_footer.html.haml', 'app/views/layouts/_footer.html.haml'
178
+
179
+ install_assets
180
+
181
+ if answer =~ /^B|b/
182
+ install_bootstrap
183
+ elsif answer =~ /^M|m/
184
+ install_material
185
+ end
186
+
117
187
  insert_into_file 'app/controllers/application_controller.rb', after: "class ApplicationController < ActionController::Base\n" do <<-CODE
118
- add_flash_types :error, :success
119
- CODE
188
+ add_flash_types :error, :success
189
+ CODE
120
190
  end
121
191
  end
122
192
 
123
193
  desc 'install_heroku', 'setup application for use with heroku using sqlite3 for development'
124
194
  def install_heroku
125
195
  insert_into_file 'Gemfile', before: "group :development, :test do\n" do <<-CODE
126
- group :production do
127
- gem 'pg'
128
- gem 'rails_12factor'
129
- end
196
+ group :production do
197
+ gem 'pg'
198
+ gem 'rails_12factor'
199
+ end
130
200
 
131
- CODE
201
+ CODE
132
202
  end
133
203
  copy_file 'db/sqlite3_database.yml', 'config/database.yml'
134
204
  copy_file 'heroku/Procfile', 'Procfile'
135
205
  copy_file 'heroku/puma.rb', 'config/puma.rb'
136
206
  end
137
207
 
138
- desc 'git_init', "Initialize git with some files autormoatically ignored"
208
+ desc 'git_init', "Initialize git with some files automatically ignored"
139
209
  def git_init
140
210
  run 'git init'
141
211
  run 'echo /coverage >> .gitignore'
@@ -149,47 +219,51 @@ gem 'record_tag_helper'
149
219
  copy_file 'ui/ui_controller.rb', 'app/controllers/ui_controller.rb'
150
220
  copy_file 'ui/index.html.haml', 'app/views/ui/index.html.haml'
151
221
  inject_into_file 'config/routes.rb', after: "Rails.application.routes.draw do\n" do <<-CODE
152
- # Requires an application restart everytime a new page is added.
153
- Dir.glob('app/views/ui/*.html.haml').sort.each do |file|
154
- action = File.basename(file,'.html.haml')
155
- get \"ui/\#{action}\", controller: 'ui', action: action
156
- end
157
- CODE
222
+ # Requires an application restart everytime a new page is added.
223
+ Dir.glob('app/views/ui/*.html.haml').sort.each do |file|
224
+ action = File.basename(file,'.html.haml')
225
+ get \"ui/\#{action}\", controller: 'ui', action: action
226
+ end
227
+ CODE
158
228
  end
159
229
  end
160
230
 
161
231
  desc 'install_rspec', 'Generate rspec structure & rspec configuration that I commonly use'
162
232
  def install_rspec
163
233
  insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
164
- gem 'rspec-rails', group: :test
165
- gem 'capybara', group: :test
166
- CODE
234
+ gem 'rspec-rails', group: :test
235
+ CODE
167
236
  end
237
+
168
238
  run 'bundle install'
169
239
  run 'rails g rspec:install'
240
+
170
241
  install_rails_helper
171
- copy_file 'rspec/database_cleaner.rb', "spec/support/configs/database_cleaner.rb"
172
- copy_file 'rspec/factory_girl.rb', 'spec/support/configs/factory_girl.rb'
173
- copy_file 'rspec/shoulda_matchers.rb', 'spec/support/configs/shoulda_matchers.rb'
174
- copy_file 'rspec/silence_backtrace.rb', 'spec/support/configs/silence_rspec_backtrace.rb'
175
- copy_file 'rspec/javascript.rb', 'spec/support/configs/javascript.rb'
176
- copy_file 'rspec/mailer.rb', 'spec/support/configs/mailer.rb'
177
- copy_file 'rspec/router.rb', 'spec/support/configs/router.rb'
178
- copy_file 'rspec/files.rb', 'spec/support/configs/files.rb'
242
+
243
+ Dir["#{__dir__}/myrails/templates/spec/**/*"].each do |file|
244
+ if file.include?('/support/') && !['devise'].include?(File.basename(file, '.rb'))
245
+ copy_file file, "#{file.gsub(__dir__+'/myrails/templates/', '')}" unless File.directory? file
246
+ end
247
+ end
179
248
  end
180
249
 
181
250
  desc 'install_rails_helper', 'Add code to rspec/rails_helper so rspec runs the way I like'
182
251
  def install_rails_helper
183
252
  inject_into_file "spec/rails_helper.rb", after: "require 'rspec/rails'\n" do <<-CODE
184
- require 'simplecov'
185
- SimpleCov.start
186
- #use Chromedriver
187
- unless ENV['NOCHROME']
188
- Capybara.register_driver :selenium do |app|
189
- Capybara::Selenium::Driver.new(app, :browser => :chrome)
190
- end
191
- end
192
- CODE
253
+ require 'simplecov'
254
+ SimpleCov.start
255
+
256
+ Capybara.app_host = "http://localhost:3000"
257
+ Capybara.server_host = "localhost"
258
+ Capybara.server_port = "3000"
259
+
260
+ #use Chromedriver
261
+ unless ENV['NOCHROME']
262
+ Capybara.register_driver :selenium do |app|
263
+ Capybara::Selenium::Driver.new(app, :browser => :chrome)
264
+ end
265
+ end
266
+ CODE
193
267
  end
194
268
 
195
269
  gsub_file 'spec/rails_helper.rb', "# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }", "Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }"
@@ -197,19 +271,26 @@ gem 'record_tag_helper'
197
271
  gsub_file "spec/rails_helper.rb", "config.use_transactional_fixtures = true", "config.use_transactional_fixtures = false"
198
272
 
199
273
  inject_into_file 'spec/rails_helper.rb', after: "RSpec.configure do |config|\n" do <<-CODE
200
- config.include(JavascriptHelper, type: :feature)
201
- CODE
274
+ # Can use methods like dom_id in features
275
+ config.include ActionView::RecordIdentifier, type: :feature
276
+ # Can use methods likke strip_tags in features
277
+ config.include ActionView::Helpers::SanitizeHelper, type: :feature
278
+ # Can use methods like truncate
279
+ config.include ActionView::Helpers::TextHelper, type: :feature
280
+ config.include(JavascriptHelper, type: :feature)
281
+ config.include MailerHelper
282
+ CODE
202
283
  end
203
284
  end
204
285
 
205
286
  desc 'install_devise', 'Generate devise files'
206
287
  def install_devise
207
288
  insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
208
- gem 'devise'
209
- CODE
289
+ gem 'devise'
290
+ CODE
210
291
  end
211
292
  run 'bundle update'
212
- copy_file 'rspec/devise.rb', 'spec/support/configs/devise.rb'
293
+ copy_file 'spec/support/configs/devise.rb', 'spec/support/configs/devise.rb'
213
294
 
214
295
  devise_model = ask("What would you like to call the devise model? Default: user")
215
296
  devise_model = devise_model.empty? ? 'user' : devise_model
@@ -218,33 +299,34 @@ gem 'record_tag_helper'
218
299
  run "rails generate devise #{devise_model}"
219
300
  run 'rails generate devise:views'
220
301
 
221
- inject_into_file 'app/controllers/application_controller.rb', before: 'protect_from_forgery with: :exception' do <<-CODE
222
- # Devise authentication method
223
- before_action :authenticate_#{devise_model}!
224
- CODE
302
+ gsub_file 'app/controllers/application_controller.rb', "protect_from_forgery with: :exception", "protect_from_forgery"
303
+ inject_into_file 'app/controllers/application_controller.rb', after: "protect_from_forgery\n" do <<-CODE
304
+ # Devise authentication method
305
+ before_action :authenticate_#{devise_model}!
306
+ CODE
225
307
  end
226
308
 
227
309
  if File.exist?('app/controllers/ui_controller.rb')
228
310
  inject_into_file 'app/controllers/ui_controller.rb', after: "class UiController < ApplicationController\n" do <<-CODE
229
- skip_before_action :authenticate_#{devise_model}!
230
- CODE
311
+ skip_before_action :authenticate_#{devise_model}!
312
+ CODE
231
313
  end
232
314
  end
233
315
 
234
316
  if yes?('Will you be needing registration params override? Answer "yes" if you will be adding attributes to the user model')
235
- inject_into_file 'app/controllers/application_controller.rb', after: "skip_before_action :authenticate_#{devise_model}!\n" do <<-CODE
236
- # Before action include additional registration params
237
- # (see #configure_permitted_parameters)
238
- before_action :configure_permitted_parameters, if: :devise_controller?
239
- CODE
317
+ inject_into_file 'app/controllers/application_controller.rb', after: "before_action :authenticate_#{devise_model}!\n" do <<-CODE
318
+ # Before action include additional registration params
319
+ # (see #configure_permitted_parameters)
320
+ before_action :configure_permitted_parameters, if: :devise_controller?
321
+ CODE
240
322
  end
241
323
 
242
324
  inject_into_file 'app/controllers/application_controller.rb', after: "private\n" do <<-CODE
243
- # Register additional registration params
244
- def configure_permitted_parameters
245
- devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute, :attribute])
246
- end
247
- CODE
325
+ # Register additional registration params
326
+ def configure_permitted_parameters
327
+ devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute, :attribute])
328
+ end
329
+ CODE
248
330
  end
249
331
  end
250
332
  end
@@ -258,42 +340,42 @@ gem 'pundit'
258
340
 
259
341
  insert_into_file 'Gemfile', after: "group :test do\n" do <<-CODE
260
342
  gem 'pundit-matchers', '~> 1.1.0'
261
- CODE
343
+ CODE
262
344
  end
263
345
 
264
346
  run 'bundle update'
265
347
  run 'rails g pundit:install'
266
348
 
267
349
  inject_into_file 'app/controllers/application_controller.rb', after: "protect_from_forgery with: :exception\n" do <<-CODE
268
- # Add pundit authorization
269
- include Pundit
270
- CODE
350
+ # Add pundit authorization
351
+ include Pundit
352
+ CODE
271
353
  end
272
354
 
273
355
  inject_into_file 'app/controllers/application_controller.rb', after: "rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized\n" do <<-CODE
274
- # Rescue from pundit error
275
- # (see #user_not_authorized)
276
- rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
277
- CODE
356
+ # Rescue from pundit error
357
+ # (see #user_not_authorized)
358
+ rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
359
+ CODE
278
360
  end
279
361
 
280
362
  inject_into_file 'app/controllers/application_controller.rb', after: "private\n" do <<-CODE
281
- # Method to gracefully let a user know they are are not authorized
282
- #
283
- # @return flash [Hash] the action notice
284
- def user_not_authorized
285
- flash[:alert] = "You are not authorized to perform this action."
286
- redirect_to home_path
287
- end
288
- CODE
363
+ # Method to gracefully let a user know they are are not authorized
364
+ #
365
+ # @return flash [Hash] the action notice
366
+ def user_not_authorized
367
+ flash[:alert] = "You are not authorized to perform this action."
368
+ redirect_to home_path
369
+ end
370
+ CODE
289
371
  end
290
372
  end
291
373
 
292
374
  desc 'install_footnotes', 'Install rails-footnotes and run its generator'
293
375
  def install_footnotes
294
376
  insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
295
- gem 'rails-footnotes'
296
- CODE
377
+ gem 'rails-footnotes'
378
+ CODE
297
379
  end
298
380
  run 'bundle install'
299
381
  run 'rails generate rails_footnotes:install'
@@ -330,59 +412,153 @@ CODE
330
412
  install_pundit
331
413
  install_rspec
332
414
  install_footnotes
333
- install_dotenv
415
+ config_env
416
+ install_figaro
334
417
  git_init
335
418
  say 'Dont forget to run config_env'
336
419
  end
420
+
421
+
422
+
423
+ def install_capistrano
424
+ insert_into_file 'Gemfile', after: "group :development do\n" do <<-CODE
425
+ gem 'capistrano', '~> 3.6', group: :development
426
+ gem 'capistrano-rails', '~> 1.3', group: :development
427
+ gem 'capistrano-rvm', group: :development
428
+ CODE
429
+ end
430
+
431
+ run 'bundle install'
432
+ run 'bundle exec cap install'
433
+ gsub_file 'Capfile', '# require "capistrano/rvm"', 'require "capistrano/rvm"'
434
+ gsub_file 'config/deploy.rb', '# ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp', 'ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp'
435
+ gsub_file 'config/deploy.rb', '# set :deploy_to, "/var/www/my_app_name"', 'set :deploy_to, "/var/www/#{fetch(:application)}"'
436
+ gsub_file 'config/deploy.rb', '# append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "public/system"', 'append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "public/system"'
437
+
438
+ run 'mkdir -p config/deploy/templates/maintenance'
439
+
440
+ Dir["#{__dir__}/myrails/templates/capistrano/**/*"].each do |file|
441
+ copy_file file, "#{file.gsub(__dir__+'/myrails/templates/capistrano/', '')}" unless File.directory? file
442
+ end
443
+
444
+ insert_into_file 'config/deploy.rb', before: '# Default branch is :master' do <<-CODE
445
+ set :deploy_via, :remote_cache
446
+ set :ssh_options, {forward_agent: true}
447
+ CODE
448
+ end
449
+ insert_into_file 'Capfile', after: "require \"capistrano/rvm\"\n" do <<-CODE
450
+ require "capistrano/rails"
451
+ CODE
452
+ end
453
+ insert_into_file 'config/deploy.rb', after: "# set :ssh_options, verify_host_key: :secure\n" do <<-CODE
454
+ namespace :deploy do
455
+ # after :restart, :clear_cache do
456
+ # on roles(:app), in: :groups, limit: 3, wait: 10 do
457
+ # # Here we can do anything such as:
458
+ # # within release_path do
459
+ # # execute :rake, 'cache:clear'
460
+ # # end
461
+ # end
462
+ # end
463
+ before :finishing, :restart do
464
+ on roles(:app) do
465
+ invoke 'unicorn:restart'
466
+ invoke 'nginx:restart'
467
+ end
468
+ end
469
+
470
+ task :upload_app_yml do
471
+ on roles(:app) do
472
+ info 'Uploading application.yml'
473
+ upload!("\#{Dir.pwd}/config/application.yml", "\#{fetch(:release_path)}/config")
474
+ end
475
+ end
476
+
477
+ before :starting, 'maintenance:on'
478
+ before :starting, 'monit:stop'
479
+ before :compile_assets, :upload_app_yml
480
+ before :published, 'nginx:create_nginx_config'
481
+ before :published, 'unicorn:create_unicorn_config'
482
+ before :published,'unicorn:create_unicorn_init'
483
+ after :restart, 'monit:create_monit_conf'
484
+ after :finished, 'monit:start'
485
+ after :finished, 'maintenance:off'
486
+ end
487
+ CODE
488
+ end
489
+
490
+ insert_into_file 'config/deploy/production.rb', before: "# role-based syntax" do <<-CODE
491
+ set :fqdn,'domain.com'
492
+ CODE
493
+ end
494
+
495
+ insert_into_file 'config/deploy/staging.rb', before: "# role-based syntax" do <<-CODE
496
+ set :fqdn,'domain.com'
497
+ CODE
498
+ end
499
+ end
500
+
501
+ def install_figaro
502
+ insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
503
+ gem "figaro"
504
+ CODE
505
+ end
506
+
507
+ run 'bundle install'
508
+ run 'bundle exec figaro install'
509
+ copy_file 'rails/config/application.example.yml', 'config/application.example.yml'
510
+ end
511
+
337
512
  end
513
+ # end of no_tasks
338
514
 
339
515
  desc 'model', "Generates a rails model with the given name along with its related spec file and namespace prefix for table creation. Use '/' to create a namespaced model"
340
516
  option :name, required: true
341
517
  def model
342
- template 'rails/model.rb', "app/models/#{options[:name].downcase}.rb"
343
- template 'rails/namespace_model.rb', "app/models/#{options[:name].split("/").first.singularize.downcase}.rb" if options[:name].include?("/")
344
- template 'rspec/model.rb', "spec/models/#{options[:name].downcase}_spec.rb"
518
+ template 'rails/app/models/model.rb', "app/models/#{options[:name].downcase}.rb"
519
+ template 'rails/app/models/namespace_model.rb', "app/models/#{options[:name].split("/").first.singularize.downcase}.rb" if options[:name].include?("/")
520
+ template 'spec/model.rb', "spec/models/#{options[:name].downcase}_spec.rb"
345
521
  end
346
522
 
347
523
  desc 'controller', "Generates a rails controller with the given name along with related spec file. Use '/' to create a namespaced controller"
348
524
  option :name, required: true
349
525
  def controller
350
- template 'rails/controller.rb', "app/controllers/#{options[:name].downcase.pluralize}_controller.rb"
526
+ template 'rails/app/controllers/controller.rb', "app/controllers/#{options[:name].downcase.pluralize}_controller.rb"
351
527
  if options[:name].include?("/")
352
528
  parent, child = options[:name].split("/")
353
- template 'rails/namespace_controller.rb', "app/controllers/#{parent}/#{parent.downcase}_controller.rb"
529
+ template 'rails/app/controllers/namespace_controller.rb', "app/controllers/#{parent}/#{parent.downcase}_controller.rb"
354
530
  end
355
- template 'rspec/controller.rb', "spec/controllers/#{options[:name].downcase.pluralize}_controller_spec.rb"
531
+ template 'spec/controller.rb', "spec/controllers/#{options[:name].downcase.pluralize}_controller_spec.rb"
356
532
  run "mkdir -p app/views/#{options[:name].downcase.pluralize}"
357
533
  end
358
534
 
359
535
  desc 'policy', "Generates a pundit policy with the given name and a related spec file. Use '/' to create a namespaced policy"
360
536
  option :name, required: true
361
537
  def policy
362
- template 'rails/pundit.rb', "app/policies/#{options[:name].downcase}_policy.rb"
363
- template 'rspec/pundit.rb', "spec/policies/#{options[:name].downcase}_policy_spec.rb"
538
+ template 'rails/app/policies/pundit.rb', "app/policies/#{options[:name].downcase}_policy.rb"
539
+ template 'spec/pundit.rb', "spec/policies/#{options[:name].downcase}_policy_spec.rb"
364
540
  end
365
541
 
366
542
  desc 'presenter', "Generates a presenter class with the given name and a related spec file. Use '/' to create a namespaced presenter"
367
543
  option :name, required: true
368
544
  def presenters
369
- copy_file 'presenters/base.rb', 'app/presenters/base_presenter.rb'
370
- template 'presenters/presenter.rb', "app/presenters/#{options[:name].downcase}_presenter.rb"
371
- copy_file 'presenters/presenter_config.rb', 'spec/support/configs/presenter.rb'
372
- template 'presenters/presenter_spec.rb', "spec/presenters/#{options[:name].downcase}_presenter_spec.rb"
545
+ copy_file 'rails/app/presenters/base.rb', 'app/presenters/base_presenter.rb'
546
+ template 'rails/app/presenters/presenter.rb', "app/presenters/#{options[:name].downcase}_presenter.rb"
547
+ copy_file 'rails/app/presenters/presenter_config.rb', 'spec/support/configs/presenter.rb'
548
+ template 'rails/app/presenters/presenter_spec.rb', "spec/presenters/#{options[:name].downcase}_presenter_spec.rb"
373
549
  end
374
550
 
375
- desc 'factory', "Generates a factory_girl factory in the spec/factories directory. Use '/' to create a namespaced factory"
551
+ desc 'factory', "Generates a factory_bot factory in the spec/factories directory. Use '/' to create a namespaced factory"
376
552
  option :name, required: true
377
553
  def factory
378
- template 'rspec/factory.rb', "spec/factories/#{options[:name].downcase}.rb"
554
+ template 'spec/factory.rb', "spec/factories/#{options[:name].downcase}.rb"
379
555
  end
380
556
 
381
557
  desc 'sendgrid', 'Generate sendgrid initializer and mail interceptor'
382
558
  option :email, required: true
383
559
  def sendgrid
384
- copy_file 'mailer/sendgrid.rb', 'config/initializers/sendgrid.rb'
385
- template 'mailer/dev_mail_interceptor.rb', 'app/mailers/dev_mail_interceptor.rb'
560
+ copy_file 'rails/app/mailers/sendgrid.rb', 'config/initializers/sendgrid.rb'
561
+ template 'rails/app/mailers/dev_mail_interceptor.rb', 'app/mailers/dev_mail_interceptor.rb'
386
562
  ENVIRONMENTS.each do |environment|
387
563
  unless environment == 'production'
388
564
  inject_into_file "config/environments/#{environment}.rb", after: "Rails.application.configure do\n" do <<-CODE
@@ -397,31 +573,27 @@ CODE
397
573
  option :name, required: true
398
574
  def config_env
399
575
  ENVIRONMENTS.each do |environment|
400
- if options[:name].nil?
401
- say "Missing parameter: --name"
402
- else
403
- case environment
404
- when 'development'
405
- inject_into_file 'config/environments/development.rb', after: "config.action_mailer.raise_delivery_errors = false\n" do <<-CODE
406
- config.action_mailer.delivery_method = :letter_opener
407
- config.action_mailer.perform_deliveries = false
408
- config.action_mailer.default_url_options = { host: 'http://#{options[:name]}.dev' }
409
- config.action_controller.default_url_options = { host: 'http://#{options[:name]}.dev' }
410
- CODE
411
- end
412
- when 'test'
413
- inject_into_file 'config/environments/test.rb', after: "config.action_mailer.delivery_method = :test\n" do <<-CODE
414
- config.action_mailer.default_url_options = { host: 'http://localhost:3000' }
415
- config.action_controller.default_url_options = { host: 'http://localhost:3000' }
416
- CODE
417
- end
418
- when 'production'
419
- inject_into_file 'config/environments/production.rb', after: "config.active_record.dump_schema_after_migration = false\n" do <<-CODE
420
- config.action_mailer.default_url_options = { host: '' }
421
- config.action_controller.default_url_options = { host: '' }
422
- config.assets.compile = true
423
- CODE
424
- end
576
+ case environment
577
+ when 'development'
578
+ inject_into_file 'config/environments/development.rb', after: "config.action_mailer.raise_delivery_errors = false\n" do <<-CODE
579
+ config.action_mailer.delivery_method = :letter_opener
580
+ config.action_mailer.perform_deliveries = false
581
+ config.action_mailer.default_url_options = { host: ENV['DEFAULT_HOST'] }
582
+ config.action_controller.default_url_options = { host: ENV['DEFAULT_HOST'] }
583
+ CODE
584
+ end
585
+ when 'test'
586
+ inject_into_file 'config/environments/test.rb', after: "config.action_mailer.delivery_method = :test\n" do <<-CODE
587
+ config.action_mailer.default_url_options = { host: ENV['DEFAULT_HOST'] }
588
+ config.action_controller.default_url_options = { host: ENV['DEFAULT_HOST'] }
589
+ CODE
590
+ end
591
+ when 'production'
592
+ inject_into_file 'config/environments/production.rb', after: "config.active_record.dump_schema_after_migration = false\n" do <<-CODE
593
+ config.action_mailer.default_url_options = { host: ENV['DEFAULT_HOST'] }
594
+ config.action_controller.default_url_options = { host: ENV['DEFAULT_HOST'] }
595
+ config.assets.compile = true
596
+ CODE
425
597
  end
426
598
  end
427
599
  end
@@ -446,7 +618,7 @@ CODE
446
618
  run "rails plugin new #{options[:name]} --dummy-path=spec/dummy --skip-test-unit --#{etype}"
447
619
  end
448
620
 
449
- desc 'engine_setup', 'Configure rails engine for development with RSpec, Capybara and FactoryGirl'
621
+ desc 'engine_setup', 'Configure rails engine for development with RSpec, Capybara and FactoryBot'
450
622
  option :name, required: true
451
623
  def engine_setup
452
624
  gsub_file "#{options[:name]}.gemspec", 's.homepage = "TODO"', 's.homepage = "http://TBD.com"'
@@ -463,7 +635,7 @@ CODE
463
635
  inject_into_file "#{options[:name]}.gemspec", after: "s.add_development_dependency \"sqlite3\"\n" do <<-CODE
464
636
  s.add_development_dependency 'rspec-rails'
465
637
  s.add_development_dependency 'capybara'
466
- s.add_development_dependency 'factory_girl_rails'
638
+ s.add_development_dependency 'factory_bot_rails'
467
639
  s.add_development_dependency "faker"
468
640
  s.add_development_dependency "byebug"
469
641
  s.add_development_dependency 'rails-controller-testing'
@@ -481,11 +653,15 @@ CODE
481
653
  end
482
654
 
483
655
  run 'bundle'
484
- copy_file 'rspec/database_cleaner.rb', 'spec/configs/database_cleaner.rb'
485
- copy_file 'rspec/factory_girl.rb', 'spec/configs/factory_gir.rb'
486
- copy_file 'rspec/presenter.rb', 'spec/configs/presenter.rb'
487
- copy_file 'rspec/shoulda_matchers', 'spec/configs/shoulda_matchers.rb'
656
+
657
+ Dir["#{__dir__}/myrails/templates/spec/**/*"].each do |file|
658
+ if file.include? '/support/'
659
+ copy_file file, "#{file.gsub(__dir__+'/myrails/templates/', '')}" unless File.directory? file
660
+ end
661
+ end
662
+
488
663
  copy_file 'engines/rakefile', 'Rakefile'
664
+
489
665
  run 'rails g rspec:install'
490
666
 
491
667
  gsub_file 'spec/rails_helper.rb', "# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }", "Dir[File.join(__dir__, 'support', '**', '*.rb')].each { |f| require f }"
@@ -494,7 +670,7 @@ CODE
494
670
 
495
671
  inject_into_file 'spec/rails_helper.rb', after: "require 'rspec/rails'\n" do <<-CODE
496
672
  require 'shoulda/matchers'
497
- require 'factory_girl'
673
+ require 'factory_bot'
498
674
  require 'database_cleaner'
499
675
  CODE
500
676
  end
@@ -509,7 +685,7 @@ require 'database_cleaner'
509
685
  inject_into_file "lib/#{options[:name]}/engine.rb", after: "class Engine < ::Rails::Engine\n" do <<-CODE
510
686
  config.generators do |g|
511
687
  g.test_framework :rspec, :fixture => false
512
- g.fixture_replacement :factory_girl, :dir => 'spec/factories'
688
+ g.fixture_replacement :factory_bot, :dir => 'spec/factories'
513
689
  g.assets false
514
690
  g.helper false
515
691
  end
@@ -520,25 +696,46 @@ require 'database_cleaner'
520
696
  desc 'shared_example', 'Generates an RSpec shared example template in the support directory'
521
697
  option :text, required: true
522
698
  def shared_example
523
- template 'rspec/shared_example.rb', 'spec/support/shared_examples.rb'
699
+ template 'spec/shared_example.rb', 'spec/support/shared_examples/shared_examples.rb'
524
700
  end
525
701
 
526
702
  desc 'request', 'Generates an RSpec request spec'
527
703
  option :name, required: true
528
704
  def request
529
- template 'rspec/request.rb', "spec/requests/#{options[:name]}_spec.rb"
530
- copy_file 'rspec/request_shared_example.rb', 'spec/support/request_shared_examples.rb'
705
+ template 'spec/request.rb', "spec/requests/#{options[:name]}_spec.rb"
706
+ copy_file 'spec/request_shared_example.rb', 'spec/support/shared_examples/request_shared_examples.rb'
531
707
  end
532
708
 
533
- desc 'install NAME', 'Install gems and customized files. Type `myrails install` for options'
709
+ desc 'feature', 'Generates an RSpec feature spec'
710
+ option :name, required: true
711
+ def feature
712
+ copy_file 'spec/feature.rb', "spec/features/#{options[:name]}_spec.rb"
713
+ end
714
+
715
+ desc 'helper', 'Generates an RSpec helper in support/helpers for extracting reusable code'
716
+ long_desc <<-LONGDESC
717
+ `myrails helper` will generate an RSpec helper module to use with rspec.
718
+
719
+ You can optionally specify a type parameter which will only include the module for the given type of spec.
720
+
721
+ > $ myrails helper --name article --type :feature
722
+ LONGDESC
723
+ option :name, required: true
724
+ option :type
725
+ def helper
726
+ template 'spec/helper.rb', "spec/support/helpers/#{options[:name].downcase.gsub("\s", '_')}.rb"
727
+ insert_into_file 'spec/rails_helper.rb', after: "RSpec.configure do |config|\n" do <<-CODE
728
+ config.include #{options[:name].camelize.gsub("\s", '')}Helper#{", type: #{options[:type]}" if options[:type]}
729
+ CODE
730
+ end
731
+ end
732
+
733
+ desc 'install NAME', 'Install customizations to convfigure application quickly. Type `myrails install` for options'
534
734
  def install(name=nil)
535
735
  options = {
536
736
  application_helper: 'Overwrite default application helper with a custom helper',
537
737
  gems: 'Install default gem set',
538
- assets: 'Generate custom asset pipeline files',
539
- layout: 'Generate custom layout',
540
- styles: 'Generate custom styles',
541
- footer: 'Generate a footer',
738
+ layout: 'Generate assets and custom styles using either Boostrap or Material',
542
739
  ui: 'Generate UI resource',
543
740
  pundit: 'Install and configure Pundit gem',
544
741
  rspec: 'Install and configure Rspec gem',
@@ -547,7 +744,10 @@ require 'database_cleaner'
547
744
  git: 'Generate git directory and ignore default files',
548
745
  heroku: 'Generate needed setup for Heroku deployment',
549
746
  devise: 'Generate and configure Devise gem',
550
- dotenv: 'Generate and configure Dotenv gem'
747
+ dotenv: 'Generate and configure Dotenv gem (Do not use if figaro is already installed)',
748
+ capistrano: 'Generate capistrano with default deployment',
749
+ figaro: 'Generate and configure Figaro Gem (Do not use if dotenv is already installed)',
750
+ env_config: 'Configure environment files with default hosts etc.'
551
751
  }
552
752
  unless name
553
753
  say 'ERROR: "myrails install" was called with no arguments'
@@ -562,17 +762,10 @@ require 'database_cleaner'
562
762
  install_application_helper
563
763
  when 'gems'
564
764
  install_gems
565
- when 'assets'
566
- install_assets
567
765
  when 'layout'
568
766
  install_layout
569
- when 'styles'
570
- install_css
571
- when 'footer'
572
- install_footer
573
767
  when 'ui'
574
768
  install_ui
575
- say 'Dont forget to run config_env'
576
769
  when 'pundit'
577
770
  install_pundit
578
771
  install_rails_helper
@@ -590,6 +783,12 @@ require 'database_cleaner'
590
783
  install_devise
591
784
  when 'dotenv'
592
785
  install_dotenv
786
+ when 'capistrano'
787
+ install_capistrano
788
+ when 'figaro'
789
+ install_figaro
790
+ when 'env_config'
791
+ config_env
593
792
  else
594
793
  say "Unknown Action!"
595
794
  end