myrails 6.0.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +48 -30
  3. data/lib/myrails.rb +46 -122
  4. data/lib/myrails/modules/application_generator_actions.rb +61 -0
  5. data/lib/myrails/modules/application_generators.rb +80 -0
  6. data/lib/myrails/modules/assets.rb +28 -2
  7. data/lib/myrails/modules/bootstrap.rb +16 -12
  8. data/lib/myrails/modules/capistrano.rb +11 -6
  9. data/lib/myrails/modules/database_generator.rb +33 -0
  10. data/lib/myrails/modules/database_generator_actions.rb +18 -0
  11. data/lib/myrails/modules/devise.rb +11 -5
  12. data/lib/myrails/modules/dotenv.rb +30 -6
  13. data/lib/myrails/modules/draper.rb +29 -0
  14. data/lib/myrails/modules/engine_generator_actions.rb +117 -0
  15. data/lib/myrails/modules/engine_generators.rb +66 -0
  16. data/lib/myrails/modules/figaro.rb +18 -2
  17. data/lib/myrails/modules/gems.rb +7 -2
  18. data/lib/myrails/modules/heroku.rb +28 -9
  19. data/lib/myrails/modules/material.rb +23 -13
  20. data/lib/myrails/modules/pundit.rb +30 -6
  21. data/lib/myrails/modules/rails_generator_actions.rb +110 -0
  22. data/lib/myrails/modules/rails_generators.rb +49 -95
  23. data/lib/myrails/modules/rspec.rb +70 -40
  24. data/lib/myrails/modules/rspec_generator_actions.rb +56 -0
  25. data/lib/myrails/modules/rspec_generators.rb +36 -35
  26. data/lib/myrails/modules/ui.rb +24 -7
  27. data/lib/myrails/templates/rails/app/assets/javascripts/application.js +0 -4
  28. data/lib/myrails/templates/rails/app/controllers/controller.rb +6 -6
  29. data/lib/myrails/templates/rails/app/controllers/namespace_controller.rb +1 -1
  30. data/lib/myrails/templates/rails/app/decorators/application_decorator.rb +10 -0
  31. data/lib/myrails/templates/rails/app/decorators/decoration.rb +13 -0
  32. data/lib/myrails/templates/rails/app/helpers/application_helper.rb +0 -7
  33. data/lib/myrails/templates/rails/app/mailers/dev_mail_interceptor.rb +1 -1
  34. data/lib/myrails/templates/rails/app/models/model.rb +1 -1
  35. data/lib/myrails/templates/rails/app/models/namespace_model.rb +2 -2
  36. data/lib/myrails/templates/rails/app/policies/pundit.rb +2 -8
  37. data/lib/myrails/templates/rails/app/presenters/presenter.rb +5 -5
  38. data/lib/myrails/templates/rails/app/presenters/presenter_spec.rb +4 -4
  39. data/lib/myrails/templates/rails/app/views/layout/material/footer.html.haml +24 -0
  40. data/lib/myrails/templates/rails/config/application.example.yml +23 -23
  41. data/lib/myrails/templates/rails/config/initializers/sendgrid.rb +10 -0
  42. data/lib/myrails/templates/spec/controller.rb +37 -37
  43. data/lib/myrails/templates/spec/decorator_spec.rb +16 -0
  44. data/lib/myrails/templates/spec/factory.rb +1 -1
  45. data/lib/myrails/templates/spec/feature.rb +2 -2
  46. data/lib/myrails/templates/spec/helper.rb +1 -1
  47. data/lib/myrails/templates/spec/model.rb +1 -1
  48. data/lib/myrails/templates/spec/pundit.rb +5 -4
  49. data/lib/myrails/templates/spec/request.rb +27 -27
  50. data/lib/myrails/templates/spec/shared_example.rb +2 -2
  51. data/lib/myrails/templates/{rails/app/presenters/presenter_config.rb → spec/support/configs/decorator_presenter.rb} +0 -0
  52. data/lib/myrails/templates/ui/ui_controller.rb +1 -1
  53. data/lib/myrails/version.rb +1 -1
  54. data/myrails.gemspec +3 -3
  55. metadata +24 -15
  56. data/lib/myrails/modules/application.rb +0 -13
  57. data/lib/myrails/modules/database.rb +0 -15
  58. data/lib/myrails/modules/engine.rb +0 -107
  59. data/lib/myrails/modules/footnotes.rb +0 -19
  60. data/lib/myrails/templates/rails/app/mailers/sendgrid.rb +0 -8
