From d793bdc3c745e26f4b1b212280521c901ea58e01 Mon Sep 17 00:00:00 2001
From: zhitomirskiyi <ilya@joindiaspora.com>
Date: Thu, 4 Nov 2010 12:04:07 -0700
Subject: [PATCH] inital commit for mailqueue

---
 app/mailers/notifier.rb            | 10 ++++++++++
 lib/diaspora/user/friending.rb     |  4 ++--
 script/mail_worker.rb              |  2 ++
 script/server                      |  1 +
 script/websocket_server.rb         |  3 ++-
 spec/models/user/friending_spec.rb |  7 +++----
 spec/spec_helper.rb                |  3 +++
 7 files changed, 23 insertions(+), 7 deletions(-)
 create mode 100644 script/mail_worker.rb

diff --git a/app/mailers/notifier.rb b/app/mailers/notifier.rb
index 36047d0593..e5a2b2c3de 100644
--- a/app/mailers/notifier.rb
+++ b/app/mailers/notifier.rb
@@ -5,6 +5,7 @@ class Notifier < ActionMailer::Base
   ATTACHMENT =  File.read("#{Rails.root}/public/images/diaspora_white_on_grey.png")  
 
   def new_request(recipient, sender)
+    puts "I'm in new request"
     @receiver = recipient
     @sender = sender
     attachments.inline['diaspora_white_on_grey.png'] = ATTACHMENT 
@@ -22,4 +23,13 @@ class Notifier < ActionMailer::Base
     mail(:to => "#{recipient.real_name} <#{recipient.email}>",
     :subject => "#{@sender.real_name} has accepted your friend request on Diaspora*", :host => APP_CONFIG[:terse_pod_url])
   end
+
+
+  def self.send_request_accepted!(user, person, aspect)
+    Notifier.async.request_accepted(user, person, aspect ).deliver.commit!
+  end
+
+  def self.send_new_request!(user, person)
+    Notifier.async.new_request(user, person).deliver.commit!
+  end
 end
diff --git a/lib/diaspora/user/friending.rb b/lib/diaspora/user/friending.rb
index adddc1381b..8561462d3e 100644
--- a/lib/diaspora/user/friending.rb
+++ b/lib/diaspora/user/friending.rb
@@ -67,7 +67,7 @@ module Diaspora
           Rails.logger.info("#{self.real_name}'s friend request has been accepted")
           friend_request.destroy
           original_request.destroy
-          Notifier.request_accepted(self, friend_request.person, destination_aspect)
+          Notifier.send_request_accepted!(self, friend_request.person, destination_aspect)
 
         #this is a new friend request
         elsif !request_from_me?(friend_request)
@@ -75,7 +75,7 @@ module Diaspora
           self.save
           Rails.logger.info("#{self.real_name} has received a friend request")
           friend_request.save
-          Notifier.new_request(self, friend_request.person).deliver
+          Notifier.send_new_request!(self, friend_request.person)
         else
           raise "#{self.real_name} is trying to receive a friend request from himself."
         end
diff --git a/script/mail_worker.rb b/script/mail_worker.rb
new file mode 100644
index 0000000000..cd1c388737
--- /dev/null
+++ b/script/mail_worker.rb
@@ -0,0 +1,2 @@
+require File.dirname(__FILE__) + '/../config/environment'
+Magent::Processor.new(Magent::AsyncChannel.new(:default)).run!
diff --git a/script/server b/script/server
index 5ace36a610..fd6ea24482 100755
--- a/script/server
+++ b/script/server
@@ -50,4 +50,5 @@ fi
 
 mkdir -p -v log/thin/
 bundle exec ruby ./script/websocket_server.rb&
+bundle exec ruby ./script/mail_worker.rb&
 bundle exec thin start $args
diff --git a/script/websocket_server.rb b/script/websocket_server.rb
index 2b308832b6..518a548722 100644
--- a/script/websocket_server.rb
+++ b/script/websocket_server.rb
@@ -39,11 +39,12 @@ def process_message
   else
     EM::Timer.new(1){process_message}
   end
-
 end
 
 begin
   EM.run {
+
+
     Diaspora::WebSocket.initialize_channels
 
     EventMachine::WebSocket.start(
diff --git a/spec/models/user/friending_spec.rb b/spec/models/user/friending_spec.rb
index e6c8ada994..a1850cab6a 100644
--- a/spec/models/user/friending_spec.rb
+++ b/spec/models/user/friending_spec.rb
@@ -18,6 +18,7 @@ describe Diaspora::UserModules::Friending do
   let(:user2) { make_user }
   let(:aspect2) { user2.aspects.create(:name => "aspect two") }
 
+
   context 'friend requesting' do
     it "should assign a request to a aspect for the user that sent it out" do
       aspect.requests.size.should == 0
@@ -87,7 +88,7 @@ describe Diaspora::UserModules::Friending do
     end
 
     it 'should send an email on acceptance if a friend request' do
-      Notifier.should_receive(:request_accepted)
+      Notifier.should_receive(:send_request_accepted!)
       request = user.send_friend_request_to(user2.person, aspect)
       user.receive_friend_request(request.reverse_for(user2))
     end
@@ -133,9 +134,7 @@ describe Diaspora::UserModules::Friending do
         end
 
         it 'sends an email to the receiving user' do
-          mail_obj = mock("mailer")
-          mail_obj.should_receive(:deliver)
-          Notifier.should_receive(:new_request).and_return(mail_obj)
+          Notifier.should_receive(:send_new_request!).and_return(true)
           user.receive @req_xml, person_one
         end
       end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 0c582b65f1..43ffa2304f 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -33,6 +33,9 @@ RSpec.configure do |config|
     EventMachine::HttpRequest.any_instance.stubs(:get)
     DatabaseCleaner.clean
     UserFixer.load_user_fixtures
+    Notifier.stub!(:send_request_accepted!).and_return(true)
+    Notifier.stub!(:send_new_request!).and_return(true)
+
   end
 end
 
-- 
GitLab