rails_app_generator 0.2.22 → 0.2.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/after_templates/addons/devise/_.rb +70 -0
  4. data/after_templates/addons/devise/app/controllers/home_controller.rb +4 -0
  5. data/after_templates/addons/devise/app/controllers/posts_controller.rb +81 -0
  6. data/after_templates/addons/devise/app/models/post.rb +11 -0
  7. data/after_templates/addons/devise/app/models/user.rb +17 -0
  8. data/after_templates/addons/devise/app/views/home/index.html.erb +40 -0
  9. data/after_templates/addons/devise/app/views/layouts/_footer.html.erb +1 -0
  10. data/after_templates/addons/devise/app/views/layouts/_navbar.html.erb +10 -0
  11. data/after_templates/addons/devise/app/views/layouts/application.html.erb +38 -0
  12. data/after_templates/addons/devise/app/views/posts/_form.html.erb +27 -0
  13. data/after_templates/addons/devise/app/views/posts/_post.html.erb +14 -0
  14. data/after_templates/addons/devise/app/views/posts/index.html.erb +12 -0
  15. data/after_templates/addons/devise/app/views/posts/show.html.erb +8 -0
  16. data/after_templates/addons/devise/db/seeds.rb +11 -0
  17. data/after_templates/rag/devise/_.rb +14 -17
  18. data/after_templates/rag/devise/app/controllers/home_controller.rb +4 -0
  19. data/after_templates/rag/devise/{post → app/controllers}/posts_controller.rb +0 -0
  20. data/after_templates/rag/devise/{post → app/models}/post.rb +0 -0
  21. data/after_templates/rag/devise/app/views/home/index.html.erb +3 -0
  22. data/after_templates/rag/devise/app/views/layouts/_footer.html.erb +3 -0
  23. data/after_templates/rag/devise/app/views/layouts/_navbar.html.erb +8 -0
  24. data/after_templates/rag/devise/app/views/layouts/application.html.erb +24 -0
  25. data/after_templates/rag/devise/{post → app/views/post}/_post.html.erb +0 -0
  26. data/after_templates/rag/test/_.rb +64 -0
  27. data/after_templates/rag/test/app/controllers/home_controller.rb +4 -0
  28. data/after_templates/rag/test/app/views/home/index.html.erb +3 -0
  29. data/after_templates/rag/test/app/views/layouts/_footer.html.erb +1 -0
  30. data/after_templates/rag/test/app/views/layouts/_navbar.html.erb +5 -0
  31. data/after_templates/rag/test/app/views/layouts/application.html.erb +29 -0
  32. data/after_templates/rag/test/db/seeds.rb +7 -0
  33. data/after_templates/rag/testy/_.rb +64 -0
  34. data/after_templates/rag/testy/app/controllers/home_controller.rb +4 -0
  35. data/after_templates/rag/testy/app/views/home/index.html.erb +3 -0
  36. data/after_templates/rag/testy/app/views/layouts/_footer.html.erb +1 -0
  37. data/after_templates/rag/testy/app/views/layouts/_navbar.html.erb +5 -0
  38. data/after_templates/rag/testy/app/views/layouts/application.html.erb +29 -0
  39. data/after_templates/rag/testy/db/seeds.rb +7 -0
  40. data/lib/rails_app_generator/addon.rb +20 -2
  41. data/lib/rails_app_generator/addons/devise.rb +111 -0
  42. data/lib/rails_app_generator/addons/devise_old.rb +1 -40
  43. data/lib/rails_app_generator/app_generator.rb +9 -1
  44. data/lib/rails_app_generator/gem_query.rb +34 -0
  45. data/lib/rails_app_generator/rag_initializer.rb +1 -0
  46. data/lib/rails_app_generator/version.rb +1 -1
  47. data/lib/rails_app_generator.rb +1 -0
  48. data/package-lock.json +2 -2
  49. data/package.json +1 -1
  50. data/profiles/addons/devise.json +16 -0
  51. data/profiles/rag/testy.json +12 -0
  52. data/tasks/addon.thor +7 -3
  53. data/tasks/profile.thor +3 -3
  54. data/templates/Gemfile.erb +1 -0
  55. data/{after_templates/rag/devise/turbo_controller.rb → templates/addons/devise/app/controllers/turbo_devise_controller.rb} +4 -10
  56. data/templates/addons/devise/app/controllers/users/registrations_controller.rb +62 -0
  57. data/templates/addons/devise/app/views/devise/registrations/edit.html.erb +40 -54
  58. data/templates/addons/devise/app/views/devise/registrations/new.html.erb +32 -43
  59. data/templates/addons/devise/app/views/layouts/_alerts.html.erb +2 -0
  60. data/{after_templates/rag → templates/addons}/devise/config/initializers/devise_turbo.rb +1 -1
  61. data/templates/thor_task/profile/after_template.rb +1 -1
  62. data/templates/thor_task/profile/app/views/layouts/_footer.html.erb.tt +1 -3
  63. data/templates/thor_task/profile/app/views/layouts/_navbar.html.erb +5 -8
  64. data/templates/thor_task/profile/app/views/layouts/application.html.erb.tt +8 -2
  65. data/templates/thor_task/profile/db/seeds.rb +2 -11
  66. metadata +46 -17
  67. data/after_templates/rag/devise/application.html.erb +0 -20
  68. data/tasks/gem_info.rb +0 -47
  69. data/templates/addons/devise/app/views/devise/confirmations/new.html.erb +0 -24
  70. data/templates/addons/devise/app/views/devise/passwords/edit.html.erb +0 -34
  71. data/templates/addons/devise/app/views/devise/passwords/new.html.erb +0 -23
  72. data/templates/addons/devise/app/views/devise/sessions/new.html.erb +0 -33
  73. data/templates/addons/devise/app/views/devise/shared/_error_messages.html.erb +0 -15
  74. data/templates/addons/devise/app/views/devise/shared/_form_wrap.html.erb +0 -5
  75. data/templates/addons/devise/app/views/devise/shared/_links.html.erb +0 -25
  76. data/templates/addons/devise/app/views/devise/unlocks/new.html.erb +0 -22
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Description goes here
4
+ #
5
+ # exe/rag addons/testy
6
+
7
+ self.local_template_path = File.dirname(__FILE__)
8
+
9
+ gac 'base rails 7 image created'
10
+
11
+ prepare_environment
12
+
13
+ add_controller('home', 'index')
14
+
15
+ route("root 'home#index'")
16
+
17
+ force_copy
18
+
19
+ directory "app/controllers"
20
+ directory "app/views/home"
21
+ directory "app/views/layouts"
22
+ template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
23
+
24
+ template 'db/seeds.rb' , 'db/seeds.rb'
25
+
26
+ after_bundle do
27
+ setup_db
28
+ end
29
+
30
+ def setup_db
31
+ # add_scaffold('post', 'title', 'body:text', 'user:references')
32
+ # add_scaffold('people', 'first_name', 'last_name', 'age:integer', 'address:text')
33
+ # add_scaffold('product', 'name', 'price:integer')
34
+
35
+ # db_migrate
36
+ # db_seed
37
+ end
38
+
39
+ # Other template command examples
40
+ # prepare_environment
41
+ # bundle_install
42
+ # css_install('tailwind')
43
+ # rails_command('db:migrate')
44
+ # rails_command('db:migrate')
45
+ # bundle_add('hotwire-rails')
46
+ # rails_command('hotwire:install')
47
+ # run('bin/importmap pin sortablejs')
48
+ # run('npm install daisyui')
49
+ # rubocop
50
+ #
51
+ # directory 'app/assets/images'
52
+ # create_file 'app/assets/stylesheets/custom-bootstrap-import.scss' , read_template('custom-bootstrap-import.scss')
53
+ # append_to_file 'app/assets/config/manifest.js' , read_template('manifest.js')
54
+ # insert_into_file 'app/views/layouts/application.html.erb', read_template('application.html.erb'),
55
+ # before: %( <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>)
56
+ # gsub_file 'app/views/layouts/application.html.erb', %(container mx-auto mt-28 px-5 flex), 'container mx-auto px-5'
57
+ # template 'home.css', 'app/assets/stylesheets/home.css'
58
+ #
59
+ # add_controller('page', 'benefits', 'faq', 'terms', 'privacy', '--skip-routes')
60
+ # route(<<-'RUBY')
61
+ # PageController.action_methods.each do |action|
62
+ # get "/#{action}", to: "page##{action}", as: "page_#{action}"
63
+ # end
64
+ # RUBY
@@ -0,0 +1,4 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ <h1>Testy</h1>
2
+
3
+ <p>Description goes here</p>
@@ -0,0 +1,5 @@
1
+ <%= link_to 'Home', root_path %>
2
+ <%# link_to 'Products', products_path %>
3
+ <%# link_to 'Posts', posts_path %>
4
+ <%# link_to 'People', people_path %>
5
+ <hr />
@@ -0,0 +1,29 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= camelized %></title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <%%= csrf_meta_tags %>
7
+ <%%= csp_meta_tag %>
8
+
9
+ <%- if options[:skip_hotwire] || options[:skip_javascript] -%>
10
+ <%%= stylesheet_link_tag "application" %>
11
+ <%- else -%>
12
+ <%%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
13
+ <%- end -%>
14
+ </head>
15
+
16
+ <body>
17
+ <header>
18
+ <%%= render 'layouts/navbar' %>
19
+ <hr />
20
+ </header>
21
+ <main>
22
+ <%%= yield %>
23
+ </main>
24
+ <footer>
25
+ <%%= render 'layouts/footer' %>
26
+ </footer>
27
+ </body>
28
+ </html>
29
+
@@ -0,0 +1,7 @@
1
+ # david = User.create(email: 'david@site.com', name: 'david', password: 'password')
2
+ # james = User.create(email: 'james@site.com', name: 'james', password: 'password')
3
+ # sally = User.create(email: 'sally@site.com', name: 'sally', password: 'password')
4
+
5
+ # 10.times do |i|
6
+ # Post.create(title: "Post #{i}", body: "This is the body of post #{i}", user: User.all.sample)
7
+ # end
@@ -35,6 +35,12 @@ module RailsAppGenerator
35
35
  context.options
