rails_app_generator 0.2.21 → 0.2.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/generators/project-plan.rb +16 -2
  3. data/CHANGELOG.md +24 -0
  4. data/after_templates/addons/avo/_.rb +54 -0
  5. data/after_templates/addons/avo/app/controllers/home_controller.rb +4 -0
  6. data/after_templates/addons/avo/app/views/home/index.html.erb +3 -0
  7. data/after_templates/addons/avo/app/views/layouts/_footer.html.erb +3 -0
  8. data/after_templates/addons/avo/app/views/layouts/_navbar.html.erb +8 -0
  9. data/after_templates/addons/avo/app/views/layouts/application.html.erb +23 -0
  10. data/after_templates/addons/avo/db/seeds.rb +132 -0
  11. data/after_templates/addons/devise/_.rb +70 -0
  12. data/after_templates/addons/devise/app/controllers/home_controller.rb +4 -0
  13. data/after_templates/addons/devise/app/controllers/posts_controller.rb +81 -0
  14. data/after_templates/addons/devise/app/models/post.rb +11 -0
  15. data/after_templates/addons/devise/app/models/user.rb +17 -0
  16. data/after_templates/addons/devise/app/views/home/index.html.erb +40 -0
  17. data/after_templates/addons/devise/app/views/layouts/_footer.html.erb +1 -0
  18. data/after_templates/addons/devise/app/views/layouts/_navbar.html.erb +10 -0
  19. data/after_templates/addons/devise/app/views/layouts/application.html.erb +38 -0
  20. data/after_templates/addons/devise/app/views/posts/_form.html.erb +27 -0
  21. data/after_templates/addons/devise/app/views/posts/_post.html.erb +14 -0
  22. data/after_templates/addons/devise/app/views/posts/index.html.erb +12 -0
  23. data/after_templates/addons/devise/app/views/posts/show.html.erb +8 -0
  24. data/after_templates/addons/devise/db/seeds.rb +11 -0
  25. data/after_templates/addons/minimal_css/_.rb +62 -0
  26. data/after_templates/addons/minimal_css/app/controllers/home_controller.rb +4 -0
  27. data/after_templates/addons/minimal_css/app/views/home/index.html.erb +140 -0
  28. data/after_templates/addons/minimal_css/app/views/layouts/_footer.html.erb +1 -0
  29. data/after_templates/addons/minimal_css/app/views/layouts/_navbar.html.erb +3 -0
  30. data/after_templates/addons/minimal_css/app/views/layouts/application.html.erb +29 -0
  31. data/after_templates/addons/minimal_css/db/seeds.rb +5 -0
  32. data/after_templates/rag/devise/_.rb +14 -17
  33. data/after_templates/rag/devise/app/controllers/home_controller.rb +4 -0
  34. data/after_templates/rag/devise/{post → app/controllers}/posts_controller.rb +0 -0
  35. data/after_templates/rag/devise/{post → app/models}/post.rb +0 -0
  36. data/after_templates/rag/devise/app/views/home/index.html.erb +3 -0
  37. data/after_templates/rag/devise/app/views/layouts/_footer.html.erb +3 -0
  38. data/after_templates/rag/devise/app/views/layouts/_navbar.html.erb +8 -0
  39. data/after_templates/rag/devise/app/views/layouts/application.html.erb +24 -0
  40. data/after_templates/rag/devise/{post → app/views/post}/_post.html.erb +0 -0
  41. data/after_templates/rag/test/_.rb +64 -0
  42. data/after_templates/rag/test/app/controllers/home_controller.rb +4 -0
  43. data/after_templates/rag/test/app/views/home/index.html.erb +3 -0
  44. data/after_templates/rag/test/app/views/layouts/_footer.html.erb +1 -0
  45. data/after_templates/rag/test/app/views/layouts/_navbar.html.erb +5 -0
  46. data/after_templates/rag/test/app/views/layouts/application.html.erb +29 -0
  47. data/after_templates/rag/test/db/seeds.rb +7 -0
  48. data/after_templates/rag/testy/_.rb +64 -0
  49. data/after_templates/rag/testy/app/controllers/home_controller.rb +4 -0
  50. data/after_templates/rag/testy/app/views/home/index.html.erb +3 -0
  51. data/after_templates/rag/testy/app/views/layouts/_footer.html.erb +1 -0
  52. data/after_templates/rag/testy/app/views/layouts/_navbar.html.erb +5 -0
  53. data/after_templates/rag/testy/app/views/layouts/application.html.erb +29 -0
  54. data/after_templates/rag/testy/db/seeds.rb +7 -0
  55. data/docs/last_run/app_generator_class.json +58 -34
  56. data/docs/last_run/app_generator_data.json +13 -10
  57. data/docs/last_run/rails_options_class.json +48 -24
  58. data/docs/last_run/rails_options_data.json +13 -10
  59. data/docs/project-plan/project.drawio +65 -59
  60. data/docs/project-plan/project_done.svg +1 -1
  61. data/lib/rails_app_generator/addon.rb +20 -2
  62. data/lib/rails_app_generator/addons/avo.rb +27 -0
  63. data/lib/rails_app_generator/addons/devise.rb +78 -28
  64. data/lib/rails_app_generator/addons/devise_old.rb +22 -0
  65. data/lib/rails_app_generator/addons/minimal_css.rb +70 -0
  66. data/lib/rails_app_generator/app_generator.rb +39 -20
  67. data/lib/rails_app_generator/gem_query.rb +34 -0
  68. data/lib/rails_app_generator/rag_initializer.rb +24 -8
  69. data/lib/rails_app_generator/version.rb +1 -1
  70. data/lib/rails_app_generator.rb +1 -0
  71. data/package-lock.json +2 -2
  72. data/package.json +1 -1
  73. data/profiles/addons/avo.json +16 -0
  74. data/profiles/addons/devise.json +16 -0
  75. data/profiles/addons/minimal_css.json +15 -0
  76. data/profiles/rag/testy.json +12 -0
  77. data/tasks/addon.thor +7 -3
  78. data/tasks/profile.thor +3 -3
  79. data/templates/Gemfile.erb +1 -0
  80. data/{after_templates/rag/devise/turbo_controller.rb → templates/addons/devise/app/controllers/turbo_devise_controller.rb} +4 -10
  81. data/templates/addons/devise/app/controllers/users/registrations_controller.rb +62 -0
  82. data/templates/addons/devise/app/views/devise/registrations/edit.html.erb +40 -54
  83. data/templates/addons/devise/app/views/devise/registrations/new.html.erb +32 -43
  84. data/templates/addons/devise/app/views/layouts/_alerts.html.erb +2 -0
  85. data/{after_templates/rag → templates/addons}/devise/config/initializers/devise_turbo.rb +1 -1
  86. data/templates/thor_task/profile/after_template.rb +1 -1
  87. data/templates/thor_task/profile/app/views/layouts/_footer.html.erb.tt +1 -3
  88. data/templates/thor_task/profile/app/views/layouts/_navbar.html.erb +5 -8
  89. data/templates/thor_task/profile/app/views/layouts/application.html.erb.tt +8 -2
  90. data/templates/thor_task/profile/db/seeds.rb +2 -11
  91. metadata +64 -17
  92. data/after_templates/rag/devise/application.html.erb +0 -20
  93. data/tasks/gem_info.rb +0 -47
  94. data/templates/addons/devise/app/views/devise/confirmations/new.html.erb +0 -24
  95. data/templates/addons/devise/app/views/devise/passwords/edit.html.erb +0 -34
  96. data/templates/addons/devise/app/views/devise/passwords/new.html.erb +0 -23
  97. data/templates/addons/devise/app/views/devise/sessions/new.html.erb +0 -33
  98. data/templates/addons/devise/app/views/devise/shared/_error_messages.html.erb +0 -15
  99. data/templates/addons/devise/app/views/devise/shared/_form_wrap.html.erb +0 -5
  100. data/templates/addons/devise/app/views/devise/shared/_links.html.erb +0 -25
  101. data/templates/addons/devise/app/views/devise/unlocks/new.html.erb +0 -22
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAppGenerator
4
+ # Custom add-ons for RailsAppGenerator
5
+ module AddOns
6
+ # Add Avo to rails application
7
+ class Avo < RailsAppGenerator::Addon
8
+ required_gem gem.version('avo', '2.12.0', 'Avo full-featured admin panel abstracts away the common parts of building apps, letting your engineers work on your apps essential components.')
9
+
10
+ def apply
11
+ # copy_file 'config/initializers/avo.rb'
12
+ end
13
+
14
+ def before_template
15
+ say 'Setting up Avo - before custom template'
16
+ end
17
+
18
+ def before_bundle
19
+ say 'Setting up Avo - before bundle install'
20
+ end
21
+
22
+ def after_bundle
23
+ say 'Setting up Avo - after bundle install'
24
+ end
25
+ end
26
+ end
27
+ end
@@ -3,58 +3,108 @@
3
3
  module RailsAppGenerator
