Module: MailManager::ContactableRegistry::Contactable
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_subscriptions ⇒ Object
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
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
|
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
|
#destroy ⇒ Object
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_subscriptions ⇒ Object
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
|
#reload ⇒ Object
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
|
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
|
#subscriptions ⇒ Object
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
|
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_data ⇒ Object
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)
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
|