constantcontact 1.0.0
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 -0
- data/.rspec +2 -0
- data/README.md +132 -0
- data/constantcontact.gemspec +32 -0
- data/lib/constantcontact.rb +75 -0
- data/lib/constantcontact/api.rb +541 -0
- data/lib/constantcontact/auth/oauth2.rb +82 -0
- data/lib/constantcontact/auth/session_data_store.rb +69 -0
- data/lib/constantcontact/components/account/verified_email_address.rb +27 -0
- data/lib/constantcontact/components/activities/activity.rb +44 -0
- data/lib/constantcontact/components/activities/activity_error.rb +27 -0
- data/lib/constantcontact/components/activities/add_contacts.rb +117 -0
- data/lib/constantcontact/components/activities/add_contacts_import_data.rb +45 -0
- data/lib/constantcontact/components/activities/export_contacts.rb +30 -0
- data/lib/constantcontact/components/component.rb +23 -0
- data/lib/constantcontact/components/contacts/address.rb +28 -0
- data/lib/constantcontact/components/contacts/contact.rb +86 -0
- data/lib/constantcontact/components/contacts/contact_list.rb +27 -0
- data/lib/constantcontact/components/contacts/custom_field.rb +27 -0
- data/lib/constantcontact/components/contacts/email_address.rb +34 -0
- data/lib/constantcontact/components/contacts/note.rb +25 -0
- data/lib/constantcontact/components/email_marketing/campaign.rb +83 -0
- data/lib/constantcontact/components/email_marketing/click_through_details.rb +28 -0
- data/lib/constantcontact/components/email_marketing/message_footer.rb +30 -0
- data/lib/constantcontact/components/email_marketing/schedule.rb +29 -0
- data/lib/constantcontact/components/email_marketing/test_send.rb +45 -0
- data/lib/constantcontact/components/result_set.rb +27 -0
- data/lib/constantcontact/components/tracking/bounce_activity.rb +29 -0
- data/lib/constantcontact/components/tracking/click_activity.rb +28 -0
- data/lib/constantcontact/components/tracking/forward_activity.rb +28 -0
- data/lib/constantcontact/components/tracking/open_activity.rb +28 -0
- data/lib/constantcontact/components/tracking/send_activity.rb +28 -0
- data/lib/constantcontact/components/tracking/tracking_activity.rb +27 -0
- data/lib/constantcontact/components/tracking/tracking_summary.rb +28 -0
- data/lib/constantcontact/components/tracking/unsubscribe_activity.rb +29 -0
- data/lib/constantcontact/exceptions/ctct_exception.rb +25 -0
- data/lib/constantcontact/exceptions/illegal_argument_exception.rb +11 -0
- data/lib/constantcontact/exceptions/oauth2_exception.rb +11 -0
- data/lib/constantcontact/services/account_service.rb +29 -0
- data/lib/constantcontact/services/activity_service.rb +107 -0
- data/lib/constantcontact/services/base_service.rb +37 -0
- data/lib/constantcontact/services/campaign_schedule_service.rb +107 -0
- data/lib/constantcontact/services/campaign_tracking_service.rb +159 -0
- data/lib/constantcontact/services/contact_service.rb +114 -0
- data/lib/constantcontact/services/contact_tracking_service.rb +159 -0
- data/lib/constantcontact/services/email_marketing_service.rb +87 -0
- data/lib/constantcontact/services/list_service.rb +85 -0
- data/lib/constantcontact/util/config.rb +140 -0
- data/lib/constantcontact/util/helpers.rb +27 -0
- data/lib/constantcontact/version.rb +12 -0
- data/spec/constantcontact/api_spec.rb +183 -0
- data/spec/constantcontact/auth/oauth2_spec.rb +48 -0
- data/spec/constantcontact/components/contacts/address_spec.rb +18 -0
- data/spec/constantcontact/components/contacts/contact_list_spec.rb +18 -0
- data/spec/constantcontact/components/contacts/contact_spec.rb +18 -0
- data/spec/constantcontact/components/contacts/custom_field_spec.rb +18 -0
- data/spec/constantcontact/components/contacts/email_address_spec.rb +18 -0
- data/spec/constantcontact/services/contact_service_spec.rb +105 -0
- data/spec/constantcontact/services/list_service_spec.rb +69 -0
- data/spec/spec_helper.rb +13 -0
- metadata +134 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
#
|
2
|
+
# component.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class Component
|
10
|
+
protected
|
11
|
+
|
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
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#
|
2
|
+
# address.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
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
|
+
|
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
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#
|
2
|
+
# contact.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class Contact < Component
|
10
|
+
|
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
|
+
|
17
|
+
|
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
|
+
|
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
|
+
|
68
|
+
|
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
|
+
|
76
|
+
|
77
|
+
# Setter
|
78
|
+
# @param [Address] address
|
79
|
+
def add_address(address)
|
80
|
+
@addresses = [] if @addresses.nil?
|
81
|
+
@addresses << address
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# contact_list.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class ContactList < Component
|
10
|
+
attr_accessor :id, :name, :status, :contact_count, :opt_in_default
|
11
|
+
|
12
|
+
# Factory method to create a ContactList object from a json string
|
13
|
+
# @param [Hash] props - array of properties to create object from
|
14
|
+
# @return [ContactList]
|
15
|
+
def self.create(props)
|
16
|
+
contact_list = ContactList.new
|
17
|
+
if props
|
18
|
+
props.each do |key, value|
|
19
|
+
contact_list.send("#{key}=", value)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
contact_list
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# custom_field.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class CustomField < Component
|
10
|
+
attr_accessor :name, :value
|
11
|
+
|
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
|
+
custom_field = CustomField.new
|
17
|
+
if props
|
18
|
+
props.each do |key, value|
|
19
|
+
custom_field.send("#{key}=", value)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
custom_field
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# email_address.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class EmailAddress < Component
|
10
|
+
attr_accessor :id, :status, :confirm_status, :opt_in_source, :opt_in_date, :opt_out_date, :email_address
|
11
|
+
|
12
|
+
# Class constructor
|
13
|
+
# @param [String] email_address
|
14
|
+
# @return [EmailAddress]
|
15
|
+
def initialize(email_address = nil)
|
16
|
+
@email_address = email_address if email_address
|
17
|
+
end
|
18
|
+
|
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
|
+
email_address = EmailAddress.new
|
24
|
+
if props
|
25
|
+
props.each do |key, value|
|
26
|
+
email_address.send("#{key}=", value)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
email_address
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#
|
2
|
+
# note.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class Note < Component
|
10
|
+
attr_accessor :id, :note, :created_date
|
11
|
+
|
12
|
+
# Factory method to create a Note object from a json string
|
13
|
+
# @param 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
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
#
|
2
|
+
# email_campaign.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
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
|
17
|
+
|
18
|
+
|
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
|
+
else
|
45
|
+
campaign.send("#{key}=", value)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
campaign
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
# Factory method to create a Campaign object from an array
|
54
|
+
# @param [Hash] props - hash of initial properties to set
|
55
|
+
# @return [Campaign]
|
56
|
+
def self.create_summary(props)
|
57
|
+
campaign = Campaign.new
|
58
|
+
if props
|
59
|
+
props.each do |key, value|
|
60
|
+
campaign.send("#{key}=", value)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
campaign
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
# Add a contact list to set of lists associated with this email
|
68
|
+
# @param [Mixed] contact_list - Contact list id, or ContactList object
|
69
|
+
def add_list(contact_list)
|
70
|
+
if contact_list.instance_of?(ContactList)
|
71
|
+
list = contact_list
|
72
|
+
elsif contact_list.to_i.to_s == contact_list
|
73
|
+
list = ContactList.new(contact_list)
|
74
|
+
else
|
75
|
+
raise Exceptions::IllegalArgumentException, sprintf(Util::Config.get('errors.id_or_object'), 'ContactList')
|
76
|
+
end
|
77
|
+
|
78
|
+
@sent_to_contact_lists << list
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#
|
2
|
+
# click_through_details.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class ClickThroughDetails < Component
|
10
|
+
attr_accessor :url, :url_uid, :click_count
|
11
|
+
|
12
|
+
|
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
|
+
click_through_details = ClickThroughDetails.new
|
18
|
+
if props
|
19
|
+
props.each do |key, value|
|
20
|
+
click_through_details.send("#{key}=", value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
click_through_details
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# message_footer.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class MessageFooter < Component
|
10
|
+
attr_accessor :city, :state, :country, :organization_name, :address_line_1,
|
11
|
+
:address_line_2, :address_line_3, :international_state,
|
12
|
+
:postal_code, :include_forward_email, :forward_email_link_text,
|
13
|
+
:include_subscribe_link, :subscribe_link_text
|
14
|
+
|
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
|
+
message_footer = MessageFooter.new
|
20
|
+
if props
|
21
|
+
props.each do |key, value|
|
22
|
+
message_footer.send("#{key}=", value)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
message_footer
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#
|
2
|
+
# schedule.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class Schedule < Component
|
10
|
+
attr_accessor :id, :scheduled_date
|
11
|
+
|
12
|
+
|
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
|
+
schedule = Schedule.new
|
18
|
+
if props
|
19
|
+
props = props.first if props.is_a?(Array)
|
20
|
+
props.each do |key, value|
|
21
|
+
schedule.send("#{key}=", value)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
schedule
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#
|
2
|
+
# test_send.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class TestSend < Component
|
10
|
+
attr_accessor :format, :personal_message, :email_addresses
|
11
|
+
|
12
|
+
|
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
|
+
test_send = TestSend.new
|
18
|
+
if props
|
19
|
+
props.each do |key, value|
|
20
|
+
if key == 'email_addresses'
|
21
|
+
if value
|
22
|
+
test_send.email_addresses = []
|
23
|
+
value.each do |email_address|
|
24
|
+
test_send.email_addresses << email_address
|
25
|
+
end
|
26
|
+
end
|
27
|
+
else
|
28
|
+
test_send.send("#{key}=", value)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
test_send
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
# Add an email address to the set of addresses to send the test send too
|
37
|
+
# @param [String] email_address
|
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
|
+
end
|