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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/after_templates/addons/devise/_.rb +0 -27
  4. data/after_templates/addons/devise/db/seeds.rb +3 -3
  5. data/after_templates/addons/devise_masquerade/_.rb +36 -0
  6. data/after_templates/addons/devise_masquerade/app/controllers/application_controller.rb +3 -0
  7. data/after_templates/addons/devise_masquerade/app/controllers/home_controller.rb +4 -0
  8. data/after_templates/addons/devise_masquerade/app/controllers/users/masquerades_controller.rb +10 -0
  9. data/after_templates/addons/devise_masquerade/app/models/user.rb +17 -0
  10. data/after_templates/addons/devise_masquerade/app/views/home/index.html.erb +62 -0
  11. data/after_templates/addons/devise_masquerade/app/views/layouts/_footer.html.erb +1 -0
  12. data/after_templates/addons/devise_masquerade/app/views/layouts/_navbar.html.erb +6 -0
  13. data/after_templates/addons/devise_masquerade/app/views/layouts/application.html.erb +57 -0
  14. data/after_templates/addons/devise_masquerade/db/seeds.rb +3 -0
  15. data/after_templates/addons/pretender/_.rb +36 -0
  16. data/after_templates/addons/pretender/app/controllers/application_controller.rb +3 -0
  17. data/after_templates/addons/pretender/app/controllers/home_controller.rb +4 -0
  18. data/after_templates/addons/pretender/app/models/user.rb +15 -0
  19. data/after_templates/addons/pretender/app/views/home/index.html.erb +67 -0
  20. data/after_templates/addons/pretender/app/views/layouts/_footer.html.erb +1 -0
  21. data/after_templates/addons/pretender/app/views/layouts/_navbar.html.erb +8 -0
  22. data/after_templates/addons/pretender/app/views/layouts/application.html.erb +58 -0
  23. data/after_templates/addons/pretender/db/seeds.rb +3 -0
  24. data/docs/last_run/app_generator_class.json +22 -6
  25. data/docs/last_run/app_generator_data.json +11 -9
  26. data/docs/last_run/rails_options_class.json +20 -4
  27. data/docs/last_run/rails_options_data.json +11 -9
  28. data/lib/rails_app_generator/addon.rb +19 -3
  29. data/lib/rails_app_generator/addons/devise.rb +18 -3
  30. data/lib/rails_app_generator/addons/devise_masquerade.rb +17 -0
  31. data/lib/rails_app_generator/addons/pretender.rb +18 -0
  32. data/lib/rails_app_generator/app_generator.rb +3 -1
  33. data/lib/rails_app_generator/rag_initializer.rb +3 -1
  34. data/lib/rails_app_generator/version.rb +1 -1
  35. data/package-lock.json +2 -2
  36. data/package.json +1 -1
  37. data/profiles/addons/devise_masquerade.json +17 -0
  38. data/profiles/addons/pretender.json +16 -0
  39. data/templates/addons/pretender/app/controllers/pretender_controller.rb +14 -0
  40. data/templates/thor_task/profile/after_template.rb +22 -16
  41. data/templates/thor_task/profile/profile.json.tt +1 -1
  42. metadata +26 -3
  43. 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: f3b2288ae71fcb62d6d27a0c112af620c7ccebf29dad7f7a3ccf0b6b763960bd
4
- data.tar.gz: 66acd6ef9f7663d0f71605564fa793e88e2f7c4c10427da39b21259cf9cb8ee4
3
+ metadata.gz: 565ddb65a7bec52098a301ef1822887e25881dd6716cdbc7b3575a23540be220
4
+ data.tar.gz: 23a08258713108287331947e02a324d23a33c41e6db718a66263d2dc8e3ee330
5
5
  SHA512:
6
- metadata.gz: f58098fef783d509ff3005a5687c5d576c02b827ecb252b90e15f0150a73301d268dc4bd37412618b53bf4d82f21e60b02b9c46ae84ee0351ae9ddc85cc335bc
7
- data.tar.gz: 02e741081aeec1eca92b1ae4260831cd0b556a243c98b3147c76b446b793d9fa1bee52949819bf02255dc00c0d9257192224fe8516834354f9d02fdf71a1017b
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
- david = User.create(email: 'david@site.com', name: 'david', password: 'password', password_confirmation: 'password', role: :admin)
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', role: :moderator)
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,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ before_action :masquerade_user!
3
+ end
@@ -0,0 +1,4 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ end
4
+ end
@@ -0,0 +1,10 @@
1
+ class Users::MasqueradesController < Devise::MasqueradesController
2
+ # This location matches the location for other Devise controllers
3
+
4
+ protected
5
+
6
+ # Custom url redirect after masquerade
7
+ def after_masquerade_path_for(_resource)
8
+ root_path
9
+ end
10
+ 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,6 @@
1
+ <%= link_to 'Home', root_path %>
2
+ <% if current_user %>
3
+ | <%= link_to 'Sign Out', destroy_user_session_path, data: { turbo_method: :delete } %>
4
+ <% else %>
5
+ | <%= link_to 'Sign In', new_user_session_path %>
6
+ <% end%>
@@ -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,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ impersonates :user
3
+ end
@@ -0,0 +1,4 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ end
4
+ 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,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/3.1.1/bin/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": "add_public_suffix",
485
- "description": "Indicates when to generate add public suffix",
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": "add_phony_rails",
492
- "description": "Indicates when to generate add phony rails",
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/3.1.1/bin/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": "importmap",
29
+ "javascript": "esbuild",
30
30
  "skip_bundle": false,
31
- "note": "\"minimal_css_library is optional and will default to water if not specified.\"",
31
+ "note": "",
32
32
  "test": "rspec",
33
33
  "add_acts_as_list": false,
34
34
  "add_administrate": false,
35
- "add_annotate": false,
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": false,
40
+ "add_devise": true,
41
+ "add_devise_masquerade": false,
41
42
  "add_dotenv": false,
42
- "add_faker": true,
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/minimal_css/_.rb"
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/3.1.1/bin/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": "add_public_suffix",
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": "add_phony_rails",
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/3.1.1/bin/ruby",
10
- "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/minimal_css/_.rb",
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": "importmap",
38
+ "javascript": "esbuild",
39
39
  "css": "",
40
40
  "skip_bundle": false,
41
- "note": "minimal_css_library is optional and will default to water if not specified.",
41
+ "note": "",
42
42
  "test": "rspec",
43
43
  "add_acts_as_list": false,
44
44
  "add_administrate": false,
45
- "add_annotate": false,
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": false,
50
+ "add_devise": true,
51
+ "add_devise_masquerade": false,
51
52
  "add_dotenv": false,
52
- "add_faker": true,
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 option?(option_name)
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
- !value.nil?
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
- update_migration
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
- gsub_file 'config/routes.rb', /devise_for :users/, 'devise_for :users, controllers: { sessions: "users/sessions", registrations: "users/registrations" }'
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsAppGenerator
4
- VERSION = '0.2.24'
4
+ VERSION = '0.2.27'
5
5
  end
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.2.24",
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.24",
9
+ "version": "0.2.27",
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.24",
3
+ "version": "0.2.27",
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_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 setup_db
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
- # db_migrate
36
- # db_seed
41
+ db_migrate
42
+ db_seed
37
43
  end
38
44
 
39
45
  # Other template command examples
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "args": {
3
- "app_path": "<%= data.name_snake %>",
3
+ "app_path": "r7_<%= data.name_snake %>",
4
4
  "destination_root": "<%= data.destination_root %>"
5
5
  },
6
6
  "opts": {
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.24
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-16 00:00:00.000000000 Z
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/devise_old.rb
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