@@ -0,0 +1,66 @@
1
+ module Engine
2
+ module Generators
3
+ def self.included(thor)
4
+ thor.class_eval do
5
+
6
+ desc 'engine <OPTION> <NAME>', 'Execute without options to see HELP. Generate and configure a rails engine'
7
+ def engine(*opts)
8
+ item = opts[0]
9
+
10
+ file = Dir['*.gemspec'].first
11
+
12
+ @name = if file
13
+ File.basename(file, '.gemspec')
14
+ else
15
+ opts[1]
16
+ end
17
+
18
+ option = {
19
+ # base_install: 'Generate a new mountable rails engine with a set of gems and a rake and rspec default configuration',
20
+ auto_setup: 'Run all of the setup options listed',
21
+ engine_setup: 'Generate default configuration in Rails::Engine. Requires the name of the engine as the argument',
22
+ gemspec_setup: 'Setup gempsec file with default information',
23
+ new: 'Generate clean a full or mountable rails gem',
24
+ rake_setup: 'Setup rake to run rspec as the default test framework along with other configs',
25
+ rspec_setup: 'Configure RSpec to work with a rails engine'
26
+ }
27
+
28
+ unless item
29
+ say 'ERROR: "myrails engine" was called with no arguments'
30
+ say 'Usage: "myrails engine <OPTION> <NAME>"'
31
+ say "Available Options:\n"
32
+ option.each{|k,v| say "* #{k}: #{v}"}
33
+ exit
34
+ end
35
+
36
+ raise ArgumentError, "NAME must be specified for #{item} option. Ex: `myrails engine <OPTION> <NAME>`" unless @name
37
+
38
+ case item
39
+ # when 'base_install'
40
+ # base_install
41
+ when 'auto_setup'
42
+ auto_setup
43
+ when 'engine_setup'
44
+ engine_setup
45
+ when 'gem_setup'
46
+ gem_setup
47
+ when 'gemspec_setup'
48
+ gemspec_setup
49
+ when 'new'
50
+ new_engine
51
+ when 'rake_setup'
52
+ rake_setup
53
+ when 'rspec_setup'
54
+ rspec_setup
55
+ else
56
+ say "Unknown Action! #{@name}"
57
+ end
58
+ end
59
+
60
+ desc 'e', 'Engine shortcut'
61
+ alias_method :e, :engine
62
+
63
+ end
64
+ end
65
+ end
66
+ end
@@ -2,17 +2,33 @@ module Install
2
2
  module Figaro
3
3
  def self.included(thor)
4
4
  thor.class_eval do
5
-
6
- def install_figaro
5
+
6
+ desc 'add_figaro', 'Add Figaro gem to Gemfile and run bundler'
7
+ def add_figaro
7
8
  insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
8
9
  gem "figaro"
9
10
  CODE
10
11
  end
11
12
 
12
13
  run 'bundle install'
14
+ end
15
+
16
+ desc 'generate_figaro', 'Run Figaro installer'
17
+ def generate_figaro
13
18
  run 'bundle exec figaro install'
19
+ end
20
+
21
+ desc 'generate_example', 'Create example application.yml file'
22
+ def generate_example
14
23
  copy_file 'rails/config/application.example.yml', 'config/application.example.yml'
15
24
  end
25
+
26
+ desc 'setup_figaro', 'Install and configure figaro gem'
27
+ def setup_figaro
28
+ add_figaro
29
+ generate_figaro
30
+ generate_example
31
+ end
16
32
 
17
33
  end
18
34
  end
@@ -2,7 +2,8 @@ module Install
2
2
  module Gems
3
3
  def self.included(thor)
4
4
  thor.class_eval do
5
-
5
+
6
+ desc 'add_test_group', 'Add test group gems to Gemfile'
6
7
  def add_test_group
7
8
  insert_into_file 'Gemfile', before: "group :development, :test do" do <<-CODE
8
9
  group :test do
@@ -18,6 +19,7 @@ CODE
18
19
  end
