@@ -0,0 +1,46 | |||
|
1 | Return-Path: <jsmith@somenet.foo> | |
|
2 | Received: from osiris ([127.0.0.1]) | |
|
3 | by OSIRIS | |
|
4 | with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200 | |
|
5 | Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris> | |
|
6 | From: "John Smith" <jsmith@somenet.foo> | |
|
7 | To: <redmine@somenet.foo> | |
|
8 | Subject: New ticket on a given project | |
|
9 | Date: Sun, 22 Jun 2008 12:28:07 +0200 | |
|
10 | MIME-Version: 1.0 | |
|
11 | Content-Type: text/plain; | |
|
12 | format=flowed; | |
|
13 | charset="iso-8859-1"; | |
|
14 | reply-type=original | |
|
15 | Content-Transfer-Encoding: 7bit | |
|
16 | X-Priority: 3 | |
|
17 | X-MSMail-Priority: Normal | |
|
18 | X-Mailer: Microsoft Outlook Express 6.00.2900.2869 | |
|
19 | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 | |
|
20 | ||
|
21 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet | |
|
22 | turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus | |
|
23 | blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti | |
|
24 | sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In | |
|
25 | in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras | |
|
26 | sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum | |
|
27 | id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus | |
|
28 | eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique | |
|
29 | sed, mauris. Pellentesque habitant morbi tristique senectus et netus et | |
|
30 | malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse | |
|
31 | platea dictumst. | |
|
32 | ||
|
33 | Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque | |
|
34 | sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. | |
|
35 | Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, | |
|
36 | dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, | |
|
37 | massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo | |
|
38 | pulvinar dui, a gravida orci mi eget odio. Nunc a lacus. | |
|
39 | ||
|
40 | Project: onlinestore | |
|
41 | Tracker: Feature request | |
|
42 | category: Stock management | |
|
43 | priority: foo | |
|
44 | done ratio: x | |
|
45 | start date: some day | |
|
46 | due date: never |
@@ -218,7 +218,7 class MailHandler < ActionMailer::Base | |||
|
218 | 218 | @keywords[attr] |
|
219 | 219 | else |
|
220 | 220 | @keywords[attr] = begin |
|
221 | if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && (v = extract_keyword!(plain_text_body, attr)) | |
|
221 | if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && (v = extract_keyword!(plain_text_body, attr, options[:format])) | |
|
222 | 222 | v |
|
223 | 223 | elsif !@@handler_options[:issue][attr].blank? |
|
224 | 224 | @@handler_options[:issue][attr] |
@@ -229,7 +229,7 class MailHandler < ActionMailer::Base | |||
|
229 | 229 | |
|
230 | 230 | # Destructively extracts the value for +attr+ in +text+ |
|
231 | 231 | # Returns nil if no matching keyword found |
|
232 | def extract_keyword!(text, attr) | |
|
232 | def extract_keyword!(text, attr, format=nil) | |
|
233 | 233 | keys = [attr.to_s.humanize] |
|
234 | 234 | if attr.is_a?(Symbol) |
|
235 | 235 | keys << l("field_#{attr}", :default => '', :locale => user.language) if user |
@@ -237,7 +237,8 class MailHandler < ActionMailer::Base | |||
|
237 | 237 | end |
|
238 | 238 | keys.reject! {|k| k.blank?} |
|
239 | 239 | keys.collect! {|k| Regexp.escape(k)} |
|
240 | text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(.+)\s*$/i, '') | |
|
240 | format ||= '.+' | |
|
241 | text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(#{format})\s*$/i, '') | |
|
241 | 242 | $2 && $2.strip |
|
242 | 243 | end |
|
243 | 244 | |
@@ -259,10 +260,10 class MailHandler < ActionMailer::Base | |||
|
259 | 260 | 'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id), |
|
260 | 261 | 'assigned_to_id' => (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k).try(:id), |
|
261 | 262 | 'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id), |
|
262 | 'start_date' => get_keyword(:start_date, :override => true), | |
|
263 | 'due_date' => get_keyword(:due_date, :override => true), | |
|
263 | 'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), | |
|
264 | 'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), | |
|
264 | 265 | 'estimated_hours' => get_keyword(:estimated_hours, :override => true), |
|
265 |
'done_ratio' => get_keyword(:done_ratio, :override => true) |
|
|
266 | 'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0') | |
|
266 | 267 | }.delete_if {|k, v| v.blank? } |
|
267 | 268 | end |
|
268 | 269 |
@@ -229,6 +229,18 class MailHandlerTest < ActiveSupport::TestCase | |||
|
229 | 229 | assert_equal false, submit_email('ticket_without_from_header.eml') |
|
230 | 230 | end |
|
231 | 231 | |
|
232 | def test_add_issue_with_invalid_attributes | |
|
233 | issue = submit_email('ticket_with_invalid_attributes.eml', :allow_override => 'tracker,category,priority') | |
|
234 | assert issue.is_a?(Issue) | |
|
235 | assert !issue.new_record? | |
|
236 | issue.reload | |
|
237 | assert_nil issue.start_date | |
|
238 | assert_nil issue.due_date | |
|
239 | assert_equal 0, issue.done_ratio | |
|
240 | assert_equal 'Normal', issue.priority.to_s | |
|
241 | assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.') | |
|
242 | end | |
|
243 | ||
|
232 | 244 | def test_add_issue_with_localized_attributes |
|
233 | 245 | User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr' |
|
234 | 246 | issue = submit_email('ticket_with_localized_attributes.eml', :allow_override => 'tracker,category,priority') |
General Comments 0
You need to be logged in to leave comments.
Login now