rails_app_generator 0.2.24 → 0.2.27
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/after_templates/addons/devise/_.rb +0 -27
- data/after_templates/addons/devise/db/seeds.rb +3 -3
- data/after_templates/addons/devise_masquerade/_.rb +36 -0
- data/after_templates/addons/devise_masquerade/app/controllers/application_controller.rb +3 -0
- data/after_templates/addons/devise_masquerade/app/controllers/home_controller.rb +4 -0
- data/after_templates/addons/devise_masquerade/app/controllers/users/masquerades_controller.rb +10 -0
- data/after_templates/addons/devise_masquerade/app/models/user.rb +17 -0
- data/after_templates/addons/devise_masquerade/app/views/home/index.html.erb +62 -0
- data/after_templates/addons/devise_masquerade/app/views/layouts/_footer.html.erb +1 -0
- data/after_templates/addons/devise_masquerade/app/views/layouts/_navbar.html.erb +6 -0
- data/after_templates/addons/devise_masquerade/app/views/layouts/application.html.erb +57 -0
- data/after_templates/addons/devise_masquerade/db/seeds.rb +3 -0
- data/after_templates/addons/pretender/_.rb +36 -0
- data/after_templates/addons/pretender/app/controllers/application_controller.rb +3 -0
- data/after_templates/addons/pretender/app/controllers/home_controller.rb +4 -0
- data/after_templates/addons/pretender/app/models/user.rb +15 -0
- data/after_templates/addons/pretender/app/views/home/index.html.erb +67 -0
- data/after_templates/addons/pretender/app/views/layouts/_footer.html.erb +1 -0
- data/after_templates/addons/pretender/app/views/layouts/_navbar.html.erb +8 -0
- data/after_templates/addons/pretender/app/views/layouts/application.html.erb +58 -0
- data/after_templates/addons/pretender/db/seeds.rb +3 -0
- data/docs/last_run/app_generator_class.json +22 -6
- data/docs/last_run/app_generator_data.json +11 -9
- data/docs/last_run/rails_options_class.json +20 -4
- data/docs/last_run/rails_options_data.json +11 -9
- data/lib/rails_app_generator/addon.rb +19 -3
- data/lib/rails_app_generator/addons/devise.rb +18 -3
- data/lib/rails_app_generator/addons/devise_masquerade.rb +17 -0
- data/lib/rails_app_generator/addons/pretender.rb +18 -0
- data/lib/rails_app_generator/app_generator.rb +3 -1
- data/lib/rails_app_generator/rag_initializer.rb +3 -1
- data/lib/rails_app_generator/version.rb +1 -1
- data/package-lock.json +2 -2
- data/package.json +1 -1
- data/profiles/addons/devise_masquerade.json +17 -0
- data/profiles/addons/pretender.json +16 -0
- data/templates/addons/pretender/app/controllers/pretender_controller.rb +14 -0
- data/templates/thor_task/profile/after_template.rb +22 -16
- data/templates/thor_task/profile/profile.json.tt +1 -1
- metadata +26 -3
- data/lib/rails_app_generator/addons/devise_old.rb +0 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 565ddb65a7bec52098a301ef1822887e25881dd6716cdbc7b3575a23540be220
|
|
4
|
+
data.tar.gz: 23a08258713108287331947e02a324d23a33c41e6db718a66263d2dc8e3ee330
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8b638c9a61ef4272fa78434e3cd93af9bf0e84eb7efef3a1a7293d6014ddada3cd75693c94180f63c78854266f15705c44219acf6f233a0cfc444849c8735753
|
|
7
|
+
data.tar.gz: '02794a7a859e5869a4bb4f6fc912fccc8ad3ae96931c0ee8e66b3ba7a14950a4d9d3ec2224a71d307a07cc6aa8a6687dad7945ee55dcefc56dde3899a3559ceb'
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
## [0.2.26](https://github.com/klueless-io/rails_app_generator/compare/v0.2.25...v0.2.26) (2022-08-17)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* add pretender addon ([e0bda54](https://github.com/klueless-io/rails_app_generator/commit/e0bda54cc74da230a579ff1219b9b2f2172936d1))
|
|
7
|
+
|
|
8
|
+
## [0.2.25](https://github.com/klueless-io/rails_app_generator/compare/v0.2.24...v0.2.25) (2022-08-17)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* add devise_masquerade profile ([d34668c](https://github.com/klueless-io/rails_app_generator/commit/d34668cf2af1103ebee888ef3c78498e8323b1a5))
|
|
14
|
+
|
|
15
|
+
## [0.2.24](https://github.com/klueless-io/rails_app_generator/compare/v0.2.23...v0.2.24) (2022-08-16)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* add minimal_css profile ([5770975](https://github.com/klueless-io/rails_app_generator/commit/577097594ee3c82218628525b9bc6dd8299fb13e))
|
|
21
|
+
|
|
1
22
|
## [0.2.23](https://github.com/klueless-io/rails_app_generator/compare/v0.2.22...v0.2.23) (2022-08-16)
|
|
2
23
|
|
|
3
24
|
|
|
@@ -41,30 +41,3 @@ def setup_customizations
|
|
|
41
41
|
directory "app/views"
|
|
42
42
|
template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
|
|
43
43
|
end
|
|
44
|
-
|
|
45
|
-
# Other template command examples
|
|
46
|
-
# prepare_environment
|
|
47
|
-
# bundle_install
|
|
48
|
-
# css_install('tailwind')
|
|
49
|
-
# rails_command('db:migrate')
|
|
50
|
-
# rails_command('db:migrate')
|
|
51
|
-
# bundle_add('hotwire-rails')
|
|
52
|
-
# rails_command('hotwire:install')
|
|
53
|
-
# run('bin/importmap pin sortablejs')
|
|
54
|
-
# run('npm install daisyui')
|
|
55
|
-
# rubocop
|
|
56
|
-
#
|
|
57
|
-
# directory 'app/assets/images'
|
|
58
|
-
# create_file 'app/assets/stylesheets/custom-bootstrap-import.scss' , read_template('custom-bootstrap-import.scss')
|
|
59
|
-
# append_to_file 'app/assets/config/manifest.js' , read_template('manifest.js')
|
|
60
|
-
# insert_into_file 'app/views/layouts/application.html.erb', read_template('application.html.erb'),
|
|
61
|
-
# before: %( <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>)
|
|
62
|
-
# gsub_file 'app/views/layouts/application.html.erb', %(container mx-auto mt-28 px-5 flex), 'container mx-auto px-5'
|
|
63
|
-
# template 'home.css', 'app/assets/stylesheets/home.css'
|
|
64
|
-
#
|
|
65
|
-
# add_controller('page', 'benefits', 'faq', 'terms', 'privacy', '--skip-routes')
|
|
66
|
-
# route(<<-'RUBY')
|
|
67
|
-
# PageController.action_methods.each do |action|
|
|
68
|
-
# get "/#{action}", to: "page##{action}", as: "page_#{action}"
|
|
69
|
-
# end
|
|
70
|
-
# RUBY
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
User.create(email: 'david@site.com', name: 'david', password: 'password', password_confirmation: 'password', role: :admin)
|
|
2
|
+
User.create(email: 'james@site.com', name: 'james', password: 'password', password_confirmation: 'password')
|
|
3
|
+
User.create(email: 'sally@site.com', name: 'sally', password: 'password', password_confirmation: 'password', role: :moderator)
|
|
4
4
|
|
|
5
5
|
10.times do
|
|
6
6
|
Post.create(
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Description goes here
|
|
4
|
+
#
|
|
5
|
+
# exe/rag addons/devise_masquerade
|
|
6
|
+
|
|
7
|
+
self.local_template_path = File.dirname(__FILE__)
|
|
8
|
+
|
|
9
|
+
gac 'base rails 7 image created'
|
|
10
|
+
|
|
11
|
+
prepare_environment
|
|
12
|
+
|
|
13
|
+
after_bundle do
|
|
14
|
+
setup_customizations
|
|
15
|
+
setup_db
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def setup_customizations
|
|
19
|
+
route("root 'home#index'")
|
|
20
|
+
|
|
21
|
+
force_copy
|
|
22
|
+
|
|
23
|
+
add_controller('home', 'index')
|
|
24
|
+
|
|
25
|
+
directory "app/controllers"
|
|
26
|
+
directory "app/models"
|
|
27
|
+
directory "app/views"
|
|
28
|
+
template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def setup_db
|
|
32
|
+
template 'db/seeds.rb' , 'db/seeds.rb'
|
|
33
|
+
|
|
34
|
+
db_migrate
|
|
35
|
+
db_seed
|
|
36
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class User < ApplicationRecord
|
|
2
|
+
after_initialize :set_default_role, if: :new_record?
|
|
3
|
+
|
|
4
|
+
# Include default devise modules. Others available are:
|
|
5
|
+
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
|
|
6
|
+
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :masqueradable
|
|
7
|
+
|
|
8
|
+
has_many :posts
|
|
9
|
+
|
|
10
|
+
enum role: { user: 0, moderator: 1, admin: 9 }
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def set_default_role
|
|
15
|
+
self.role ||= :user
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<h1>Devise Masquerade</h1>
|
|
2
|
+
|
|
3
|
+
<h4>Devise extension that enables login as another user functionality</h4>
|
|
4
|
+
|
|
5
|
+
<p><b class='alert'>Warning!</b> If <code>masquerade?</code> is never returning <code>true</code> then ensure you have turned on caching in development using <code>rails dev:cache</code> </p>
|
|
6
|
+
|
|
7
|
+
<pre><code>true_user => <%= current_user ? true_user.name : 'NOT SIGNED IN' %></code></pre>
|
|
8
|
+
|
|
9
|
+
<p>Sign in with an <b>Admin</b> user and then impersonate other users</p>
|
|
10
|
+
|
|
11
|
+
<h3>Sample users and passwords</h3>
|
|
12
|
+
|
|
13
|
+
<% if current_user %>
|
|
14
|
+
<% if current_user.admin? %>
|
|
15
|
+
<h1 class='admin'><%= current_user.name.capitalize %> - Admininstrator</h1>
|
|
16
|
+
<% elsif current_user.user? %>
|
|
17
|
+
<h1 class='user'><%= current_user.name.capitalize %> - User</h1>
|
|
18
|
+
<% end %>
|
|
19
|
+
<% else %>
|
|
20
|
+
<h1 class='not-signed-in'>Not currently signed in</h1>
|
|
21
|
+
<% end %>
|
|
22
|
+
|
|
23
|
+
<table style='width: 600px;'>
|
|
24
|
+
<tr>
|
|
25
|
+
<th>Name</th>
|
|
26
|
+
<th>Email</th>
|
|
27
|
+
<th>Role</th>
|
|
28
|
+
<% if current_user %>
|
|
29
|
+
<th>Masquerade As</th>
|
|
30
|
+
<% else %>
|
|
31
|
+
<th>Password</th>
|
|
32
|
+
<% end %>
|
|
33
|
+
</tr>
|
|
34
|
+
<% User.all.each do |user| %>
|
|
35
|
+
<tr>
|
|
36
|
+
<td><%= user.name %></td>
|
|
37
|
+
<td><%= user.email %></td>
|
|
38
|
+
<td><%= user.role %></td>
|
|
39
|
+
<td>
|
|
40
|
+
<% if current_user %>
|
|
41
|
+
<% if user_masquerade? %>
|
|
42
|
+
<% if user.admin? %>
|
|
43
|
+
<%= link_to "Back to #{user.name.capitalize}", back_masquerade_path(User.new) %>
|
|
44
|
+
<% end %>
|
|
45
|
+
<% else %>
|
|
46
|
+
<% if current_user.user? %>
|
|
47
|
+
Cannot masquerade
|
|
48
|
+
<% elsif user.user? %>
|
|
49
|
+
<%= link_to user.name.capitalize, masquerade_path(user), data: { turbo_method: :post } %>
|
|
50
|
+
<% else %>
|
|
51
|
+
|
|
52
|
+
<% end %>
|
|
53
|
+
<% end %>
|
|
54
|
+
<% else %>
|
|
55
|
+
password
|
|
56
|
+
<% end %>
|
|
57
|
+
|
|
58
|
+
</td>
|
|
59
|
+
</td>
|
|
60
|
+
</tr>
|
|
61
|
+
<% end %>
|
|
62
|
+
</table>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<hr />
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
<%%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>
|
|
15
|
+
<style>
|
|
16
|
+
.notice {
|
|
17
|
+
color: green;
|
|
18
|
+
}
|
|
19
|
+
.alert {
|
|
20
|
+
color: red;
|
|
21
|
+
}
|
|
22
|
+
table {
|
|
23
|
+
border-collapse: collapse;
|
|
24
|
+
}
|
|
25
|
+
th, td {
|
|
26
|
+
border: 1px solid #ccc;
|
|
27
|
+
padding: 5px;
|
|
28
|
+
}
|
|
29
|
+
.admin {
|
|
30
|
+
background-color: pink;
|
|
31
|
+
}
|
|
32
|
+
.user {
|
|
33
|
+
background-color: lightgreen;
|
|
34
|
+
}
|
|
35
|
+
.not-signed-in {
|
|
36
|
+
background-color: lightgrey;
|
|
37
|
+
}
|
|
38
|
+
.admin, .user, .not-signed-in {
|
|
39
|
+
text-align: center;
|
|
40
|
+
}
|
|
41
|
+
</style>
|
|
42
|
+
</head>
|
|
43
|
+
|
|
44
|
+
<body>
|
|
45
|
+
<header>
|
|
46
|
+
<%%= render 'layouts/navbar' %>
|
|
47
|
+
<hr />
|
|
48
|
+
<%%= render 'layouts/alerts' %>
|
|
49
|
+
</header>
|
|
50
|
+
<main>
|
|
51
|
+
<%%= yield %>
|
|
52
|
+
</main>
|
|
53
|
+
<footer>
|
|
54
|
+
<%%= render 'layouts/footer' %>
|
|
55
|
+
</footer>
|
|
56
|
+
</body>
|
|
57
|
+
</html>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
User.create(email: 'david@site.com', name: 'david', password: 'password', password_confirmation: 'password', role: :admin)
|
|
2
|
+
User.create(email: 'james@site.com', name: 'james', password: 'password', password_confirmation: 'password')
|
|
3
|
+
User.create(email: 'sally@site.com', name: 'sally', password: 'password', password_confirmation: 'password')
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Log in as another user in Rails
|
|
4
|
+
#
|
|
5
|
+
# exe/rag addons/pretender
|
|
6
|
+
|
|
7
|
+
self.local_template_path = File.dirname(__FILE__)
|
|
8
|
+
|
|
9
|
+
gac 'base rails 7 image created'
|
|
10
|
+
|
|
11
|
+
prepare_environment
|
|
12
|
+
|
|
13
|
+
after_bundle do
|
|
14
|
+
setup_customizations
|
|
15
|
+
setup_db
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def setup_customizations
|
|
19
|
+
route("root 'home#index'")
|
|
20
|
+
|
|
21
|
+
force_copy
|
|
22
|
+
|
|
23
|
+
add_controller('home', 'index')
|
|
24
|
+
|
|
25
|
+
directory "app/controllers"
|
|
26
|
+
directory "app/models"
|
|
27
|
+
directory "app/views"
|
|
28
|
+
template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def setup_db
|
|
32
|
+
template 'db/seeds.rb' , 'db/seeds.rb'
|
|
33
|
+
|
|
34
|
+
db_migrate
|
|
35
|
+
db_seed
|
|
36
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class User < ApplicationRecord
|
|
2
|
+
after_initialize :set_default_role, if: :new_record?
|
|
3
|
+
|
|
4
|
+
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable
|
|
5
|
+
|
|
6
|
+
has_many :posts
|
|
7
|
+
|
|
8
|
+
enum role: { user: 0, moderator: 1, admin: 9 }
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def set_default_role
|
|
13
|
+
self.role ||= :user
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<h1>Pretender</h1>
|
|
2
|
+
|
|
3
|
+
<h4>Log in as another user in Rails</h4>
|
|
4
|
+
|
|
5
|
+
<pre><code>true_user => <%= current_user ? true_user.name : 'NOT SIGNED IN' %></code></pre>
|
|
6
|
+
|
|
7
|
+
<p>Sign in with an <b>Admin</b> user and then impersonate other users</p>
|
|
8
|
+
|
|
9
|
+
<h3>Sample users and passwords</h3>
|
|
10
|
+
|
|
11
|
+
<% if current_user %>
|
|
12
|
+
<% if current_user.admin? %>
|
|
13
|
+
<h1 class='admin'><%= current_user.name.capitalize %> - Admininstrator</h1>
|
|
14
|
+
<% elsif current_user.user? %>
|
|
15
|
+
<h1 class='user'><%= current_user.name.capitalize %> - User</h1>
|
|
16
|
+
<% end %>
|
|
17
|
+
<% else %>
|
|
18
|
+
<h1 class='not-signed-in'>Not currently signed in</h1>
|
|
19
|
+
<% end %>
|
|
20
|
+
|
|
21
|
+
<table style='width: 600px;'>
|
|
22
|
+
<tr>
|
|
23
|
+
<th>Name</th>
|
|
24
|
+
<th>Email</th>
|
|
25
|
+
<th>Role</th>
|
|
26
|
+
<% if current_user %>
|
|
27
|
+
<th>Impersonate</th>
|
|
28
|
+
<% else %>
|
|
29
|
+
<th>Password</th>
|
|
30
|
+
<% end %>
|
|
31
|
+
</tr>
|
|
32
|
+
|
|
33
|
+
<% if current_user != true_user %>
|
|
34
|
+
You (<%= true_user.name %>) are signed in as <%= current_user.name %>
|
|
35
|
+
<% end %>
|
|
36
|
+
|
|
37
|
+
<% User.all.each do |user| %>
|
|
38
|
+
<tr>
|
|
39
|
+
<td><%= user.name %></td>
|
|
40
|
+
<td><%= user.email %></td>
|
|
41
|
+
<td><%= user.role %></td>
|
|
42
|
+
<td>
|
|
43
|
+
<% if current_user %>
|
|
44
|
+
<% if current_user.admin? %>
|
|
45
|
+
<% if user.admin? && current_user != true_user %>
|
|
46
|
+
<%= link_to "Back to #{user.name.capitalize}", stop_impersonating_user_path, data: { turbo_method: :post } %>
|
|
47
|
+
<% elsif user.user? %>
|
|
48
|
+
<%= link_to user.name.capitalize, impersonate_user_path(user), data: { turbo_method: :post } %>
|
|
49
|
+
<% end %>
|
|
50
|
+
<% else %>
|
|
51
|
+
<% if user.admin? && current_user != true_user %>
|
|
52
|
+
<%= link_to "Back to #{user.name.capitalize}", stop_impersonating_user_path, data: { turbo_method: :post } %>
|
|
53
|
+
<% elsif current_user == true_user %>
|
|
54
|
+
N/A
|
|
55
|
+
<% else %>
|
|
56
|
+
|
|
57
|
+
<% end %>
|
|
58
|
+
<% end %>
|
|
59
|
+
<% else %>
|
|
60
|
+
password
|
|
61
|
+
<% end %>
|
|
62
|
+
|
|
63
|
+
</td>
|
|
64
|
+
</td>
|
|
65
|
+
</tr>
|
|
66
|
+
<% end %>
|
|
67
|
+
</table>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<hr />
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<%= link_to 'Home', root_path %>
|
|
2
|
+
<% if current_user %>
|
|
3
|
+
| <%= link_to 'Sign Out', destroy_user_session_path, data: { turbo_method: :delete } %>
|
|
4
|
+
| Current User: <b><%= current_user.name.capitalize %></b>
|
|
5
|
+
| True User: <b><%= true_user.name.capitalize %></b>
|
|
6
|
+
<% else %>
|
|
7
|
+
| <%= link_to 'Sign In', new_user_session_path %>
|
|
8
|
+
<% end%>
|
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
<%%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>
|
|
15
|
+
<style>
|
|
16
|
+
.notice {
|
|
17
|
+
color: green;
|
|
18
|
+
}
|
|
19
|
+
.alert {
|
|
20
|
+
color: red;
|
|
21
|
+
}
|
|
22
|
+
table {
|
|
23
|
+
border-collapse: collapse;
|
|
24
|
+
}
|
|
25
|
+
th, td {
|
|
26
|
+
border: 1px solid #ccc;
|
|
27
|
+
padding: 5px;
|
|
28
|
+
}
|
|
29
|
+
.admin {
|
|
30
|
+
background-color: pink;
|
|
31
|
+
}
|
|
32
|
+
.user {
|
|
33
|
+
background-color: lightgreen;
|
|
34
|
+
}
|
|
35
|
+
.not-signed-in {
|
|
36
|
+
background-color: lightgrey;
|
|
37
|
+
}
|
|
38
|
+
.admin, .user, .not-signed-in {
|
|
39
|
+
text-align: center;
|
|
40
|
+
}
|
|
41
|
+
</style>
|
|
42
|
+
</head>
|
|
43
|
+
|
|
44
|
+
<body>
|
|
45
|
+
<header>
|
|
46
|
+
<%%= render 'layouts/navbar' %>
|
|
47
|
+
<hr />
|
|
48
|
+
<%%= render 'layouts/alerts' %>
|
|
49
|
+
</header>
|
|
50
|
+
<main>
|
|
51
|
+
<%%= yield %>
|
|
52
|
+
</main>
|
|
53
|
+
<footer>
|
|
54
|
+
<%%= render 'layouts/footer' %>
|
|
55
|
+
</footer>
|
|
56
|
+
</body>
|
|
57
|
+
</html>
|
|
58
|
+
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
User.create(email: 'david@site.com', name: 'david', password: 'password', password_confirmation: 'password', role: :admin)
|
|
2
|
+
User.create(email: 'james@site.com', name: 'james', password: 'password', password_confirmation: 'password')
|
|
3
|
+
User.create(email: 'sally@site.com', name: 'sally', password: 'password', password_confirmation: 'password')
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"add_browser",
|
|
49
49
|
"add_chartkick",
|
|
50
50
|
"add_devise",
|
|
51
|
+
"add_devise_masquerade",
|
|
51
52
|
"add_dotenv",
|
|
52
53
|
"add_faker",
|
|
53
54
|
"add_groupdate",
|
|
@@ -59,8 +60,9 @@
|
|
|
59
60
|
"minimal_css_library",
|
|
60
61
|
"add_mini_magick",
|
|
61
62
|
"add_motor_admin",
|
|
62
|
-
"add_public_suffix",
|
|
63
63
|
"add_phony_rails",
|
|
64
|
+
"add_pretender",
|
|
65
|
+
"add_public_suffix",
|
|
64
66
|
"add_rails_html_sanitizer",
|
|
65
67
|
"add_redcarpet",
|
|
66
68
|
"add_rubocop",
|
|
@@ -113,7 +115,7 @@
|
|
|
113
115
|
"name": "ruby",
|
|
114
116
|
"description": "Path to the Ruby binary of your choice",
|
|
115
117
|
"type": "string",
|
|
116
|
-
"default": "/Users/davidcruwys/.asdf/installs/ruby/
|
|
118
|
+
"default": "/Users/davidcruwys/.asdf/installs/ruby/2.7.6/bin/ruby",
|
|
117
119
|
"required": false
|
|
118
120
|
},
|
|
119
121
|
{
|
|
@@ -403,6 +405,13 @@
|
|
|
403
405
|
"default": false,
|
|
404
406
|
"required": false
|
|
405
407
|
},
|
|
408
|
+
{
|
|
409
|
+
"name": "add_devise_masquerade",
|
|
410
|
+
"description": "Indicates when to generate add devise masquerade",
|
|
411
|
+
"type": "boolean",
|
|
412
|
+
"default": false,
|
|
413
|
+
"required": false
|
|
414
|
+
},
|
|
406
415
|
{
|
|
407
416
|
"name": "add_dotenv",
|
|
408
417
|
"description": "Indicates when to generate add dotenv",
|
|
@@ -481,15 +490,22 @@
|
|
|
481
490
|
"required": false
|
|
482
491
|
},
|
|
483
492
|
{
|
|
484
|
-
"name": "
|
|
485
|
-
"description": "Indicates when to generate add
|
|
493
|
+
"name": "add_phony_rails",
|
|
494
|
+
"description": "Indicates when to generate add phony rails",
|
|
486
495
|
"type": "boolean",
|
|
487
496
|
"default": false,
|
|
488
497
|
"required": false
|
|
489
498
|
},
|
|
490
499
|
{
|
|
491
|
-
"name": "
|
|
492
|
-
"description": "Indicates when to generate add
|
|
500
|
+
"name": "add_pretender",
|
|
501
|
+
"description": "Indicates when to generate add pretender",
|
|
502
|
+
"type": "boolean",
|
|
503
|
+
"default": false,
|
|
504
|
+
"required": false
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"name": "add_public_suffix",
|
|
508
|
+
"description": "Indicates when to generate add public suffix",
|
|
493
509
|
"type": "boolean",
|
|
494
510
|
"default": false,
|
|
495
511
|
"required": false
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"options": {
|
|
3
3
|
"skip_namespace": false,
|
|
4
4
|
"skip_collision_check": false,
|
|
5
|
-
"ruby": "/Users/davidcruwys/.asdf/installs/ruby/
|
|
5
|
+
"ruby": "/Users/davidcruwys/.asdf/installs/ruby/2.7.6/bin/ruby",
|
|
6
6
|
"database": "sqlite3",
|
|
7
7
|
"skip_git": true,
|
|
8
8
|
"skip_keeps": false,
|
|
@@ -26,35 +26,37 @@
|
|
|
26
26
|
"main": false,
|
|
27
27
|
"no_rc": false,
|
|
28
28
|
"api": false,
|
|
29
|
-
"javascript": "
|
|
29
|
+
"javascript": "esbuild",
|
|
30
30
|
"skip_bundle": false,
|
|
31
|
-
"note": "
|
|
31
|
+
"note": "",
|
|
32
32
|
"test": "rspec",
|
|
33
33
|
"add_acts_as_list": false,
|
|
34
34
|
"add_administrate": false,
|
|
35
|
-
"add_annotate":
|
|
35
|
+
"add_annotate": true,
|
|
36
36
|
"add_avo": false,
|
|
37
37
|
"add_bcrypt": false,
|
|
38
38
|
"add_browser": false,
|
|
39
39
|
"add_chartkick": false,
|
|
40
|
-
"add_devise":
|
|
40
|
+
"add_devise": true,
|
|
41
|
+
"add_devise_masquerade": false,
|
|
41
42
|
"add_dotenv": false,
|
|
42
|
-
"add_faker":
|
|
43
|
+
"add_faker": false,
|
|
43
44
|
"add_groupdate": false,
|
|
44
45
|
"add_hexapdf": false,
|
|
45
46
|
"add_httparty": false,
|
|
46
47
|
"add_honeybadger": false,
|
|
47
48
|
"add_lograge": false,
|
|
48
49
|
"add_minimal_css": true,
|
|
49
|
-
"minimal_css_library": "water",
|
|
50
|
+
"minimal_css_library": "water.css",
|
|
50
51
|
"add_mini_magick": false,
|
|
51
52
|
"add_motor_admin": false,
|
|
52
|
-
"add_public_suffix": false,
|
|
53
53
|
"add_phony_rails": false,
|
|
54
|
+
"add_pretender": true,
|
|
55
|
+
"add_public_suffix": false,
|
|
54
56
|
"add_rails_html_sanitizer": false,
|
|
55
57
|
"add_redcarpet": false,
|
|
56
58
|
"add_rubocop": false,
|
|
57
59
|
"add_twilio_ruby": false,
|
|
58
|
-
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/
|
|
60
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/pretender/_.rb"
|
|
59
61
|
}
|
|
60
62
|
}
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"add_browser",
|
|
49
49
|
"add_chartkick",
|
|
50
50
|
"add_devise",
|
|
51
|
+
"add_devise_masquerade",
|
|
51
52
|
"add_dotenv",
|
|
52
53
|
"add_faker",
|
|
53
54
|
"add_groupdate",
|
|
@@ -59,8 +60,9 @@
|
|
|
59
60
|
"minimal_css_library",
|
|
60
61
|
"add_mini_magick",
|
|
61
62
|
"add_motor_admin",
|
|
62
|
-
"add_public_suffix",
|
|
63
63
|
"add_phony_rails",
|
|
64
|
+
"add_pretender",
|
|
65
|
+
"add_public_suffix",
|
|
64
66
|
"add_rails_html_sanitizer",
|
|
65
67
|
"add_redcarpet",
|
|
66
68
|
"add_rubocop",
|
|
@@ -113,7 +115,7 @@
|
|
|
113
115
|
"name": "ruby",
|
|
114
116
|
"description": "Path to the Ruby binary of your choice",
|
|
115
117
|
"type": "string",
|
|
116
|
-
"default": "/Users/davidcruwys/.asdf/installs/ruby/
|
|
118
|
+
"default": "/Users/davidcruwys/.asdf/installs/ruby/2.7.6/bin/ruby",
|
|
117
119
|
"required": false
|
|
118
120
|
},
|
|
119
121
|
{
|
|
@@ -403,6 +405,13 @@
|
|
|
403
405
|
"default": false,
|
|
404
406
|
"required": false
|
|
405
407
|
},
|
|
408
|
+
{
|
|
409
|
+
"name": "add_devise_masquerade",
|
|
410
|
+
"description": "",
|
|
411
|
+
"type": "boolean",
|
|
412
|
+
"default": false,
|
|
413
|
+
"required": false
|
|
414
|
+
},
|
|
406
415
|
{
|
|
407
416
|
"name": "add_dotenv",
|
|
408
417
|
"description": "",
|
|
@@ -481,14 +490,21 @@
|
|
|
481
490
|
"required": false
|
|
482
491
|
},
|
|
483
492
|
{
|
|
484
|
-
"name": "
|
|
493
|
+
"name": "add_phony_rails",
|
|
485
494
|
"description": "",
|
|
486
495
|
"type": "boolean",
|
|
487
496
|
"default": false,
|
|
488
497
|
"required": false
|
|
489
498
|
},
|
|
490
499
|
{
|
|
491
|
-
"name": "
|
|
500
|
+
"name": "add_pretender",
|
|
501
|
+
"description": "",
|
|
502
|
+
"type": "boolean",
|
|
503
|
+
"default": false,
|
|
504
|
+
"required": false
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"name": "add_public_suffix",
|
|
492
508
|
"description": "",
|
|
493
509
|
"type": "boolean",
|
|
494
510
|
"default": false,
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"pretend": false,
|
|
7
7
|
"quiet": false,
|
|
8
8
|
"skip": false,
|
|
9
|
-
"ruby": "/Users/davidcruwys/.asdf/installs/ruby/
|
|
10
|
-
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/
|
|
9
|
+
"ruby": "/Users/davidcruwys/.asdf/installs/ruby/2.7.6/bin/ruby",
|
|
10
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/pretender/_.rb",
|
|
11
11
|
"database": "sqlite3",
|
|
12
12
|
"skip_git": true,
|
|
13
13
|
"skip_keeps": false,
|
|
@@ -35,32 +35,34 @@
|
|
|
35
35
|
"version": false,
|
|
36
36
|
"api": false,
|
|
37
37
|
"minimal": false,
|
|
38
|
-
"javascript": "
|
|
38
|
+
"javascript": "esbuild",
|
|
39
39
|
"css": "",
|
|
40
40
|
"skip_bundle": false,
|
|
41
|
-
"note": "
|
|
41
|
+
"note": "",
|
|
42
42
|
"test": "rspec",
|
|
43
43
|
"add_acts_as_list": false,
|
|
44
44
|
"add_administrate": false,
|
|
45
|
-
"add_annotate":
|
|
45
|
+
"add_annotate": true,
|
|
46
46
|
"add_avo": false,
|
|
47
47
|
"add_bcrypt": false,
|
|
48
48
|
"add_browser": false,
|
|
49
49
|
"add_chartkick": false,
|
|
50
|
-
"add_devise":
|
|
50
|
+
"add_devise": true,
|
|
51
|
+
"add_devise_masquerade": false,
|
|
51
52
|
"add_dotenv": false,
|
|
52
|
-
"add_faker":
|
|
53
|
+
"add_faker": false,
|
|
53
54
|
"add_groupdate": false,
|
|
54
55
|
"add_hexapdf": false,
|
|
55
56
|
"add_httparty": false,
|
|
56
57
|
"add_honeybadger": false,
|
|
57
58
|
"add_lograge": false,
|
|
58
59
|
"add_minimal_css": true,
|
|
59
|
-
"minimal_css_library": "water",
|
|
60
|
+
"minimal_css_library": "water.css",
|
|
60
61
|
"add_mini_magick": false,
|
|
61
62
|
"add_motor_admin": false,
|
|
62
|
-
"add_public_suffix": false,
|
|
63
63
|
"add_phony_rails": false,
|
|
64
|
+
"add_pretender": true,
|
|
65
|
+
"add_public_suffix": false,
|
|
64
66
|
"add_rails_html_sanitizer": false,
|
|
65
67
|
"add_redcarpet": false,
|
|
66
68
|
"add_rubocop": false,
|
|
@@ -35,10 +35,20 @@ module RailsAppGenerator
|
|
|
35
35
|
context.options
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
def
|
|
39
|
-
value = options[option_name.to_sym]
|
|
38
|
+
def add_flag?(option_name)
|
|
39
|
+
value = options["add_#{option_name}".to_sym]
|
|
40
|
+
|
|
41
|
+
return false if value.nil?
|
|
42
|
+
|
|
43
|
+
value == true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def active?(option_name)
|
|
47
|
+
add_flag?(option_name) # || !skip_flag?(option_name)
|
|
48
|
+
end
|
|
40
49
|
|
|
41
|
-
|
|
50
|
+
def option?(option_name)
|
|
51
|
+
!options[option_name.to_sym].nil?
|
|
42
52
|
end
|
|
43
53
|
|
|
44
54
|
def uses?(addon_name = nil)
|
|
@@ -84,6 +94,12 @@ module RailsAppGenerator
|
|
|
84
94
|
::FileUtils.mv(source, target)
|
|
85
95
|
end
|
|
86
96
|
# rubocop:enable Metrics/AbcSize
|
|
97
|
+
|
|
98
|
+
def bundle_install
|
|
99
|
+
Util.bundler_environment(environment_style: :unbundled_env) do
|
|
100
|
+
run('bundle install')
|
|
101
|
+
end
|
|
102
|
+
end
|
|
87
103
|
end
|
|
88
104
|
# rubocop:enable Metrics/BlockLength
|
|
89
105
|
|
|
@@ -10,10 +10,11 @@ module RailsAppGenerator
|
|
|
10
10
|
required_gem gem.version('devise', '4.8.1', 'Flexible authentication solution for Rails with Warden')
|
|
11
11
|
|
|
12
12
|
def apply
|
|
13
|
+
bundle_install
|
|
14
|
+
|
|
13
15
|
generate('devise:install', capture: true)
|
|
14
|
-
generate(:devise, 'User', 'name', 'role:integer', capture: true)
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
setup_db
|
|
17
18
|
|
|
18
19
|
add_trackable if option?(:devise_has_trackable)
|
|
19
20
|
add_confirmable if option?(:devise_has_confirmable)
|
|
@@ -39,6 +40,12 @@ module RailsAppGenerator
|
|
|
39
40
|
|
|
40
41
|
private
|
|
41
42
|
|
|
43
|
+
def setup_db
|
|
44
|
+
generate(:devise, 'User', 'name', 'role:integer', capture: true)
|
|
45
|
+
|
|
46
|
+
update_migration
|
|
47
|
+
end
|
|
48
|
+
|
|
42
49
|
def update_migration
|
|
43
50
|
in_root do
|
|
44
51
|
migration = Dir.glob('db/migrate/*').max_by { |f| File.mtime(f) }
|
|
@@ -56,7 +63,15 @@ module RailsAppGenerator
|
|
|
56
63
|
|
|
57
64
|
def update_routes_with_devise_controllers
|
|
58
65
|
in_root do
|
|
59
|
-
|
|
66
|
+
controller_config = [
|
|
67
|
+
'sessions: "users/sessions"',
|
|
68
|
+
'registrations: "users/registrations"'
|
|
69
|
+
]
|
|
70
|
+
controller_config << 'masquerades: "users/masquerades"' if active?(:devise_masquerade)
|
|
71
|
+
|
|
72
|
+
devise_for_replacement = "devise_for :users, controllers: { #{controller_config.join(', ')} }"
|
|
73
|
+
|
|
74
|
+
gsub_file 'config/routes.rb', /devise_for :users/, devise_for_replacement
|
|
60
75
|
end
|
|
61
76
|
end
|
|
62
77
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAppGenerator
|
|
4
|
+
# Custom add-ons for RailsAppGenerator
|
|
5
|
+
module AddOns
|
|
6
|
+
# Add DeviseMasquerade to rails application
|
|
7
|
+
class DeviseMasquerade < RailsAppGenerator::Addon
|
|
8
|
+
depends_on :devise
|
|
9
|
+
|
|
10
|
+
required_gem gem.version('devise_masquerade', '1.3.12', 'Devise extension that enables login as another user functionality')
|
|
11
|
+
|
|
12
|
+
def apply
|
|
13
|
+
# NOTE: update_routes_with_devise_controllers is being handled in devise.rb addon
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAppGenerator
|
|
4
|
+
# Custom add-ons for RailsAppGenerator
|
|
5
|
+
module AddOns
|
|
6
|
+
# Add Pretender to rails application
|
|
7
|
+
class Pretender < RailsAppGenerator::Addon
|
|
8
|
+
required_gem gem.version('pretender', '0.4.0', 'Log in as another user in Rails')
|
|
9
|
+
|
|
10
|
+
def apply
|
|
11
|
+
copy_file('app/controllers/pretender_controller.rb', 'app/controllers/pretender_controller.rb')
|
|
12
|
+
|
|
13
|
+
route("post 'pretender/:user_id/impersonate' , to: 'pretender#impersonate' , :as => :impersonate_user")
|
|
14
|
+
route("post 'pretender/stop_impersonating' , to: 'pretender#stop_impersonating' , :as => :stop_impersonating_user")
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -176,6 +176,7 @@ module RailsAppGenerator
|
|
|
176
176
|
add_if(:chartkick) # tested
|
|
177
177
|
add_if(:continuous_integration) # TODO: needs work
|
|
178
178
|
add_if(:devise) # tested
|
|
179
|
+
add_if(:devise_masquerade) # tested
|
|
179
180
|
# docker_compose
|
|
180
181
|
# docker
|
|
181
182
|
add_if(:dotenv) # tested
|
|
@@ -191,8 +192,9 @@ module RailsAppGenerator
|
|
|
191
192
|
add_if(:minimal_css) # tested (this is NOT a GEM)
|
|
192
193
|
add_if(:mini_magick) # tested
|
|
193
194
|
add_if(:motor_magick) # tested
|
|
194
|
-
add_if(:public_suffix) # tested
|
|
195
195
|
add_if(:phony_rails) # tested
|
|
196
|
+
add_if(:pretender) # tested
|
|
197
|
+
add_if(:public_suffix) # tested
|
|
196
198
|
add_if(:pundit) # TODO: needs testing
|
|
197
199
|
add_if(:rails_html_sanitizer) # tested
|
|
198
200
|
add_if(:rails_app_generator) # TODO: needs testing
|
|
@@ -111,6 +111,7 @@ KConfig.configure do |config|
|
|
|
111
111
|
rag.add_option :add_chartkick , type: :boolean, default: false
|
|
112
112
|
# continuous_integration
|
|
113
113
|
rag.add_option :add_devise , type: :boolean, default: false
|
|
114
|
+
rag.add_option :add_devise_masquerade , type: :boolean, default: false
|
|
114
115
|
# docker_compose
|
|
115
116
|
# docker
|
|
116
117
|
rag.add_option :add_dotenv , type: :boolean, default: false
|
|
@@ -127,8 +128,9 @@ KConfig.configure do |config|
|
|
|
127
128
|
rag.add_option :minimal_css_library , type: :string, default: 'water.css', description: "Minimal CSS library to get you started. [options: water.css (default)]"
|
|
128
129
|
rag.add_option :add_mini_magick , type: :boolean, default: false
|
|
129
130
|
rag.add_option :add_motor_admin , type: :boolean, default: false
|
|
130
|
-
rag.add_option :add_public_suffix , type: :boolean, default: false
|
|
131
131
|
rag.add_option :add_phony_rails , type: :boolean, default: false
|
|
132
|
+
rag.add_option :add_pretender , type: :boolean, default: false
|
|
133
|
+
rag.add_option :add_public_suffix , type: :boolean, default: false
|
|
132
134
|
# pundit
|
|
133
135
|
rag.add_option :add_rails_html_sanitizer , type: :boolean, default: false
|
|
134
136
|
# rails_app_generator
|
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.27",
|
|
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.27",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"daisyui": "^2.20.0"
|
|
12
12
|
},
|
data/package.json
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"args": {
|
|
3
|
+
"app_path": "r7_devise_masquerade",
|
|
4
|
+
"destination_root": "/Users/davidcruwys/dev/kgems/rails_app_generator/a/addons"
|
|
5
|
+
},
|
|
6
|
+
"opts": {
|
|
7
|
+
"notes": "there is a name conflict if the rails application has the same name as the gem and so devise_masquerade has been renamed to devise_masquerade_sample",
|
|
8
|
+
"skip_git": true,
|
|
9
|
+
"skip_test": true,
|
|
10
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/devise_masquerade/_.rb",
|
|
11
|
+
"javascript": "esbuild",
|
|
12
|
+
"add_annotate": true,
|
|
13
|
+
"add_devise": true,
|
|
14
|
+
"add_devise_masquerade": true,
|
|
15
|
+
"add_minimal_css": true
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"args": {
|
|
3
|
+
"app_path": "r7_pretender",
|
|
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/pretender/_.rb",
|
|
10
|
+
"javascript": "esbuild",
|
|
11
|
+
"add_annotate": true,
|
|
12
|
+
"add_devise": true,
|
|
13
|
+
"add_pretender": true,
|
|
14
|
+
"add_minimal_css": true
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class PretenderController < ApplicationController
|
|
2
|
+
before_action :authenticate_user!
|
|
3
|
+
|
|
4
|
+
def impersonate
|
|
5
|
+
user = User.find(params[:user_id])
|
|
6
|
+
impersonate_user(user)
|
|
7
|
+
redirect_to root_path
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def stop_impersonating
|
|
11
|
+
stop_impersonating_user
|
|
12
|
+
redirect_to root_path
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -10,30 +10,36 @@ gac 'base rails 7 image created'
|
|
|
10
10
|
|
|
11
11
|
prepare_environment
|
|
12
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
13
|
after_bundle do
|
|
14
|
+
scaffolds
|
|
15
|
+
setup_customizations
|
|
27
16
|
setup_db
|
|
28
17
|
end
|
|
29
18
|
|
|
30
|
-
def
|
|
19
|
+
def scaffolds
|
|
31
20
|
# add_scaffold('post', 'title', 'body:text', 'user:references')
|
|
32
21
|
# add_scaffold('people', 'first_name', 'last_name', 'age:integer', 'address:text')
|
|
33
22
|
# add_scaffold('product', 'name', 'price:integer')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def setup_customizations
|
|
26
|
+
route("root 'home#index'")
|
|
27
|
+
|
|
28
|
+
force_copy
|
|
29
|
+
|
|
30
|
+
add_controller('home', 'index')
|
|
31
|
+
|
|
32
|
+
directory "app/controllers"
|
|
33
|
+
directory "app/models"
|
|
34
|
+
directory "app/views"
|
|
35
|
+
template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def setup_db
|
|
39
|
+
template 'db/seeds.rb' , 'db/seeds.rb'
|
|
34
40
|
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
db_migrate
|
|
42
|
+
db_seed
|
|
37
43
|
end
|
|
38
44
|
|
|
39
45
|
# Other template command examples
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rails_app_generator
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.27
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Cruwys
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-08-
|
|
11
|
+
date: 2022-08-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bootsnap
|
|
@@ -251,6 +251,16 @@ files:
|
|
|
251
251
|
- after_templates/addons/devise/app/views/posts/index.html.erb
|
|
252
252
|
- after_templates/addons/devise/app/views/posts/show.html.erb
|
|
253
253
|
- after_templates/addons/devise/db/seeds.rb
|
|
254
|
+
- after_templates/addons/devise_masquerade/_.rb
|
|
255
|
+
- after_templates/addons/devise_masquerade/app/controllers/application_controller.rb
|
|
256
|
+
- after_templates/addons/devise_masquerade/app/controllers/home_controller.rb
|
|
257
|
+
- after_templates/addons/devise_masquerade/app/controllers/users/masquerades_controller.rb
|
|
258
|
+
- after_templates/addons/devise_masquerade/app/models/user.rb
|
|
259
|
+
- after_templates/addons/devise_masquerade/app/views/home/index.html.erb
|
|
260
|
+
- after_templates/addons/devise_masquerade/app/views/layouts/_footer.html.erb
|
|
261
|
+
- after_templates/addons/devise_masquerade/app/views/layouts/_navbar.html.erb
|
|
262
|
+
- after_templates/addons/devise_masquerade/app/views/layouts/application.html.erb
|
|
263
|
+
- after_templates/addons/devise_masquerade/db/seeds.rb
|
|
254
264
|
- after_templates/addons/dotenv/_.rb
|
|
255
265
|
- after_templates/addons/dotenv/app/controllers/home_controller.rb
|
|
256
266
|
- after_templates/addons/dotenv/app/views/home/index.html.erb
|
|
@@ -317,6 +327,15 @@ files:
|
|
|
317
327
|
- after_templates/addons/phony_rails/app/controllers/home_controller.rb
|
|
318
328
|
- after_templates/addons/phony_rails/app/views/home/index.html.erb
|
|
319
329
|
- after_templates/addons/phony_rails/app/views/layouts/application.html.erb
|
|
330
|
+
- after_templates/addons/pretender/_.rb
|
|
331
|
+
- after_templates/addons/pretender/app/controllers/application_controller.rb
|
|
332
|
+
- after_templates/addons/pretender/app/controllers/home_controller.rb
|
|
333
|
+
- after_templates/addons/pretender/app/models/user.rb
|
|
334
|
+
- after_templates/addons/pretender/app/views/home/index.html.erb
|
|
335
|
+
- after_templates/addons/pretender/app/views/layouts/_footer.html.erb
|
|
336
|
+
- after_templates/addons/pretender/app/views/layouts/_navbar.html.erb
|
|
337
|
+
- after_templates/addons/pretender/app/views/layouts/application.html.erb
|
|
338
|
+
- after_templates/addons/pretender/db/seeds.rb
|
|
320
339
|
- after_templates/addons/public_suffix/_.rb
|
|
321
340
|
- after_templates/addons/public_suffix/app/controllers/home_controller.rb
|
|
322
341
|
- after_templates/addons/public_suffix/app/views/home/index.html.erb
|
|
@@ -562,7 +581,7 @@ files:
|
|
|
562
581
|
- lib/rails_app_generator/addons/chartkick.rb
|
|
563
582
|
- lib/rails_app_generator/addons/continuous_integration.rb
|
|
564
583
|
- lib/rails_app_generator/addons/devise.rb
|
|
565
|
-
- lib/rails_app_generator/addons/
|
|
584
|
+
- lib/rails_app_generator/addons/devise_masquerade.rb
|
|
566
585
|
- lib/rails_app_generator/addons/docker.rb
|
|
567
586
|
- lib/rails_app_generator/addons/docker_compose.rb
|
|
568
587
|
- lib/rails_app_generator/addons/dotenv.rb
|
|
@@ -582,6 +601,7 @@ files:
|
|
|
582
601
|
- lib/rails_app_generator/addons/minimal_css.rb
|
|
583
602
|
- lib/rails_app_generator/addons/motor_admin.rb
|
|
584
603
|
- lib/rails_app_generator/addons/phony_rails.rb
|
|
604
|
+
- lib/rails_app_generator/addons/pretender.rb
|
|
585
605
|
- lib/rails_app_generator/addons/public_suffix.rb
|
|
586
606
|
- lib/rails_app_generator/addons/pundit.rb
|
|
587
607
|
- lib/rails_app_generator/addons/rails_html_sanitizer.rb
|
|
@@ -639,6 +659,7 @@ files:
|
|
|
639
659
|
- profiles/addons/browser.json
|
|
640
660
|
- profiles/addons/chartkick.json
|
|
641
661
|
- profiles/addons/devise.json
|
|
662
|
+
- profiles/addons/devise_masquerade.json
|
|
642
663
|
- profiles/addons/dotenv.json
|
|
643
664
|
- profiles/addons/faker.json
|
|
644
665
|
- profiles/addons/hexapdf.json
|
|
@@ -649,6 +670,7 @@ files:
|
|
|
649
670
|
- profiles/addons/minimal_css.json
|
|
650
671
|
- profiles/addons/motor_admin.json
|
|
651
672
|
- profiles/addons/phony_rails.json
|
|
673
|
+
- profiles/addons/pretender.json
|
|
652
674
|
- profiles/addons/public_suffix.json
|
|
653
675
|
- profiles/addons/rails_html_sanitizer.json
|
|
654
676
|
- profiles/addons/redcarpet.json
|
|
@@ -698,6 +720,7 @@ files:
|
|
|
698
720
|
- templates/addons/honeybadger/honeybadger.sample.yml
|
|
699
721
|
- templates/addons/irbrc/.irbrc.erb
|
|
700
722
|
- templates/addons/lograge/config/initializers/lograge.rb
|
|
723
|
+
- templates/addons/pretender/app/controllers/pretender_controller.rb
|
|
701
724
|
- templates/addons/pundit/app/controllers/authorized_controller.rb.erb
|
|
702
725
|
- templates/addons/pundit/app/policies/application_policy.rb
|
|
703
726
|
- templates/addons/rspec/spec/rails_helper.rb
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|