myrails 6.0.0 → 7.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 (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