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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/after_templates/addons/rolify/_.rb +49 -0
  4. data/after_templates/addons/rolify/app/controllers/home_controller.rb +35 -0
  5. data/after_templates/addons/rolify/app/controllers/rolify_controller.rb +26 -0
  6. data/after_templates/addons/rolify/app/models/post.rb +3 -0
  7. data/after_templates/addons/rolify/app/models/user.rb +25 -0
  8. data/after_templates/addons/rolify/app/views/home/_roles.html.erb +5 -0
  9. data/after_templates/addons/rolify/app/views/home/bossy_boots.html.erb +5 -0
  10. data/after_templates/addons/rolify/app/views/home/index.html.erb +37 -0
  11. data/after_templates/addons/rolify/app/views/home/super_hero.html.erb +5 -0
  12. data/after_templates/addons/rolify/app/views/home/use_in_moderation.html.erb +5 -0
  13. data/after_templates/addons/rolify/app/views/home/use_me.html.erb +5 -0
  14. data/after_templates/addons/rolify/app/views/layouts/_footer.html.erb +1 -0
  15. data/after_templates/addons/rolify/app/views/layouts/_navbar.html.erb +18 -0
  16. data/after_templates/addons/rolify/app/views/layouts/application.html.erb +52 -0
  17. data/after_templates/addons/rolify/app/views/rolify/_form.html.erb +61 -0
  18. data/after_templates/addons/rolify/app/views/rolify/_user.html.erb +34 -0
  19. data/after_templates/addons/rolify/app/views/rolify/edit.html.erb +4 -0
  20. data/after_templates/addons/rolify/app/views/rolify/show.html.erb +5 -0
  21. data/after_templates/addons/rolify/db/seeds.rb +19 -0
  22. data/docs/last_run/app_generator_class.json +8 -0
  23. data/docs/last_run/app_generator_data.json +4 -3
  24. data/docs/last_run/rails_options_class.json +8 -0
  25. data/docs/last_run/rails_options_data.json +4 -3
  26. data/lib/rails_app_generator/addons/brakeman.rb +13 -0
  27. data/lib/rails_app_generator/addons/devise.rb +12 -3
  28. data/lib/rails_app_generator/addons/rolify.rb +18 -0
  29. data/lib/rails_app_generator/app_generator.rb +2 -0
  30. data/lib/rails_app_generator/rag_initializer.rb +2 -0
  31. data/lib/rails_app_generator/version.rb +1 -1
  32. data/package-lock.json +2 -2
  33. data/package.json +1 -1
  34. data/profiles/addons/rolify.json +17 -0
  35. metadata +24 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 565ddb65a7bec52098a301ef1822887e25881dd6716cdbc7b3575a23540be220
4
- data.tar.gz: 23a08258713108287331947e02a324d23a33c41e6db718a66263d2dc8e3ee330
3
+ metadata.gz: 72f1f3e53325e37778539aaed03998f681b4e181362bbcf445c497337cfae663
4
+ data.tar.gz: 2ee7326e78b08012f18d660d94327a1b564ea9e4a94683d05c3845f4bea4ebaa
5
5
  SHA512:
6
- metadata.gz: 8b638c9a61ef4272fa78434e3cd93af9bf0e84eb7efef3a1a7293d6014ddada3cd75693c94180f63c78854266f15705c44219acf6f233a0cfc444849c8735753
7
- data.tar.gz: '02794a7a859e5869a4bb4f6fc912fccc8ad3ae96931c0ee8e66b3ba7a14950a4d9d3ec2224a71d307a07cc6aa8a6687dad7945ee55dcefc56dde3899a3559ceb'
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,3 @@
1
+ class Post < ApplicationRecord
2
+ resourcify
3
+ 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,5 @@
1
+ <ul>
2
+ <% current_user&.roles&.each do |role| %>
3
+ <li><code><%= role.name %></code></li>
4
+ <% end %>
5
+ </ul>
@@ -0,0 +1,5 @@
1
+ <h1>Bossy Boots</h1>
2
+
3
+ <p>Accessible by people with the role <code>:super_user</code> or <code>:admin</code></p>
4
+
5
+ <%= render 'roles' %>
@@ -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,5 @@
1
+ <h1>You are a Super Hero</h1>
2
+
3
+ <p>Accessible by people with the role <code>:super_user</code></p>
4
+
5
+ <%= render 'roles' %>
@@ -0,0 +1,5 @@
1
+ <h1>Use in moderation</h1>
2
+
3
+ <p>Accessible by people with the role <code>:super_user</code> or <code>:moderator</code></p>
4
+
5
+ <%= render 'roles' %>
@@ -0,0 +1,5 @@
1
+ <h1>Use Me</h1>
2
+
3
+ <p>Accessible by people with the role <code>:super_user</code> or <code>:user</code></p>
4
+
5
+ <%= render 'roles' %>
@@ -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,4 @@
1
+ <h1>Edit User Roles</h1>
2
+
3
+ <%= render "form", user: @user %>
4
+
@@ -0,0 +1,5 @@
1
+ <%= render "user", user: @user %>
2
+
3
+ <div>
4
+ <%= link_to "Edit roles for this user", edit_rolify_path(@user) %>
5
+ </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": false,
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": true,
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/pretender/_.rb"
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/pretender/_.rb",
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": false,
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": true,
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
- generate(:devise, 'User', 'name', 'role:integer', capture: true)
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
- update_migration
52
+ def user_basic
53
+ generate(:devise, 'User', 'name', capture: true)
47
54
  end
48
55
 
49
- def update_migration
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsAppGenerator
4
- VERSION = '0.2.27'
4
+ VERSION = '0.2.30'
5
5
  end
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.2.27",
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.27",
9
+ "version": "0.2.30",
10
10
  "dependencies": {
11
11
  "daisyui": "^2.20.0"
12
12
  },
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.2.27",
3
+ "version": "0.2.30",
4
4
  "description": "Create new Rails Application with custom opinions",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
@@ -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.27
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-17 00:00:00.000000000 Z
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