4
4
  # Custom add-ons for RailsAppGenerator
5
5
  module AddOns
6
- # Add Devise authentication to rails application
6
+ # Add Devise to rails application
7
7
  class Devise < RailsAppGenerator::Addon
8
8
  depends_on :active_record
9
9
 
10
10
  required_gem gem.version('devise', '4.8.1', 'Flexible authentication solution for Rails with Warden')
11
11
 
12
- # Requires Testing
13
12
  def apply
14
13
  generate('devise:install', capture: true)
15
- generate(:devise, 'User', 'name', 'admin:boolean', capture: true)
14
+ generate(:devise, 'User', 'name', 'role:integer', capture: true)
16
15
 
17
- directory('app/views/devise', 'app/views/devise') if uses?(:views)
16
+ update_migration
18
17
 
18
+ add_trackable if option?(:devise_has_trackable)
19
+ add_confirmable if option?(:devise_has_confirmable)
20
+ add_lockable if option?(:devise_has_lockable)
21
+
22
+ add_turbo_support
23
+
24
+ generate('devise:views', capture: true)
19
25
  generate('devise:controllers', 'users', capture: true)
20
26
 
21
- update_development_rb
22
- gsub_file 'config/initializers/devise.rb', /# config.pepper = .+/, " # config.pepper = 'pepper'"
23
- gsub_file 'config/initializers/devise.rb', /# config.secret_key = .+/, " # config.secret_key = 'secret_key'"
24
- db_changes
25
- create_seed
27
+ update_routes_with_devise_controllers
28
+
29
+ copy_file('app/controllers/users/registrations_controller.rb', 'app/controllers/users/registrations_controller.rb', force: true)
30
+
31
+ enable_devise_mailer
32
+
33
+ directory('app/views', force: true)
34
+ end
35
+
36
+ def before_bundle
37
+ prepend_to_file 'db/seeds.rb', seed, force: true
26
38
  end