36
36
  end
37
37
 
38
+ def option?(option_name)
39
+ value = options[option_name.to_sym]
40
+
41
+ !value.nil?
42
+ end
43
+
38
44
  def uses?(addon_name = nil)
39
45
  addon_name ||= self.class.addon_name
40
46
 
@@ -94,16 +100,28 @@ module RailsAppGenerator
94
100
  @gem_entries ||= []
95
101
  end
96
102
 
97
- protected
98
-
99
103
  def depends_on(*addon)
100
104
  @dependencies = addon.map(&:to_sym)
101
105
  end
102
106
 
103
107
  def required_gem(gem_entry)
108
+ existing_gem = gem_entries.find { |gem| gem.name == gem_entry.name }
109
+
110
+ if existing_gem
111
+ return if Gem::Version.new(gem_entry.version) < Gem::Version.new(existing_gem.version)
112
+
113
+ existing_gem.version = gem_entry.version
114
+ existing_gem.comment = gem_entry.comment
115
+ return
116
+ end
117
+
104
118
  gem_entries << gem_entry
105
119
  end
106
120
 
121
+ def reset_gem_entries
122
+ @gem_entries = []
123
+ end
124
+
107
125
  def gem
108
126
  Rails::Generators::AppBase::GemfileEntry
109
127
  end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAppGenerator
4
+ # Custom add-ons for RailsAppGenerator
5
+ module AddOns
6
+ # Add Devise to rails application
7
+ class Devise < 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
+ def apply
13
+ generate('devise:install', capture: true)
14
+ generate(:devise, 'User', 'name', 'role:integer', capture: true)
15
+
16
+ update_migration
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)
25
+ generate('devise:controllers', 'users', capture: true)
26
+
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
38
+ end
39
+
40
+ private
41
+
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)
51
+
52
+ # Enable devise mailer
53
+ config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
54
+ RUBY
55
+ end
56
+
57
+ def update_routes_with_devise_controllers
58
+ in_root do
59
+ gsub_file 'config/routes.rb', /devise_for :users/, 'devise_for :users, controllers: { sessions: "users/sessions", registrations: "users/registrations" }'
60
+ end
61
+ end
62
+
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
108
+ end
109
+ end
110
+ end
111
+ end
@@ -4,58 +4,19 @@ module RailsAppGenerator
4
4
  # Custom add-ons for RailsAppGenerator
5
5
  module AddOns
6
6
  # Add Devise authentication to rails application
7
- class Devise < RailsAppGenerator::Addon
7
+ class DeviseXxxx < 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
12
  # Requires Testing
13
13
  def apply
14
- generate('devise:install', capture: true)
15
- generate(:devise, 'User', 'name', 'admin:boolean', capture: true)
16
-
17
- directory('app/views/devise', 'app/views/devise') if uses?(:views)
18
-
19
- generate('devise:controllers', 'users', capture: true)
20
-
21
14
  update_development_rb
22
15
  gsub_file 'config/initializers/devise.rb', /# config.pepper = .+/, " # config.pepper = 'pepper'"
23
16
  gsub_file 'config/initializers/devise.rb', /# config.secret_key = .+/, " # config.secret_key = 'secret_key'"
24
17
  db_changes
