constantcontact 1.0.1 → 1.0.2
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 +4 -4
- data/constantcontact.gemspec +0 -1
- data/lib/constantcontact/components/account/verified_email_address.rb +14 -15
- data/lib/constantcontact/components/activities/activity.rb +30 -31
- data/lib/constantcontact/components/activities/activity_error.rb +14 -15
- data/lib/constantcontact/components/activities/add_contacts_import_data.rb +37 -38
- data/lib/constantcontact/components/contacts/address.rb +12 -13
- data/lib/constantcontact/components/contacts/contact.rb +42 -42
- data/lib/constantcontact/components/contacts/contact_list.rb +11 -12
- data/lib/constantcontact/components/contacts/custom_field.rb +14 -15
- data/lib/constantcontact/components/contacts/email_address.rb +14 -15
- data/lib/constantcontact/components/contacts/note.rb +13 -12
- data/lib/constantcontact/components/email_marketing/campaign.rb +40 -40
- data/lib/constantcontact/components/email_marketing/click_through_details.rb +14 -15
- data/lib/constantcontact/components/email_marketing/message_footer.rb +14 -15
- data/lib/constantcontact/components/email_marketing/schedule.rb +15 -16
- data/lib/constantcontact/components/email_marketing/test_send.rb +21 -21
- data/lib/constantcontact/components/tracking/bounce_activity.rb +14 -15
- data/lib/constantcontact/components/tracking/click_activity.rb +14 -16
- data/lib/constantcontact/components/tracking/forward_activity.rb +14 -16
- data/lib/constantcontact/components/tracking/open_activity.rb +14 -16
- data/lib/constantcontact/components/tracking/send_activity.rb +14 -15
- data/lib/constantcontact/components/tracking/tracking_activity.rb +0 -1
- data/lib/constantcontact/components/tracking/tracking_summary.rb +17 -18
- data/lib/constantcontact/components/tracking/unsubscribe_activity.rb +14 -16
- data/lib/constantcontact/services/email_marketing_service.rb +10 -8
- data/lib/constantcontact/version.rb +1 -1
- data/spec/constantcontact/services/email_marketing_spec.rb +76 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbe3bbdd27400b7cabb1f7d057ddcf4cbce8af1f
|
4
|
+
data.tar.gz: 5e590cbd2085adbbc074f66963f244d2b9ccf29d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90c879d3fe95da598a0f2f4b9df5e6e8066e21a919a9fdfa029bff1e0fc9beaed0ffaade52e7a000a55a57285caf4d741a1d0209d5d9adb425f724cee3e99d3c
|
7
|
+
data.tar.gz: aa192ef3d3440c8f4bff332df802b63b290af8eedd21847d522243a5c779e3e3e6735e27f5cb36b5f8490c084535d3f3e0092f57ec6ecdb53a385d00d9205b50
|
data/constantcontact.gemspec
CHANGED
@@ -13,7 +13,6 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.summary = %q{Constant Contact SDK for Ruby}
|
14
14
|
s.email = "apisupport@constantcontact.com"
|
15
15
|
s.description = "Ruby library for interactions with Constant Contact v2 API"
|
16
|
-
#s.version = "1.0.0"
|
17
16
|
s.license = "MIT"
|
18
17
|
|
19
18
|
s.files = [
|
@@ -9,19 +9,18 @@ module ConstantContact
|
|
9
9
|
class VerifiedEmailAddress < Component
|
10
10
|
attr_accessor :status, :email_address
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
12
|
+
# Factory method to create a VerifiedEmailAddress object from a json string
|
13
|
+
# @param [Hash] props - array of properties to create object from
|
14
|
+
# @return [VerifiedEmailAddress]
|
15
|
+
def self.create(props)
|
16
|
+
obj = VerifiedEmailAddress.new
|
17
|
+
if props
|
18
|
+
props.each do |key, value|
|
19
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
20
|
+
end
|
21
|
+
end
|
22
|
+
obj
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
27
26
|
end
|
@@ -10,35 +10,34 @@ module ConstantContact
|
|
10
10
|
attr_accessor :id, :type, :status, :start_date, :finish_date, :file_name, :created_date,
|
11
11
|
:error_count, :errors, :warnings, :contact_count
|
12
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
|
-
end
|
13
|
+
# Factory method to create an Activity object from a json string
|
14
|
+
# @param [Hash] props - hash of properties to create object from
|
15
|
+
# @return [Activity]
|
16
|
+
def self.create(props)
|
17
|
+
obj = Activity.new
|
18
|
+
if props
|
19
|
+
props.each do |key, value|
|
20
|
+
if key == 'errors'
|
21
|
+
if value
|
22
|
+
obj.errors = []
|
23
|
+
value.each do |error|
|
24
|
+
obj.errors << Components::ActivityError.create(error)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
elsif key == 'warnings'
|
28
|
+
if value
|
29
|
+
obj.warnings = []
|
30
|
+
value.each do |error|
|
31
|
+
obj.warnings << Components::ActivityError.create(error)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
else
|
35
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
obj
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
44
43
|
end
|
@@ -9,19 +9,18 @@ module ConstantContact
|
|
9
9
|
class ActivityError < Component
|
10
10
|
attr_accessor :message, :line_number, :email_address
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
12
|
+
# Factory method to create an ActivityError object from an array
|
13
|
+
# @param [Hash] props - hash of properties to create object from
|
14
|
+
# @return [ActivityError]
|
15
|
+
def self.create(props)
|
16
|
+
obj = ActivityError.new
|
17
|
+
if props
|
18
|
+
props.each do |key, value|
|
19
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
20
|
+
end
|
21
|
+
end
|
22
|
+
obj
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
27
26
|
end
|
@@ -5,41 +5,40 @@
|
|
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
|
-
end
|
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)) if obj.respond_to? 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
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -10,19 +10,18 @@ module ConstantContact
|
|
10
10
|
attr_accessor :id, :line1, :line2, :line3, :city, :address_type, :state_code,
|
11
11
|
:country_code, :postal_code, :sub_postal_code
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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
|
+
obj = Address.new
|
18
|
+
if props
|
19
|
+
props.each do |key, value|
|
20
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
21
|
+
end
|
22
|
+
end
|
23
|
+
obj
|
24
|
+
end
|
26
25
|
end
|
27
26
|
end
|
28
27
|
end
|
@@ -15,48 +15,48 @@ module ConstantContact
|
|
15
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
|
+
obj = Contact.new
|
23
|
+
if props
|
24
|
+
props.each do |key, value|
|
25
|
+
if key == 'email_addresses'
|
26
|
+
if value
|
27
|
+
obj.email_addresses = []
|
28
|
+
value.each do |email_address|
|
29
|
+
obj.email_addresses << Components::EmailAddress.create(email_address)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
elsif key == 'addresses'
|
33
|
+
if value
|
34
|
+
obj.addresses = []
|
35
|
+
value.each do |address|
|
36
|
+
obj.addresses << Components::Address.create(address)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
elsif key == 'custom_fields'
|
40
|
+
if value
|
41
|
+
obj.custom_fields = []
|
42
|
+
value.each do |custom_field|
|
43
|
+
obj.custom_fields << Components::CustomField.create(custom_field)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
elsif key == 'lists'
|
47
|
+
if value
|
48
|
+
obj.lists = []
|
49
|
+
value.each do |contact_list|
|
50
|
+
obj.lists << Components::ContactList.create(contact_list)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
else
|
54
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
obj
|
59
|
+
end
|
60
60
|
|
61
61
|
# Setter
|
62
62
|
# @param [ContactList] contact_list
|
@@ -10,18 +10,17 @@ module ConstantContact
|
|
10
10
|
attr_accessor :id, :name, :status, :created_date, :modified_date, :contact_count
|
11
11
|
|
12
12
|
# Factory method to create a ContactList object from a json string
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
13
|
+
# @param [Hash] props - array of properties to create object from
|
14
|
+
# @return [ContactList]
|
15
|
+
def self.create(props)
|
16
|
+
obj = ContactList.new
|
17
|
+
if props
|
18
|
+
props.each do |key, value|
|
19
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
20
|
+
end
|
21
|
+
end
|
22
|
+
obj
|
23
|
+
end
|
25
24
|
end
|
26
25
|
end
|
27
26
|
end
|
@@ -9,19 +9,18 @@ module ConstantContact
|
|
9
9
|
class CustomField < Component
|
10
10
|
attr_accessor :name, :value
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
12
|
+
# Factory method to create a CustomField object from a json string
|
13
|
+
# @param [Hash] props - array of properties to create object from
|
14
|
+
# @return [CustomField]
|
15
|
+
def self.create(props)
|
16
|
+
obj = CustomField.new
|
17
|
+
if props
|
18
|
+
props.each do |key, value|
|
19
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
20
|
+
end
|
21
|
+
end
|
22
|
+
obj
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
27
26
|
end
|
@@ -16,19 +16,18 @@ module ConstantContact
|
|
16
16
|
@email_address = email_address if email_address
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
19
|
+
# Factory method to create an EmailAddress object from a json string
|
20
|
+
# @param [Hash] props - array of properties to create object from
|
21
|
+
# @return [EmailAddress]
|
22
|
+
def self.create(props)
|
23
|
+
obj = EmailAddress.new
|
24
|
+
if props
|
25
|
+
props.each do |key, value|
|
26
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
27
|
+
end
|
28
|
+
end
|
29
|
+
obj
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
34
33
|
end
|
@@ -9,17 +9,18 @@ module ConstantContact
|
|
9
9
|
class Note < Component
|
10
10
|
attr_accessor :id, :note, :created_date
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
12
|
+
# Factory method to create a Note object from a json string
|
13
|
+
# @param [String] props - JSON string representing a contact
|
14
|
+
# @return Note
|
15
|
+
def self.create(props)
|
16
|
+
note = Note.new
|
17
|
+
if props
|
18
|
+
props.each do |key, value|
|
19
|
+
note.send("#{key}=", value)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
note
|
23
|
+
end
|
23
24
|
end
|
24
|
-
|
25
|
+
end
|
25
26
|
end
|
@@ -5,49 +5,49 @@
|
|
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
|
-
|
8
|
+
module Components
|
9
|
+
class Campaign < Component
|
10
|
+
attr_accessor :id, :name, :subject, :status, :from_name, :from_email, :reply_to_email, :template_type,
|
11
|
+
:created_date, :modified_date, :last_run_date, :next_run_date,
|
12
|
+
:is_permission_reminder_enabled, :permission_reminder_text,
|
13
|
+
:is_view_as_webpage_enabled, :view_as_web_page_text, :view_as_web_page_link_text,
|
14
|
+
:greeting_salutations, :greeting_name, :greeting_string, :email_content, :text_content,
|
15
|
+
:message_footer, :tracking_summary, :email_content_format, :style_sheet, :sent_to_contact_lists,
|
16
|
+
:click_through_details, :include_forward_email, :is_visible_in_ui, :permalink_url
|
17
17
|
|
18
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
|
-
|
19
|
+
# Factory method to create an EmailCampaign object from an array
|
20
|
+
# @param [Hash] props - hash of properties to create object from
|
21
|
+
# @return [Campaign]
|
22
|
+
def self.create(props)
|
23
|
+
campaign = Campaign.new
|
24
|
+
if props
|
25
|
+
props.each do |key, value|
|
26
|
+
if key == 'message_footer'
|
27
|
+
campaign.message_footer = Components::MessageFooter.create(value)
|
28
|
+
elsif key == 'tracking_summary'
|
29
|
+
campaign.tracking_summary = Components::TrackingSummary.create(value)
|
30
|
+
elsif key == 'sent_to_contact_lists'
|
31
|
+
if value
|
32
|
+
campaign.sent_to_contact_lists = []
|
33
|
+
value.each do |sent_to_contact_list|
|
34
|
+
campaign.sent_to_contact_lists << Components::ContactList.create(sent_to_contact_list)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
elsif key == 'click_through_details'
|
38
|
+
if value
|
39
|
+
campaign.click_through_details = []
|
40
|
+
value.each do |click_through_details|
|
41
|
+
campaign.click_through_details << Components::ClickThroughDetails.create(click_through_details)
|
42
|
+
end
|
43
|
+
end
|
44
44
|
else
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
45
|
+
campaign.send("#{key}=", value) if campaign.respond_to? key
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
campaign
|
50
|
+
end
|
51
51
|
|
52
52
|
|
53
53
|
# Factory method to create a Campaign object from an array
|
@@ -10,19 +10,18 @@ module ConstantContact
|
|
10
10
|
attr_accessor :url, :url_uid, :click_count
|
11
11
|
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
13
|
+
# Factory method to create an ClickThroughDetails object from an array
|
14
|
+
# @param [Hash] props - hash of properties to create object from
|
15
|
+
# @return [ClickThroughDetails]
|
16
|
+
def self.create(props)
|
17
|
+
obj = ClickThroughDetails.new
|
18
|
+
if props
|
19
|
+
props.each do |key, value|
|
20
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
21
|
+
end
|
22
|
+
end
|
23
|
+
obj
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
28
27
|
end
|
@@ -12,19 +12,18 @@ module ConstantContact
|
|
12
12
|
:postal_code, :include_forward_email, :forward_email_link_text,
|
13
13
|
:include_subscribe_link, :subscribe_link_text
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
15
|
+
# Factory method to create a MessageFooter object from an array
|
16
|
+
# @param [Hash] props - hash of properties to create object from
|
17
|
+
# @return [MessageFooter]
|
18
|
+
def self.create(props)
|
19
|
+
obj = MessageFooter.new
|
20
|
+
if props
|
21
|
+
props.each do |key, value|
|
22
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
23
|
+
end
|
24
|
+
end
|
25
|
+
obj
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
30
29
|
end
|
@@ -10,20 +10,19 @@ module ConstantContact
|
|
10
10
|
attr_accessor :id, :scheduled_date
|
11
11
|
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
13
|
+
# Factory method to create a Schedule object from an array
|
14
|
+
# @param [Hash] props - hash of properties to create object from
|
15
|
+
# @return [Schedule]
|
16
|
+
def self.create(props)
|
17
|
+
obj = Schedule.new
|
18
|
+
if props
|
19
|
+
props = props.first if props.is_a?(Array)
|
20
|
+
props.each do |key, value|
|
21
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
22
|
+
end
|
23
|
+
end
|
24
|
+
obj
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
29
28
|
end
|
@@ -10,27 +10,27 @@ module ConstantContact
|
|
10
10
|
attr_accessor :format, :personal_message, :email_addresses
|
11
11
|
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
13
|
+
# Factory method to create a TestSend object from an array
|
14
|
+
# @param [Hash] props - hash of properties to create object from
|
15
|
+
# @return [TestSend]
|
16
|
+
def self.create(props)
|
17
|
+
obj = TestSend.new
|
18
|
+
if props
|
19
|
+
props.each do |key, value|
|
20
|
+
if key == 'email_addresses'
|
21
|
+
if value
|
22
|
+
obj.email_addresses = []
|
23
|
+
value.each do |email_address|
|
24
|
+
obj.email_addresses << email_address
|
25
|
+
end
|
26
|
+
end
|
27
|
+
else
|
28
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
obj
|
33
|
+
end
|
34
34
|
|
35
35
|
|
36
36
|
# Add an email address to the set of addresses to send the test send too
|
@@ -11,19 +11,18 @@ module ConstantContact
|
|
11
11
|
:contact_id, :email_address, :campaign_id
|
12
12
|
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
14
|
+
# Factory method to create a BounceActivity object from an array
|
15
|
+
# @param [Hash] props - hash of properties to create object from
|
16
|
+
# @return [BounceActivity]
|
17
|
+
def self.create(props)
|
18
|
+
obj = BounceActivity.new
|
19
|
+
if props
|
20
|
+
props.each do |key, value|
|
21
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
22
|
+
end
|
23
|
+
end
|
24
|
+
obj
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
29
28
|
end
|
@@ -9,20 +9,18 @@ module ConstantContact
|
|
9
9
|
class ClickActivity < Component
|
10
10
|
attr_accessor :activity_type, :campaign_id, :contact_id, :email_address, :link_id, :click_date
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
12
|
+
\ # Factory method to create a ClickActivity object from an array
|
13
|
+
# @param [Hash] props - hash of properties to create object from
|
14
|
+
# @return [ClickActivity]
|
15
|
+
def self.create(props)
|
16
|
+
obj = ClickActivity.new
|
17
|
+
if props
|
18
|
+
props.each do |key, value|
|
19
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
20
|
+
end
|
21
|
+
end
|
22
|
+
obj
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
28
26
|
end
|
@@ -9,20 +9,18 @@ module ConstantContact
|
|
9
9
|
class ForwardActivity < Component
|
10
10
|
attr_accessor :activity_type, :campaign_id, :contact_id, :email_address, :forward_date
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
12
|
+
# Factory method to create a ForwardActivity object from an array
|
13
|
+
# @param [Hash] props - hash of properties to create object from
|
14
|
+
# @return [ForwardActivity]
|
15
|
+
def self.create(props)
|
16
|
+
obj = ForwardActivity.new
|
17
|
+
if props
|
18
|
+
props.each do |key, value|
|
19
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
20
|
+
end
|
21
|
+
end
|
22
|
+
obj
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
28
26
|
end
|
@@ -9,20 +9,18 @@ module ConstantContact
|
|
9
9
|
class OpenActivity < Component
|
10
10
|
attr_accessor :activity_type, :campaign_id, :email_address, :open_date, :contact_id
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
12
|
+
# Factory method to create an OpenActivity object from an array
|
13
|
+
# @param [Hash] props - hash of properties to create object from
|
14
|
+
# @return [OpenActivity]
|
15
|
+
def self.create(props)
|
16
|
+
obj = OpenActivity.new
|
17
|
+
if props
|
18
|
+
props.each do |key, value|
|
19
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
20
|
+
end
|
21
|
+
end
|
22
|
+
obj
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
28
26
|
end
|
@@ -10,19 +10,18 @@ module ConstantContact
|
|
10
10
|
attr_accessor :activity_type, :campaign_id, :email_address, :contact_id, :send_date
|
11
11
|
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
13
|
+
# Factory method to create a SendActivity object from an array
|
14
|
+
# @param [Hash] props - hash of properties to create object from
|
15
|
+
# @return [SendActivity]
|
16
|
+
def self.create(props)
|
17
|
+
obj = SendActivity.new
|
18
|
+
if props
|
19
|
+
props.each do |key, value|
|
20
|
+
obj.send("#{key}=", value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
obj
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
28
27
|
end
|
@@ -5,24 +5,23 @@
|
|
5
5
|
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
6
|
|
7
7
|
module ConstantContact
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
module Components
|
9
|
+
class TrackingSummary < Component
|
10
|
+
attr_accessor :sends, :opens, :clicks, :forwards, :unsubscribes, :bounces, :contact_id, :spam_count
|
11
11
|
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
13
|
+
# Factory method to create a TrackingSummary object from an array
|
14
|
+
# @param [Hash] props - array of properties to create object from
|
15
|
+
# @return [TrackingSummary]
|
16
|
+
def self.create(props)
|
17
|
+
obj = TrackingSummary.new
|
18
|
+
if props
|
19
|
+
props.each do |key, value|
|
20
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
21
|
+
end
|
22
|
+
end
|
23
|
+
obj
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
28
27
|
end
|
@@ -10,20 +10,18 @@ module ConstantContact
|
|
10
10
|
attr_accessor :activity_type, :campaign_id, :contact_id, :email_address, :unsubscribe_date,
|
11
11
|
:unsubscribe_source, :unsubscribe_reason
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
13
|
+
# Factory method to create an UnsubscribeActivity object from an array
|
14
|
+
# @param [Hash] props - hash of properties to create object from
|
15
|
+
# @return [UnsubscribeActivity]
|
16
|
+
def self.create(props)
|
17
|
+
obj = UnsubscribeActivity.new
|
18
|
+
if props
|
19
|
+
props.each do |key, value|
|
20
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
21
|
+
end
|
22
|
+
end
|
23
|
+
obj
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
29
27
|
end
|
@@ -21,14 +21,16 @@ module ConstantContact
|
|
21
21
|
Components::Campaign.create(JSON.parse(response.body))
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
# Get a set of campaigns
|
25
|
+
# @param [String] access_token Constant Contact OAuth2 access token
|
26
|
+
# @param [Hash] opts query parameters to be appended to the request
|
27
|
+
# @option opts [String] status email campaigns status of DRAFT, RUNNING, SENT, SCHEDULED.
|
28
|
+
# @option opts [String] modified_since ISO-8601 date string to return campaigns modified since then.
|
29
|
+
# @option opts [Integer] limit number of campaigns to return, 1 to 50.
|
30
|
+
# @return [ResultSet<Campaign>]
|
31
|
+
def get_campaigns(access_token, opts = {})
|
32
|
+
url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.campaigns')
|
33
|
+
url = build_url(url, opts)
|
32
34
|
|
33
35
|
response = RestClient.get(url, get_headers(access_token))
|
34
36
|
body = JSON.parse(response.body)
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#
|
2
|
+
# email_marketing_service_spec.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
require 'spec_helper'
|
8
|
+
|
9
|
+
describe ConstantContact::Services::EmailMarketingService do
|
10
|
+
describe "#get_campaigns" do
|
11
|
+
it "returns an array of campaigns" do
|
12
|
+
json = load_json('campaigns.json')
|
13
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
14
|
+
|
15
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
16
|
+
RestClient.stub(:get).and_return(response)
|
17
|
+
campaigns = ConstantContact::Services::EmailMarketingService.get_campaigns('token')
|
18
|
+
campaign = campaigns.results[0]
|
19
|
+
|
20
|
+
campaigns.should be_kind_of(ConstantContact::Components::ResultSet)
|
21
|
+
campaign.should be_kind_of(ConstantContact::Components::Campaign)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#get_campaign" do
|
26
|
+
it "returns a campaign" do
|
27
|
+
json = load_json('campaign.json')
|
28
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
29
|
+
|
30
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
31
|
+
RestClient.stub(:get).and_return(response)
|
32
|
+
campaign = ConstantContact::Services::EmailMarketingService.get_campaign('token', 1)
|
33
|
+
|
34
|
+
campaign.should be_kind_of(ConstantContact::Components::Campaign)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#add_campaign" do
|
39
|
+
it "adds a campaign" do
|
40
|
+
json = load_json('campaign.json')
|
41
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
42
|
+
|
43
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
44
|
+
RestClient.stub(:post).and_return(response)
|
45
|
+
campaign = ConstantContact::Components::Campaign.create(JSON.parse(json))
|
46
|
+
added = ConstantContact::Services::EmailMarketingService.add_campaign('token', campaign)
|
47
|
+
|
48
|
+
added.should respond_to(:id)
|
49
|
+
added.id.should_not be_empty
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#delete_campaign" do
|
54
|
+
it "deletes a campgin" do
|
55
|
+
json = load_json('campaign.json')
|
56
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
|
57
|
+
|
58
|
+
response = RestClient::Response.create('', net_http_resp, {})
|
59
|
+
RestClient.stub(:delete).and_return(response)
|
60
|
+
campaign = ConstantContact::Components::Campaign.create(JSON.parse(json))
|
61
|
+
ConstantContact::Services::EmailMarketingService.delete_campaign('token', campaign).should be_true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#update_campaign" do
|
66
|
+
it "updates a campaign" do
|
67
|
+
json = load_json('campaign.json')
|
68
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
69
|
+
|
70
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
71
|
+
RestClient.stub(:put).and_return(response)
|
72
|
+
campaign = ConstantContact::Components::Campaign.create(JSON.parse(json))
|
73
|
+
added = ConstantContact::Services::EmailMarketingService.update_campaign('token', campaign)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: constantcontact
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ConstantContact
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -115,6 +115,7 @@ files:
|
|
115
115
|
- spec/constantcontact/components/contacts/custom_field_spec.rb
|
116
116
|
- spec/constantcontact/components/contacts/email_address_spec.rb
|
117
117
|
- spec/constantcontact/services/contact_service_spec.rb
|
118
|
+
- spec/constantcontact/services/email_marketing_spec.rb
|
118
119
|
- spec/constantcontact/services/list_service_spec.rb
|
119
120
|
- spec/spec_helper.rb
|
120
121
|
homepage: http://www.constantcontact.com
|