27
39
 
28
40
  private
29
41
 
30
- def update_development_rb
31
- inject_into_file 'config/environments/development.rb', before: /^end/ do
32
- <<-RUBY
42
+ def update_migration
43
+ in_root do
44
+ migration = Dir.glob('db/migrate/*').max_by { |f| File.mtime(f) }
45
+ gsub_file migration, /:role/, ':role, default: 0'
46
+ end
47
+ end
48
+
49
+ def enable_devise_mailer
50
+ inject_into_file 'config/environments/development.rb', <<-RUBY, after: %(config.action_mailer.raise_delivery_errors = false)
33
51
 
34
52
  # Enable devise mailer
35
53
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
36
- RUBY
37
- end
54
+ RUBY
38
55
  end
39
56
 
40
- def db_changes
57
+ def update_routes_with_devise_controllers
41
58
  in_root do
42
- migration = Dir.glob('db/migrate/*').max_by { |f| File.mtime(f) }
43
- gsub_file migration, /:admin/, ':admin, default: false'
59
+ gsub_file 'config/routes.rb', /devise_for :users/, 'devise_for :users, controllers: { sessions: "users/sessions", registrations: "users/registrations" }'
44
60
  end
45
61
  end
46
62
 
47
- def create_seed
48
- insert_into_file 'db/seeds.rb' do
49
- <<~RUBY
50
- # Create an initial admin user for development
51
- User.find_or_create_by(email: "admin@admin.com") do |user|
52
- user.name = 'Admin'
53
- user.password = 'password'
54
- user.admin = true
55
- end
56
- RUBY
57
- end
63
+ def add_trackable
64
+ # TODO: remove these comments in generated file
65
+
66
+ ## Trackable
67
+ # t.integer :sign_in_count, default: 0, null: false
68
+ # t.datetime :current_sign_in_at
69
+ # t.datetime :last_sign_in_at
70
+ # t.string :current_sign_in_ip
71
+ # t.string :last_sign_in_ip
72
+ end
73
+
74
+ def add_confirmable
75
+ # TODO: remove these comments in generated file
76
+
77
+ ## Confirmable
78
+ # t.string :confirmation_token
79
+ # t.datetime :confirmed_at
80
+ # t.datetime :confirmation_sent_at
81
+ # t.string :unconfirmed_email # Only if using reconfirmable
82
+ end
83
+
84
+ def add_lockable
85
+ # TODO: remove these comments in generated file
86
+
87
+ ## Lockable
88
+ # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
89
+ # t.string :unlock_token # Only if unlock strategy is :email or :both
90
+ # t.datetime :locked_at
91
+ end
92
+
93
+ def add_turbo_support
94
+ copy_file('app/controllers/turbo_devise_controller.rb', 'app/controllers/turbo_devise_controller.rb')
95
+ copy_file('config/initializers/devise_turbo.rb', 'config/initializers/devise_turbo.rb')
96
+ end
97
+
98
+ def seed
99
+ <<~RUBY
100
+ # Create an initial admin user for development
101
+ User.find_or_create_by(email: "admin@admin.com") do |user|
102
+ user.name = 'Admin'
103
+ user.password = 'password'
104
+ user.role = :admin
105
+ end
106
+
107
+ RUBY
58
108
  end