19
20
  end
20
21
 
22
+ desc 'add_development_test_gems', 'Add test and development group gems to Gemfile'
21
23
  def add_development_test_gems
22
24
  insert_into_file 'Gemfile', after: "group :development, :test do\n" do <<-CODE
23
25
  gem 'faker'
@@ -28,6 +30,7 @@ CODE
28
30
  end
29
31
  end
30
32
 
33
+ desc 'add_rails_gems', 'Add commonly used gems to Gemfile'
31
34
  def add_rails_gems
32
35
  insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
33
36
  gem 'haml-rails'
@@ -41,6 +44,7 @@ CODE
41
44
  end
42
45
  end
43
46
 
47
+ desc 'add_private_section', 'Add private section to appliation controller'
44
48
  def add_private_section
45
49
  insert_into_file 'app/controllers/application_controller.rb', before: 'end' do <<-CODE
46
50
  private
@@ -48,7 +52,8 @@ CODE
48
52
  end
49
53
  end
50
54
 
51
- def install_gems
55
+ desc 'setup_gems', 'Install development, test and prodution gems'
56
+ def setup_gems
52
57
  add_test_group
53
58
  add_development_test_gems
54
59
  add_rails_gems
@@ -3,20 +3,39 @@ module Install
3
3
  def self.included(thor)
4
4
  thor.class_eval do
5
5
 
6
- desc 'install_heroku', 'setup application for use with heroku using sqlite3 for development'
7
- def install_heroku
8
- insert_into_file 'Gemfile', before: "group :development, :test do\n" do <<-CODE
9
- group :production do
10
- gem 'pg'
11
- gem 'rails_12factor'
12
- end
6
+ desc 'add_heroku_gems', 'Add gems for heroku to Gemfile'
7
+ def add_heroku_gems
8
+ insert_into_file 'Gemfile', before: "group :development, :test do\n" do <<-CODE
9
+ gem 'pg', group: :production
10
+ gem 'rails_12factor', group: :production
13
11
 
14
- CODE
12
+ CODE
15
13
  end
14
+ run 'bundle install'
15
+ end
16
+
17
+ desc 'create_sqlite3_config', 'Generate SQLITE3 database config'
18
+ def create_sqlite3_config
16
19
  copy_file 'db/sqlite3_database.yml', 'config/database.yml'
20
+ end
21
+
22
+ desc 'create_heroku_procfile', 'Generate a procfile for use with heroku'
23
+ def create_heroku_procfile
17
24
  copy_file 'heroku/Procfile', 'Procfile'
25
+ end
26
+
27
+ desc 'create_heroku_puma_config', 'Generate a puma config for use with heroku'
28
+ def create_heroku_puma_config
18
29
  copy_file 'heroku/puma.rb', 'config/puma.rb'
19
- end
30
+ end
31
+
32
+ desc 'install_heroku', 'setup application for use with heroku using sqlite3 for development'
33
+ def setup_heroku
34
+ add_heroku_gems
35
+ create_sqlite3_config
36
+ create_heroku_procfile
37
+ create_heroku_puma_config
38
+ end
20
39
 
21
40
  end
22
41
  end
@@ -2,26 +2,27 @@ module Layout
2
2
  module Material
3
3
  def self.included(thor)
4
4
  thor.class_eval do
5
- def copy_material_files
6
- Dir["#{__dir__}/myrails/templates/rails/app/views/layout/material/**/*"].each do |file|
5
+ desc 'generate_material_files', 'Generate material layout files'
6
+ def generate_material_files
7
+ Dir[File.join("#{__dir__}", "..", "templates", "rails", "app", "views", "layout", "material", "**", "*")].each do |file|
7
8
  copy_file file, "app/views/layouts/#{File.basename(file)}"
8
9
  end
9
10
  end
10
-
11
- desc 'install_material', 'Generate Material css theme'
12
- def install_material
13
- @templates = "#{__dir__}/../templates"
11
+
12
+ desc 'add_material_gem', 'Add materialize sass and icons gem to Gemfile and run bundler'
13
+ def add_material_gem
14
14
 
15
15
  insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
16
- gem 'materialize-sass'
17
- gem 'material_icons'
18
- CODE
16
+ gem 'materialize-sass'
17
+ gem 'material_icons'
18
+ CODE
19
19
  end
