From eac2974e715b1df0acc81748d8154397dfaa030c Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 15 Aug 2015 06:57:55 +0000 Subject: Moved implementation to Principal. git-svn-id: http://svn.redmine.org/redmine/trunk@14500 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/mail_handler.rb | 22 +--------------------- app/models/principal.rb | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index 827f235ea..de1febe69 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -543,26 +543,6 @@ class MailHandler < ActionMailer::Base end def find_assignee_from_keyword(keyword, issue) - keyword = keyword.to_s - return nil if keyword.blank? - - assignable = issue.assignable_users - assignee = nil - assignee ||= assignable.detect {|a| - keyword.casecmp(a.mail.to_s) == 0 || - keyword.casecmp(a.login.to_s) == 0 - } - if assignee.nil? && keyword.match(/ /) - firstname, lastname = *(keyword.split) # "First Last Throwaway" - assignee ||= assignable.detect {|a| - a.is_a?(User) && - firstname.casecmp(a.firstname.to_s) == 0 && - lastname.casecmp(a.lastname.to_s) == 0 - } - end - if assignee.nil? - assignee ||= assignable.detect {|a| keyword.casecmp(a.name) == 0} - end - assignee + Principal.detect_by_keyword(issue.assignable_users, keyword) end end diff --git a/app/models/principal.rb b/app/models/principal.rb index 15ab02147..58a08b19e 100644 --- a/app/models/principal.rb +++ b/app/models/principal.rb @@ -146,6 +146,30 @@ class Principal < ActiveRecord::Base columns.uniq.map {|field| "#{table}.#{field}"} end + # Returns the principal that matches the keyword among principals + def self.detect_by_keyword(principals, keyword) + keyword = keyword.to_s + return nil if keyword.blank? + + principal = nil + principal ||= principals.detect {|a| + keyword.casecmp(a.mail.to_s) == 0 || + keyword.casecmp(a.login.to_s) == 0 + } + if principal.nil? && keyword.match(/ /) + firstname, lastname = *(keyword.split) # "First Last Throwaway" + principal ||= principals.detect {|a| + a.is_a?(User) && + firstname.casecmp(a.firstname.to_s) == 0 && + lastname.casecmp(a.lastname.to_s) == 0 + } + end + if principal.nil? + principal ||= principals.detect {|a| keyword.casecmp(a.name) == 0} + end + principal + end + protected # Make sure we don't try to insert NULL values (see #4632) -- cgit v1.2.3