59
109
  end
60
110
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAppGenerator
4
+ # Custom add-ons for RailsAppGenerator
5
+ module AddOns
6
+ # Add Devise authentication to rails application
7
+ class DeviseXxxx < RailsAppGenerator::Addon
8
+ depends_on :active_record
9
+
10
+ required_gem gem.version('devise', '4.8.1', 'Flexible authentication solution for Rails with Warden')
11
+
12
+ # Requires Testing
13
+ def apply
14
+ update_development_rb
15
+ gsub_file 'config/initializers/devise.rb', /# config.pepper = .+/, " # config.pepper = 'pepper'"
16
+ gsub_file 'config/initializers/devise.rb', /# config.secret_key = .+/, " # config.secret_key = 'secret_key'"
17
+ db_changes
18
+ create_seed
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAppGenerator
4
+ # Custom add-ons for RailsAppGenerator
5
+ module AddOns
6
+ # Add MinimalCss to rails application
7
+ class MinimalCss < RailsAppGenerator::Addon
8
+ LIBRARIES = {
9
+ water: {
10
+ source: 'https://watercss.kognise.dev',
11
+ content: '<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css">'
12
+ },
13
+ picnic: {
14
+ source: 'https://picnicss.com',
15
+ content: '<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/picnic">'
16
+ },
17
+ chota: {
18
+ source: 'https://jenil.github.io/chota/',
19
+ content: '<link rel="stylesheet" href="https://unpkg.com/chota@latest">'
20
+ }
21
+ }.freeze
22
+
23
+ # https://purecss.io/
24
+ # https://bulma.io/
25
+ # https://get.foundation/
26
+ # https://www.blazeui.com/
27
+ # https://getbase.org/
28
+ # https://cirrus-ui.netlify.app/
29
+ # https://vanillaframework.io/
30
+ # https://www.patternfly.org/v4/
31
+ # https://tachyons.io/
32
+ # https://nostalgic-css.github.io/NES.css/
33
+ # https://selekkt.dk/skelet/v3/
34
+ # https://picturepan2.github.io/spectre/
35
+ # https://kylelogue.github.io/mustard-ui/
36
+ # https://www.bonsaicss.com/
37
+ # https://ajusa.github.io/lit/
38
+ # https://www.cutestrap.com/
39
+ # https://kbrsh.github.io/wing/
40
+ # https://devinhunt.github.io/typebase.css/
41
+ # http://getskeleton.com/
42
+ # https://semantic-ui.com/
43
+ # https://getuikit.com/
44
+
45
+ # ANIMATION
46
+ # https://animate.style/
47
+ # https://www.csswand.dev/
48
+ # http://animation.kaustubhmenon.com/
49
+ # https://www.minimamente.com/project/magic/
50
+
51
+ def apply; end
52
+
53
+ def after_bundle
54
+ library_key = (options[:minimal_css_library] || 'water').to_sym
55
+
56
+ insert_into_file 'app/views/layouts/application.html.erb', head(library_key), before: %r{^\s+</head>}, force: true
57
+ end
58
+
59
+ private
60
+
61
+ def head(library_key)
62
+ library = LIBRARIES[library_key] || LIBRARIES[:water]
63
+
64
+ content = library[:content]
65
+
66
+ " #{content}\n"
67
+ end
68
+ end
69
+ end
70
+ end
@@ -170,27 +170,38 @@ module RailsAppGenerator
170
170
  add_if(:acts_as_list) # tested