20
20
 
21
21
  run 'bundle install'
22
-
23
- copy_material_files
24
-
22
+ end
23
+
24
+ desc 'setup_application_sass', 'add materialize to sass manifest'
25
+ def setup_materialize_css
25
26
  insert_into_file 'app/assets/stylesheets/application.css.sass', before: '@import trix' do <<-CODE
26
27
  @import "materialize/components/color"
27
28
  $primary-color: color("grey", "darken-3") !default
@@ -30,12 +31,21 @@ $secondary-color: color("grey", "base") !default
30
31
  @import material_icons
31
32
  CODE
32
33
  end
33
-
34
+ end
35
+
36
+ desc 'add_materialize_js', 'add materialize to js manifest'
37
+ def setup_materialize_js
34
38
  insert_into_file 'app/assets/javascripts/application.js', before: "//= require trix" do <<-CODE
35
39
  //= require materialize
36
40
  CODE
37
41
  end
38
42
  end
43
+ desc 'install_material', 'Generate Material css theme'
44
+ def setup_material
45
+ generate_material_files
46
+ setup_materialize_css
47
+ setup_materialize_js
48
+ end
39
49
 
40
50
  end
41
51
  end
@@ -3,20 +3,36 @@ module Install
3
3
  def self.included(thor)
4
4
  thor.class_eval do
5
5
 
6
- def add_pundit_gems
6
+ desc 'add_pundit_gem', 'Add Pundit gem to Gemfile'
7
+ def add_pundit_gem
7
8
  insert_into_file 'Gemfile', after: "gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]\n" do <<-CODE
8
9
  gem 'pundit'
9
10
  CODE
10
11
  end
11
-
12
+ end
13
+
14
+
15
+ desc 'add_pundit_matcher_gem', 'Add Pundit Matcher gfem to Gemfile'
16
+ def add_pundit_matcher_gem
12
17
  insert_into_file 'Gemfile', after: "group :test do\n" do <<-CODE
13
18
  gem 'pundit-matchers'
14
19
  CODE
15
20
  end
21
+ end
22
+
23
+ desc 'add_pundit_gems', 'Add pundit and pundit-matches to Gemfile and run bundler'
24
+ def add_pundit_gems
25
+ add_pundit_gem
26
+ add_pundit_matcher_gem
16
27
  run 'bundle update'
17
28
  end
29
+ desc 'generate_pundit_files', 'Run pundit generator'
30
+ def generate_pundit_files
31
+ run 'rails g pundit:install'
32
+ end
18
33
 
19
- def enable_pundit
34
+ desc 'include_pundit', 'Add Pundit to the application controller'
35
+ def include_pundit
20
36
  inject_into_file 'app/controllers/application_controller.rb', after: "class ApplicationController < ActionController::Base\n" do <<-CODE
21
37
  # Add pundit authorization
22
38
  include Pundit
@@ -25,7 +41,10 @@ CODE
25
41
  rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
26
42
  CODE
27
43
  end
28
-
44
+ end
45
+
46
+ desc 'add_pundit_rescue_notice', 'Add notice to gracefully rescue from Pundit error'
47
+ def add_pundit_rescue_notice
29
48
  inject_into_file 'app/controllers/application_controller.rb', after: "private\n" do <<-CODE
30
49
  # Method to gracefully let a user know they are are not authorized
31
50
  #
@@ -37,11 +56,16 @@ CODE
37
56
  CODE
38
57
  end
39
58
  end
59
+
60
+ def enable_pundit
61
+ include_pundit
62
+ add_pundit_rescue_notice
63
+ end
40
64
 
41
65
  desc 'install_pundit', 'Install pundit gem and generate pundit files and application controller code'
42
- def install_pundit
66
+ def setup_pundit
43
67
  add_pundit_gems
44
- run 'rails g pundit:install'
68
+ generate_pundit_files
45
69
  enable_pundit
46
70
  end
47
71
 
