constantcontact 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|