mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-19 13:19:39 +02:00
Fix profile page on fresh install (#684)
This commit is contained in:
parent
e7fe1b5a4b
commit
93953499a6
4 changed files with 50 additions and 11 deletions
|
@ -7,12 +7,22 @@ class User < ApplicationRecord
|
||||||
validates :email, presence: true, uniqueness: true
|
validates :email, presence: true, uniqueness: true
|
||||||
normalizes :email, with: ->(email) { email.strip.downcase }
|
normalizes :email, with: ->(email) { email.strip.downcase }
|
||||||
|
|
||||||
|
normalizes :first_name, :last_name, with: ->(value) { value.strip.presence }
|
||||||
|
|
||||||
enum :role, { member: "member", admin: "admin" }, validate: true
|
enum :role, { member: "member", admin: "admin" }, validate: true
|
||||||
|
|
||||||
generates_token_for :password_reset, expires_in: 15.minutes do
|
generates_token_for :password_reset, expires_in: 15.minutes do
|
||||||
password_salt&.last(10)
|
password_salt&.last(10)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def display_name
|
||||||
|
[ first_name, last_name ].compact.join(" ").presence || email
|
||||||
|
end
|
||||||
|
|
||||||
|
def initial
|
||||||
|
(display_name&.first || email.first).upcase
|
||||||
|
end
|
||||||
|
|
||||||
def acknowledge_upgrade_prompt(commit_sha)
|
def acknowledge_upgrade_prompt(commit_sha)
|
||||||
update!(last_prompted_upgrade_commit_sha: commit_sha)
|
update!(last_prompted_upgrade_commit_sha: commit_sha)
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,14 +4,16 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
<div id="user-menu" data-controller="menu">
|
<div id="user-menu" data-controller="menu">
|
||||||
<button data-menu-target="button">
|
<button data-menu-target="button">
|
||||||
<div class="text-white w-9 h-9 bg-gray-400 rounded-full flex items-center justify-center text-lg uppercase"><%= Current.user.email.first %></div>
|
<div class="text-white w-9 h-9 bg-gray-400 rounded-full flex items-center justify-center text-lg uppercase"><%= Current.user.initial %></div>
|
||||||
</button>
|
</button>
|
||||||
<div data-menu-target="content" class="hidden absolute w-[240px] z-10 top-10 left-[255px] top-[72px] bg-white rounded-sm shadow-xs border border-alpha-black-25">
|
<div data-menu-target="content" class="hidden absolute w-[240px] z-10 top-10 left-[255px] top-[72px] bg-white rounded-sm shadow-xs border border-alpha-black-25">
|
||||||
<div class="p-3 flex items-center gap-3">
|
<div class="p-3 flex items-center gap-3">
|
||||||
<div class="text-white shrink-0 w-9 h-9 bg-gray-400 rounded-full flex items-center justify-center text-lg uppercase"><%= Current.user.email.first %></div>
|
<div class="text-white shrink-0 w-9 h-9 bg-gray-400 rounded-full flex items-center justify-center text-lg uppercase"><%= Current.user.initial %></div>
|
||||||
<div>
|
<div>
|
||||||
<span class="text-gray-900 font-medium text-sm"><%= Current.user.first_name %> <%= Current.user.last_name %></span>
|
<span class="text-gray-900 font-medium text-sm"><%= Current.user.display_name %></span>
|
||||||
<span class="text-gray-500 text-sm"><%= Current.user.email %></span>
|
<% if Current.user.display_name != Current.user.email %>
|
||||||
|
<span class="text-gray-500 text-sm"><%= Current.user.email %></span>
|
||||||
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="border-t border-b border-alpha-black-100 p-1">
|
<div class="border-t border-b border-alpha-black-100 p-1">
|
||||||
|
|
|
@ -39,9 +39,9 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="flex gap-2 items-center bg-white p-4 border border-alpha-black-25 rounded-lg">
|
<div class="flex gap-2 items-center bg-white p-4 border border-alpha-black-25 rounded-lg">
|
||||||
<div class="mr-1 flex justify-center items-center bg-gray-50 w-8 h-8 rounded-full border border-alpha-black-25">
|
<div class="mr-1 flex justify-center items-center bg-gray-50 w-8 h-8 rounded-full border border-alpha-black-25">
|
||||||
<p class="uppercase text-xs text-gray-500"><%= Current.user.first_name.first %></p>
|
<p class="uppercase text-xs text-gray-500"><%= Current.user.initial %></p>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-gray-900 font-medium text-sm"><%= Current.user.first_name %> <%= Current.user.last_name %></p>
|
<p class="text-gray-900 font-medium text-sm"><%= Current.user.display_name %></p>
|
||||||
<div class="rounded-md bg-gray-100 px-1.5 py-0.5">
|
<div class="rounded-md bg-gray-100 px-1.5 py-0.5">
|
||||||
<p class="uppercase text-gray-500 font-medium text-xs"><%= Current.user.role %></p>
|
<p class="uppercase text-gray-500 font-medium text-xs"><%= Current.user.role %></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -37,10 +37,37 @@ class UserTest < ActiveSupport::TestCase
|
||||||
assert_not duplicate_user.valid?
|
assert_not duplicate_user.valid?
|
||||||
end
|
end
|
||||||
|
|
||||||
test "email addresses are be saved as lower-case" do
|
test "email address is normalized" do
|
||||||
mixed_case_email = "Foo@ExAMPle.CoM"
|
@user.update!(email: " User@ExAMPle.CoM ")
|
||||||
@user.email = mixed_case_email
|
assert_equal "user@example.com", @user.reload.email
|
||||||
@user.save
|
end
|
||||||
assert_equal mixed_case_email.downcase, @user.reload.email
|
|
||||||
|
test "display name" do
|
||||||
|
user = User.new(email: "user@example.com")
|
||||||
|
assert_equal "user@example.com", user.display_name
|
||||||
|
user.first_name = "Bob"
|
||||||
|
assert_equal "Bob", user.display_name
|
||||||
|
user.last_name = "Dylan"
|
||||||
|
assert_equal "Bob Dylan", user.display_name
|
||||||
|
end
|
||||||
|
|
||||||
|
test "initial" do
|
||||||
|
user = User.new(email: "user@example.com")
|
||||||
|
assert_equal "U", user.initial
|
||||||
|
user.first_name = "Bob"
|
||||||
|
assert_equal "B", user.initial
|
||||||
|
user.first_name = nil
|
||||||
|
user.last_name = "Dylan"
|
||||||
|
assert_equal "D", user.initial
|
||||||
|
end
|
||||||
|
|
||||||
|
test "names are normalized" do
|
||||||
|
@user.update!(first_name: "", last_name: "")
|
||||||
|
assert_nil @user.first_name
|
||||||
|
assert_nil @user.last_name
|
||||||
|
|
||||||
|
@user.update!(first_name: " Bob ", last_name: " Dylan ")
|
||||||
|
assert_equal "Bob", @user.first_name
|
||||||
|
assert_equal "Dylan", @user.last_name
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue