Sha256: c5737e06e486d2c06fd218a0561eb57406cc19ede906a2030eae3ed99a370a85

Contents?: true

Size: 1.93 KB

Versions: 30

Compression:

Stored size: 1.93 KB

Contents

# coding: UTF-8

class MailFinder
  class << self

    attr_accessor :user_identity

    def find(conditions)
      filename_method = Rails::VERSION::MAJOR < 3 ? 'original_filename' : 'filename'
      ActionMailer::Base.deliveries.detect do |mail|
        mail_body = email_text_body(mail)
        [ conditions[:to].nil? || mail.to.include?(resolve_email conditions[:to]),
          conditions[:cc].nil? || mail.cc.andand.include?(resolve_email conditions[:cc]),
          conditions[:bcc].nil? || mail.bcc.andand.include?(resolve_email conditions[:bcc]),
          conditions[:from].nil? || mail.from.include?(resolve_email conditions[:from]),
          conditions[:reply_to].nil? || mail.reply_to.include?(resolve_email conditions[:reply_to]),
          conditions[:subject].nil? || mail.subject.include?(conditions[:subject]),
          conditions[:body].nil? || mail_body.include?(conditions[:body]),
          conditions[:attachments].nil? || conditions[:attachments].split(/\s*,\s*/).sort == Array(mail.attachments).collect(&:"#{filename_method}").sort
        ].all?
      end.tap do |mail|
        log(mail)
      end
    end

    def resolve_email(identity)
      if identity =~ /^.+\@.+$/
        identity
      else
        User.send("find_by_#{user_identity || 'email'}!", identity).email
      end
    end

    def log(mail)
      if mail.present?
        File.open("log/test_mails.log", "a") do |file|
          file << "From: #{mail.from}\n"
          file << "To: #{mail.to.join(', ')}\n" if mail.to
          file << "Subject: #{mail.subject}\n\n"
          file << email_text_body(mail)
          file << "\n-------------------------\n\n"
        end
      end
    end

    def email_text_body(mail)
      if mail.parts.any?
        mail.parts.select { |part| part.content_type.include?('text/') }.collect(&:decoded).join("\n")
      elsif mail.body.respond_to? :raw_source
        mail.body.raw_source
      else
        mail.body
      end
    end

  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
spreewald-1.2.6 lib/spreewald_support/mail_finder.rb
spreewald-1.2.5 lib/spreewald_support/mail_finder.rb
spreewald-1.2.4 lib/spreewald_support/mail_finder.rb
spreewald-1.2.3 lib/spreewald_support/mail_finder.rb
spreewald-1.2.2 lib/spreewald_support/mail_finder.rb
spreewald-1.2.1 lib/spreewald_support/mail_finder.rb
spreewald-1.2.0 lib/spreewald_support/mail_finder.rb
spreewald-1.1.2 lib/spreewald_support/mail_finder.rb
spreewald-1.1.1 lib/spreewald_support/mail_finder.rb
spreewald-1.1.0 lib/spreewald_support/mail_finder.rb
spreewald-1.0.0 lib/spreewald_support/mail_finder.rb
spreewald-0.10.0 lib/spreewald_support/mail_finder.rb
spreewald-0.9.9 lib/spreewald_support/mail_finder.rb
spreewald-0.9.8 lib/spreewald_support/mail_finder.rb
spreewald-0.9.7 lib/spreewald_support/mail_finder.rb
spreewald-0.9.6 lib/spreewald_support/mail_finder.rb
spreewald-0.9.5 lib/spreewald_support/mail_finder.rb
spreewald-0.9.4 lib/spreewald_support/mail_finder.rb
spreewald-0.9.3 lib/spreewald_support/mail_finder.rb
spreewald-0.9.2 lib/spreewald_support/mail_finder.rb