AyuntamientoMadrid/participacion

View on GitHub
app/lib/email_digest.rb

Summary

Maintainability
A
0 mins
Test Coverage
class EmailDigest
  attr_accessor :user

  def initialize(user)
    @user = user
  end

  def notifications
    user.notifications.not_emailed.where(notifiable_type: "ProposalNotification")
  end

  def pending_notifications?
    notifications.any?
  end

  def deliver(run_at)
    if valid_email? && pending_notifications?
      Mailer.delay(run_at: run_at).proposal_notification_digest(user, notifications.to_a)
      mark_as_emailed
    end
  end

  def mark_as_emailed
    notifications.update_all(emailed_at: Time.current)
    user.update!(failed_email_digests_count: 0)
  end

  def valid_email?
    user.email.present? && user.email.match(/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i)
  end
end