myrails 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +74 -0
  5. data/Rakefile +6 -0
  6. data/bin/console +14 -0
  7. data/bin/myrails +3 -0
  8. data/bin/setup +8 -0
  9. data/lib/myrails/templates/assets/animate.scss +3340 -0
  10. data/lib/myrails/templates/assets/application.css.sass +6 -0
  11. data/lib/myrails/templates/assets/application.js +10 -0
  12. data/lib/myrails/templates/assets/bootstrap_themes/cerulean.scss +11 -0
  13. data/lib/myrails/templates/assets/bootstrap_themes/cosmo.scss +11 -0
  14. data/lib/myrails/templates/assets/bootstrap_themes/cyborg.scss +11 -0
  15. data/lib/myrails/templates/assets/bootstrap_themes/darkly.scss +11 -0
  16. data/lib/myrails/templates/assets/bootstrap_themes/flatly.scss +11 -0
  17. data/lib/myrails/templates/assets/bootstrap_themes/journal.scss +11 -0
  18. data/lib/myrails/templates/assets/bootstrap_themes/lumen.scss +11 -0
  19. data/lib/myrails/templates/assets/bootstrap_themes/paper.scss +11 -0
  20. data/lib/myrails/templates/assets/bootstrap_themes/readable.scss +11 -0
  21. data/lib/myrails/templates/assets/bootstrap_themes/sandstone.scss +11 -0
  22. data/lib/myrails/templates/assets/bootstrap_themes/simplex.scss +11 -0
  23. data/lib/myrails/templates/assets/bootstrap_themes/slate.scss +11 -0
  24. data/lib/myrails/templates/assets/bootstrap_themes/spacelab.scss +11 -0
  25. data/lib/myrails/templates/assets/bootstrap_themes/superhero.scss +11 -0
  26. data/lib/myrails/templates/assets/bootstrap_themes/united.scss +11 -0
  27. data/lib/myrails/templates/assets/bootstrap_themes/yeti.scss +11 -0
  28. data/lib/myrails/templates/assets/will_paginate.scss +104 -0
  29. data/lib/myrails/templates/db/mysql_database.yml +55 -0
  30. data/lib/myrails/templates/db/sqlite3_database.yml +28 -0
  31. data/lib/myrails/templates/heroku/Procfile +1 -0
  32. data/lib/myrails/templates/heroku/puma.rb +15 -0
  33. data/lib/myrails/templates/layout/_error_messages.html.haml +6 -0
  34. data/lib/myrails/templates/layout/_info_messages.html.haml +9 -0
  35. data/lib/myrails/templates/layout/_nav.html.haml +24 -0
  36. data/lib/myrails/templates/layout/_success_message.html.haml +3 -0
  37. data/lib/myrails/templates/layout/application.html.haml +14 -0
  38. data/lib/myrails/templates/layout/footers/css/footer-distributed-with-address-and-phones.scss +168 -0
  39. data/lib/myrails/templates/layout/footers/css/footer-distributed-with-contact-form.scss +200 -0
  40. data/lib/myrails/templates/layout/footers/css/footer-distributed-with-search.scss +140 -0
  41. data/lib/myrails/templates/layout/footers/css/footer-distributed.scss +74 -0
  42. data/lib/myrails/templates/layout/footers/footer-distributed-with-address-and-phones.html.haml +45 -0
  43. data/lib/myrails/templates/layout/footers/footer-distributed-with-contact-form.html.haml +33 -0
  44. data/lib/myrails/templates/layout/footers/footer-distributed-with-search.html.haml +19 -0
  45. data/lib/myrails/templates/layout/footers/footer-distributed.html.haml +24 -0
  46. data/lib/myrails/templates/mailer/dev_mail_interceptor.rb +27 -0
  47. data/lib/myrails/templates/mailer/sendgrid.rb +8 -0
  48. data/lib/myrails/templates/presenters/base.rb +33 -0
  49. data/lib/myrails/templates/presenters/presenter.rb +19 -0
  50. data/lib/myrails/templates/presenters/presenter_config.rb +4 -0
  51. data/lib/myrails/templates/presenters/presenter_spec.rb +17 -0
  52. data/lib/myrails/templates/rails/application_helper.rb +49 -0
  53. data/lib/myrails/templates/rails/controller.rb +12 -0
  54. data/lib/myrails/templates/rails/model.rb +2 -0
  55. data/lib/myrails/templates/rails/pundit.rb +26 -0
  56. data/lib/myrails/templates/rspec/controller.rb +98 -0
  57. data/lib/myrails/templates/rspec/database_cleaner.rb +18 -0
  58. data/lib/myrails/templates/rspec/devise.rb +38 -0
  59. data/lib/myrails/templates/rspec/factory.rb +5 -0
  60. data/lib/myrails/templates/rspec/factory_girl.rb +3 -0
  61. data/lib/myrails/templates/rspec/files.rb +3 -0
  62. data/lib/myrails/templates/rspec/javascript.rb +8 -0
  63. data/lib/myrails/templates/rspec/mailer.rb +7 -0
  64. data/lib/myrails/templates/rspec/model.rb +5 -0
  65. data/lib/myrails/templates/rspec/pundit.rb +28 -0
  66. data/lib/myrails/templates/rspec/pundit_matchers.rb +47 -0
  67. data/lib/myrails/templates/rspec/router.rb +7 -0
  68. data/lib/myrails/templates/rspec/shoulda_matchers.rb +16 -0
  69. data/lib/myrails/templates/rspec/silence_backtrace.rb +8 -0
  70. data/lib/myrails/templates/ui/index.html.haml +6 -0
  71. data/lib/myrails/templates/ui/ui_controller.rb +8 -0
  72. data/lib/myrails/version.rb +3 -0
  73. data/lib/myrails.rb +399 -0
  74. data/myrails.gemspec +37 -0
  75. data/spec/controllers/sam_controller_spec.rb +98 -0
  76. data/spec/myrails_spec.rb +11 -0
  77. data/spec/spec_helper.rb +2 -0
  78. metadata +197 -0