25
18
  create_seed
26
19
  end
27
-
28
- private
29
-
30
- def update_development_rb
31
- inject_into_file 'config/environments/development.rb', before: /^end/ do
32
- <<-RUBY
33
-
34
- # Enable devise mailer
35
- config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
36
- RUBY
37
- end
38
- end
39
-
40
- def db_changes
41
- in_root do
42
- migration = Dir.glob('db/migrate/*').max_by { |f| File.mtime(f) }
43
- gsub_file migration, /:admin/, ':admin, default: false'
44
- end
45
- end
46
-
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
58
- end
59
20
  end
60
21
  end
61
22
  end
@@ -175,7 +175,7 @@ module RailsAppGenerator
175
175
  add_if(:browser) # tested
176
176
  add_if(:chartkick) # tested
177
177
  add_if(:continuous_integration) # TODO: needs work
178
- add_if(:devise) # TODO: needs testing
178
+ add_if(:devise) # tested
179
179
  # docker_compose
180
180
  # docker
181
181
  add_if(:dotenv) # tested
@@ -210,6 +210,10 @@ module RailsAppGenerator
210
210
 
211
211
  # Fire any callbacks defined on addons either before running the custom template
212
212
  def apply_rails_template
213
+ # currently running prepare_environment in the template
214
+ # this is doing a bundle install
215
+ # unfortunately this bundle install happens before the normal bundle install, but for now
216
+ # I have to do it until I figure out the why I need the prepare_environment method anyway.
213
217
  addon_instances.select { |addon| addon.respond_to?(:before_template) }.each(&:before_template)
214
218
  super
215
219
  end
@@ -432,6 +436,10 @@ module RailsAppGenerator
432
436
  add_flag?(option_name) # || !skip_flag?(option_name)
433
437
  end
434
438
 
439
+ def option?(option_name)
440
+ !options[option_name.to_sym].nil?
441
+ end
442
+
435
443
  def uses?(addon)
436
444
  return false unless active?(addon)
437
445
 
@@ -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
@@ -99,6 +99,7 @@ KConfig.configure do |config|
99
99
  # rag.add_option :add_scaffold , type: :boolean, default: false
100
100
  # rag.add_option :add_factory_bot , type: :boolean, default: false
101
101
  # rag.add_option :add_shoulda , type: :boolean, default: false
102
+ # letter_opener
102
103
 
103
104
  # NEW GEM ADDONS
104
105
  rag.add_option :add_acts_as_list , type: :boolean, default: false
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsAppGenerator
4
- VERSION = '0.2.22'
4
+ VERSION = '0.2.23'
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.22",
3
+ "version": "0.2.23",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "rails_app_generator",
9
- "version": "0.2.22",
9
+ "version": "0.2.23",
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.22",
3
+ "version": "0.2.23",
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": "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,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
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Users::RegistrationsController < Devise::RegistrationsController
4
+ before_action :configure_sign_up_params, only: [:create]
5
+ before_action :configure_account_update_params, only: [:update]
6
+
7
+ # GET /resource/sign_up
8
+ # def new
9
+ # super
10
+ # end
11
+
12
+ # POST /resource
13
+ # def create
14
+ # super
15
+ # end
16
+
17
+ # GET /resource/edit
18
+ # def edit
19
+ # super
20
+ # end
21
+
22
+ # PUT /resource
23
+ # def update
24
+ # super
25
+ # end
26
+
27
+ # DELETE /resource
28
+ # def destroy
29
+ # super
30
+ # end
31
+
32
+ # GET /resource/cancel
33
+ # Forces the session data which is usually expired after sign
34
+ # in to be expired now. This is useful if the user wants to
35
+ # cancel oauth signing in/up in the middle of the process,
36
+ # removing all OAuth session data.
37
+ # def cancel
38
+ # super
39
+ # end
40
+
41
+ # protected
42
+
43
+ # If you have extra params to permit, append them to the sanitizer.
44
+ def configure_sign_up_params
45
+ devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
46
+ end
47
+
48
+ # If you have extra params to permit, append them to the sanitizer.
49
+ def configure_account_update_params
50
+ devise_parameter_sanitizer.permit(:account_update, keys: [:name])
51
+ end
52
+
53
+ # The path used after sign up.
54
+ # def after_sign_up_path_for(resource)
55
+ # super(resource)
56
+ # end
57
+
58
+ # The path used after sign up for inactive accounts.
59
+ # def after_inactive_sign_up_path_for(resource)
60
+ # super(resource)
61
+ # end
62
+ end