Sha256: c8fac8f5ed0c21379178404e3bbb11f05d967c40b6393a2bbebd262ce459af44

Contents?: true

Size: 1.12 KB

Versions: 12

Compression:

Stored size: 1.12 KB

Contents

module Emailer
  class MailQueue
    def initialize(smtp)
      @smtp = smtp
      @queue = []
    end
    
    def empty?
      @queue.empty?
    end
    
    def length
      @queue.length
    end
    
    def add(mail, &callback)
      mail[:content_type] ||= 'text/plain'
      mail[:encoding] ||= 'utf-8'
      
      @queue << mail.merge(:callback => callback)
    end
    
    def add_html(mail, &callback)
      add({ :content_type => 'text/html' }.merge(mail), &callback)
    end
    
    def last
      @queue.last
    end
    
    def process(tcount = 4)
      tcount = length if length < tcount
      
      threads = []
      mutex = Mutex.new
      
      tcount.times do |n|
        threads << Thread.new(n) do |tid|
          while !empty?
            send_mail mutex
          end
        end
      end
      
      threads.each { |thr| thr.join }
    end
    
    def send_mail(mutex)
      smtp = @smtp.clone
      smtp.open do
        while mail = mutex.synchronize { @queue.shift }
          result = smtp.send_mail mail
          mail[:callback].call(result, mail) if mail[:callback]
        end
      end
    end
    
  end
end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
bjornblomqvist-emailer-0.1.11 lib/emailer/mail_queue.rb
bjornblomqvist-emailer-0.1.12 lib/emailer/mail_queue.rb
bjornblomqvist-emailer-0.1.13 lib/emailer/mail_queue.rb
bjornblomqvist-emailer-0.1.15 lib/emailer/mail_queue.rb
bjornblomqvist-emailer-0.1.4 lib/emailer/mail_queue.rb
bjornblomqvist-emailer-0.1.5 lib/emailer/mail_queue.rb
bjornblomqvist-emailer-0.1.6 lib/emailer/mail_queue.rb
bjornblomqvist-emailer-0.1.7 lib/emailer/mail_queue.rb
bjornblomqvist-emailer-0.1.9 lib/emailer/mail_queue.rb
erikhansson-emailer-0.1.2 lib/emailer/mail_queue.rb
erikhansson-emailer-0.1.3 lib/emailer/mail_queue.rb
erikhansson-emailer-0.1.4 lib/emailer/mail_queue.rb