Class: MailManager::Subscription

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
StatusHistory
Defined in:
app/models/mail_manager/subscription.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from StatusHistory

#change_status, included, #set_default_status, #status, #status=, #status_changed_at=

Class Method Details

.change_subscription_status(contact, mailing_list, status) ⇒ Object

changes or creates a subscription for the given contact and list and assigns the given status



59
60
61
62
63
64
65
66
# File 'app/models/mail_manager/subscription.rb', line 59

def self.change_subscription_status(contact, mailing_list, status)
  subscription = self.find_by_contact_id_and_mailing_list_id(contact.id, mailing_list.id)
  return subscription.change_status(status) if subscription
  subscription = Subscription.new
  subscription.contact = contact
  subscription.mailing_list = mailing_list
  subscription.change_status(status)
end

.fail_by_email_address(email_address) ⇒ Object



107
108
109
110
111
112
113
# File 'app/models/mail_manager/subscription.rb', line 107

def self.fail_by_email_address(email_address)
  Contact.find_all_by_email_address(email_address).each do |contact|
    contact.active_subscriptions.each do |subscription|
      subscription.change_status(:failed_address)
    end
  end
end

.subscribe(contact, mailing_list) ⇒ Object

subscribes the contact to the list



69
70
71
# File 'app/models/mail_manager/subscription.rb', line 69

def self.subscribe(contact, mailing_list)
  change_subscription_status(contact, mailing_list, 'active')
end

.unsubscribe(contact, mailing_list) ⇒ Object

unsubscribes the contact from the list



74
75
76
# File 'app/models/mail_manager/subscription.rb', line 74

def self.unsubscribe(contact, mailing_list)
  change_subscription_status(contact, mailing_list, 'unsubscribed')
end

.unsubscribe_by_email_address(email_address) ⇒ Object



115
116
117
118
119
120
121
122
123
# File 'app/models/mail_manager/subscription.rb', line 115

def self.unsubscribe_by_email_address(email_address)
  subscriptions = []
  Contact.find_all_by_email_address(email_address).each do |contact|
    subscriptions += contact.active_subscriptions.each do |subscription|
      subscription.change_status(:unsubscribed)
    end
  end
  subscriptions
end

.unsubscribe_by_message_guid(guid) ⇒ Object

unsubscribes a contact from all lists by looking them up through a messages GUID FIXME: when we add more lists and the ability to have multiple subscriptions, this should remove only the list that is tied in the GUID and they should be linked to their options



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'app/models/mail_manager/subscription.rb', line 89

def self.unsubscribe_by_message_guid(guid)
  message = Message.find_by_guid(guid)
  contact = message.contact
  if message
    begin
      unsubscribed_subscriptions = self.unsubscribe_by_email_address(message.contact.email_address)
      Mailer.deliver_unsubscribed(message,unsubscribed_subscriptions) unless unsubscribed_subscriptions.empty?
      return unsubscribed_subscriptions
    rescue => e
      Rails.logger.warn "Error Unsubscribing email: #{message.contact.email_address}\n#{e.message}\n #{e.backtrace.join("\n ")}"
      raise "An error occured."
    end
  else
    raise "Could not find your subscription!"
  end
  nil
end

Instance Method Details

#active?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'app/models/mail_manager/subscription.rb', line 82

def active?
  status.eql?('active')
end

#contact_full_nameObject

acts_as_audited rescue Rails.logger.warn “Audit Table not defined!”



54
55
56
# File 'app/models/mail_manager/subscription.rb', line 54

def contact_full_name
   contact.full_name
end

#mailing_list_nameObject



78
79
80
# File 'app/models/mail_manager/subscription.rb', line 78

def mailing_list_name
  mailing_list.try(:name)
end