Class: Responsys::Member

Inherits:
Object
  • Object
show all
Includes:
Api, Api::Object
Defined in:
lib/responsys/member.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(email, riid = nil, client = Client.instance) ⇒ Member

Returns a new instance of Member.



10
11
12
13
14
# File 'lib/responsys/member.rb', line 10

def initialize(email, riid = nil, client = Client.instance)
  @email = email
  @user_riid = riid
  @client = client
end

Instance Attribute Details

#clientObject

Returns the value of attribute client.



8
9
10
# File 'lib/responsys/member.rb', line 8

def client
  @client
end

#emailObject

Returns the value of attribute email.



8
9
10
# File 'lib/responsys/member.rb', line 8

def email
  @email
end

#user_riidObject

Returns the value of attribute user_riid.



8
9
10
# File 'lib/responsys/member.rb', line 8

def user_riid
  @user_riid
end

Instance Method Details

#add_to_list(list, subscribe = false, details = {}, update_record = false) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/responsys/member.rb', line 16

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.merge_list_members_riid(list, record, ListMergeRule.new(insertOnNoMatch: true, updateOnMatch: ( update_record ? 'REPLACE_ALL' : 'NO_UPDATE' )))
end

#present_in_list?(list) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
68
69
70
71
72
73
# File 'lib/responsys/member.rb', line 65

def present_in_list?(list)
  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

#present_in_profile?(list) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
60
61
62
63
# File 'lib/responsys/member.rb', line 57

def present_in_profile?(list)
  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

#retrieve_profile_extension(profile_extension, fields) ⇒ Object



35
36
37
38
39
40
# File 'lib/responsys/member.rb', line 35

def retrieve_profile_extension(profile_extension, fields)
  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)

  @client.retrieve_profile_extension_records(profile_extension, QueryColumn.new("RIID"), fields, [@user_riid])
end

#subscribe(list) ⇒ Object



42
43
44
# File 'lib/responsys/member.rb', line 42

def subscribe(list)
  update(list, [{ EMAIL_ADDRESS_: @email, EMAIL_PERMISSION_STATUS_: "I" }])
end

#subscribed?(list) ⇒ Boolean

Returns:

  • (Boolean)


75
76
77
78
79
80
# File 'lib/responsys/member.rb', line 75

def subscribed?(list)
  return Responsys::Helper.format_response_with_message("member.record_not_found") unless present_in_list?(list)

  response = @client.retrieve_list_members(list, QueryColumn.new("EMAIL_ADDRESS"), %w(EMAIL_PERMISSION_STATUS_), [@email])
  response[:data][0][:EMAIL_PERMISSION_STATUS_] == "I"
end

#unsubscribe(list) ⇒ Object



46
47
48
# File 'lib/responsys/member.rb', line 46

def unsubscribe(list)
  update(list, [{ EMAIL_ADDRESS_: @email, EMAIL_PERMISSION_STATUS_: "O" }])
end

#update(list, data) ⇒ Object



50
51
52
53
54
55
# File 'lib/responsys/member.rb', line 50

def update(list, data)
  return Responsys::Helper.format_response_with_message("member.record_not_found") unless present_in_list?(list)

  record = RecordData.new(data)
  @client.merge_list_members(list, record)
end