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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/after_templates/addons/devise/_.rb +70 -0
- data/after_templates/addons/devise/app/controllers/home_controller.rb +4 -0
- data/after_templates/addons/devise/app/controllers/posts_controller.rb +81 -0
- data/after_templates/addons/devise/app/models/post.rb +11 -0
- data/after_templates/addons/devise/app/models/user.rb +17 -0
- data/after_templates/addons/devise/app/views/home/index.html.erb +40 -0
- data/after_templates/addons/devise/app/views/layouts/_footer.html.erb +1 -0
- data/after_templates/addons/devise/app/views/layouts/_navbar.html.erb +10 -0
- data/after_templates/addons/devise/app/views/layouts/application.html.erb +38 -0
- data/after_templates/addons/devise/app/views/posts/_form.html.erb +27 -0
- data/after_templates/addons/devise/app/views/posts/_post.html.erb +14 -0
- data/after_templates/addons/devise/app/views/posts/index.html.erb +12 -0
- data/after_templates/addons/devise/app/views/posts/show.html.erb +8 -0
- data/after_templates/addons/devise/db/seeds.rb +11 -0
- data/after_templates/rag/devise/_.rb +14 -17
- data/after_templates/rag/devise/app/controllers/home_controller.rb +4 -0
- data/after_templates/rag/devise/{post → app/controllers}/posts_controller.rb +0 -0
- data/after_templates/rag/devise/{post → app/models}/post.rb +0 -0
- data/after_templates/rag/devise/app/views/home/index.html.erb +3 -0
- data/after_templates/rag/devise/app/views/layouts/_footer.html.erb +3 -0
- data/after_templates/rag/devise/app/views/layouts/_navbar.html.erb +8 -0
- data/after_templates/rag/devise/app/views/layouts/application.html.erb +24 -0
- data/after_templates/rag/devise/{post → app/views/post}/_post.html.erb +0 -0
- data/after_templates/rag/test/_.rb +64 -0
- data/after_templates/rag/test/app/controllers/home_controller.rb +4 -0
- data/after_templates/rag/test/app/views/home/index.html.erb +3 -0
- data/after_templates/rag/test/app/views/layouts/_footer.html.erb +1 -0
- data/after_templates/rag/test/app/views/layouts/_navbar.html.erb +5 -0
- data/after_templates/rag/test/app/views/layouts/application.html.erb +29 -0
- data/after_templates/rag/test/db/seeds.rb +7 -0
- data/after_templates/rag/testy/_.rb +64 -0
- data/after_templates/rag/testy/app/controllers/home_controller.rb +4 -0
- data/after_templates/rag/testy/app/views/home/index.html.erb +3 -0
- data/after_templates/rag/testy/app/views/layouts/_footer.html.erb +1 -0
- data/after_templates/rag/testy/app/views/layouts/_navbar.html.erb +5 -0
- data/after_templates/rag/testy/app/views/layouts/application.html.erb +29 -0
- data/after_templates/rag/testy/db/seeds.rb +7 -0
- data/lib/rails_app_generator/addon.rb +20 -2
- data/lib/rails_app_generator/addons/devise.rb +111 -0
- data/lib/rails_app_generator/addons/devise_old.rb +1 -40
- data/lib/rails_app_generator/app_generator.rb +9 -1
- data/lib/rails_app_generator/gem_query.rb +34 -0
- data/lib/rails_app_generator/rag_initializer.rb +1 -0
- data/lib/rails_app_generator/version.rb +1 -1
- data/lib/rails_app_generator.rb +1 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- data/profiles/addons/devise.json +16 -0
- data/profiles/rag/testy.json +12 -0
- data/tasks/addon.thor +7 -3
- data/tasks/profile.thor +3 -3
- data/templates/Gemfile.erb +1 -0
- data/{after_templates/rag/devise/turbo_controller.rb → templates/addons/devise/app/controllers/turbo_devise_controller.rb} +4 -10
- data/templates/addons/devise/app/controllers/users/registrations_controller.rb +62 -0
- data/templates/addons/devise/app/views/devise/registrations/edit.html.erb +40 -54
- data/templates/addons/devise/app/views/devise/registrations/new.html.erb +32 -43
- data/templates/addons/devise/app/views/layouts/_alerts.html.erb +2 -0
- data/{after_templates/rag → templates/addons}/devise/config/initializers/devise_turbo.rb +1 -1
- data/templates/thor_task/profile/after_template.rb +1 -1
- data/templates/thor_task/profile/app/views/layouts/_footer.html.erb.tt +1 -3
- data/templates/thor_task/profile/app/views/layouts/_navbar.html.erb +5 -8
- data/templates/thor_task/profile/app/views/layouts/application.html.erb.tt +8 -2
- data/templates/thor_task/profile/db/seeds.rb +2 -11
- metadata +46 -17
- data/after_templates/rag/devise/application.html.erb +0 -20
- data/tasks/gem_info.rb +0 -47
- data/templates/addons/devise/app/views/devise/confirmations/new.html.erb +0 -24
- data/templates/addons/devise/app/views/devise/passwords/edit.html.erb +0 -34
- data/templates/addons/devise/app/views/devise/passwords/new.html.erb +0 -23
- data/templates/addons/devise/app/views/devise/sessions/new.html.erb +0 -33
- data/templates/addons/devise/app/views/devise/shared/_error_messages.html.erb +0 -15
- data/templates/addons/devise/app/views/devise/shared/_form_wrap.html.erb +0 -5
- data/templates/addons/devise/app/views/devise/shared/_links.html.erb +0 -25
- 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 @@
|
|
1
|
+
<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
|
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) #
|
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
|
data/lib/rails_app_generator.rb
CHANGED
@@ -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.
|
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.
|
9
|
+
"version": "0.2.23",
|
10
10
|
"dependencies": {
|
11
11
|
"daisyui": "^2.20.0"
|
12
12
|
},
|
data/package.json
CHANGED
@@ -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
|
-
|
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.
|
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
|
-
::
|
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.
|
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
|
-
|
107
|
+
RailsAppGenerator::GemQuery.get(gem_name)
|
108
108
|
end
|
109
109
|
|
110
110
|
def human(value)
|
data/templates/Gemfile.erb
CHANGED
@@ -1,16 +1,10 @@
|
|
1
|
-
class
|
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 =>
|
5
|
+
rescue ActionView::MissingTemplate => e
|
12
6
|
if get?
|
13
|
-
raise
|
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
|