rails_app_generator 0.2.27 → 0.2.30
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 +22 -0
- data/after_templates/addons/rolify/_.rb +49 -0
- data/after_templates/addons/rolify/app/controllers/home_controller.rb +35 -0
- data/after_templates/addons/rolify/app/controllers/rolify_controller.rb +26 -0
- data/after_templates/addons/rolify/app/models/post.rb +3 -0
- data/after_templates/addons/rolify/app/models/user.rb +25 -0
- data/after_templates/addons/rolify/app/views/home/_roles.html.erb +5 -0
- data/after_templates/addons/rolify/app/views/home/bossy_boots.html.erb +5 -0
- data/after_templates/addons/rolify/app/views/home/index.html.erb +37 -0
- data/after_templates/addons/rolify/app/views/home/super_hero.html.erb +5 -0
- data/after_templates/addons/rolify/app/views/home/use_in_moderation.html.erb +5 -0
- data/after_templates/addons/rolify/app/views/home/use_me.html.erb +5 -0
- data/after_templates/addons/rolify/app/views/layouts/_footer.html.erb +1 -0
- data/after_templates/addons/rolify/app/views/layouts/_navbar.html.erb +18 -0
- data/after_templates/addons/rolify/app/views/layouts/application.html.erb +52 -0
- data/after_templates/addons/rolify/app/views/rolify/_form.html.erb +61 -0
- data/after_templates/addons/rolify/app/views/rolify/_user.html.erb +34 -0
- data/after_templates/addons/rolify/app/views/rolify/edit.html.erb +4 -0
- data/after_templates/addons/rolify/app/views/rolify/show.html.erb +5 -0
- data/after_templates/addons/rolify/db/seeds.rb +19 -0
- data/docs/last_run/app_generator_class.json +8 -0
- data/docs/last_run/app_generator_data.json +4 -3
- data/docs/last_run/rails_options_class.json +8 -0
- data/docs/last_run/rails_options_data.json +4 -3
- data/lib/rails_app_generator/addons/brakeman.rb +13 -0
- data/lib/rails_app_generator/addons/devise.rb +12 -3
- data/lib/rails_app_generator/addons/rolify.rb +18 -0
- data/lib/rails_app_generator/app_generator.rb +2 -0
- data/lib/rails_app_generator/rag_initializer.rb +2 -0
- data/lib/rails_app_generator/version.rb +1 -1
- data/package-lock.json +2 -2
- data/package.json +1 -1
- data/profiles/addons/rolify.json +17 -0
- metadata +24 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 72f1f3e53325e37778539aaed03998f681b4e181362bbcf445c497337cfae663
|
|
4
|
+
data.tar.gz: 2ee7326e78b08012f18d660d94327a1b564ea9e4a94683d05c3845f4bea4ebaa
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz: '
|
|
6
|
+
metadata.gz: 3b879b3359b768aa7572df16f9c3cca82546e2045c33fe7b3c5f9ee7f0db83ee1c19f3ebdf1a1546d090f66a7af4ab178e0ce5a4bbe5c48889605f0a97bd063e
|
|
7
|
+
data.tar.gz: '09e9bf15c218592f1f1e8a134aaade78f55b02e7ba048cb0bc87ae25ca163fc28ac623d3b130d7455a8dd5e723326807d9eb6ea91593cd3d6f3687e9779e7eec'
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
## [0.2.29](https://github.com/klueless-io/rails_app_generator/compare/v0.2.28...v0.2.29) (2022-08-19)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* add rolify profile ([af0579e](https://github.com/klueless-io/rails_app_generator/commit/af0579e3c707c53e423ff9ce2e1b25a2715a75a5))
|
|
7
|
+
|
|
8
|
+
## [0.2.28](https://github.com/klueless-io/rails_app_generator/compare/v0.2.27...v0.2.28) (2022-08-17)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* add rolify addon ([804ecf1](https://github.com/klueless-io/rails_app_generator/commit/804ecf1ba1fe1a56512b6d335a77558b0da3ad97))
|
|
14
|
+
|
|
15
|
+
## [0.2.27](https://github.com/klueless-io/rails_app_generator/compare/v0.2.26...v0.2.27) (2022-08-17)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* add pretender profile ([25abb2b](https://github.com/klueless-io/rails_app_generator/commit/25abb2b5b4a187db13d62d9747b7a8e283298a88))
|
|
21
|
+
* add pretender profile ([5d24dfc](https://github.com/klueless-io/rails_app_generator/commit/5d24dfcd5f0420e7e1004a30de33e9003f1e9d5c))
|
|
22
|
+
|
|
1
23
|
## [0.2.26](https://github.com/klueless-io/rails_app_generator/compare/v0.2.25...v0.2.26) (2022-08-17)
|
|
2
24
|
|
|
3
25
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Role management library with resource scoping
|
|
4
|
+
#
|
|
5
|
+
# exe/rag addons/rolify
|
|
6
|
+
#
|
|
7
|
+
# source: https://youtu.be/URDKxGn0pxo
|
|
8
|
+
# need to complete this profile by supporting resource level roles, go to 29 minutes on video
|
|
9
|
+
# source: https://youtu.be/URDKxGn0pxo?t=1101
|
|
10
|
+
|
|
11
|
+
self.local_template_path = File.dirname(__FILE__)
|
|
12
|
+
|
|
13
|
+
gac 'base rails 7 image created'
|
|
14
|
+
|
|
15
|
+
prepare_environment
|
|
16
|
+
|
|
17
|
+
after_bundle do
|
|
18
|
+
scaffolds
|
|
19
|
+
setup_customizations
|
|
20
|
+
setup_db
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def scaffolds
|
|
24
|
+
add_scaffold('post', 'title', 'body:text')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def setup_customizations
|
|
28
|
+
route("root 'home#index'")
|
|
29
|
+
route("get 'home/quick_sign_in/:user_id', to: 'home#quick_sign_in', as: 'quick_sign_in'")
|
|
30
|
+
route("get 'rolify/:id', to: 'rolify#show', as: 'rolify'")
|
|
31
|
+
route("get 'rolify/:id/edit', to: 'rolify#edit', as: 'edit_rolify'")
|
|
32
|
+
route("patch 'rolify/:id', to: 'rolify#update'")
|
|
33
|
+
|
|
34
|
+
force_copy
|
|
35
|
+
|
|
36
|
+
add_controller('home', 'index', 'quick_sign_in', 'bossy_boots', 'use_in_moderation', 'use_me', 'super_hero')
|
|
37
|
+
|
|
38
|
+
directory "app/controllers"
|
|
39
|
+
directory "app/models"
|
|
40
|
+
directory "app/views"
|
|
41
|
+
template 'app/views/layouts/application.html.erb' , 'app/views/layouts/application.html.erb'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def setup_db
|
|
45
|
+
template 'db/seeds.rb' , 'db/seeds.rb'
|
|
46
|
+
|
|
47
|
+
db_migrate
|
|
48
|
+
db_seed
|
|
49
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
class HomeController < ApplicationController
|
|
2
|
+
before_action :require_permission, except: %i[index quick_sign_in]
|
|
3
|
+
|
|
4
|
+
def index
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def quick_sign_in
|
|
8
|
+
user = User.find(params[:user_id])
|
|
9
|
+
sign_in(user)
|
|
10
|
+
redirect_to root_path
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def bossy_boots
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def use_in_moderation
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def use_me
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def super_hero
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def require_permission
|
|
26
|
+
return if current_user&.is_super_user?
|
|
27
|
+
return if current_user&.is_admin? && action_name == "bossy_boots"
|
|
28
|
+
return if current_user&.is_moderator? && action_name == "use_in_moderation"
|
|
29
|
+
return if current_user&.is_user? && action_name == "use_me"
|
|
30
|
+
|
|
31
|
+
flash.alert = "You do not have permission to access #{action_name.titleize}"
|
|
32
|
+
|
|
33
|
+
redirect_to root_path
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
class RolifyController < ApplicationController
|
|
2
|
+
before_action :set_user, only: %i[ show edit update ]
|
|
3
|
+
|
|
4
|
+
def show
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def edit
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def update
|
|
11
|
+
if @user.update(user_params)
|
|
12
|
+
redirect_to root_path, notice: "User was successfully updated."
|
|
13
|
+
else
|
|
14
|
+
render :edit, status: :unprocessable_entity
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
def set_user
|
|
20
|
+
@user = User.find(params[:id])
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def user_params
|
|
24
|
+
params.require(:user).permit(role_ids: [])
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class User < ApplicationRecord
|
|
2
|
+
# Rolify needs to be called before assigning default role due to a bug in Rolify
|
|
3
|
+
# see: https://github.com/RolifyCommunity/rolify/issues/518#issuecomment-1218705389
|
|
4
|
+
rolify
|
|
5
|
+
|
|
6
|
+
after_create :assign_default_role
|
|
7
|
+
|
|
8
|
+
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable
|
|
9
|
+
|
|
10
|
+
validate :must_have_role, on: :update
|
|
11
|
+
|
|
12
|
+
def assign_default_role
|
|
13
|
+
self.add_role(:user) if self.roles.blank?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def role_names
|
|
17
|
+
roles.distinct.pluck(:name)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def must_have_role
|
|
21
|
+
if self.roles.blank?
|
|
22
|
+
errors.add(:roles, "User must have at least one role")
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<h1>Rolify</h1>
|
|
2
|
+
|
|
3
|
+
<h4>Role management library with resource scoping</h4>
|
|
4
|
+
|
|
5
|
+
<ul>
|
|
6
|
+
<li>Role <b>admin</b>, can access <b>Bossy Boots</b></li>
|
|
7
|
+
<li>Role <b>moderator</b>, can access <b>Use in moderation</b></li>
|
|
8
|
+
<li>Role <b>user</b>, can access <b>Use Me</b></li>
|
|
9
|
+
<li>Role <b>super_user</b>, can access <b>every thing</b></li>
|
|
10
|
+
</ul>
|
|
11
|
+
|
|
12
|
+
<h3>Sample users and passwords</h3>
|
|
13
|
+
|
|
14
|
+
<table style='width: 800px;'>
|
|
15
|
+
<tr>
|
|
16
|
+
<th>Name</th>
|
|
17
|
+
<th>Email</th>
|
|
18
|
+
<th>Roles</th>
|
|
19
|
+
<th>Be who you wanna be</th>
|
|
20
|
+
<th>Manage Roles</th>
|
|
21
|
+
</tr>
|
|
22
|
+
<% User.all.each do |user| %>
|
|
23
|
+
<tr>
|
|
24
|
+
<td><%= user.name %></td>
|
|
25
|
+
<td><%= user.email %></td>
|
|
26
|
+
<td>
|
|
27
|
+
<ul style='list-style-type: none; padding: 2px; margin: 0px'>
|
|
28
|
+
<% user.role_names.each do |role| %>
|
|
29
|
+
<li><%= role %></li>
|
|
30
|
+
<% end %>
|
|
31
|
+
</ul>
|
|
32
|
+
</td>
|
|
33
|
+
<td><%= link_to "Sign In", quick_sign_in_path(user) %></td>
|
|
34
|
+
<td><%= link_to "Manage", edit_rolify_path(user) %></td>
|
|
35
|
+
</tr>
|
|
36
|
+
<% end %>
|
|
37
|
+
</table>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<hr />
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<%= link_to 'Home', root_path %>
|
|
2
|
+
| <%= link_to 'Posts', posts_path %>
|
|
3
|
+
[ <%= link_to 'Bossy Boots', home_bossy_boots_path, class: current_user&.is_super_user? || current_user&.is_admin? ? "has-role" : "has-no-role" %>
|
|
4
|
+
| <%= link_to 'Use in Moderation', home_use_in_moderation_path, class: current_user&.is_super_user? || current_user&.is_moderator? ? "has-role" : "has-no-role" %>
|
|
5
|
+
| <%= link_to 'Use Me', home_use_me_path, class: current_user&.is_super_user? || current_user&.is_user? ? "has-role" : "has-no-role" %>
|
|
6
|
+
| <%= link_to 'I will be your Hero', home_super_hero_path, class: current_user&.is_super_user? ? "has-role" : "has-no-role" %>
|
|
7
|
+
]
|
|
8
|
+
<br>
|
|
9
|
+
<% if current_user %>
|
|
10
|
+
<%= current_user.name.capitalize %>
|
|
11
|
+
<%= link_to "Edit Roles", edit_rolify_path(current_user) %>
|
|
12
|
+
<% if current_user.roles.present? %><%= "(#{current_user.roles.map(&:name).join(', ')})" %><% end %>
|
|
13
|
+
| <%= link_to 'Sign Out', destroy_user_session_path, data: { turbo_method: :delete } %>
|
|
14
|
+
|
|
15
|
+
<% else %>
|
|
16
|
+
| <%= link_to 'Sign Up', new_user_registration_path %>
|
|
17
|
+
| <%= link_to 'Sign In', new_user_session_path %>
|
|
18
|
+
<% end%>
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
.has-role {
|
|
30
|
+
color: green;
|
|
31
|
+
}
|
|
32
|
+
.has-no-role {
|
|
33
|
+
color: grey;
|
|
34
|
+
}
|
|
35
|
+
</style>
|
|
36
|
+
</head>
|
|
37
|
+
|
|
38
|
+
<body>
|
|
39
|
+
<header>
|
|
40
|
+
<%%= render 'layouts/navbar' %>
|
|
41
|
+
<hr />
|
|
42
|
+
<%%= render 'layouts/alerts' %>
|
|
43
|
+
</header>
|
|
44
|
+
<main>
|
|
45
|
+
<%%= yield %>
|
|
46
|
+
</main>
|
|
47
|
+
<footer>
|
|
48
|
+
<%%= render 'layouts/footer' %>
|
|
49
|
+
</footer>
|
|
50
|
+
</body>
|
|
51
|
+
</html>
|
|
52
|
+
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<%# , url: { controller: "rolify", action: "update" }, html: { :turbo_method => :post } %>
|
|
2
|
+
<%= form_with(model: user, url: rolify_path(user)) do |form| %>
|
|
3
|
+
|
|
4
|
+
<% if user.errors.any? %>
|
|
5
|
+
<div style="color: red">
|
|
6
|
+
<h2><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h2>
|
|
7
|
+
|
|
8
|
+
<ul>
|
|
9
|
+
<% user.errors.each do |error| %>
|
|
10
|
+
<li><%= error.full_message %></li>
|
|
11
|
+
<% end %>
|
|
12
|
+
</ul>
|
|
13
|
+
</div>
|
|
14
|
+
<% end %>
|
|
15
|
+
|
|
16
|
+
<p>
|
|
17
|
+
<strong>Name:</strong>
|
|
18
|
+
<%= user.name %>
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
<p>
|
|
22
|
+
<strong>Email:</strong>
|
|
23
|
+
<%= user.email %>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
<p>
|
|
27
|
+
<%= form.label :current_roles, style: "display: block" %>
|
|
28
|
+
<%= user.roles.where(resource_type: nil).map { |role| role.name.capitalize }.to_sentence %>
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
<div>
|
|
32
|
+
<%= form.label :raw_roles, style: "display: block" %>
|
|
33
|
+
<pre>
|
|
34
|
+
<code>
|
|
35
|
+
<% user.roles.each do |role| %>
|
|
36
|
+
<%=
|
|
37
|
+
extra_info = if role.resource_type
|
|
38
|
+
" (#{role.resource_type}: #{role.resource_id})"
|
|
39
|
+
else
|
|
40
|
+
""
|
|
41
|
+
end
|
|
42
|
+
"#{role.id} - #{role.name}, #{extra_info}"
|
|
43
|
+
%>
|
|
44
|
+
<% end %>
|
|
45
|
+
</code>
|
|
46
|
+
</pre>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<div>
|
|
50
|
+
<%= form.label :user_roles, style: "display: block" %>
|
|
51
|
+
<% Role.where(resource_type: nil).each do |role| %>
|
|
52
|
+
<%= form.check_box :role_ids, { multiple: true, checked: user.role_ids.include?(role.id) }, role.id, nil %>
|
|
53
|
+
<%= role.name %><br />
|
|
54
|
+
<% end %>
|
|
55
|
+
</ul>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<div>
|
|
59
|
+
<%= form.submit %>
|
|
60
|
+
</div>
|
|
61
|
+
<% end %>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<div id="<%= dom_id user %>">
|
|
2
|
+
<p>
|
|
3
|
+
<strong>Name:</strong>
|
|
4
|
+
<%= user.name %>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p>
|
|
8
|
+
<strong>Email:</strong>
|
|
9
|
+
<%= user.email %>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<div>
|
|
13
|
+
<strong>Current Roles:</strong>
|
|
14
|
+
<%= user.roles.where(resource_type: nil).map { |role| role.name.capitalize }.join(', ') %>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<div>
|
|
18
|
+
<pre>
|
|
19
|
+
<code>
|
|
20
|
+
<% user.roles.each do |role| %>
|
|
21
|
+
<%=
|
|
22
|
+
extra_info = if role.resource_type
|
|
23
|
+
" (#{role.resource_type}: #{role.resource_id})"
|
|
24
|
+
else
|
|
25
|
+
""
|
|
26
|
+
end
|
|
27
|
+
"#{role.id} - #{role.name}, #{extra_info}"
|
|
28
|
+
%>
|
|
29
|
+
<% end %>
|
|
30
|
+
</code>
|
|
31
|
+
</pre>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
david = User.create(email: 'david@site.com', name: 'david', password: 'password', password_confirmation: 'password')
|
|
2
|
+
james = User.create(email: 'james@site.com', name: 'james', password: 'password', password_confirmation: 'password')
|
|
3
|
+
sally = User.create(email: 'sally@site.com', name: 'sally', password: 'password', password_confirmation: 'password')
|
|
4
|
+
chloe = User.create(email: 'chloe@site.com', name: 'chloe', password: 'password', password_confirmation: 'password')
|
|
5
|
+
|
|
6
|
+
david.add_role(:super_user)
|
|
7
|
+
james.add_role(:admin)
|
|
8
|
+
sally.add_role(:moderator)
|
|
9
|
+
chloe.add_role(:admin)
|
|
10
|
+
chloe.add_role(:moderator)
|
|
11
|
+
|
|
12
|
+
10.times do
|
|
13
|
+
user = User.all.sample
|
|
14
|
+
post = Post.create(
|
|
15
|
+
title: "Post #{Faker::Lorem.words(number: rand(1..3)).join(' ')}",
|
|
16
|
+
body: "#{Faker::Lorem.sentences(number: 8).join("<br />")}"
|
|
17
|
+
)
|
|
18
|
+
user.add_role(:author, post)
|
|
19
|
+
end
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"add_public_suffix",
|
|
66
66
|
"add_rails_html_sanitizer",
|
|
67
67
|
"add_redcarpet",
|
|
68
|
+
"add_rolify",
|
|
68
69
|
"add_rubocop",
|
|
69
70
|
"add_twilio_ruby"
|
|
70
71
|
],
|
|
@@ -524,6 +525,13 @@
|
|
|
524
525
|
"default": false,
|
|
525
526
|
"required": false
|
|
526
527
|
},
|
|
528
|
+
{
|
|
529
|
+
"name": "add_rolify",
|
|
530
|
+
"description": "Indicates when to generate add rolify",
|
|
531
|
+
"type": "boolean",
|
|
532
|
+
"default": false,
|
|
533
|
+
"required": false
|
|
534
|
+
},
|
|
527
535
|
{
|
|
528
536
|
"name": "add_rubocop",
|
|
529
537
|
"description": "Indicates when to generate add rubocop",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"add_devise": true,
|
|
41
41
|
"add_devise_masquerade": false,
|
|
42
42
|
"add_dotenv": false,
|
|
43
|
-
"add_faker":
|
|
43
|
+
"add_faker": true,
|
|
44
44
|
"add_groupdate": false,
|
|
45
45
|
"add_hexapdf": false,
|
|
46
46
|
"add_httparty": false,
|
|
@@ -51,12 +51,13 @@
|
|
|
51
51
|
"add_mini_magick": false,
|
|
52
52
|
"add_motor_admin": false,
|
|
53
53
|
"add_phony_rails": false,
|
|
54
|
-
"add_pretender":
|
|
54
|
+
"add_pretender": false,
|
|
55
55
|
"add_public_suffix": false,
|
|
56
56
|
"add_rails_html_sanitizer": false,
|
|
57
57
|
"add_redcarpet": false,
|
|
58
|
+
"add_rolify": true,
|
|
58
59
|
"add_rubocop": false,
|
|
59
60
|
"add_twilio_ruby": false,
|
|
60
|
-
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/
|
|
61
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/rolify/_.rb"
|
|
61
62
|
}
|
|
62
63
|
}
|
|
@@ -65,6 +65,7 @@
|
|
|
65
65
|
"add_public_suffix",
|
|
66
66
|
"add_rails_html_sanitizer",
|
|
67
67
|
"add_redcarpet",
|
|
68
|
+
"add_rolify",
|
|
68
69
|
"add_rubocop",
|
|
69
70
|
"add_twilio_ruby"
|
|
70
71
|
],
|
|
@@ -524,6 +525,13 @@
|
|
|
524
525
|
"default": false,
|
|
525
526
|
"required": false
|
|
526
527
|
},
|
|
528
|
+
{
|
|
529
|
+
"name": "add_rolify",
|
|
530
|
+
"description": "",
|
|
531
|
+
"type": "boolean",
|
|
532
|
+
"default": false,
|
|
533
|
+
"required": false
|
|
534
|
+
},
|
|
527
535
|
{
|
|
528
536
|
"name": "add_rubocop",
|
|
529
537
|
"description": "",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"quiet": false,
|
|
8
8
|
"skip": false,
|
|
9
9
|
"ruby": "/Users/davidcruwys/.asdf/installs/ruby/2.7.6/bin/ruby",
|
|
10
|
-
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/
|
|
10
|
+
"template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/rolify/_.rb",
|
|
11
11
|
"database": "sqlite3",
|
|
12
12
|
"skip_git": true,
|
|
13
13
|
"skip_keeps": false,
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"add_devise": true,
|
|
51
51
|
"add_devise_masquerade": false,
|
|
52
52
|
"add_dotenv": false,
|
|
53
|
-
"add_faker":
|
|
53
|
+
"add_faker": true,
|
|
54
54
|
"add_groupdate": false,
|
|
55
55
|
"add_hexapdf": false,
|
|
56
56
|
"add_httparty": false,
|
|
@@ -61,10 +61,11 @@
|
|
|
61
61
|
"add_mini_magick": false,
|
|
62
62
|
"add_motor_admin": false,
|
|
63
63
|
"add_phony_rails": false,
|
|
64
|
-
"add_pretender":
|
|
64
|
+
"add_pretender": false,
|
|
65
65
|
"add_public_suffix": false,
|
|
66
66
|
"add_rails_html_sanitizer": false,
|
|
67
67
|
"add_redcarpet": false,
|
|
68
|
+
"add_rolify": true,
|
|
68
69
|
"add_rubocop": false,
|
|
69
70
|
"add_twilio_ruby": false
|
|
70
71
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAppGenerator
|
|
4
|
+
# Custom add-ons for RailsAppGenerator
|
|
5
|
+
module AddOns
|
|
6
|
+
# Add Brakeman to rails application
|
|
7
|
+
class Brakeman < RailsAppGenerator::Addon
|
|
8
|
+
required_gem gem.version('brakeman', '5.3.1', 'Brakeman is a static analysis security vulnerability scanner for Ruby on Rails applications')
|
|
9
|
+
|
|
10
|
+
def apply; end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -41,12 +41,21 @@ module RailsAppGenerator
|
|
|
41
41
|
private
|
|
42
42
|
|
|
43
43
|
def setup_db
|
|
44
|
-
|
|
44
|
+
if active?(:rolify)
|
|
45
|
+
# Rolify will setup up a role relationship
|
|
46
|
+
user_basic
|
|
47
|
+
else
|
|
48
|
+
user_with_simplified_role
|
|
49
|
+
end
|
|
50
|
+
end
|
|
45
51
|
|
|
46
|
-
|
|
52
|
+
def user_basic
|
|
53
|
+
generate(:devise, 'User', 'name', capture: true)
|
|
47
54
|
end
|
|
48
55
|
|
|
49
|
-
def
|
|
56
|
+
def user_with_simplified_role
|
|
57
|
+
generate(:devise, 'User', 'name', 'role:integer', capture: true)
|
|
58
|
+
|
|
50
59
|
in_root do
|
|
51
60
|
migration = Dir.glob('db/migrate/*').max_by { |f| File.mtime(f) }
|
|
52
61
|
gsub_file migration, /:role/, ':role, default: 0'
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RailsAppGenerator
|
|
4
|
+
# Custom add-ons for RailsAppGenerator
|
|
5
|
+
module AddOns
|
|
6
|
+
# Add Rolify to rails application
|
|
7
|
+
class Rolify < RailsAppGenerator::Addon
|
|
8
|
+
required_gem gem.version('rolify', '6.0.0', 'Role management library with resource scoping')
|
|
9
|
+
|
|
10
|
+
def apply
|
|
11
|
+
# bundle_install
|
|
12
|
+
generate('rolify', 'Role', 'User', capture: true)
|
|
13
|
+
|
|
14
|
+
gsub_file 'config/initializers/rolify.rb', '# config.use_dynamic_shortcuts', 'config.use_dynamic_shortcuts'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -172,6 +172,7 @@ module RailsAppGenerator
|
|
|
172
172
|
add_if(:annotate) # tested
|
|
173
173
|
add_if(:avo) # tested
|
|
174
174
|
add_if(:bcrypt) # tested
|
|
175
|
+
add_if(:brakeman) # tested
|
|
175
176
|
add_if(:browser) # tested
|
|
176
177
|
add_if(:chartkick) # tested
|
|
177
178
|
add_if(:continuous_integration) # TODO: needs work
|
|
@@ -199,6 +200,7 @@ module RailsAppGenerator
|
|
|
199
200
|
add_if(:rails_html_sanitizer) # tested
|
|
200
201
|
add_if(:rails_app_generator) # TODO: needs testing
|
|
201
202
|
add_if(:redcarpet) # tested
|
|
203
|
+
add_if(:rolify) # tested
|
|
202
204
|
add_if(:services) # TODO: needs testing
|
|
203
205
|
add_if(:shoulda) # TODO: needs testing
|
|
204
206
|
add_if(:sidekiq) # TODO: needs testing
|
|
@@ -107,6 +107,7 @@ KConfig.configure do |config|
|
|
|
107
107
|
rag.add_option :add_annotate , type: :boolean, default: false
|
|
108
108
|
rag.add_option :add_avo , type: :boolean, default: false
|
|
109
109
|
rag.add_option :add_bcrypt , type: :boolean, default: false
|
|
110
|
+
rag.add_option :add_brakeman , type: :boolean, default: false
|
|
110
111
|
rag.add_option :add_browser , type: :boolean, default: false
|
|
111
112
|
rag.add_option :add_chartkick , type: :boolean, default: false
|
|
112
113
|
# continuous_integration
|
|
@@ -136,6 +137,7 @@ KConfig.configure do |config|
|
|
|
136
137
|
# rails_app_generator
|
|
137
138
|
# RANSACK
|
|
138
139
|
rag.add_option :add_redcarpet , type: :boolean, default: false
|
|
140
|
+
rag.add_option :add_rolify , type: :boolean, default: false
|
|
139
141
|
# services
|
|
140
142
|
# shoulda
|
|
141
143
|
# sidekiq
|
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.30",
|
|
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.30",
|
|
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_rolify",
|
|
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/rolify/_.rb",
|
|
10
|
+
"javascript": "esbuild",
|
|
11
|
+
"add_annotate": true,
|
|
12
|
+
"add_devise": true,
|
|
13
|
+
"add_rolify": true,
|
|
14
|
+
"add_faker": true,
|
|
15
|
+
"add_minimal_css": true
|
|
16
|
+
}
|
|
17
|
+
}
|
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.30
|
|
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-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bootsnap
|
|
@@ -348,6 +348,25 @@ files:
|
|
|
348
348
|
- after_templates/addons/redcarpet/app/views/layouts/_footer.html.erb
|
|
349
349
|
- after_templates/addons/redcarpet/app/views/layouts/_navbar.html.erb
|
|
350
350
|
- after_templates/addons/redcarpet/app/views/layouts/application.html.erb
|
|
351
|
+
- after_templates/addons/rolify/_.rb
|
|
352
|
+
- after_templates/addons/rolify/app/controllers/home_controller.rb
|
|
353
|
+
- after_templates/addons/rolify/app/controllers/rolify_controller.rb
|
|
354
|
+
- after_templates/addons/rolify/app/models/post.rb
|
|
355
|
+
- after_templates/addons/rolify/app/models/user.rb
|
|
356
|
+
- after_templates/addons/rolify/app/views/home/_roles.html.erb
|
|
357
|
+
- after_templates/addons/rolify/app/views/home/bossy_boots.html.erb
|
|
358
|
+
- after_templates/addons/rolify/app/views/home/index.html.erb
|
|
359
|
+
- after_templates/addons/rolify/app/views/home/super_hero.html.erb
|
|
360
|
+
- after_templates/addons/rolify/app/views/home/use_in_moderation.html.erb
|
|
361
|
+
- after_templates/addons/rolify/app/views/home/use_me.html.erb
|
|
362
|
+
- after_templates/addons/rolify/app/views/layouts/_footer.html.erb
|
|
363
|
+
- after_templates/addons/rolify/app/views/layouts/_navbar.html.erb
|
|
364
|
+
- after_templates/addons/rolify/app/views/layouts/application.html.erb
|
|
365
|
+
- after_templates/addons/rolify/app/views/rolify/_form.html.erb
|
|
366
|
+
- after_templates/addons/rolify/app/views/rolify/_user.html.erb
|
|
367
|
+
- after_templates/addons/rolify/app/views/rolify/edit.html.erb
|
|
368
|
+
- after_templates/addons/rolify/app/views/rolify/show.html.erb
|
|
369
|
+
- after_templates/addons/rolify/db/seeds.rb
|
|
351
370
|
- after_templates/addons/rubocop/_.rb
|
|
352
371
|
- after_templates/addons/rubocop/app/assets/images/cop-output.png
|
|
353
372
|
- after_templates/addons/rubocop/app/controllers/home_controller.rb
|
|
@@ -577,6 +596,7 @@ files:
|
|
|
577
596
|
- lib/rails_app_generator/addons/annotate.rb
|
|
578
597
|
- lib/rails_app_generator/addons/avo.rb
|
|
579
598
|
- lib/rails_app_generator/addons/bcrypt.rb
|
|
599
|
+
- lib/rails_app_generator/addons/brakeman.rb
|
|
580
600
|
- lib/rails_app_generator/addons/browser.rb
|
|
581
601
|
- lib/rails_app_generator/addons/chartkick.rb
|
|
582
602
|
- lib/rails_app_generator/addons/continuous_integration.rb
|
|
@@ -606,6 +626,7 @@ files:
|
|
|
606
626
|
- lib/rails_app_generator/addons/pundit.rb
|
|
607
627
|
- lib/rails_app_generator/addons/rails_html_sanitizer.rb
|
|
608
628
|
- lib/rails_app_generator/addons/redcarpet.rb
|
|
629
|
+
- lib/rails_app_generator/addons/rolify.rb
|
|
609
630
|
- lib/rails_app_generator/addons/rspec.rb
|
|
610
631
|
- lib/rails_app_generator/addons/rubocop.rb
|
|
611
632
|
- lib/rails_app_generator/addons/scaffold.rb
|
|
@@ -674,6 +695,7 @@ files:
|
|
|
674
695
|
- profiles/addons/public_suffix.json
|
|
675
696
|
- profiles/addons/rails_html_sanitizer.json
|
|
676
697
|
- profiles/addons/redcarpet.json
|
|
698
|
+
- profiles/addons/rolify.json
|
|
677
699
|
- profiles/addons/rubocop.json
|
|
678
700
|
- profiles/addons/twilio_ruby.json
|
|
679
701
|
- profiles/application/printspeak.json
|