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) ⇒ Member

Returns a new instance of Member.



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

def initialize(email, riid = nil)
  @email = email
  @user_riid = riid
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



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 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) ⇒ Boolean

Returns:

  • (Boolean)


76
77
78
79
80
81
82
83
84
85
86
# 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) ⇒ Boolean

Returns:

  • (Boolean)


66
67
68
69
70
71
72
73
74
# 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) ⇒ Object



36
37
38
39
40
41
42
43
# 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) ⇒ Object



45
46
47
48
49
# 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) ⇒ Boolean

Returns:

  • (Boolean)


88
89
90
91
92
93
94
95
# 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) ⇒ Object



51
52
53
54
55
# 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) ⇒ Object



57
58
59
60
61
62
63
64
# 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