Sha256: f691bfb84465efd6c2ae9526e989aed14457bfba44a244e1c53a8c364fa06301

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

require 'mail'

module Ruml
  class Broadcaster
    def initialize(ml, message)
      @ml = ml
      @message = Mail.new(message)
    end

    def valid_member?
      expected = @message.from.size
      actual   = (@message.from.map(&:downcase) & @ml.members.map(&:downcase)).size
      expected == actual
    end

    def been_there?
      @message['X-BeenThere'].to_s == @ml.to
    end

    def add_headers!(mail)
      mail['X-BeenThere'] = @ml.to
      mail['List-Id']     = "<#{@ml.id}>"
      mail['List-Post']   = "<mailto:#{@ml.to}>"
      mail['Precedence']  = 'list'
      mail['Sender']      = @ml.bounce_to
      mail['Errors-To']   = @ml.bounce_to
      mail['User-Agent']  = @message['User-Agent'].value if @message['User-Agent']
    end

    def add_body!(mail)
      if @message.multipart?
        @message.parts.each do |part|
          mail.add_part part
        end
      else
        mail.body @message.body.raw_source
      end
    end

    def from
      @message.from.first
    end

    def to
      @ml.to
    end

    def recipients
      @ml.members
    end

    def subject
      if @ml.name && !@message.subject.include?(@ml.name)
        "#{@ml.name} #{@message.subject}"
      else
        @message.subject
      end
    end

    def broadcastable?
      !been_there? && valid_member?
    end

    def broadcast!
      return unless broadcastable?
      mail = Mail.new
      mail.subject  subject
      mail.from     from
      mail.to       to
      mail.bcc      recipients

      add_headers! mail
      add_body! mail

      mail.deliver
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ruml-1.0.0 lib/ruml/broadcaster.rb