Only look up Commit authors/committers by email
- Removes looking up authors/committers by name - Renames `User.find_for_commit` to `User.find_by_any_email`
This commit is contained in:
parent
764b5913c8
commit
e9b65a3e05
|
@ -157,11 +157,11 @@ class Commit
|
|||
end
|
||||
|
||||
def author
|
||||
User.find_for_commit(author_email, author_name)
|
||||
@author ||= User.find_by_any_email(author_email)
|
||||
end
|
||||
|
||||
def committer
|
||||
User.find_for_commit(committer_email, committer_name)
|
||||
@committer ||= User.find_by_any_email(committer_email)
|
||||
end
|
||||
|
||||
def notes
|
||||
|
|
|
@ -225,7 +225,8 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def find_for_commit(email, name)
|
||||
# Find a User by their primary email or any associated secondary email
|
||||
def find_by_any_email(email)
|
||||
user_table = arel_table
|
||||
email_table = Email.arel_table
|
||||
|
||||
|
@ -237,13 +238,8 @@ class User < ActiveRecord::Base
|
|||
join(email_table, Arel::Nodes::OuterJoin).
|
||||
# ON "users"."id" = "emails"."user_id"
|
||||
on(user_table[:id].eq(email_table[:user_id])).
|
||||
# WHERE ("user"."email" = '<email>' OR "user"."name" = '<name>')
|
||||
# OR "emails"."email" = '<email>'
|
||||
where(
|
||||
user_table[:email].eq(email).
|
||||
or(user_table[:name].eq(name)).
|
||||
or(email_table[:email].eq(email))
|
||||
)
|
||||
# WHERE ("user"."email" = '<email>' OR "emails"."email" = '<email>')
|
||||
where(user_table[:email].eq(email).or(email_table[:email].eq(email)))
|
||||
|
||||
find_by_sql(query.to_sql).first
|
||||
end
|
||||
|
|
|
@ -366,28 +366,22 @@ describe User do
|
|||
end
|
||||
end
|
||||
|
||||
describe '.find_for_commit' do
|
||||
describe '.find_by_any_email' do
|
||||
it 'finds by primary email' do
|
||||
user = create(:user, email: 'foo@example.com')
|
||||
|
||||
expect(User.find_for_commit(user.email, '')).to eq user
|
||||
expect(User.find_by_any_email(user.email)).to eq user
|
||||
end
|
||||
|
||||
it 'finds by secondary email' do
|
||||
email = create(:email, email: 'foo@example.com')
|
||||
user = email.user
|
||||
|
||||
expect(User.find_for_commit(email.email, '')).to eq user
|
||||
end
|
||||
|
||||
it 'finds by name' do
|
||||
user = create(:user, name: 'Joey JoJo')
|
||||
|
||||
expect(User.find_for_commit('', 'Joey JoJo')).to eq user
|
||||
expect(User.find_by_any_email(email.email)).to eq user
|
||||
end
|
||||
|
||||
it 'returns nil when nothing found' do
|
||||
expect(User.find_for_commit('', '')).to be_nil
|
||||
expect(User.find_by_any_email('')).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue