constantcontact 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -7
- data/README.md +7 -0
- data/constantcontact.gemspec +1 -1
- data/lib/constantcontact.rb +54 -54
- data/lib/constantcontact/api.rb +5 -3
- data/lib/constantcontact/auth/oauth2.rb +7 -4
- data/lib/constantcontact/auth/session_data_store.rb +52 -52
- data/lib/constantcontact/components/account/verified_email_address.rb +17 -17
- data/lib/constantcontact/components/activities/activity.rb +34 -34
- data/lib/constantcontact/components/activities/activity_error.rb +17 -17
- data/lib/constantcontact/components/activities/add_contacts.rb +109 -109
- data/lib/constantcontact/components/activities/add_contacts_import_data.rb +37 -37
- data/lib/constantcontact/components/activities/export_contacts.rb +19 -19
- data/lib/constantcontact/components/component.rb +13 -13
- data/lib/constantcontact/components/contacts/address.rb +18 -18
- data/lib/constantcontact/components/contacts/contact.rb +69 -69
- data/lib/constantcontact/components/contacts/contact_list.rb +17 -17
- data/lib/constantcontact/components/contacts/custom_field.rb +17 -17
- data/lib/constantcontact/components/contacts/email_address.rb +23 -23
- data/lib/constantcontact/components/contacts/note.rb +16 -16
- data/lib/constantcontact/components/email_marketing/campaign.rb +67 -67
- data/lib/constantcontact/components/email_marketing/click_through_details.rb +17 -17
- data/lib/constantcontact/components/email_marketing/message_footer.rb +20 -20
- data/lib/constantcontact/components/email_marketing/schedule.rb +18 -18
- data/lib/constantcontact/components/email_marketing/test_send.rb +32 -32
- data/lib/constantcontact/components/result_set.rb +15 -15
- data/lib/constantcontact/components/tracking/bounce_activity.rb +18 -18
- data/lib/constantcontact/components/tracking/click_activity.rb +17 -17
- data/lib/constantcontact/components/tracking/forward_activity.rb +17 -17
- data/lib/constantcontact/components/tracking/open_activity.rb +17 -17
- data/lib/constantcontact/components/tracking/send_activity.rb +17 -17
- data/lib/constantcontact/components/tracking/tracking_activity.rb +15 -15
- data/lib/constantcontact/components/tracking/tracking_summary.rb +17 -17
- data/lib/constantcontact/components/tracking/unsubscribe_activity.rb +18 -18
- data/lib/constantcontact/exceptions/ctct_exception.rb +15 -15
- data/lib/constantcontact/exceptions/illegal_argument_exception.rb +3 -3
- data/lib/constantcontact/exceptions/oauth2_exception.rb +3 -3
- data/lib/constantcontact/services/account_service.rb +19 -19
- data/lib/constantcontact/services/activity_service.rb +99 -99
- data/lib/constantcontact/services/base_service.rb +24 -24
- data/lib/constantcontact/services/campaign_schedule_service.rb +85 -85
- data/lib/constantcontact/services/campaign_tracking_service.rb +151 -151
- data/lib/constantcontact/services/contact_service.rb +106 -106
- data/lib/constantcontact/services/contact_tracking_service.rb +151 -151
- data/lib/constantcontact/services/email_marketing_service.rb +66 -66
- data/lib/constantcontact/services/list_service.rb +67 -67
- data/lib/constantcontact/util/config.rb +102 -96
- data/lib/constantcontact/util/helpers.rb +18 -18
- data/lib/constantcontact/version.rb +4 -4
- data/spec/constantcontact/api_spec.rb +223 -173
- data/spec/constantcontact/auth/oauth2_spec.rb +68 -4
- data/spec/constantcontact/components/contacts/address_spec.rb +7 -7
- data/spec/constantcontact/components/contacts/contact_list_spec.rb +7 -7
- data/spec/constantcontact/components/contacts/contact_spec.rb +7 -7
- data/spec/constantcontact/components/contacts/custom_field_spec.rb +7 -7
- data/spec/constantcontact/components/contacts/email_address_spec.rb +7 -7
- data/spec/constantcontact/services/contact_service_spec.rb +95 -95
- data/spec/constantcontact/services/list_service_spec.rb +48 -48
- data/spec/spec_helper.rb +1 -1
- metadata +55 -44
@@ -5,113 +5,113 @@
|
|
5
5
|
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
6
|
|
7
7
|
module ConstantContact
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
8
|
+
module Components
|
9
|
+
class AddContacts < Component
|
10
|
+
attr_accessor :import_data, :lists, :column_names
|
11
|
+
|
12
|
+
# Constructor to create an AddContacts object from the given contacts and contact lists
|
13
|
+
# @param [Array<Contact>] contacts - contacts array
|
14
|
+
# @param [Array<ContactList>] lists - contact lists array]
|
15
|
+
# @param [Array<String>] column_names - array of column names
|
16
|
+
# @return [AddContacts]
|
17
|
+
def initialize(contacts, lists, column_names = [])
|
18
|
+
if !contacts.empty?
|
19
|
+
if contacts[0].instance_of?(Components::AddContactsImportData)
|
20
|
+
@import_data = contacts
|
21
|
+
else
|
22
|
+
raise Exceptions::IllegalArgumentException, sprintf(Util::Config.get('errors.id_or_object'), 'AddContactsImportData')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
@lists = lists
|
27
|
+
@column_names = column_names
|
28
|
+
|
29
|
+
# attempt to determine the column names being used if they are not provided
|
30
|
+
if column_names.empty?
|
31
|
+
used_columns = [Util::Config.get('activities_columns.email')]
|
32
|
+
|
33
|
+
contact = contacts[0]
|
34
|
+
|
35
|
+
if !contact.first_name.nil?
|
36
|
+
used_columns << Util::Config.get('activities_columns.first_name')
|
37
|
+
end
|
38
|
+
|
39
|
+
if !contact.middle_name.nil?
|
40
|
+
used_columns << Util::Config.get('activities_columns.middle_name')
|
41
|
+
end
|
42
|
+
|
43
|
+
if !contact.last_name.nil?
|
44
|
+
used_columns << Util::Config.get('activities_columns.last_name')
|
45
|
+
end
|
46
|
+
|
47
|
+
if !contact.job_title.nil?
|
48
|
+
used_columns << Util::Config.get('activities_columns.job_title')
|
49
|
+
end
|
50
|
+
|
51
|
+
if !contact.company_name.nil?
|
52
|
+
used_columns << Util::Config.get('activities_columns.company_name')
|
53
|
+
end
|
54
|
+
|
55
|
+
if !contact.work_phone.nil?
|
56
|
+
used_columns << Util::Config.get('activities_columns.work_phone')
|
57
|
+
end
|
58
|
+
|
59
|
+
if !contact.home_phone.nil?
|
60
|
+
used_columns << Util::Config.get('activities_columns.home_phone')
|
61
|
+
end
|
62
|
+
|
63
|
+
address = contact.addresses[0]
|
64
|
+
|
65
|
+
if !address.line1.nil?
|
66
|
+
used_columns << Util::Config.get('activities_columns.address1')
|
67
|
+
end
|
68
|
+
|
69
|
+
if !address.line2.nil?
|
70
|
+
used_columns << Util::Config.get('activities_columns.address2')
|
71
|
+
end
|
72
|
+
|
73
|
+
if !address.line3.nil?
|
74
|
+
used_columns << Util::Config.get('activities_columns.address3')
|
75
|
+
end
|
76
|
+
|
77
|
+
if !address.city.nil?
|
78
|
+
used_columns << Util::Config.get('activities_columns.city')
|
79
|
+
end
|
80
|
+
|
81
|
+
if !address.state_code.nil?
|
82
|
+
used_columns << Util::Config.get('activities_columns.state')
|
83
|
+
end
|
84
|
+
|
85
|
+
if !address.state_code.nil?
|
86
|
+
used_columns << Util::Config.get('activities_columns.state_province')
|
87
|
+
end
|
88
|
+
|
89
|
+
if !address.country_code.nil?
|
90
|
+
used_columns << Util::Config.get('activities_columns.country')
|
91
|
+
end
|
92
|
+
|
93
|
+
if !address.postal_code.nil?
|
94
|
+
used_columns << Util::Config.get('activities_columns.postal_code')
|
95
|
+
end
|
96
|
+
|
97
|
+
if !address.sub_postal_code.nil?
|
98
|
+
used_columns << Util::Config.get('activities_columns.sub_postal_code')
|
99
|
+
end
|
100
|
+
|
101
|
+
# Custom Fields
|
102
|
+
if !contact.custom_fields.nil?
|
103
|
+
contact.custom_fields.each do |custom_field|
|
104
|
+
if custom_field.name.match('custom_field_')
|
105
|
+
custom_field_number = custom_field.name[13, custom_field.length]
|
106
|
+
used_columns << Util::Config.get('activities_columns.custom_field_' + custom_field_number)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
@column_names = used_columns
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
end
|
117
117
|
end
|
@@ -5,41 +5,41 @@
|
|
5
5
|
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
6
|
|
7
7
|
module ConstantContact
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
8
|
+
module Components
|
9
|
+
class AddContactsImportData < Component
|
10
|
+
attr_accessor :first_name, :middle_name, :last_name, :job_title, :company_name,
|
11
|
+
:work_phone, :home_phone, :email_addresses, :addresses, :custom_fields
|
12
|
+
|
13
|
+
|
14
|
+
# Constructor to create an AddContactsImportData object from the given hash
|
15
|
+
# @param [Hash] props - the hash with properties
|
16
|
+
# @return [AddContactsImportData]
|
17
|
+
def initialize(props = {})
|
18
|
+
instance_variables.each do |property, value|
|
19
|
+
send("#{property}=", get_value(props, property))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Setter
|
24
|
+
def add_custom_field(custom_field)
|
25
|
+
@custom_fields = [] if @custom_fields.nil?
|
26
|
+
@custom_fields << custom_field
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
# Setter
|
31
|
+
def add_address(address)
|
32
|
+
@addresses = [] if @addresses.nil?
|
33
|
+
@addresses << address
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# Setter
|
38
|
+
def add_email(email_address)
|
39
|
+
@email_addresses = [] if @email_addresses.nil?
|
40
|
+
@email_addresses << email_address
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
45
|
end
|
@@ -5,26 +5,26 @@
|
|
5
5
|
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
6
|
|
7
7
|
module ConstantContact
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
module Components
|
9
|
+
class ExportContacts < Component
|
10
|
+
attr_accessor :file_type, :sort_by, :export_date_added,
|
11
|
+
:export_added_by, :lists, :column_names
|
12
12
|
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
14
|
+
# Constructor to create an ExportContacts object
|
15
|
+
# @param [Array] lists - array of lists ids
|
16
|
+
# @return [ExportContacts]
|
17
|
+
def initialize(lists = nil)
|
18
|
+
if !lists.nil?
|
19
|
+
@lists = lists
|
20
|
+
end
|
21
|
+
@file_type = 'CSV'
|
22
|
+
@sort_by = 'EMAIL_ADDRESS'
|
23
|
+
@export_date_added = true
|
24
|
+
@export_added_by = true
|
25
|
+
@column_names = ['Email Address', 'First Name', 'Last Name']
|
26
|
+
end
|
27
27
|
|
28
|
-
|
29
|
-
|
28
|
+
end
|
29
|
+
end
|
30
30
|
end
|
@@ -5,19 +5,19 @@
|
|
5
5
|
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
6
|
|
7
7
|
module ConstantContact
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
module Components
|
9
|
+
class Component
|
10
|
+
protected
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
# Get the requested value from a hash, or return the default
|
13
|
+
# @param [Hash] hsh - the hash to search for the provided hash key
|
14
|
+
# @param [String] key - hash key to look for
|
15
|
+
# @param [String] default - value to return if the key is not found, default is null
|
16
|
+
# @return [String]
|
17
|
+
def self.get_value(hsh, key, default = nil)
|
18
|
+
hsh.has_key?(key) and hsh[key] ? hsh[key] : default
|
19
|
+
end
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
end
|
22
|
+
end
|
23
23
|
end
|
@@ -5,24 +5,24 @@
|
|
5
5
|
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
6
|
|
7
7
|
module ConstantContact
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
module Components
|
9
|
+
class Address < Component
|
10
|
+
attr_accessor :id, :line1, :line2, :line3, :city, :address_type, :state_code,
|
11
|
+
:country_code, :postal_code, :sub_postal_code
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
13
|
+
# Factory method to create an Address object from a json string
|
14
|
+
# @param [Hash] props - array of properties to create object from
|
15
|
+
# @return [Address]
|
16
|
+
def self.create(props)
|
17
|
+
address = Address.new
|
18
|
+
if props
|
19
|
+
props.each do |key, value|
|
20
|
+
address.send("#{key}=", value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
address
|
24
|
+
end
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
end
|
27
|
+
end
|
28
28
|
end
|
@@ -5,82 +5,82 @@
|
|
5
5
|
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
6
|
|
7
7
|
module ConstantContact
|
8
|
-
|
9
|
-
|
8
|
+
module Components
|
9
|
+
class Contact < Component
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
attr_accessor :id, :status, :first_name, :middle_name, :last_name, :confirmed, :email_addresses,
|
12
|
+
:prefix_name, :job_title, :addresses, :company_name, :home_phone,
|
13
|
+
:work_phone, :cell_phone, :fax, :custom_fields, :lists,
|
14
|
+
:source_details, :source_is_url, :web_url, :modified_date,
|
15
|
+
:created_date, :notes, :source
|
16
16
|
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
18
|
+
# Factory method to create a Contact object from a json string
|
19
|
+
# @param [Hash] props - JSON string representing a contact
|
20
|
+
# @return [Contact]
|
21
|
+
def self.create(props)
|
22
|
+
contact = Contact.new
|
23
|
+
if props
|
24
|
+
props.each do |key, value|
|
25
|
+
if key == 'email_addresses'
|
26
|
+
if value
|
27
|
+
contact.email_addresses = []
|
28
|
+
value.each do |email_address|
|
29
|
+
contact.email_addresses << Components::EmailAddress.create(email_address)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
elsif key == 'addresses'
|
33
|
+
if value
|
34
|
+
contact.addresses = []
|
35
|
+
value.each do |address|
|
36
|
+
contact.addresses << Components::Address.create(address)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
elsif key == 'custom_fields'
|
40
|
+
if value
|
41
|
+
contact.custom_fields = []
|
42
|
+
value.each do |custom_field|
|
43
|
+
contact.custom_fields << Components::CustomField.create(custom_field)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
elsif key == 'lists'
|
47
|
+
if value
|
48
|
+
contact.lists = []
|
49
|
+
value.each do |contact_list|
|
50
|
+
contact.lists << Components::ContactList.create(contact_list)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
else
|
54
|
+
contact.send("#{key}=", value)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
contact
|
59
|
+
end
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
61
|
+
# Setter
|
62
|
+
# @param [ContactList] contact_list
|
63
|
+
def add_list(contact_list)
|
64
|
+
@lists = [] if @lists.nil?
|
65
|
+
@lists << contact_list
|
66
|
+
end
|
67
67
|
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
69
|
+
# Setter
|
70
|
+
# @param [EmailAddress] email_address
|
71
|
+
def add_email(email_address)
|
72
|
+
@email_addresses = [] if @email_addresses.nil?
|
73
|
+
@email_addresses << email_address
|
74
|
+
end
|
75
75
|
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
77
|
+
# Setter
|
78
|
+
# @param [Address] address
|
79
|
+
def add_address(address)
|
80
|
+
@addresses = [] if @addresses.nil?
|
81
|
+
@addresses << address
|
82
|
+
end
|
83
83
|
|
84
|
-
|
85
|
-
|
84
|
+
end
|
85
|
+
end
|
86
86
|
end
|