Module: MailManager::ContactableRegistry::Contactable

Included in:
MailManager::Contact
Defined in:
app/models/mail_manager/contactable_registry.rb

Defined Under Namespace

Modules: Associations, AttrAccessors

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(model) ⇒ Object



193
194
195
196
# File 'app/models/mail_manager/contactable_registry.rb', line 193

def self.included(model)
  model.send(:include, Associations)
  model.send(:include, AttrAccessors)
end

Instance Method Details

#active_subscriptionsObject



137
138
139
# File 'app/models/mail_manager/contactable_registry.rb', line 137

def active_subscriptions
  subscriptions.select{|subscription| subscription.active?}
end

#change_subscription_status(mailing_list, status) ⇒ Object



107
108
109
# File 'app/models/mail_manager/contactable_registry.rb', line 107

def change_subscription_status(mailing_list,status)
  set_contactable_data && MailManager::Subscription.change_subscription_status(contact,mailing_list,status)
end

#contactable_method(method) ⇒ Object



119
120
121
122
123
124
125
# File 'app/models/mail_manager/contactable_registry.rb', line 119

def contactable_method(method)
  begin
    MailManager::ContactableRegistry.contactable_method(self.class.name,method.to_sym)
  rescue => e
    method
  end
end

#contactable_value(method) ⇒ Object



111
112
113
114
115
116
117
# File 'app/models/mail_manager/contactable_registry.rb', line 111

def contactable_value(method)
  begin
    send(contactable_method(method.to_sym))
  rescue => e
    nil
  end
end

#destroyObject



141
142
143
144
145
146
# File 'app/models/mail_manager/contactable_registry.rb', line 141

def destroy
  self.transaction do
    super
    contact.try(:delete)
  end
end

#get_subscription_atttributes_for_subscription(subscription) ⇒ Object



92
93
94
95
96
# File 'app/models/mail_manager/contactable_registry.rb', line 92

def get_subscription_atttributes_for_subscription(subscription)
  return {} if @subscriptions_attributes.nil?
  subscriptions_attributes.values.detect{|subscription_attributes| 
    subscription_attributes[:mailing_list_id].to_i == subscription.mailing_list_id.to_i} || {}
end

#initialize_subscriptionsObject



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

def initialize_subscriptions
  if self.contact.nil?
    self.contact = MailManager::Contact.new(
      :first_name => contactable_value(:first_name).to_s,
      :last_name => contactable_value(:last_name).to_s,
      :email_address => contactable_value(:email_address).to_s)
  end
  self.contact.initialize_subscriptions
end

#reloadObject



127
128
129
# File 'app/models/mail_manager/contactable_registry.rb', line 127

def reload
  @subscriptions = nil
end

#save(*args) ⇒ Object



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'app/models/mail_manager/contactable_registry.rb', line 148

def save(*args)
  success = true
  if args[0] != false
    begin 
      transaction do 
        success = success && super
        if self.contactable_value(:email_address).present?
          Rails.logger.debug "User save super success? #{success.inspect}"
          success = update_subscription_data && success
          Rails.logger.debug "User save subscription data success? #{success.inspect}"
          success = update_contactable_data unless (!success or self.is_a?(MailManager::Contact))
          Rails.logger.debug "User save contactable data success? #{success.inspect}"
        end
        raise "Failed to update contactable and/or #{self.class.name} data." unless success
      end
    rescue => e
      Rails.logger.debug "User save failed! #{e.message} #{e.backtrace.join("\n  ")}"
    end
    Rails.logger.debug "User save successful? #{success}"
  else
    success = super
  end
  success
end

#set_contactable_dataObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'app/models/mail_manager/contactable_registry.rb', line 39

def set_contactable_data
  unless self.is_a?(MailManager::Contact)
    if self.contact.present?
      self.contact.update_attributes(
        :first_name => contactable_value(:first_name).to_s,
        :last_name => contactable_value(:last_name).to_s,
        :email_address => contactable_value(:email_address).to_s)
    else
      self.contact = Contact.new(
        :contactable => self,
        :first_name => contactable_value(:first_name).to_s,
        :last_name => contactable_value(:last_name).to_s,
        :email_address => contactable_value(:email_address).to_s
      )
    end
  end
  self.contact.present? and self.contact.errors.empty?
end

#subscribe(mailing_list, status = 'active') ⇒ Object



98
99
100
101
# File 'app/models/mail_manager/contactable_registry.rb', line 98

def subscribe(mailing_list, status='active')
  set_contactable_data
  MailManager::Subscription.subscribe(contact,mailing_list, status)
end

#subscription_status_for(mailing_list) ⇒ Object



68
69
70
# File 'app/models/mail_manager/contactable_registry.rb', line 68

def subscription_status_for(mailing_list)
  subscriptions.detect{|subscription| subscription.mailing_list_id.eql?(mailing_list.id)}.status
end

#subscriptionsObject



131
132
133
134
135
# File 'app/models/mail_manager/contactable_registry.rb', line 131

def subscriptions
  return @subscriptions unless @subscriptions.nil?
  set_contactable_data unless self.contact.present?
  @subscriptions = contact.initialize_subscriptions
end

#unsubscribe(mailing_list) ⇒ Object



103
104
105
# File 'app/models/mail_manager/contactable_registry.rb', line 103

def unsubscribe(mailing_list)
  set_contactable_data && MailManager::Subscription.unsubscribe(contact,mailing_list)
end

#update_contactable_dataObject

FIXME: this is NOT secure!!!!



36
37
38
# File 'app/models/mail_manager/contactable_registry.rb', line 36

def update_contactable_data
  set_contactable_data && self.contact.save
end

#update_subscription_dataObject



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'app/models/mail_manager/contactable_registry.rb', line 72

def update_subscription_data
  Rails.logger.debug "Updating Subscriptions: #{@subscriptions_attributes.inspect} - #{subscriptions.inspect}"
  subscriptions.each do |subscription|
    Rails.logger.debug "Updating Subscription attributes for: #{subscription.inspect}"
    unless @subscriptions_attributes.nil?
      subscription_attributes = get_subscription_atttributes_for_subscription(subscription)
      if subscription.new_record? and subscription_attributes[:status] != 'active'
        Rails.logger.debug "Skipping new subscription save, since we're not subscribing"
        subscription.change_status(subscription_attributes[:status],false)
        #mucking with the array messes up the each!
        #subscriptions.delete_if{|my_subscription| my_subscription.mailing_list_id == subscription.mailing_list_id}
      elsif subscription_attributes[:status].present?
        Rails.logger.debug "Changing from #{subscription.status} to #{subscription_attributes[:status]}"
        subscription.change_status(subscription_attributes[:status])
      end
    end
  end
  true
end