Sha256: f4b82797ffc002296e4d9df6ab48977d241f37fb06df092ecd0fece07c407e8c

Contents?: true

Size: 1.64 KB

Versions: 13

Compression:

Stored size: 1.64 KB

Contents

module MList
  class Server
    attr_reader :list_manager, :email_server, :notifier
    
    def initialize(config)
      @list_manager = config[:list_manager]
      @email_server = config[:email_server]
      @notifier = MList::Manager::Notifier.new
      @email_server.receiver(self)
    end
    
    def receive_email(email)
      lists = list_manager.lists(email)
      if lists.empty?
        list_manager.no_lists_found(email)
      elsif email.bounce?
        process_bounce(lists.first, email)
      else
        process_post(lists, email)
      end
    end
    
    def mail_list(list)
      MailList.find_or_create_by_list(list, @email_server)
    end
    
    protected
      def process_post(lists, email)
        lists.each do |list|
          next if list.been_here?(email)
          if list.subscriber?(email.from_address)
            publish_if_list_active(list, email)
          else
            list.non_subscriber_post(email)
          end
        end
      end
      
      def publish_if_list_active(list, email)
        if list.active?
          subscriber = list.subscriber(email.from_address)
          publish_unless_blocked(list, email, subscriber)
        else
          list.inactive_post(email)
        end
      end
      
      def publish_unless_blocked(list, email, subscriber)
        if list.blocked?(subscriber)
          notice_delivery = notifier.subscriber_blocked(list, email, subscriber)
          email_server.deliver(notice_delivery.tmail)
        else
          mail_list(list).process_email(email, subscriber)
        end
      end
      
      def process_bounce(list, email)
        list.bounce(email)
      end
      
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
mlist-0.1.23 lib/mlist/server.rb
mlist-0.1.22 lib/mlist/server.rb
mlist-0.1.21 lib/mlist/server.rb
mlist-0.1.20 lib/mlist/server.rb
mlist-0.1.19 lib/mlist/server.rb
mlist-0.1.18 lib/mlist/server.rb
mlist-0.1.17 lib/mlist/server.rb
mlist-0.1.16 lib/mlist/server.rb
mlist-0.1.14 lib/mlist/server.rb
mlist-0.1.13 lib/mlist/server.rb
mlist-0.1.12 lib/mlist/server.rb
mlist-0.1.11 lib/mlist/server.rb
mlist-0.1.10 lib/mlist/server.rb