@@ -0,0 +1,110 @@
1
+ module Rails
2
+ module Generator
3
+ module Actions
4
+
5
+ ENVIRONMENTS = %w(development test production)
6
+
7
+ def self.included(thor)
8
+
9
+ thor.class_eval do
10
+
11
+ 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"
12
+ def model
13
+ template 'rails/app/models/model.rb', "app/models/#{@name.downcase}.rb"
14
+ template 'rails/app/models/namespace_model.rb', "app/models/#{@name.split("/").first.singularize.downcase}.rb" if @name.include?("/")
15
+ template 'spec/model.rb', "spec/models/#{@name.downcase}_spec.rb"
16
+ end
17
+
18
+ desc 'controller', "Generates a rails controller with the given name along with related spec file. Use '/' to create a namespaced controller"
19
+ def controller
20
+ template 'rails/app/controllers/controller.rb', "app/controllers/#{@name.downcase.pluralize}_controller.rb"
21
+ if @name.include?("/")
22
+ parent, child = name.split("/")
23
+ template 'rails/app/controllers/namespace_controller.rb', "app/controllers/#{parent}/#{parent.downcase}_controller.rb"
24
+ end
25
+
26
+ template 'spec/controller.rb', "spec/controllers/#{@name.downcase.pluralize}_controller_spec.rb"
27
+ run "mkdir -p app/views/#{@name.downcase.pluralize}"
28
+ end
29
+
30
+ desc 'policy', "Generates a pundit policy with the given name and a related spec file. Use '/' to create a namespaced policy"
31
+ def policy
32
+ template 'rails/app/policies/pundit.rb', "app/policies/#{@name.downcase}_policy.rb"
33
+ template 'spec/pundit.rb', "spec/policies/#{@name.downcase}_policy_spec.rb"
34
+ end
35
+
36
+ desc 'decorator', 'Generates draper decoration with given name and related spec file'
37
+ def decorator
38
+ copy_file 'rails/app/decorators/application_decorator.rb', 'app/decorators/application_decorator.rb'
39
+ template 'rails/app/decorators/decoration.rb', "app/decorators/#{@name.downcase}_decoration.rb"
40
+ copy_file 'spec/support/configs/decorator_presenter.rb', 'spec/support/configs/decorator_presenter.rb'
41
+ template 'spec/decorator_spec.rb', "spec/decorators/#{@name.downcase}_decorator_spec.rb"
42
+ end
43
+
44
+ desc 'factory', "Generates a factory_bot factory in the spec/factories directory. Use '/' to create a namespaced factory"
45
+ def factory
46
+ template 'spec/factory.rb', "spec/factories/#{@name.downcase}.rb"
47
+ end
48
+
49
+ desc 'config_env', 'Add code to environment files. Host refers to url options. Name option referes to controller and mailer default_url_options'
50
+ def config_env
51
+ ENVIRONMENTS.each do |environment|
52
+ case environment
53
+ when 'development'
54
+ inject_into_file 'config/environments/development.rb', after: "config.action_mailer.raise_delivery_errors = false\n" do <<-CODE
55
+ config.action_mailer.delivery_method = :letter_opener
56
+ config.action_mailer.perform_deliveries = false
57
+ config.action_mailer.default_url_options = { host: ENV.fetch('DEFAULT_HOST') }
58
+ config.action_controller.default_url_options = { host: ENV.fetch('DEFAULT_HOST') }
59
+ CODE
60
+ end
61
+ when 'test'
62
+ inject_into_file 'config/environments/test.rb', after: "config.action_mailer.delivery_method = :test\n" do <<-CODE
63
+ config.action_mailer.default_url_options = { host: ENV.fetch('DEFAULT_HOST') }
64
+ config.action_controller.default_url_options = { host: ENV.fetch('DEFAULT_HOST') }
65
+ CODE
66
+ end
67
+ when 'production'
68
+ inject_into_file 'config/environments/production.rb', after: "config.active_record.dump_schema_after_migration = false\n" do <<-CODE
69
+ config.action_mailer.default_url_options = { host: ENV.fetch('DEFAULT_HOST') }
70
+ config.action_controller.default_url_options = { host: ENV.fetch('DEFAULT_HOST') }
71
+ config.assets.compile = true
72
+ CODE
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ desc 'new_ui NAME', 'Create a new ui view'
79
+ def new_ui
80
+ run "touch app/views/ui/#{@name.downcase}.html.haml"
81
+ say "DON'T FORGET: Restart the rails app"
82
+ end
83
+
84
+ end
85
+
86
+ end
87
+
88
+ end
89
+ end
90
+ end
91
+
92
+
93
+
94
+ # desc 'presenter', "Generates a presenter class with the given name and a related spec file. Use '/' to create a namespaced presenter"
95
+ # option :name, required: true
96
+ # def presenters
97
+ # inject_into_file 'app/helpers/application_helper.rb', after: "module ApplicationHelper\n" do <<-CODE
98
+ # def present(object, klass = nil)
99
+ # klass ||= "#{object.class}Presenter".constantize
100
+ # presenter = klass.new(object, self)
101
+ # yield presenter if block_given?
102
+ # presenter
103
+ # end
104
+ #
105
+ # CODE
106
+ # copy_file 'rails/app/presenters/base.rb', 'app/presenters/base_presenter.rb'
107
+ # template 'rails/app/presenters/presenter.rb', "app/presenters/#{options[:name].downcase}_presenter.rb"
108
+ # copy_file 'spec/support/configs/decorator_presenter.rb', 'spec/support/configs/decorator_presenter.rb'
109
+ # template 'rails/app/presenters/presenter_spec.rb', "spec/presenters/#{options[:name].downcase}_presenter_spec.rb"
110
+ # end
@@ -1,102 +1,56 @@
1
1
  module Rails
