administration-zero 0.0.9 → 0.0.12

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +15 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +4 -5
  5. data/lib/administration_zero/version.rb +1 -1
  6. data/lib/generators/admin/install/install_generator.rb +1 -2
  7. data/lib/generators/admin/install/templates/controllers/admin/application_controller.rb +6 -1
  8. data/lib/generators/admin/install/templates/controllers/admin/password_resets_controller.rb +3 -3
  9. data/lib/generators/admin/install/templates/controllers/admin/sessions_controller.rb +3 -5
  10. data/lib/generators/admin/install/templates/controllers/admin/users_controller.rb +4 -4
  11. data/lib/generators/admin/install/templates/erb/admin/application/_flash_messages.html.erb +8 -8
  12. data/lib/generators/admin/install/templates/erb/admin/application/_javascript_tags.html.erb +14 -0
  13. data/lib/generators/admin/install/templates/erb/admin/application/_page_header_breadcrumb.html.erb +2 -2
  14. data/lib/generators/admin/install/templates/erb/admin/application/_secondary_navbar.html.erb +1 -1
  15. data/lib/generators/admin/install/templates/erb/admin/password_resets/edit.html.erb +1 -1
  16. data/lib/generators/admin/install/templates/erb/admin/password_resets/new.html.erb +1 -1
  17. data/lib/generators/admin/install/templates/erb/admin/sessions/new.html.erb +1 -1
  18. data/lib/generators/admin/install/templates/erb/admin/user_mailer/password_reset.html.erb +14 -0
  19. data/lib/generators/admin/install/templates/erb/admin/user_mailer/{password_reset_provision.text.erb → password_reset.text.erb} +0 -0
  20. data/lib/generators/admin/install/templates/erb/admin/users/edit.html.erb +2 -2
  21. data/lib/generators/admin/install/templates/erb/admin/users/index.html.erb +3 -3
  22. data/lib/generators/admin/install/templates/erb/admin/users/new.html.erb +2 -2
  23. data/lib/generators/admin/install/templates/erb/admin/users/show.html.erb +4 -4
  24. data/lib/generators/admin/install/templates/helpers/admin/application_helper.rb +1 -1
  25. data/lib/generators/admin/install/templates/mailers/admin/application_mailer.rb +3 -0
  26. data/lib/generators/admin/install/templates/mailers/admin/user_mailer.rb +2 -2
  27. data/lib/generators/admin/install/templates/migrations/create_admin_users.rb.tt +2 -2
  28. data/lib/generators/admin/install/templates/models/admin/application_record.rb +3 -0
  29. data/lib/generators/admin/install/templates/models/admin/current.rb +1 -1
  30. data/lib/generators/admin/install/templates/models/admin/user.rb +10 -0
  31. data/lib/generators/admin/install/templates/seeds.rb +1 -1
  32. data/lib/generators/admin/install/templates/test_unit/application_system_test_case.rb +2 -2
  33. data/lib/generators/admin/install/templates/test_unit/controllers/admin/home_controller_test.rb +1 -1
  34. data/lib/generators/admin/install/templates/test_unit/controllers/admin/password_resets_controller_test.rb +1 -1
  35. data/lib/generators/admin/install/templates/test_unit/controllers/admin/sessions_controller_test.rb +1 -1
  36. data/lib/generators/admin/install/templates/test_unit/controllers/admin/users_controller_test.rb +5 -5
  37. data/lib/generators/admin/install/templates/test_unit/system/admin/sessions_test.rb +1 -1
  38. data/lib/generators/admin/install/templates/test_unit/system/admin/users_test.rb +9 -9
  39. data/lib/generators/admin/install/templates/test_unit/test_helper.rb +1 -1
  40. data/lib/generators/admin/scaffold/templates/erb/index.html.erb.tt +1 -1
  41. data/lib/generators/admin/scaffold/templates/functional_test.rb.tt +1 -1
  42. data/lib/generators/admin/scaffold/templates/system_test.rb.tt +1 -1
  43. metadata +8 -5
  44. data/lib/generators/admin/install/templates/erb/admin/user_mailer/password_reset_provision.html.erb +0 -11
  45. data/lib/generators/admin/install/templates/models/admin_user.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1262058b2e76e6b4e80b03390f07439cdf2c5734de1eb3ae2e3dcd79d30ded52
