From 32f573194788cb3d66dab27c5dad18525c128ee4 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 25 Feb 2007 11:14:33 +0000 Subject: [PATCH] added mailing_message model and Mailer.receive method git-svn-id: http://redmine.rubyforge.org/svn/branches/work@265 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- mailing_lists/app/models/mailer.rb | 15 +++++++++++++++ mailing_lists/app/models/mailing_list.rb | 1 + mailing_lists/app/models/mailing_message.rb | 4 ++++ .../db/migrate/025_create_mailing_messages.rb | 10 ++++++++++ mailing_lists/test/fixtures/mailing_messages.yml | 5 +++++ mailing_lists/test/unit/mailing_message_test.rb | 10 ++++++++++ 6 files changed, 45 insertions(+) create mode 100644 mailing_lists/app/models/mailing_message.rb create mode 100644 mailing_lists/db/migrate/025_create_mailing_messages.rb create mode 100644 mailing_lists/test/fixtures/mailing_messages.yml create mode 100644 mailing_lists/test/unit/mailing_message_test.rb diff --git a/mailing_lists/app/models/mailer.rb b/mailing_lists/app/models/mailer.rb index 42d20ecac..108923e28 100644 --- a/mailing_lists/app/models/mailer.rb +++ b/mailing_lists/app/models/mailer.rb @@ -85,4 +85,19 @@ class Mailer < ActionMailer::Base @subject = l(:mail_subject_register) @body['token'] = token end + + def receive(email) + to_names = email.to.collect { |to| to.gsub(/@.*$/,'') } + @mailing_list = MailingList.find_all_by_name(to_names).first + + in_reply_to = @mailing_list.messages.find(:first, :conditions => ["messageid=?", email.in_reply_to.first]) if email.in_reply_to + + MailingMessage.create(:mailing_list => @mailing_list, + :parent => in_reply_to, + :messageid => email.message_id, + :from => email.from.first, + :subject => email.subject, + :body => email.body, + :sent_on => (email.date || Time.now)) if @mailing_list + end end diff --git a/mailing_lists/app/models/mailing_list.rb b/mailing_lists/app/models/mailing_list.rb index 4f11cd960..b9f9fc7af 100644 --- a/mailing_lists/app/models/mailing_list.rb +++ b/mailing_lists/app/models/mailing_list.rb @@ -18,6 +18,7 @@ class MailingList < ActiveRecord::Base belongs_to :project belongs_to :admin, :class_name => 'User', :foreign_key => 'admin_id' + has_many :messages, :class_name => 'MailingMessage', :dependent => :delete_all validates_presence_of :name, :description diff --git a/mailing_lists/app/models/mailing_message.rb b/mailing_lists/app/models/mailing_message.rb new file mode 100644 index 000000000..06e92e8cb --- /dev/null +++ b/mailing_lists/app/models/mailing_message.rb @@ -0,0 +1,4 @@ +class MailingMessage < ActiveRecord::Base + belongs_to :mailing_list + acts_as_tree :order => 'sent_on' +end diff --git a/mailing_lists/db/migrate/025_create_mailing_messages.rb b/mailing_lists/db/migrate/025_create_mailing_messages.rb new file mode 100644 index 000000000..ed1ae59af --- /dev/null +++ b/mailing_lists/db/migrate/025_create_mailing_messages.rb @@ -0,0 +1,10 @@ +class CreateMailingMessages < ActiveRecord::Migration + def self.up + create_table :mailing_messages do |t| + end + end + + def self.down + drop_table :mailing_messages + end +end diff --git a/mailing_lists/test/fixtures/mailing_messages.yml b/mailing_lists/test/fixtures/mailing_messages.yml new file mode 100644 index 000000000..b49c4eb4e --- /dev/null +++ b/mailing_lists/test/fixtures/mailing_messages.yml @@ -0,0 +1,5 @@ +# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html +one: + id: 1 +two: + id: 2 diff --git a/mailing_lists/test/unit/mailing_message_test.rb b/mailing_lists/test/unit/mailing_message_test.rb new file mode 100644 index 000000000..845769f6c --- /dev/null +++ b/mailing_lists/test/unit/mailing_message_test.rb @@ -0,0 +1,10 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class MailingMessageTest < Test::Unit::TestCase + fixtures :mailing_messages + + # Replace this with your real tests. + def test_truth + assert true + end +end