]> source.dussan.org Git - redmine.git/commitdiff
Moved implementation to Principal.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 15 Aug 2015 06:57:55 +0000 (06:57 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 15 Aug 2015 06:57:55 +0000 (06:57 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@14500 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/mail_handler.rb
app/models/principal.rb

index 827f235ead04e1856c55eb0713dadb339c25711c..de1febe698bf24c7c52a32ca5ad1696ecc81c7e0 100644 (file)
@@ -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
index 15ab02147f02804654e90c7c712b7480bc33fe3e..58a08b19eab2271c187606d68b7734b3121df4f4 100644 (file)
@@ -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)