4
- data.tar.gz: 0c5a2ea1b24df7f367d6b37144370f9df0df0e071de0ae2acf08a6fe6d21270c
3
+ metadata.gz: 7acbcb69df24a8f4cc70e5679ddee87b6ae96a031fa16eefdbe364aca086127e
4
+ data.tar.gz: 494132b0b91cf59fde8afb705768824af1aa6ec7ccae6cbaa00aa1ff385595f9
5
5
  SHA512:
6
- metadata.gz: 58cb7fe33173e0a58f62684b65ff9477526956e366411a5e2427a4093f3b01cf86ec2ec5908c9529c7e5ef0edd1da522bca552f2ab3bc1f731ad902d7d5ffab7
7
- data.tar.gz: d3bec811c90c09b6b051a50fefdc09aafbed7290d14d06d739839376c19c1c2f037dfe80298801d929e477cfa5288872bbe2cdcf0ae30f3dc6cb916119f0e548
6
+ metadata.gz: bab4269085274c79c172220c6f19e3e5c061f75f63e46efddc45dca0208f59aa8c78fa6b1c88862585fe1b4d9fef0b503bb531ff9d3bdda5bf64271052b5f2c7
7
+ data.tar.gz: fab03417c2685ece0c56a4d5d169ebdb6fb2c78d708987618074ae12120cb2fa3a183f3a72561e484e4b5e3b79ce888ed87ba0daf18a22bbcc59af3690a1d047
data/.rubocop.yml ADDED
@@ -0,0 +1,15 @@
1
+ inherit_from: https://raw.githubusercontent.com/rails/rails/master/.rubocop.yml
2
+
3
+ Performance:
4
+ Exclude:
5
+ - 'test/**/*'
6
+
7
+ Style/FrozenStringLiteralComment:
8
+ Enabled: false
9
+
10
+ Style/StringLiterals:
11
+ Enabled: true
12
+ EnforcedStyle: double_quotes
13
+ Include:
14
+ - 'app/**/*'
15
+ - 'test/**/*'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- administration-zero (0.0.9)
4
+ administration-zero (0.0.12)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -11,6 +11,7 @@ The purpose of administration zero is to generate a pre-built administration pan
11
11
  - [Sortable and filterable](https://github.com/activerecord-hackery/ransack)
12
12
  - [Exportable data](https://github.com/westonganger/spreadsheet_architect)
13
13
  - [Toastr for flash messages](https://getbootstrap.com/docs/5.1/components/toasts)
14
+ - Determine time zone automatically
14
15
  - Easy authentication system
15
16
  - Admin scaffolds
16
17
 
@@ -27,13 +28,13 @@ Then run `bundle install`
27
28
  You'll need to create a model to be administrated, if you don't have one. for this example let's use the following:
28
29
 
29
30
  ```
30
- $ rails generate model posts title:string body:text published:boolean
31
+ rails generate model posts title:string body:text published:boolean
31
32
  ```
32
33
 
33
34
  ## Usage
34
35
 
35
36
  ```
36
- $ rails generate admin:install
37
+ rails generate admin:install
37
38
  ```
38
39
 
39
40
  Then run `bundle install` again
@@ -44,13 +45,11 @@ Then run `rails db:migrate db:seed`, you can access the admin panel in `/admin`,
44
45
  Now you're ready to generate your admin scaffolds.
45
46
 
46
47
  ```
47
- $ rails generate admin:scaffold posts title:string body:text published:boolean
48
+ rails generate admin:scaffold posts title:string body:text published:boolean
48
49
  ```
49
50
 
50
51
  ## Development
51
52
 
52
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
53
-
54
53
  To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
55
54
 
56
55
  ## Contributing
@@ -1,3 +1,3 @@
1
1
  module AdministrationZero
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.12"
3
3
  end
@@ -21,12 +21,11 @@ module Admin
21
21
 
22
22
  def create_models
23
23
  directory "models/admin", "app/models/admin"
24
- copy_file "models/admin_user.rb", "app/models/admin_user.rb"
25
24
  copy_file "models/application_record.rb", "app/models/application_record.rb", force: true
26
25
  end
27
26
 
28
27
  def create_fixture_file
29
- copy_file "test_unit/admin_users.yml", "test/fixtures/admin_users.yml"
28
+ copy_file "test_unit/admin_users.yml", "test/fixtures/admin/users.yml"
30
29
  end
31
30
 
32
31
  def create_controllers
@@ -1,10 +1,15 @@
1
1
  class Admin::ApplicationController < ActionController::Base
2
2
  include Pagy::Backend
3
3
 
4
+ before_action :set_time_zone
4
5
  before_action :authenticate
5
6
 
7
+ def set_time_zone
8
+ Time.zone = cookies[:time_zone]
9
+ end
10
+
6
11
  def authenticate
7
- if admin_user = AdminUser.find_by_id(session[:admin_user_id])
12
+ if admin_user = Admin::User.find_by_id(session[:admin_user_id])
8
13
  Admin::Current.user = admin_user
9
14
  else
10
15
  redirect_to admin_sign_in_path
@@ -12,8 +12,8 @@ class Admin::PasswordResetsController < Admin::ApplicationController
12
12
  end
13
13
 
14
14
  def create
15
- if @admin_user = AdminUser.find_by(email: params[:email])
16
- Admin::UserMailer.with(admin_user: @admin_user).password_reset_provision.deliver_later
15
+ if @admin_user = Admin::User.find_by(email: params[:email])
16
+ Admin::UserMailer.with(admin_user: @admin_user).password_reset.deliver_later
17
17
  redirect_to admin_sign_in_path, notice: "Check your email for reset instructions"
18
18
  else
19
19
  redirect_to new_admin_password_reset_path, alert: "Sorry, we didn't recognize that email address"
@@ -30,7 +30,7 @@ class Admin::PasswordResetsController < Admin::ApplicationController
30
30
 
31
31
  private
32
32
  def set_admin_user
33
- @admin_user = AdminUser.find_signed!(params[:token], purpose: :password_reset)
33
+ @admin_user = Admin::User.find_signed!(params[:token], purpose: :password_reset)
34
34
  rescue
35
35
  redirect_to new_admin_password_reset_path, alert: "That password reset link is invalid"
36
36
  end
@@ -4,16 +4,14 @@ class Admin::SessionsController < Admin::ApplicationController
4
4
  layout "admin/authentication"
5
5
 
6
6
  def new
7
- @admin_user = AdminUser.new
7
+ @admin_user = Admin::User.new
8
8
  end
9
9
 
10
10
  def create
11
- @admin_user = AdminUser.find_by(email: params[:email])
11
+ @admin_user = Admin::User.find_by(email: params[:email])
12
12
 
13
13
  if @admin_user && @admin_user.authenticate(params[:password])
14
- session[:admin_user_id] = @admin_user.id
15
-
16
- redirect_to admin_path
14
+ session[:admin_user_id] = @admin_user.id; redirect_to(admin_path)
17
15
  else
18
16
  redirect_to admin_sign_in_path(email_hint: params[:email]), alert: "That email or password is incorrect"
19
17
  end
@@ -2,7 +2,7 @@ class Admin::UsersController < Admin::ApplicationController
2
2
  before_action :set_admin_user, only: %i[ show edit update destroy ]
3
3
 
4
4
  def index
5
- @search = AdminUser.all.ransack(params[:q])
5
+ @search = Admin::User.all.ransack(params[:q])
6
6
 
7
7
  respond_to do |format|
8
8
  format.html { @pagy, @admin_users = pagy(@search.result) }
@@ -14,14 +14,14 @@ class Admin::UsersController < Admin::ApplicationController
14
14
  end
15
15
 
16
16
  def new
17
- @admin_user = AdminUser.new
17
+ @admin_user = Admin::User.new
18
18
  end
19
19
 
20
20
  def edit
21
21
  end
22
22
 
23
23
  def create
24
- @admin_user = AdminUser.new(admin_user_params)
24
+ @admin_user = Admin::User.new(admin_user_params)
25
25
 
26
26
  if @admin_user.save
27
27
  redirect_to @admin_user, notice: "User was successfully created."
@@ -45,7 +45,7 @@ class Admin::UsersController < Admin::ApplicationController
45
45
 
46
46
  private
47
47
  def set_admin_user
48
- @admin_user = AdminUser.find(params[:id])
48
+ @admin_user = Admin::User.find(params[:id])
49
49
  end
50
50
 
51
51
  def admin_user_params
@@ -1,11 +1,11 @@
1
- <% flash.each do |type, message| %>
2
- <% if ["notice", "alert"].include?(type) %>
3
- <div class="position-fixed start-50 translate-middle-x" style="z-index: 1030; top: 8rem;">
4
- <div class="toast hide text-center text-white bg-dark border-0" data-controller="flash-message">
5
- <div class="toast-body">
6
- <%= message %>
7
- </div>
1
+ <% message = notice || alert %>
2
+
3
+ <% if message %>
4
+ <div class="position-fixed start-50 translate-middle-x" style="z-index: 1030; top: 8rem;">
5
+ <div class="toast hide text-center text-white bg-dark border-0" data-controller="flash-message">
6
+ <div class="toast-body">
7
+ <%= message %>
8
8
  </div>
9
9
  </div>
10
- <% end %>
10
+ </div>
11
11
  <% end %>
@@ -1,6 +1,20 @@
1
1
  <!-- Tabler Core -->
2
2
  <script src="https://unpkg.com/@tabler/core@1.0.0-beta9/dist/js/tabler.min.js"></script>
3
3
 
4
+ <!-- set time zone cookie -->
5
+ <script>
6
+ const { timeZone } = new Intl.DateTimeFormat().resolvedOptions();
7
+ setCookie("time_zone", timeZone);
8
+
9
+ function setCookie(name, value) {
10
+ const twentyYears = 20 * 365 * 24 * 60 * 60 * 1000;
11
+ const body = [ name, value ].map(encodeURIComponent).join("=");
12
+ const expires = new Date(Date.now() + twentyYears).toUTCString();
13
+ const cookie = `${body}; path=/; expires=${expires}`;
14
+ document.cookie = cookie;
15
+ }
16
+ </script>
17
+
4
18
  <!-- bring back data-confirm -->
5
19
  <script>
6
20
  document.addEventListener("click", (event) => {
@@ -6,7 +6,7 @@
6
6
  <%= yield %>
7
7
  </ol>
8
8
  </div>
9
- <h2 class="page-title">
9
+ <h1 class="page-title">
10
10
  <span class="text-truncate"><%= title %></span>
11
- </h2>
11
+ </h1>
12
12
  </div>
@@ -19,7 +19,7 @@
19
19
  <svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><circle cx="9" cy="7" r="4"></circle><path d="M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path><path d="M21 21v-2a4 4 0 0 0 -3 -3.85"></path></svg>
20
20
  </span>
21
21
  <span class="nav-link-title">
22
- Admin users
22
+ Users
23
23
  </span>
24
24
  <% end %>
25
25
  </li>
@@ -1,6 +1,6 @@
1
1
  <%= form_with(url: admin_password_reset_path, method: :patch, class: "card card-md") do |form| %>
2
2
  <div class="card-body">
3
- <h2 class="card-title text-center mb-4">Reset password</h2>
3
+ <h1 class="card-title text-center mb-4">Reset password</h1>
4
4
 
5
5
  <%= hidden_field_tag :token, params[:token] %>
6
6
 
@@ -1,6 +1,6 @@
1
1
  <%= form_with(url: admin_password_reset_path, class: "card card-md") do |form| %>
2
2
  <div class="card-body">
3
- <h2 class="card-title text-center mb-4">Forgot password</h2>
3
+ <h1 class="card-title text-center mb-4">Forgot password</h1>
4
4
  <p class="text-muted mb-4">Enter your email address and your password will be reset and emailed to you.</p>
5
5
  <div class="mb-3">
6
6
  <%= form.label :email, class: "form-label" %>
@@ -1,6 +1,6 @@
1
1
  <%= form_with(url: admin_sign_in_path, class: "card card-md") do |form| %>
2
2
  <div class="card-body">
3
- <h2 class="card-title text-center mb-4">Login to your account</h2>
3
+ <h1 class="card-title text-center mb-4">Login to your account</h1>
4
4
  <div class="mb-3">
5
5
  <%= form.label :email, class: "form-label" %>
6
6
  <%= form.email_field :email, value: params[:email_hint], placeholder: "Enter email", autofocus: true, required: true, autocomplete: "email", class:"form-control" %>
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ </head>
6
+ <body>
7
+ <p>Hey there,</p>
8
+ <p>Can't remember your password for <strong><%= @admin_user.email %></strong>? That's OK, it happens. Just hit the link below to set a new one.</p>
9
+ <p><%= link_to "Reset my password", edit_admin_password_reset_url(token: @signed_id) %></p>
10
+ <p>If you did not request a password reset you can safely ignore this email, it expires in 20 minutes. Only someone with access to this email account can reset your password.</p>
11
+ <hr>
12
+ <p>Have questions or need help? Just reply to this email and our support team will help you sort it out.</p>
13
+ </body>
14
+ </html>
@@ -1,7 +1,7 @@
1
1
  <%= render "page_header" do %>
2
- <%= render "page_header_breadcrumb", title: "Editing admin user" do %>
2
+ <%= render "page_header_breadcrumb", title: "Editing user" do %>
3
3
  <li class="breadcrumb-item"><%= link_to "Admin", admin_path %></li>
4
- <li class="breadcrumb-item"><%= link_to "Admin users", admin_users_path %></li>
4
+ <li class="breadcrumb-item"><%= link_to "Users", admin_users_path %></li>
5
5
  <li class="breadcrumb-item"><%= link_to @admin_user.email, @admin_user %></li>
6
6
  <% end %>
7
7
  <% end %>
@@ -1,11 +1,11 @@
1
1
  <%= render "page_header" do %>
2
- <%= render "page_header_breadcrumb", title: "Admin users" do %>
2
+ <%= render "page_header_breadcrumb", title: "Users" do %>
3
3
  <li class="breadcrumb-item"><%= link_to "Admin", admin_path %></li>
4
4
  <% end %>
5
5
 
6
6
  <%= render "page_header_actions" do %>
7
7
  <%= link_to "Filters", "#offcanvas_filters", "data-bs-toggle": "offcanvas", class: "btn btn-light" %>
8
- <%= link_to "New admin user", new_admin_user_path, class: "btn btn-primary" %>
8
+ <%= link_to "New user", new_admin_user_path, class: "btn btn-primary" %>
9
9
  <% end %>
10
10
  <% end %>
11
11
 
@@ -41,7 +41,7 @@
41
41
  <div class="card-footer d-flex align-items-center fs-5">
42
42
  <div class="d-none d-md-block">
43
43
  <div>Download: <%= link_to "CSV", admin_users_path(format: :csv, q: request.params[:q]) %></div>
44
- <%== pagy_info @pagy %>
44
+ <%= raw pagy_info(@pagy) %>
45
45
  </div>
46
46
  <div class="ms-auto">
47
47
  <%= render "pagination", pagy: @pagy %>
@@ -1,7 +1,7 @@
1
1
  <%= render "page_header" do %>
2
- <%= render "page_header_breadcrumb", title: "New admin user" do %>
2
+ <%= render "page_header_breadcrumb", title: "New user" do %>
3
3
  <li class="breadcrumb-item"><%= link_to "Admin", admin_path %></li>
4
- <li class="breadcrumb-item"><%= link_to "Admin users", admin_users_path %></li>
4
+ <li class="breadcrumb-item"><%= link_to "Users", admin_users_path %></li>
5
5
  <% end %>
6
6
  <% end %>
7
7
 
@@ -1,12 +1,12 @@
1
1
  <%= render "page_header" do %>
2
2
  <%= render "page_header_breadcrumb", title: @admin_user.email do %>
3
3
  <li class="breadcrumb-item"><%= link_to "Admin", admin_path %></li>
4
- <li class="breadcrumb-item"><%= link_to "Admin users", admin_users_path %></li>
4
+ <li class="breadcrumb-item"><%= link_to "Users", admin_users_path %></li>
5
5
  <% end %>
6
6
 
7
7
  <%= render "page_header_actions" do %>
8
- <%= link_to "Edit admin user", edit_admin_user_path(@admin_user), class: "btn btn-primary" %>
9
- <%= button_to "Delete admin user", @admin_user, method: :delete, "data-confirm": "Are you sure?", form_class: "d-inline", class: "btn btn-light" %>
8
+ <%= link_to "Edit user", edit_admin_user_path(@admin_user), class: "btn btn-primary" %>
9
+ <%= button_to "Delete user", @admin_user, method: :delete, "data-confirm": "Are you sure?", form_class: "d-inline", class: "btn btn-light" %>
10
10
  <% end %>
11
11
  <% end %>
12
12
 
@@ -14,7 +14,7 @@
14
14
  <div class="container-xl">
15
15
  <div class="card">
16
16
  <div class="card-header">
17
- <h3 class="card-title">Admin user details</h3>
17
+ <h3 class="card-title">User details</h3>
18
18
  </div>
19
19
  <div class="card-body">
20
20
  <dl class="row">
@@ -2,7 +2,7 @@ module Admin::ApplicationHelper
2
2
  include Pagy::Frontend
3
3
 
4
4
  def title
5
- content_for(:title) || Rails.application.class.to_s.split('::').first
5
+ content_for(:title) || Rails.application.class.to_s.split("::").first
6
6
  end
7
7
 
8
8
  def active_nav_item(controller, actions = %w( index show new edit create update))
@@ -0,0 +1,3 @@
1
+ class Admin::ApplicationMailer < ActionMailer::Base
2
+ default from: "from@example.com"
3
+ end
@@ -1,5 +1,5 @@
1
- class Admin::UserMailer < ApplicationMailer
2
- def password_reset_provision
1
+ class Admin::UserMailer < Admin::ApplicationMailer
2
+ def password_reset
3
3
  @admin_user = params[:admin_user]
4
4
  @signed_id = @admin_user.signed_id(purpose: :password_reset, expires_in: 20.minutes)
5
5
 
@@ -1,8 +1,8 @@
1
1
  class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
2
2
  def change
3
3
  create_table :admin_users do |t|
4
- t.string :email
5
- t.string :password_digest
4
+ t.string :email, null: false
5
+ t.string :password_digest, null: false
6
6
 
7
7
  t.timestamps
8
8
  end
@@ -0,0 +1,3 @@
1
+ class Admin::ApplicationRecord < ActiveRecord::Base
2
+ include SpreadsheetArchitect; self.abstract_class = true; self.table_name_prefix = "admin_"
3
+ end
@@ -1,3 +1,3 @@
1
1
  class Admin::Current < ActiveSupport::CurrentAttributes
2
- attribute :user
2
+ attribute :user; resets { Time.zone = nil }
3
3
  end
@@ -0,0 +1,10 @@
1
+ class Admin::User < Admin::ApplicationRecord
2
+ has_secure_password
3
+
4
+ validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
5
+ validates :password, allow_nil: true, length: { minimum: 12 }, format: { with: /(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])/ }
6
+
7
+ before_validation do
8
+ self.email = email.try(:downcase).try(:strip)
9
+ end
10
+ end
@@ -6,4 +6,4 @@
6
6
  # movies = Movie.create([{ name: "Star Wars" }, { name: "Lord of the Rings" }])
7
7
  # Character.create(name: "Luke", movie: movies.first)
8
8
 
9
- AdminUser.create(email: "admin@example.com", password: "Password9957", password_confirmation: "Password9957")
9
+ Admin::User.create(email: "admin@example.com", password: "Password9957", password_confirmation: "Password9957")
@@ -3,13 +3,13 @@ require "test_helper"
3
3
  class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
4
4
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
5
5
 
6
- def admin_sign_in_as(user)
6
+ def sign_in_admin_as(user)
7
7
  visit admin_sign_in_url
8
8
  fill_in :email, with: user.email
9
9
  fill_in :password, with: "Secret1*3*5*"
10
10
  click_on "Sign in"
11
11
  assert_current_path admin_url
12
12
 
13
- return user
13
+ user
14
14
  end
15
15
  end
@@ -2,7 +2,7 @@ require "test_helper"
2
2
 
3
3
  class Admin::HomeControllerTest < ActionDispatch::IntegrationTest
4
4
  setup do
5
- @admin_user = admin_sign_in_as(admin_users(:lazaro_nixon))
5
+ @admin_user = sign_in_admin_as(admin_users(:lazaro_nixon))
6
6
  end
7
7
 
8
8
  test "should get index" do
@@ -18,7 +18,7 @@ class Admin::PasswordResetsControllerTest < ActionDispatch::IntegrationTest
18
18
  end
19
19
 
20
20
  test "should send a password reset email" do
21
- assert_enqueued_email_with Admin::UserMailer, :password_reset_provision, args: { admin_user: @admin_user } do
21
+ assert_enqueued_email_with Admin::UserMailer, :password_reset, args: { admin_user: @admin_user } do
22
22
  post admin_password_reset_url, params: { email: @admin_user.email }
23
23
  end
24
24
 
@@ -28,7 +28,7 @@ class Admin::SessionsControllerTest < ActionDispatch::IntegrationTest
28
28
  end
29
29
 
30
30
  test "should sign out" do
31
- admin_sign_in_as @admin_user
31
+ sign_in_admin_as @admin_user
32
32
 
33
33
  delete admin_sign_out_url
34
34
  assert_redirected_to admin_sign_in_url
@@ -2,7 +2,7 @@ require "test_helper"
2
2
 
3
3
  class Admin::UsersControllerTest < ActionDispatch::IntegrationTest
4
4
  setup do
5
- @admin_user = admin_sign_in_as(admin_users(:lazaro_nixon))
5
+ @admin_user = sign_in_admin_as(admin_users(:lazaro_nixon))
6
6
  end
7
7
 
8
8
  test "should get index" do
@@ -16,11 +16,11 @@ class Admin::UsersControllerTest < ActionDispatch::IntegrationTest
16
16
  end
17
17
 
18
18
  test "should create admin_user" do
19
- assert_difference("AdminUser.count") do
20
- post admin_users_url, params: { admin_user: { email: "lazaronixon@hey.com", password: "Secret1*3*5*", password_confirmation: "Secret1*3*5*"} }
19
+ assert_difference("Admin::User.count") do
20
+ post admin_users_url, params: { admin_user: { email: "lazaronixon@hey.com", password: "Secret1*3*5*", password_confirmation: "Secret1*3*5*" } }
21
21
  end
22
22
 
23
- assert_redirected_to admin_user_url(AdminUser.last)
23
+ assert_redirected_to admin_user_url(Admin::User.last)
24
24
  end
25
25
 
26
26
  test "should show admin_user" do
@@ -39,7 +39,7 @@ class Admin::UsersControllerTest < ActionDispatch::IntegrationTest
39
39
  end
40
40
 
41
41
  test "should destroy admin_user" do
42
- assert_difference("AdminUser.count", -1) do
42
+ assert_difference("Admin::User.count", -1) do
43
43
  delete admin_user_url(@admin_user)
44
44
  end
45
45
 
@@ -15,7 +15,7 @@ class Admin::SessionsTest < ApplicationSystemTestCase
15
15
  end
16
16
 
17
17
  test "signing out" do
18
- admin_sign_in_as @admin_user
18
+ sign_in_admin_as @admin_user
19
19
  click_on "Paweł Kuna"
20
20
  click_on "Logout"
21
21
 
@@ -2,41 +2,41 @@ require "application_system_test_case"
2
2
 
3
3
  class Admin::UsersTest < ApplicationSystemTestCase
4
4
  setup do
5
- @admin_user = admin_sign_in_as(admin_users(:lazaro_nixon))
5
+ @admin_user = sign_in_admin_as(admin_users(:lazaro_nixon))
6
6
  end
7
7
 
8
8
  test "visiting the index" do
9
9
  visit admin_users_url
10
- assert_selector "h2", text: "Admin users"
10
+ assert_selector "h2", text: "Users"
11
11
  end
12
12
 
13
13
  test "should create user" do
14
14
  visit admin_users_url
15
- click_on "New admin user"
15
+ click_on "New user"
16
16
 
17
17
  fill_in "Email", with: "lazaronixon@hey.com"
18
18
  fill_in "Password", with: "Secret1*3*5*"
19
19
  fill_in "Password confirmation", with: "Secret1*3*5*"
20
- click_on "Create Admin user"
20
+ click_on "Create User"
21
21
 
22
22
  assert_text "User was successfully created"
23
23
  end
24
24
 
25
- test "should update User" do
25
+ test "should update user" do
26
26
  visit admin_user_url(@admin_user)
27
- click_on "Edit admin user"
27
+ click_on "Edit user"
28
28
 
29
29
  fill_in "Email", with: @admin_user.email
30
30
  fill_in "Password", with: "NewSecret1*3*5*"
31
31
  fill_in "Password confirmation", with: "NewSecret1*3*5*"
32
- click_on "Update Admin user"
32
+ click_on "Update User"
33
33
 
34
34
  assert_text "User was successfully updated"
35
35
  end
36
36
 
37
- test "should destroy User" do
37
+ test "should destroy user" do
38
38
  visit admin_user_url(@admin_user)
39
- page.accept_confirm { click_on "Delete admin user" }
39
+ page.accept_confirm { click_on "Delete user" }
40
40
 
41
41
  assert_text "User was successfully destroyed"
42
42
  end
@@ -10,7 +10,7 @@ class ActiveSupport::TestCase
10
10
  fixtures :all
11
11
 
12
12
  # Add more helper methods to be used by all tests here...
13
- def admin_sign_in_as(user)
13
+ def sign_in_admin_as(user)
14
14
  post(admin_sign_in_url, params: { email: user.email, password: "Secret1*3*5*" }); user
15
15
  end
16
16
  end
@@ -49,7 +49,7 @@
49
49
  <div class="card-footer d-flex align-items-center fs-5">
50
50
  <div class="d-none d-md-block">
51
51
  <div>Download: <%%= link_to "CSV", <%= index_helper(type: :path) %>(format: :csv, q: request.params[:q]) %></div>
52
- <%%== pagy_info @pagy %>
52
+ <%%= raw pagy_info(@pagy) %>
53
53
  </div>
54
54
  <div class="ms-auto">
55
55
  <%%= render "pagination", pagy: @pagy %>
@@ -6,7 +6,7 @@ class <%= controller_class_name %>ControllerTest < ActionDispatch::IntegrationTe
6
6
 
7
7
  <%- end -%>
8
8
  setup do
9
- @admin_user = admin_sign_in_as admin_users(:lazaro_nixon)
9
+ @admin_user = sign_in_admin_as admin_users(:lazaro_nixon)
10
10
  @<%= singular_table_name %> = <%= fixture_name %>(:one)
11
11
  end
12
12
 
@@ -2,7 +2,7 @@ require "application_system_test_case"
2
2
 
3
3
  class <%= class_name.pluralize %>Test < ApplicationSystemTestCase
4
4
  setup do
5
- @admin_user = admin_sign_in_as(admin_users(:lazaro_nixon))
5
+ @admin_user = sign_in_admin_as(admin_users(:lazaro_nixon))
6
6
  @<%= singular_table_name %> = <%= fixture_name %>(:one)
7
7
  end
8
8
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: administration-zero
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nixon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-14 00:00:00.000000000 Z
11
+ date: 2022-05-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -19,6 +19,7 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - ".documentation/screenshot.png"
21
21
  - ".gitignore"
22
+ - ".rubocop.yml"
22
23
  - CHANGELOG.md
23
24
  - CODE_OF_CONDUCT.md
24
25
  - Gemfile
@@ -51,8 +52,8 @@ files:
51
52
  - lib/generators/admin/install/templates/erb/admin/password_resets/edit.html.erb
52
53
  - lib/generators/admin/install/templates/erb/admin/password_resets/new.html.erb
53
54
  - lib/generators/admin/install/templates/erb/admin/sessions/new.html.erb
54
- - lib/generators/admin/install/templates/erb/admin/user_mailer/password_reset_provision.html.erb
55
- - lib/generators/admin/install/templates/erb/admin/user_mailer/password_reset_provision.text.erb
55
+ - lib/generators/admin/install/templates/erb/admin/user_mailer/password_reset.html.erb
56
+ - lib/generators/admin/install/templates/erb/admin/user_mailer/password_reset.text.erb
56
57
  - lib/generators/admin/install/templates/erb/admin/users/_form.html.erb
57
58
  - lib/generators/admin/install/templates/erb/admin/users/edit.html.erb
58
59
  - lib/generators/admin/install/templates/erb/admin/users/index.html.erb
@@ -63,10 +64,12 @@ files:
63
64
  - lib/generators/admin/install/templates/helpers/admin/application_helper.rb
64
65
  - lib/generators/admin/install/templates/images/admin/000m.jpg
65
66
  - lib/generators/admin/install/templates/images/admin/logo.svg
67
+ - lib/generators/admin/install/templates/mailers/admin/application_mailer.rb
66
68
  - lib/generators/admin/install/templates/mailers/admin/user_mailer.rb
67
69
  - lib/generators/admin/install/templates/migrations/create_admin_users.rb.tt
70
+ - lib/generators/admin/install/templates/models/admin/application_record.rb
68
71
  - lib/generators/admin/install/templates/models/admin/current.rb
69
- - lib/generators/admin/install/templates/models/admin_user.rb
72
+ - lib/generators/admin/install/templates/models/admin/user.rb
70
73
  - lib/generators/admin/install/templates/models/application_record.rb
71
74
  - lib/generators/admin/install/templates/seeds.rb
72
75
  - lib/generators/admin/install/templates/test_unit/admin_users.yml
@@ -1,11 +0,0 @@
1
- <p>Hey there,</p>
2
-
3
- <p>Can't remember your password for <strong><%= @admin_user.email %></strong>? That's OK, it happens. Just hit the link below to set a new one.</p>
4
-
5
- <p><%= link_to "Reset my password", edit_admin_password_reset_url(token: @signed_id) %></p>
6
-
7
- <p>If you did not request a password reset you can safely ignore this email, it expires in 20 minutes. Only someone with access to this email account can reset your password.</p>
8
-
9
- <hr>
10
-
11
- <p>Have questions or need help? Just reply to this email and our support team will help you sort it out.</p>
@@ -1,15 +0,0 @@
1
- class AdminUser < ApplicationRecord
2
- include SpreadsheetArchitect
3
-
4
- has_secure_password
5
-
6
- validates :email, presence: true, uniqueness: true
7
- validates_format_of :email, with: /\A[^@\s]+@[^@\s]+\z/
8
-
9
- validates_length_of :password, minimum: 12, allow_nil: true
10
- validates_format_of :password, with: /(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])/, allow_nil: true, message: "might easily be guessed"
11
-
12
- before_validation do
13
- self.email = email.downcase.strip
14
- end
15
- end