data/lib/myrails.rb ADDED
@@ -0,0 +1,399 @@
1
+ require_relative "../lib/myrails/version"
2
+ require 'thor'
3
+ require 'active_support/all'
4
+
5
+ module Myrails
6
+ class Myrails < Thor
7
+ include Thor::Actions
8
+ source_root "#{__dir__}/myrails/templates"
9
+ TEMPLATES = source_root
10
+ ENVIRONMENTS = %w(development test production)
11
+
12
+ class_option :name
13
+ class_option :email
14
+
15
+ desc 'model --name=model-name', 'Generates and empty rails model with the given name and its related spec file'
16
+ option :name, required: true
17
+ def model
18
+ template 'rspec/model.rb', "spec/models/#{options[:name]}_spec.rb"
19
+ template 'rails/model.rb', "app/models/#{options[:name]}.rb"
20
+ end
21
+
22
+ desc 'controller --name=controller-name', 'Generate a rails controller with the given name along with boiler plate code and related spec filet'
23
+ option :name, required: true
24
+ def controller
25
+ template 'rails/controller.rb', "app/controllers/#{options[:name]}_controller.rb"
26
+ template 'rspec/controller.rb', "spec/controllers/#{options[:name]}_controller_spec.rb"
27
+ run "mkdir app/views/#{options[:name]}"
28
+ end
29
+
30
+ desc 'policy --name=policy-name', 'Generate a pundit policy with the given name and a related spec file'
31
+ option :name, required: true
32
+ def policy
33
+ template 'rails/pundit.rb', "app/policies/#{options[:name]}_policy.rb"
34
+ template 'rspec/pundit.rb', "spec/policies/#{options[:name]}_policy_spec.rb"
35
+ end
36
+
37
+ desc 'presenter --name=presenter-name', 'Generate a presenter class with the given name and a related spec file'
38
+ option :name, required: true
39
+ def presenters
40
+ copy_file 'presenters/base.rb', 'app/presenters/base_presenter.rb'
41
+ template 'presenters/presenter.rb', "app/presenters/#{options[:name]}_presenter.rb"
42
+ copy_file 'presenters/presenter_config.rb', 'spec/support/configs/presenter.rb'
43
+ template 'presenters/presenter_spec.rb', "spec/presenters/#{options[:name]}_presenter_spec.rb"
44
+ end
45
+
46
+ desc 'factory --name=factory-name', 'Generate a factory girl factory for use with rspec'
47
+ option :name, required: true
48
+ def factory
49
+ template 'rspec/factory.rb', "spec/factories/#{options[:name]}.rb"
50
+ end
51
+
52
+ desc 'application_helper_install', 'Replace current application helper with one that has commonly used code'
53
+ def application_helper_install
54
+ copy_file 'rails/application_helper.rb', 'app/helpers/application_helper.rb'
55
+ end
56
+
57
+ desc 'ui_install', 'Generate UI files and code for prototyping views in app/views/ui'
58
+ def ui_install
59
+ copy_file 'ui/ui_controller.rb', 'app/controllers/ui_controller.rb'
60
+ copy_file 'ui/index.html.haml', 'app/views/ui/index.html.haml'
61
+ inject_into_file 'config/routes.rb', after: "Rails.application.routes.draw do\n" do <<-CODE
62
+ # Requires an application restart everytime a new page is added.
63
+ Dir.glob('app/views/ui/*.html.haml').sort.each do |file|
64
+ action = File.basename(file,'.html.haml')
65
+ get "ui/#{action}", controller: 'ui', action: action
66
+ end
67
+ CODE
68
+ end
69
+ end
70
+
71
+ desc 'rspec_install', 'Generate rspec structure & rspec configuration that I commonly use'
72
+ def rspec_install
73
+ run 'rails g rspec:install'
74
+ copy_file 'rspec/database_cleaner.rb', "spec/support/configs/database_cleaner.rb"
75
+ copy_file 'rspec/factory_girl.rb', 'spec/support/configs/factory_girl.rb'
76
+ copy_file 'rspec/shoulda_matchers.rb', 'spec/support/configs/shoulda_matchers.rb'
77
+ copy_file 'rspec/silence_backtrace.rb', 'spec/support/configs/silence_rspec_backtrace.rb'
78
+ copy_file 'rspec/javascript.rb', 'spec/support/configs/javascript.rb'
79
+ copy_file 'rspec/mailer.rb', 'spec/support/configs/mailer.rb'
80
+ copy_file 'rspec/router.rb', 'spec/support/configs/router.rb'
81
+ copy_file 'rspec/files.rb', 'spec/support/configs/files.rb'
82
+ end
83
+
84
+ desc 'mailer_install --email=email@example.com', 'Generate sendgrid initializer and mail interceptor'
85
+ option :email, required: true
86
+ def mailer_install
87
+ copy_file 'mailer/sendgrid.rb', 'config/initializers/sendgrid.rb'
88
+ template 'mailer/dev_mail_interceptor.rb', 'app/mailers/dev_mail_interceptor.rb'
89
+ ENVIRONMENTS.each do |environment|
90
+ unless environment == 'production'
91
+ inject_into_file "config/environments/#{environment}.rb", after: "# config.action_view.raise_on_missing_translations = true\n" do <<-CODE
92
+ ActionMailer::Base.register_interceptor(DevMailInterceptor)
93
+ CODE
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ desc 'config_env --name=host-localhost:3000', 'Add code to environment files. Host refers to url options'
100
+ option :name, required: true
101
+ def config_env
102
+ ENVIRONMENTS.each do |environment|
103
+ if options[:name].nil?
104
+ say "Missing parameter: --name"
105
+ else
106
+ case environment
107
+ when 'development'
108
+ inject_into_file 'config/environments/development.rb', after: "config.action_mailer.raise_delivery_errors = false\n" do <<-CODE
109
+ config.action_mailer.delivery_method = :letter_opener
110
+ config.action_mailer.perform_deliveries = false
111
+ config.action_mailer.default_url_options = { host: 'http://#{options[:name]}.dev' }
112
+ config.action_controller.default_url_options = { host: 'http://#{options[:name]}.dev' }
113
+ CODE
114
+ end
115
+ when 'test'
116
+ inject_into_file 'config/environments/test.rb', after: "config.action_mailer.delivery_method = :test\n" do <<-CODE
117
+ config.action_mailer.default_url_options = { host: 'http://localhost:3000' }
118
+ config.action_controller.default_url_options = { host: 'http://localhost:3000' }
119
+ CODE
120
+ end
121
+ when 'production'
122
+ inject_into_file 'config/environments/production.rb', after: "config.active_record.dump_schema_after_migration = false\n" do <<-CODE
123
+ config.action_mailer.default_url_options = { host: '' }
124
+ config.action_controller.default_url_options = { host: '' }
125
+ config.assets.compile = true
126
+ CODE
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
132
+
133
+ desc 'rails_helper_install', 'Add code to rspec/rails_helper so rspec runs the way I like'
134
+ def rails_helper_install
135
+ inject_into_file "spec/rails_helper.rb", after: "require 'rspec/rails'\n" do <<-CODE
136
+ require 'simplecov'
137
+ SimpleCov.start
138
+ #use Chromedriver
139
+ unless ENV['NOCHROME']
140
+ Capybara.register_driver :selenium do |app|
141
+ Capybara::Selenium::Driver.new(app, :browser => :chrome)
142
+ end
143
+ end
144
+ CODE
145
+ end
146
+
147
+ 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 }"
148
+
149
+ gsub_file "spec/rails_helper.rb", "config.use_transactional_fixtures = true", "config.use_transactional_fixtures = false"
150
+
151
+ inject_into_file 'spec/rails_helper.rb', after: "RSpec.configure do |config|\n" do <<-CODE
152
+ config.include(JavascriptHelper, type: :feature)
153
+ CODE
154
+ end
155
+ end
156
+
157
+ desc 'devise_install', 'Generate devise files'
158
+ def devise_install
159
+ insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
160
+ gem 'devise', '~> 4.2.0'
161
+ CODE
162
+ end
163
+ run 'bundle update'
164
+ copy_file 'rspec/devise.rb', 'spec/support/configs/devise.rb'
165
+
166
+ devise_model = ask("What would you like to call the devise model? Default: user")
167
+ devise_model = devise_model.empty? ? 'user' : devise_model
168
+ run 'rails generate devise:install'
169
+ run 'rake db:migrate'
170
+ run "rails generate devise #{devise_model}"
171
+ run 'rails generate devise:views'
172
+
173
+ inject_into_file 'app/controllers/application_controller.rb', before: 'protect_from_forgery with: :exception' do <<-CODE
174
+ # Devise authentication method
175
+ before_action :authenticate_#{devise_model}!
176
+ CODE
177
+ end
178
+
179
+ if File.exist?('app/controllers/ui_controller.rb')
180
+ inject_into_file 'app/controllers/ui_controller.rb', after: "class UiController < ApplicationController\n" do <<-CODE
181
+ skip_before_action :authenticate_#{devise_model}!
182
+ CODE
183
+ end
184
+ end
185
+
186
+ if yes?('Will you be needing registration params override? Answer "yes" if you will be adding attributes to the user model')
187
+ inject_into_file 'app/controllers/application_controller.rb', after: "skip_before_action :authenticate_#{devise_model}!\n" do <<-CODE
188
+ # Before action include additional registration params
189
+ # (see #configure_permitted_parameters)
190
+ before_action :configure_permitted_parameters, if: :devise_controller?
191
+ CODE
192
+ end
193
+
194
+ inject_into_file 'app/controllers/application_controller.rb', after: "private\n" do <<-CODE
195
+ # Register additional registration params
196
+ def configure_permitted_parameters
197
+ devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute, :attribute])
198
+ end
199
+ CODE
200
+ end
201
+ end
202
+ end
203
+
204
+ desc 'pundit_install', 'Install pundit gem and generate pundit files and application controller code'
205
+ def pundit_install
206
+ insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
207
+ gem 'pundit'
208
+ CODE
209
+ end
210
+
211
+ insert_into_file 'Gemfile', before: "group :development, :test do" do <<-CODE
212
+ gem 'pundit-matchers', '~> 1.1.0'
213
+ CODE
214
+ end
215
+
216
+ run 'bundle update'
217
+ run 'rails g pundit:install'
218
+
219
+ inject_into_file 'app/controllers/application_controller.rb', before: '# Prevent CSRF attacks by raising an exception.' do <<-CODE
220
+ # Add pundit authorization
221
+ include Pundit
222
+ CODE
223
+ end
224
+
225
+ inject_into_file 'app/controllers/application_controller.rb', after: "protect_from_forgery with: :exception\n" do <<-CODE
226
+ # Rescue from pundit error
227
+ # (see #user_not_authorized)
228
+ rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
229
+ CODE
230
+ end
231
+
232
+ inject_into_file 'app/controllers/application_controller.rb', after: "private\n" do <<-CODE
233
+ # Method to gracefully let a user know they are are not authorized
234
+ #
235
+ # @return flash [Hash] the action notice
236
+ def user_not_authorized
237
+ flash[:alert] = "You are not authorized to perform this action."
238
+ redirect_to home_path
239
+ end
240
+ CODE
241
+ end
242
+ end
243
+
244
+ desc 'footnotes_install', 'Install rails-footnotes and run its generator'
245
+ def footnotes_install
246
+ insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
247
+ gem 'rails-footnotes'
248
+ CODE
249
+ end
250
+ run 'bundle install'
251
+ run 'rails generate rails_footnotes:install'
252
+ end
253
+
254
+ desc 'gems_install', 'Add & Install gems that I commonly use'
255
+ def gems_install
256
+ insert_into_file 'Gemfile', before: "group :development, :test do" do <<-CODE
257
+ group :test do
258
+ gem 'rspec-rails'
259
+ gem 'simplecov'
260
+ gem 'shoulda-matchers'
261
+ gem 'factory_girl_rails'
262
+ gem 'database_cleaner'
263
+ gem 'capybara'
264
+ gem 'selenium-webdriver'
265
+ gem 'chromedriver-helper'
266
+ gem 'launchy'
267
+ gem 'rails-controller-testing'
268
+ end
269
+
270
+ CODE
271
+ end
272
+
273
+ insert_into_file 'Gemfile', after: "group :development, :test do\n" do <<-CODE
274
+ gem 'faker'
275
+ gem 'yard'
276
+ gem 'letter_opener'
277
+ gem "rails-erd"
278
+ CODE
279
+ end
280
+
281
+ insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
282
+ gem 'node'
283
+ gem 'bootstrap-sass', '~> 3.3.1'
284
+ gem 'autoprefixer-rails'
285
+ gem 'haml-rails'
286
+ gem "ransack"
287
+ gem 'will_paginate'
288
+ gem "font-awesome-rails"
289
+ gem 'trix'
290
+ gem 'record_tag_helper'
291
+ CODE
292
+ end
293
+ run 'bundle install'
294
+
295
+ insert_into_file 'app/controllers/application_controller.rb', before: 'end' do <<-CODE
296
+ private
297
+ CODE
298
+ end
299
+ end
300
+
301
+ desc 'assets_install', 'Generate common asset pipeline files'
302
+ def assets_install
303
+ run "rm app/assets/stylesheets/application.css"
304
+ copy_file 'assets/application.css.sass', 'app/assets/stylesheets/application.css.sass'
305
+ copy_file 'assets/application.js', 'app/assets/javascripts/application.js'
306
+ copy_file 'assets/animate.scss', 'app/assets/stylesheets/animate.scss'
307
+ copy_file 'assets/will_paginate.scss', 'app/assets/stylesheets/will_paginate.scss'
308
+ end
309
+
310
+
311
+ desc 'css_install', 'Generate & include application css theme'
312
+ def css_install
313
+ themes = Dir[File.join(TEMPLATES, 'assets', 'bootstrap_themes', '*')]
314
+
315
+ themes.each_with_index do |theme, index|
316
+ say "[#{index}] #{File.basename(theme,'.*')}"
317
+ end
318
+
319
+ idx = ask("Choose a color theme (by number) for the application. Default: 'spacelab'")
320
+ idx = idx.empty? ? themes.index{|theme| theme if theme.include?('spacelab')} : idx.to_i
321
+ copy_file(themes[idx], "app/assets/stylesheets/#{File.basename(themes[idx])}")
322
+
323
+ inject_into_file 'app/assets/stylesheets/application.css.sass', before: "@import will_paginate" do <<-CODE
324
+ @import #{File.basename(themes[idx], '.*')}
325
+ CODE
326
+ end
327
+ end
328
+
329
+ desc 'footer_install', 'Generate & include application footer'
330
+ def footer_install
331
+ footers = Dir[File.join(TEMPLATES, 'layout', 'footers', '*.haml')]
332
+ footers_css = Dir[File.join(TEMPLATES, 'layout', 'footers', 'css', '*')]
333
+
334
+ footers.each_with_index do |footer, index|
335
+ say "[#{index}] #{File.basename(footer,'.html.*')}"
336
+ end
337
+
338
+ idx = ask("Chose a footer theme (by number) for the application. Deault: 'footer-distributed (Basic)'")
339
+ idx = idx.empty? ? footers.index{|footer| footer if footer.include?('footer-distributed.html.haml')} : idx.to_i
340
+ copy_file footers[idx], "app/views/layouts/_footer.html.haml"
341
+ copy_file footers_css[idx], "app/assets/stylesheets/#{File.basename(footers_css[idx])}"
342
+
343
+ inject_into_file 'app/assets/stylesheets/application.css.sass', after: "@import animate\n" do <<-CODE
344
+ @import #{File.basename(footers_css[idx], '.*')}
345
+ CODE
346
+ end
347
+ end
348
+
349
+ desc 'layout_install', 'Generate common layout files'
350
+ def layout_install
351
+ run 'rm app/views/layouts/application.html.erb'
352
+ template 'layout/application.html.haml', 'app/views/layouts/application.html.haml'
353
+ template 'layout/_nav.html.haml', 'app/views/layouts/_nav.html.haml'
354
+ copy_file 'layout/_info_messages.html.haml', 'app/views/layouts/_info_messages.html.haml'
355
+ copy_file 'layout/_success_message.html.haml', 'app/views/layouts/_success_message.html.haml'
356
+ copy_file 'layout/_error_messages.html.haml', 'app/views/layouts/_error_messages.html.haml'
357
+ end
358
+
359
+ desc 'heroku_install', 'setup application for use with heroku using sqlite3 for development'
360
+ def heroku_install
361
+ insert_into_file 'Gemfile', before: "group :development, :test do\n" do <<-CODE
362
+ group :production do
363
+ gem 'pg'
364
+ gem 'rails_12factor'
365
+ end
366
+
367
+ CODE
368
+ end
369
+ copy_file 'db/sqlite3_database.yml', 'config/database.yml'
370
+ copy_file 'heroku/Procfile', 'Procfile'
371
+ copy_file 'heroku/puma.rb', 'config/puma.rb'
372
+ end
373
+
374
+ desc 'git_init', "Initialize git with some files autormoatically ignored"
375
+ def git_init
376
+ run 'git init'
377
+ run 'echo /coverage >> .gitignore'
378
+ run 'echo /config/application.yml >> .gitignore'
379
+ run 'git add --all'
380
+ run "git commit -m 'initial commit'"
381
+ end
382
+
383
+ desc 'mysql_switch', 'Switch to mysql database'
384
+ def mysql_switch
385
+ gsub_file 'Gemfile', "gem 'sqlite3'", "gem 'mysql2', '>= 0.3.13', '< 0.5'"
386
+ run 'bundle install'
387
+ copy_file 'db/mysql_database.yml', 'config/database.yml'
388
+ end
389
+
390
+ desc 'new_ui NAME', 'Create a new ui view'
391
+ option :name, required: true
392
+ def new_ui(name)
393
+ run "touch app/views/ui/#{name}.html.haml"
394
+ say "DON'T FORGET: Restart Powify App"
395
+ end
396
+ end
397
+ end
398
+
399
+ Myrails::Myrails.start(ARGV)
data/myrails.gemspec ADDED
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'myrails/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "myrails"
8
+ spec.version = Myrails::VERSION
9
+ spec.authors = ["Vell"]
10
+ spec.email = ["lovell.mcilwain@gmail.com"]
11
+
12
+ spec.summary = %q{A thor backed generator for generating rails related files based on my style of coding}
13
+ spec.description = %q{Generates files with with boiler plate code. Supports pundit, presenters, installing of themes from bootswatch and others.}
14
+ spec.homepage = "https://github.com/vmcilwain/myrails"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
21
+ else
22
+ raise "RubyGems 2.0 or newer is required to protect against " \
23
+ "public gem pushes."
24
+ end
25
+
26
+ spec.files = Dir["{bin,lib}/**/*", "LICENSE.txt", "README.md", 'Rakefile', 'Gemfile', 'myrails.gemspec']
27
+ spec.test_files = Dir["spec/**/*"]
28
+ spec.bindir = "bin"
29
+ spec.executables = ['myrails']
30
+ spec.require_paths = ["lib"]
31
+
32
+ spec.add_development_dependency "bundler", "~> 1.13"
33
+ spec.add_development_dependency "rake", "~> 10.0"
34
+ spec.add_development_dependency "rspec", "~> 3.0"
35
+ spec.add_dependency 'activesupport', '~> 5.0.0.1'
36
+ spec.add_dependency 'thor', '~> 0.19.1'
37
+ end
@@ -0,0 +1,98 @@
1
+ require 'rails_helper'
2
+
3
+ # Does this controller require authentication?
4
+ describe SamController do
5
+ # let(:user) {create :user}
6
+ let(:sams) {[]}
7
+ let(:sam) {create :sam}
8
+
9
+ # before {sign_in user}
10
+
11
+ describe 'GET index' do
12
+ before do
13
+ 3.times {sams << create(:sam)}
14
+ get :index
15
+ end
16
+
17
+ it 'sets @sams' do
18
+ expect(assigns[:sams]).to eq sams
19
+ end
20
+ end
21
+
22
+ describe 'GET show' do
23
+ before {get :show, params: {id: sam.id}}
24
+
25
+ it 'sets @sam' do
26
+ expect(assigns[:sam]).to eq sam
27
+ end
28
+ end
29
+
30
+ describe 'GET new' do
31
+ before {get :new}
32
+
33
+ it 'sets @sam' do
34
+ expect(assigns[:sam]).to be_a_new Sam
35
+ end
36
+ end
37
+
38
+ describe 'POST create' do
39
+ context 'successful create' do
40
+ before {post :create, params: {sam: attributes_for(:sam)}}
41
+
42
+ subject(:s){assigns[:sam]}
43
+
44
+ it 'redirects to :show'
45
+ it 'sets @sam'
46
+ it 'sets flash[:success]'
47
+ it 'tags the current_user as creator'
48
+ end
49
+
50
+ context 'unsuccessful create' do
51
+ before {post :create, params: {sam: attributes_for(:sam, attr: nil)}}
52
+
53
+ it 'renders :new template'
54
+ it 'sets @sam'
55
+ it 'sets flash[:error]'
56
+ end
57
+ end
58
+
59
+ describe 'GET edit' do
60
+ before {get :edit, params: {id: sam.id}}
61
+
62
+ it 'sets @sam' do
63
+ expect(assigns[:sam]).to eq sam
64
+ end
65
+ end
66
+
67
+ describe 'PUT/PATCH update' do
68
+ context 'successful update' do
69
+ before {put :update, params: {id: sam.id, sam: attributes_for(:sam)}}
70
+
71
+ subject(:s) {assigns[:sam]}
72
+
73
+ it 'redirects to :show'
74
+ it 'sets @sam'
75
+ it 'sets flash[:success]'
76
+ it 'tags current_user as updater'
77
+ end
78
+
79
+ context 'unsuccessful update' do
80
+ before {put :update, params: {id: sam.id, sam: attributes_for(:sam, attr: nil)}}
81
+
82
+ it 'renders :edit template'
83
+ it 'sets @sam'
84
+ it 'sets flash[:error]'
85
+ end
86
+ end
87
+
88
+ describe 'DELETE destroy' do
89
+ before {delete :destroy, params: {id: sam.id}}
90
+
91
+ it 'redirects to :index' do
92
+ expect(response).to redirect_to sams_path
93
+ end
94
+ it 'sets @sam'
95
+ it 'deletes @sam'
96
+ it 'sets flash[success]'
97
+ end
98
+ end
@@ -0,0 +1,11 @@
1
+ require "spec_helper"
2
+
3
+ describe Myrails do
4
+ it "has a version number" do
5
+ expect(Myrails::VERSION).not_to be nil
6
+ end
7
+
8
+ it "does something useful" do
9
+ expect(false).to eq(true)
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
2
+ require "myrails"