2
2
  module Generators
3
+ # ENVIRONMENTS = %w(development test production)
4
+
3
5
  def self.included(thor)
4
6
  thor.class_eval do
5
-
6
- 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"
7
- option :name, required: true
8
- def model
9
- template 'rails/app/models/model.rb', "app/models/#{options[:name].downcase}.rb"
10
- template 'rails/app/models/namespace_model.rb', "app/models/#{options[:name].split("/").first.singularize.downcase}.rb" if options[:name].include?("/")
11
- template 'spec/model.rb', "spec/models/#{options[:name].downcase}_spec.rb"
12
- end
13
-
14
- desc 'controller', "Generates a rails controller with the given name along with related spec file. Use '/' to create a namespaced controller"
15
- option :name, required: true
16
- def controller
17
- template 'rails/app/controllers/controller.rb', "app/controllers/#{options[:name].downcase.pluralize}_controller.rb"
18
- if options[:name].include?("/")
19
- parent, child = options[:name].split("/")
20
- template 'rails/app/controllers/namespace_controller.rb', "app/controllers/#{parent}/#{parent.downcase}_controller.rb"
21
- end
22
- template 'spec/controller.rb', "spec/controllers/#{options[:name].downcase.pluralize}_controller_spec.rb"
23
- run "mkdir -p app/views/#{options[:name].downcase.pluralize}"
24
- end
25
-
26
- desc 'policy', "Generates a pundit policy with the given name and a related spec file. Use '/' to create a namespaced policy"
27
- option :name, required: true
28
- def policy
29
- template 'rails/app/policies/pundit.rb', "app/policies/#{options[:name].downcase}_policy.rb"
30
- template 'spec/pundit.rb', "spec/policies/#{options[:name].downcase}_policy_spec.rb"
31
- end
32
-
33
- desc 'presenter', "Generates a presenter class with the given name and a related spec file. Use '/' to create a namespaced presenter"
34
- option :name, required: true
35
- def presenters
36
- copy_file 'rails/app/presenters/base.rb', 'app/presenters/base_presenter.rb'
37
- template 'rails/app/presenters/presenter.rb', "app/presenters/#{options[:name].downcase}_presenter.rb"
38
- copy_file 'rails/app/presenters/presenter_config.rb', 'spec/support/configs/presenter.rb'
39
- template 'rails/app/presenters/presenter_spec.rb', "spec/presenters/#{options[:name].downcase}_presenter_spec.rb"
40
- end
41
-
42
- desc 'factory', "Generates a factory_bot factory in the spec/factories directory. Use '/' to create a namespaced factory"
43
- option :name, required: true
44
- def factory
45
- template 'spec/factory.rb', "spec/factories/#{options[:name].downcase}.rb"
46
- end
47
-
48
- desc 'sendgrid', 'Generate sendgrid initializer and mail interceptor'
49
- option :email, required: true
50
- def sendgrid
51
- copy_file 'rails/app/mailers/sendgrid.rb', 'config/initializers/sendgrid.rb'
52
- template 'rails/app/mailers/dev_mail_interceptor.rb', 'app/mailers/dev_mail_interceptor.rb'
53
- ENVIRONMENTS.each do |environment|
54
- unless environment == 'production'
55
- inject_into_file "config/environments/#{environment}.rb", after: "Rails.application.configure do\n" do <<-CODE
56
- ActionMailer::Base.register_interceptor(DevMailInterceptor)
57
- CODE
58
- end
59
- end
7
+ desc 'kickstart <OPTION> <NAME>', 'Execute without options to see HELP. Generate a rails template with a given name'
8
+ def kickstart(*opts)
9
+ item, @name = opts
10
+
11
+ option = {
12
+ controller: 'Generate rails controller with corresponding RSpec file',
13
+ decorator: 'Generate draper decorator with corresponding RSpec file',
14
+ factory: 'Generate factory[girl|bot] factory',
15
+ model: 'Generate rails model with corresponding RSpec file',
16
+ policy: 'Generate pundit policy with corresponding RSpec file',
17
+ ui: 'Generate a ui file for mocking front end'
18
+ }
19
+
20
+ unless item
21
+ say 'ERROR: "myrails kickstart" was called with no arguments'
22
+ say 'Usage: "myrails kickstart <OPTION> <NAME>"'
23
+ say "Available Options:\n"
24
+ option.each{|k,v| say "* #{k}: #{v}"}
25
+ exit
60
26
  end
