administration-zero 0.0.9 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
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