class MailFinder

Attributes

user_identity[RW]

Public Class Methods

email_text_body(mail) click to toggle source
# File lib/turnip/extra_steps/support/mail_finder.rb, line 48
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
find(conditions) click to toggle source
# File lib/turnip/extra_steps/support/mail_finder.rb, line 8
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
log(mail) click to toggle source
# File lib/turnip/extra_steps/support/mail_finder.rb, line 34
def log(mail)
  if mail.present?
    if defined?(Rails)
      File.open(Rails.root.join("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
end
resolve_email(identity) click to toggle source
# File lib/turnip/extra_steps/support/mail_finder.rb, line 26
def resolve_email(identity)
  if identity =~ /^.+\@.+$/
    identity
  else
    User.send("find_by_#{user_identity || 'email'}!", identity).email
  end
end