diff --git a/app/models/commit.rb b/app/models/commit.rb index 9d721661629c9d32c4856d8e68e73e254c8b0250..aff329d71fa3f29e657597531ea161bfd3c90b68 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -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 diff --git a/app/models/user.rb b/app/models/user.rb index f1bcecc13b3d4f9ca249ee9f5009eb9f121d50b1..dc84f5141d87896517cb3c4054f0e2651bc3b191 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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 diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index b80273c053d4e8e673856bf8d1b9ffb3c9033a66..6d2423ae27af87223900b2360971d4ee21afb01e 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -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