171
171
  add_if(:administrate) # tested
172
172
  add_if(:annotate) # tested
173
- add_if(:browser)
173
+ add_if(:avo) # tested
174
174
  add_if(:bcrypt) # tested
175
- add_if(:chartkick)
176
- add_if(:continuous_integration)
177
- add_if(:devise)
178
- add_if(:groupdate)
179
- add_if(:factory_bot)
180
- add_if(:faker)
181
- add_if(:generators)
182
- add_if(:hexapdf)
183
- add_if(:httparty)
184
- add_if(:high_voltage)
185
- add_if(:honeybadger)
186
- add_if(:lograge)
187
- add_if(:mini_magick)
188
- add_if(:pundit)
189
- add_if(:rails_app_generator)
190
- add_if(:services)
191
- add_if(:shoulda)
192
- add_if(:sidekiq)
193
- add_if(:twilio_ruby)
175
+ add_if(:browser) # tested
176
+ add_if(:chartkick) # tested
177
+ add_if(:continuous_integration) # TODO: needs work
178
+ add_if(:devise) # tested
179
+ # docker_compose
180
+ # docker
181
+ add_if(:dotenv) # tested
182
+ add_if(:factory_bot) # TODO: needs testing
183
+ add_if(:faker) # tested
184
+ add_if(:generators) # TODO: needs testing
185
+ add_if(:groupdate) # TODO: does not have a profile
186
+ add_if(:hexapdf) # tested
187
+ add_if(:httparty) # tested
188
+ add_if(:high_voltage) # TODO: needs testing
189
+ add_if(:honeybadger) # tested
190
+ add_if(:lograge) # tested
191
+ add_if(:minimal_css) # tested (this is NOT a GEM)
192
+ add_if(:mini_magick) # tested
193
+ add_if(:motor_magick) # tested
194
+ add_if(:public_suffix) # tested
195
+ add_if(:phony_rails) # tested
196
+ add_if(:pundit) # TODO: needs testing
197
+ add_if(:rails_html_sanitizer) # tested
198
+ add_if(:rails_app_generator) # TODO: needs testing
199
+ add_if(:redcarpet) # tested
200
+ add_if(:services) # TODO: needs testing
201
+ add_if(:shoulda) # TODO: needs testing
202
+ add_if(:sidekiq) # TODO: needs testing
203
+ add_if(:rubocop) # tested
204
+ add_if(:twilio_ruby) # tested
194
205
  add(:views, :errors, :scaffold) if active?(:views)
195
206
 
196
207
  # invoke :rails_customization
@@ -200,6 +211,10 @@ module RailsAppGenerator
200
211
 
201
212
  # Fire any callbacks defined on addons either before running the custom template
202
213
  def apply_rails_template
214
+ # currently running prepare_environment in the template
215
+ # this is doing a bundle install
216
+ # unfortunately this bundle install happens before the normal bundle install, but for now
217
+ # I have to do it until I figure out the why I need the prepare_environment method anyway.
203
218
  addon_instances.select { |addon| addon.respond_to?(:before_template) }.each(&:before_template)
204
219
  super
205
220
  end
@@ -422,6 +437,10 @@ module RailsAppGenerator
422
437
  add_flag?(option_name) # || !skip_flag?(option_name)
423
438
  end
424
439
 
440
+ def option?(option_name)
441
+ !options[option_name.to_sym].nil?
442
+ end
443
+
425
444
  def uses?(addon)
426
445
  return false unless active?(addon)
427
446
 
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Retrieve GemInfo from RubyGems.org
4
+ module RailsAppGenerator
5
+ # GemQuery queries RubyGems for GemEntry.
6
+ class GemQuery
7
+ class << self
8
+ def get(name)
9
+ gem_info = query_ruby_gems(name)
10
+
11
+ return gem_info if gem_info
12
+
13
+ return query_ruby_gems(name.gsub('_', '-')) if name.include?('_')
14
+ return query_ruby_gems(name.gsub('-', '_')) if name.include?('-')
15
+
16
+ abort "Cannot find GEM (#{name}) on RubyGems.org"
17
+ end
18
+
19
+ private
20
+
21
+ def query_ruby_gems(name)
22
+ link = "https://rubygems.org/api/v1/gems/#{name.downcase}.json"
23
+ info = Net::HTTP.get(URI.parse(link))
24
+ json = JSON.parse(info)
25
+
26
+ Rails::Generators::AppBase::GemfileEntry.new(json['name'], json['version'], json['description'])
27
+ rescue SocketError
28
+ abort 'Internet connection cannot be established to RubyGems.org'
29
+ rescue JSON::ParserError
30
+ nil
31
+ end
32
+ end
33
+ end
34
+ end
@@ -86,17 +86,12 @@ KConfig.configure do |config|
86
86
 
87
87
  # rag.add_option :add_irbrc , type: :boolean, default: false
88
88
  # rag.add_option :add_foreman , type: :boolean, default: false
89
- rag.add_option :add_devise , type: :boolean, default: false
90
- rag.add_option :add_dotenv , type: :boolean, default: false
91
89
  # rag.add_option :add_docker , type: :boolean, default: false
92
90
  # rag.add_option :add_docker_compose , type: :boolean, default: false
93
- rag.add_option :add_rubocop , type: :boolean, default: false
94
- rag.add_option :add_annotate , type: :boolean, default: false
95
91
  # rag.add_option :add_continuous_integration , type: :boolean, default: false
96
92
  # rag.add_option :add_high_voltage , type: :boolean, default: false
97
93
  # rag.add_option :add_generators , type: :boolean, default: false
98
- rag.add_option :add_lograge , type: :boolean, default: false
99
- # rag.add_option :add_pundit , type: :boolean, default: false
94
+ # rag.add_option :add_pundit , type: :boolean, default: false # cancancan vs action_policy vs pundit
100
95
  # rag.add_option :add_services , type: :boolean, default: false
101
96
  # rag.add_option :add_sidekiq , type: :boolean, default: false
102
97
  # rag.add_option :add_views , type: :boolean, default: false
@@ -104,24 +99,45 @@ KConfig.configure do |config|
104
99
  # rag.add_option :add_scaffold , type: :boolean, default: false
105
100
  # rag.add_option :add_factory_bot , type: :boolean, default: false
106
101
  # rag.add_option :add_shoulda , type: :boolean, default: false
102
+ # letter_opener
107
103
 
108
104
  # NEW GEM ADDONS
109
105
  rag.add_option :add_acts_as_list , type: :boolean, default: false
110
106
  rag.add_option :add_administrate , type: :boolean, default: false
111
- rag.add_option :add_browser , type: :boolean, default: false
107
+ rag.add_option :add_annotate , type: :boolean, default: false
108
+ rag.add_option :add_avo , type: :boolean, default: false
112
109
  rag.add_option :add_bcrypt , type: :boolean, default: false
110
+ rag.add_option :add_browser , type: :boolean, default: false
113
111
  rag.add_option :add_chartkick , type: :boolean, default: false
112
+ # continuous_integration
113
+ rag.add_option :add_devise , type: :boolean, default: false
114
+ # docker_compose
115
+ # docker
116
+ rag.add_option :add_dotenv , type: :boolean, default: false
117
+ # factory_bot
114
118
  rag.add_option :add_faker , type: :boolean, default: false
119
+ # generators
115
120
  rag.add_option :add_groupdate , type: :boolean, default: false
116
121
  rag.add_option :add_hexapdf , type: :boolean, default: false
117
122
  rag.add_option :add_httparty , type: :boolean, default: false
123
+ # high_voltage
118
124
  rag.add_option :add_honeybadger , type: :boolean, default: false
125
+ rag.add_option :add_lograge , type: :boolean, default: false
126
+ rag.add_option :add_minimal_css , type: :boolean, default: false
127
+ rag.add_option :minimal_css_library , type: :string, default: 'water.css', description: "Minimal CSS library to get you started. [options: water.css (default)]"
119
128
  rag.add_option :add_mini_magick , type: :boolean, default: false
120
129
  rag.add_option :add_motor_admin , type: :boolean, default: false
121
- rag.add_option :add_phony_rails , type: :boolean, default: false
122
130
  rag.add_option :add_public_suffix , type: :boolean, default: false
131
+ rag.add_option :add_phony_rails , type: :boolean, default: false
132
+ # pundit
123
133
  rag.add_option :add_rails_html_sanitizer , type: :boolean, default: false
134
+ # rails_app_generator
135
+ # RANSACK
124
136
  rag.add_option :add_redcarpet , type: :boolean, default: false
137
+ # services
138
+ # shoulda
139
+ # sidekiq
140
+ rag.add_option :add_rubocop , type: :boolean, default: false
125
141
  rag.add_option :add_twilio_ruby , type: :boolean, default: false
126
142
  end
127
143
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsAppGenerator
4
- VERSION = '0.2.21'
4
+ VERSION = '0.2.24'
5
5
  end
@@ -28,6 +28,7 @@ require 'rails_app_generator/options/options_builder'
28
28
  require 'rails_app_generator/options/rails_options'
29
29
  require 'rails_app_generator/context'
30
30
  require 'rails_app_generator/dependencies'
31
+ require 'rails_app_generator/gem_query'
31
32
  require 'rails_app_generator/addon'
32
33
  require 'rails_app_generator/addon_util'
33
34
  require 'rails_app_generator/formatted_gem_entry'
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.2.21",
3
+ "version": "0.2.24",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "rails_app_generator",
9
- "version": "0.2.21",
9
+ "version": "0.2.24",
10
10
  "dependencies": {
11
11
  "daisyui": "^2.20.0"
12
12
  },
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.2.21",
3
+ "version": "0.2.24",
4
4
  "description": "Create new Rails Application with custom opinions",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
