summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2015-08-15 06:57:55 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2015-08-15 06:57:55 +0000
commiteac2974e715b1df0acc81748d8154397dfaa030c (patch)
tree2fb48eb1b87c48a5dc745043bdab4638cda7f39b
parentb66358ac6c338143eb1efdd2dea869e03cacad58 (diff)
downloadredmine-eac2974e715b1df0acc81748d8154397dfaa030c.tar.gz
redmine-eac2974e715b1df0acc81748d8154397dfaa030c.zip
Moved implementation to Principal.
git-svn-id: http://svn.redmine.org/redmine/trunk@14500 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/mail_handler.rb22
-rw-r--r--app/models/principal.rb24
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)