class Responsys::Member
Attributes
client[RW]
email[RW]
user_riid[RW]
Public Class Methods
new(email, riid = nil)
click to toggle source
# File lib/responsys/member.rb, line 10 def initialize(email, riid = nil) @email = email @user_riid = riid end
Public Instance Methods
add_to_list(list, subscribe = false, details = {}, update_record = false)
click to toggle source
# File lib/responsys/member.rb, line 15 def add_to_list(list, subscribe = false, details = {}, update_record = false) data = { EMAIL_ADDRESS_: @email, EMAIL_PERMISSION_STATUS_: subscribe ? "I" : "O" } safe_details = {} details.each do |k,v| next if reserved_fields.include? r_key(k) if [Time, Date, DateTime].include?(v.class) safe_details[r_key(k)] = details[k].strftime('%Y-%m-%dT%H:%M:%S%z') else safe_details[r_key(k)] = details[k] end end data = data.merge( safe_details ) record = RecordData.new([data]) Client.new.run do |client| client.merge_list_members_riid(list, record, ListMergeRule.new(insertOnNoMatch: true, updateOnMatch: (update_record ? 'REPLACE_ALL' : 'NO_UPDATE'))) end end
present_in_list?(list, raising = false)
click to toggle source
# File lib/responsys/member.rb, line 76 def present_in_list?(list, raising = false) Client.new.run(raising) do |client| if !@user_riid.nil? response = lookup_list_via_key(list, "RIID", @user_riid) else response = lookup_list_via_key(list, "EMAIL_ADDRESS", @email) end !(response[:status] == "failure" && response[:error][:code] == "RECORD_NOT_FOUND") end end
present_in_profile?(list, raising = false)
click to toggle source
# File lib/responsys/member.rb, line 66 def present_in_profile?(list, raising = false) Client.new.run(raising) do |client| return Responsys::Helper.format_response_with_message("member.riid_missing") if @user_riid.nil? response = lookup_profile_via_key(list, "RIID", @user_riid) !(response[:status] == "failure" && response[:error][:code] == "RECORD_NOT_FOUND") end end
retrieve_profile_extension(profile_extension, fields)
click to toggle source
# File lib/responsys/member.rb, line 36 def retrieve_profile_extension(profile_extension, fields) Client.new.run do |client| return Responsys::Helper.format_response_with_message("member.riid_missing") if @user_riid.nil? return Responsys::Helper.format_response_with_message("member.record_not_found") unless present_in_profile?(profile_extension, true) client.retrieve_profile_extension_records(profile_extension, QueryColumn.new("RIID"), fields, [@user_riid]) end end
subscribe(list)
click to toggle source
# File lib/responsys/member.rb, line 45 def subscribe(list) Client.new.run do |client| update(list, [{ EMAIL_ADDRESS_: @email, EMAIL_PERMISSION_STATUS_: "I" }]) end end
subscribed?(list, raising = false)
click to toggle source
# File lib/responsys/member.rb, line 88 def subscribed?(list, raising = false) Client.new.run(raising) do |client| return Responsys::Helper.format_response_with_message("member.record_not_found") unless present_in_list?(list, true) response = client.retrieve_list_members(list, QueryColumn.new("EMAIL_ADDRESS"), %w(EMAIL_PERMISSION_STATUS_), [@email]) response[:data][0][:EMAIL_PERMISSION_STATUS_] == "I" end end
unsubscribe(list)
click to toggle source
# File lib/responsys/member.rb, line 51 def unsubscribe(list) Client.new.run do |client| update(list, [{ EMAIL_ADDRESS_: @email, EMAIL_PERMISSION_STATUS_: "O" }]) end end
update(list, data)
click to toggle source
# File lib/responsys/member.rb, line 57 def update(list, data) Client.new.run(true) do |client| return Responsys::Helper.format_response_with_message("member.record_not_found") unless present_in_list?(list, true) record = RecordData.new(data) client.merge_list_members(list, record) end end
Private Instance Methods
lookup_list_via_key(list, key, value)
click to toggle source
# File lib/responsys/member.rb, line 123 def lookup_list_via_key(list, key, value) Client.new.run(true) { |client| client.retrieve_list_members(list, QueryColumn.new(key), %w(EMAIL_PERMISSION_STATUS_), [value]) } end
lookup_profile_via_key(profile_extension, key, value)
click to toggle source
# File lib/responsys/member.rb, line 119 def lookup_profile_via_key(profile_extension, key, value) Client.new.run(true) { |client| client.retrieve_profile_extension_records(profile_extension, QueryColumn.new(key), %w(RIID_), [value]) } end
r_key(k)
click to toggle source
# File lib/responsys/member.rb, line 99 def r_key(k) k.to_s.upcase.to_sym end
reserved_fields()
click to toggle source
# File lib/responsys/member.rb, line 103 def reserved_fields # There are also the MOBILE and POSTAL fields. We should allow those to be set via this method [ :RIID_, :CREATED_SOURCE_IP_, :CUSTOMER_ID_, :EMAIL_ADDRESS_, :EMAIL_DOMAIN_, :EMAIL_ISP_, :EMAIL_FORMAT_, :EMAIL_PERMISSION_STATUS_, :EMAIL_DELIVERABILITY_STATUS_, :EMAIL_PERMISSION_REASON_, ] end