class EmailSubscription < ApplicationRecord EMAIL_LEVEL_MAX = 3 EMAIL_LEVEL_UNSUBSCRIBED = 0 EMAIL_LEVEL_INVALID = -1 EMAIL_LEVEL_BOUNCES = -2 has_many :email_transactions belongs_to :user, polymorphic: true def can_level_up self.level < EmailSubscription::EMAIL_LEVEL_MAX end def can_level_down self.level > EmailSubscription::EMAIL_LEVEL_UNSUBSCRIBED end def less_url "#{ENV["HOST"]}/email_subscriptions/#{self.token}/less" end def more_url "#{ENV["HOST"]}/email_subscriptions/#{self.token}/more" end def unsubscribe_url "#{ENV["HOST"]}/email_subscriptions/#{self.token}/unsubscribe" end def mute_url_for_campaign(campaign) "#{ENV["HOST"]}/email_subscriptions/#{self.token}/mute/#{campaign.id}" end def muted_campaigns if self.muted_campaigns_json != nil return JSON.parse(self.muted_campaigns_json) else return [] end end def mute_campaign(campaign) muted = self.muted_campaigns if !muted.include? campaign.id muted.push(campaign.id) end self.muted_campaigns_json = muted.to_json end def is_campaign_muted(campaign) return self.muted_campaigns.include? campaign.id end def self.create_for_user(user) subscription = EmailSubscription.new subscription.user = user subscription.level = EmailSubscription::EMAIL_LEVEL_MAX subscription.token = Digest::SHA256.hexdigest(SecureRandom.random_bytes(32)) subscription.save subscription end end