61
- end
62
-
63
- desc 'config_env', 'Add code to environment files. Host refers to url options. Name option referes to controller and mailer default_url_options'
64
- option :name, required: true
65
- def config_env
66
- ENVIRONMENTS.each do |environment|
67
- case environment
68
- when 'development'
69
- inject_into_file 'config/environments/development.rb', after: "config.action_mailer.raise_delivery_errors = false\n" do <<-CODE
70
- config.action_mailer.delivery_method = :letter_opener
71
- config.action_mailer.perform_deliveries = false
72
- config.action_mailer.default_url_options = { host: ENV['DEFAULT_HOST'] }
73
- config.action_controller.default_url_options = { host: ENV['DEFAULT_HOST'] }
74
- CODE
75
- end
76
- when 'test'
77
- inject_into_file 'config/environments/test.rb', after: "config.action_mailer.delivery_method = :test\n" do <<-CODE
78
- config.action_mailer.default_url_options = { host: ENV['DEFAULT_HOST'] }
79
- config.action_controller.default_url_options = { host: ENV['DEFAULT_HOST'] }
80
- CODE
81
- end
82
- when 'production'
83
- inject_into_file 'config/environments/production.rb', after: "config.active_record.dump_schema_after_migration = false\n" do <<-CODE
84
- config.action_mailer.default_url_options = { host: ENV['DEFAULT_HOST'] }
85
- config.action_controller.default_url_options = { host: ENV['DEFAULT_HOST'] }
86
- config.assets.compile = true
87
- CODE
88
- end
89
- end
27
+
28
+ raise ArgumentError, "NAME must be specified for #{item} option. Ex: `myrails kickstart <OPTION> <NAME>`" unless @name
29
+
30
+ case item
31
+ when 'model'
32
+ model
33
+ when 'controller'
34
+ controller
35
+ when 'policy'
36
+ policy
37
+ when 'ui'
38
+ new_ui
39
+ when 'policy'
40
+ policy
41
+ when 'decorator'
42
+ decorator
43
+ when 'factory'
44
+ factory
45
+ else
46
+ say "Unknown Action! #{@name}"
90
47
  end
91
48
  end
92
-
93
- desc 'new_ui NAME', 'Create a new ui view'
94
- def new_ui(name)
95
- run "touch app/views/ui/#{name}.html.haml"
96
- say "DON'T FORGET: Restart Powify App"
97
- end
98
-
99
- end
100
- end
101
- end
102
- end
49
+
50
+ desc 'ks', 'Kickstart shortcut'
51
+ alias_method :ks, :kickstart
52
+
53
+ end # end thor.class_eval
54
+ end # end self.included
55
+ end # end module Generators
56
+ end # end module Rails