Sha256: 3da63da7278c7d13c6edd93265f618b1ccf180a457341b5a221388241a358d4a

Contents?: true

Size: 1.25 KB

Versions: 7

Compression:

Stored size: 1.25 KB

Contents

module Mailboxer
  class MailDispatcher

    attr_reader :mailable, :recipients

    def initialize(mailable, recipients)
      @mailable, @recipients = mailable, recipients
    end

    def call
      return false unless Mailboxer.uses_emails
      if Mailboxer.mailer_wants_array
        send_email(filtered_recipients)
      else
        filtered_recipients.each do |recipient|
          email_to = recipient.send(Mailboxer.email_method, mailable)
          send_email(recipient) if email_to.present?
        end
      end
    end

    private

    def mailer
      klass = mailable.class.name.demodulize
      method = "#{klass.downcase}_mailer".to_sym
      Mailboxer.send(method) || "#{mailable.class}Mailer".constantize
    end

    # recipients can be filtered on a conversation basis
    def filtered_recipients
      return recipients unless mailable.respond_to?(:conversation)

      recipients.each_with_object([]) do |recipient, array|
        array << recipient if mailable.conversation.has_subscriber?(recipient)
      end
    end

    def send_email(recipient)
      if Mailboxer.custom_deliver_proc
        Mailboxer.custom_deliver_proc.call(mailer, mailable, recipient)
      else
        mailer.send_email(mailable, recipient).deliver
      end
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
mailboxer-0.12.4 lib/mailboxer/mail_dispatcher.rb
mailboxer-0.12.3 lib/mailboxer/mail_dispatcher.rb
mailboxer-0.12.2 lib/mailboxer/mail_dispatcher.rb
mailboxer-0.12.1 lib/mailboxer/mail_dispatcher.rb
mailboxer-0.12.0 lib/mailboxer/mail_dispatcher.rb
mailboxer-0.12.0.rc2 lib/mailboxer/mail_dispatcher.rb
mailboxer-0.12.0.rc1 lib/mailboxer/mail_dispatcher.rb