@@ -0,0 +1,16 @@
1
+ {
2
+ "args": {
3
+ "app_path": "avo",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
5
+ },
6
+ "opts": {
7
+ "skip_git": true,
8
+ "skip_test": true,
9
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/avo/_.rb",
10
+ "add_annotate": true,
11
+ "add_avo": true,
12
+ "add_devise": true,
13
+ "add_faker": true,
14
+ "add_rubocop": true
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "args": {
3
+ "app_path": "devise",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
5
+ },
6
+ "opts": {
7
+ "skip_git": true,
8
+ "skip_test": true,
9
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/devise/_.rb",
10
+ "notes": "javascript: esbuild is used for the demonstration of this addon so that the destroy_user_session_path can be used as a link using turbo_method: :delete",
11
+ "javascript": "esbuild",
12
+ "add_annotate": true,
13
+ "add_devise": true,
14
+ "add_faker": true
15
+ }
16
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "args": {
3
+ "app_path": "minimal_css",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
5
+ },
6
+ "opts": {
7
+ "skip_git": true,
8
+ "skip_test": true,
9
+ "note": "minimal_css_library is optional and will default to water if not specified.",
10
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/minimal_css/_.rb",
11
+ "add_faker": true,
12
+ "add_minimal_css": true,
13
+ "minimal_css_library": "water"
14
+ }
15
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "args": {
3
+ "app_path": "testy",
4
+ "destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/rag"
5
+ },
6
+ "opts": {
7
+ "skip_git": true,
8
+ "skip_test": true,
9
+ "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/rag/testy/_.rb",
10
+ "javascript": "esbuild"
11
+ }
12
+ }
data/tasks/addon.thor CHANGED
@@ -4,7 +4,9 @@
4
4
 
5
5
  require 'net/http'
6
6
  require 'json'
7
- require_relative 'gem_info'
7
+ require 'pry'
8
+ require 'cmdlet'
9
+ require 'rails_app_generator'
8
10
 
9
11
  # Thor task to create a new Addon for Rails App Generator
10
12
  class Addon < Thor
@@ -46,9 +48,11 @@ class Addon < Thor
46
48
  end
47
49
 
48
50
  def build_required_gem_code
51
+ return nil unless options[:gem]
52
+
49
53
  info = gem_info
50
54
 
51
- " required_gem gem.version('#{info.name}', '#{info.version}', '#{info.description}')"
55
+ " required_gem gem.version('#{info.name}', '#{info.version}', '#{info.comment}')"
52
56
  end
53
57
 
54
58
  # example: 'https://rubygems.org/api/v1/gems/draper.json'
@@ -57,7 +61,7 @@ class Addon < Thor
57
61
 
58
62
  gem_name = options[:gem] == 'gem' ? name : options[:gem]
59
63
 
60
- ::GemInfo.get(gem_name)
64
+ RailsAppGenerator::GemQuery.get(gem_name)
61
65
  end
62
66
 
63
67
  def build_data
data/tasks/profile.thor CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  # https://codecrate.com/2014/01/replace-rake-with-thor.html
4
4
 
5
- require_relative 'gem_info'
6
5
  require 'cmdlet'
6
+ require 'rails_app_generator'
7
7
 
8
8
  # Thor task to create a new Profile for Rails App Generator
9
9
  class Profile < Thor
@@ -70,7 +70,7 @@ class Profile < Thor
70
70
  def build_data
71
71
  gi = gem_info(name)
72
72
 
73
- description = gi ? gi.description : 'Description goes here'
73
+ description = gi ? gi.comment : 'Description goes here'
74
74
 
75
75
  Data.new(
76
76
  name: name,
@@ -104,7 +104,7 @@ class Profile < Thor
104
104
 
105
105
  gem_name = options[:gem] == 'gem' ? name : options[:gem]
106
106
 
107
- GemInfo.get(gem_name)
107
+ RailsAppGenerator::GemQuery.get(gem_name)
108
108
  end
109
109
 
110
110
  def human(value)
@@ -1,6 +1,7 @@
1
1
  source "https://rubygems.org"
2
2
  git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
3
 
4
+ # xmen
4
5
  ruby <%= "'#{RUBY_VERSION}'" -%>
5
6
 
6
7
  <% gems.each do |gem| %><%= gem %>
@@ -1,16 +1,10 @@
1
- class TurboController < ApplicationController
2
-
3
- # This is required for Devise to work.
4
- # See: https://youtu.be/m3uhldUGVes?t=1432
5
- #
6
- # Having issues with devise/turbo.
7
- # See: https://gorails.com/episodes/devise-hotwire-turbo
1
+ class TurboDeviseController < ApplicationController
8
2
  class Responder < ActionController::Responder
9
3
  def to_turbo_stream
10
4
  controller.render(options.merge(formats: :html))
11
- rescue ActionView::MissingTemplate => error
5
+ rescue ActionView::MissingTemplate => e
12
6
  if get?
13
- raise error
7
+ raise e
14
8
  elsif has_errors? && default_action
15
9
  render rendering_options.merge(formats: :html, status: :unprocessable_entity)
16
10
  else
@@ -21,4 +15,4 @@ class TurboController < ApplicationController
21
15
 
22
16
  self.responder = Responder
23
17
  respond_to :html, :turbo_stream
24
- end
18
+ end