app/models/user/email_alerts.rb
class User
# Public: Advanced mechanisms to control a User's email alert preferences.
class EmailAlerts
# Public: Find a User by a token String and disable their email alerts.
#
# token - String token generated by the `verifier`.
#
# Returns a Boolean.
def self.disable_by_token(token)
id = verifier.verify(token)
new(User.find(id)).disable
rescue ActiveSupport::MessageVerifier::InvalidSignature
false
rescue ActiveRecord::RecordNotFound
false
end
# Public: Generate a unique token for managing the User's email alerts.
#
# user - The User to generate a token for.
#
# Returns a String.
def self.token(user)
verifier.generate(user.id)
end
# A `MessageVerifier` to generate tokens specifically for managing email
# alerts.
#
# The secret used is the class name, so tokens generated by another
# `MessageVerifier` will not be valid when used with this class.
#
# Returns an `ActiveSupport::MessageVerifier`.
def self.verifier
Rails.application.message_verifier(to_s)
end
def initialize(user)
@user = user
end
# Public: Disable email alerts for the User.
#
# Returns a Boolean.
def disable
user.update(receive_email_alerts: false)
end
private
attr_reader :user
end
end