constantcontact 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA512:
|
3
|
+
metadata.gz: ce4ab04068029132c0a484c8de77cdffa0a4eda24eeb8e42806266f0935151255a3d270b5c133aba9e337c87788597386cec2b5de64c1e81fe33c9a473d02076
|
4
|
+
data.tar.gz: 19c32b1028d217e47bc65a3e145d666b5b57b67a9b58692e75ca6f25fb8f16daecb6e43f8392038a51eb2324f4907db5398884c9746270b3eeb422048904b214
|
5
|
+
SHA1:
|
6
|
+
metadata.gz: e6944720fbf8a0b247595feb9676859612b53376
|
7
|
+
data.tar.gz: d2294f919b1f9d7292618c7a817ff29e0bc09987
|
data/.rspec
ADDED
data/README.md
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
Constant Contact Ruby SDK
|
2
|
+
=========================
|
3
|
+
|
4
|
+
In order to use the Constant Contact SDK you have to follow these steps:
|
5
|
+
|
6
|
+
A. Rails example :
|
7
|
+
|
8
|
+
1. Install the gem :
|
9
|
+
|
10
|
+
gem install constantcontact
|
11
|
+
|
12
|
+
2. Configure Rails to load the gem :
|
13
|
+
|
14
|
+
Rails::Initializer.run do |config|
|
15
|
+
...
|
16
|
+
config.gem "constantcontact"
|
17
|
+
...
|
18
|
+
end
|
19
|
+
|
20
|
+
or add the following in your .Gemfile :
|
21
|
+
|
22
|
+
gem 'constantcontact'
|
23
|
+
|
24
|
+
3. Create a new action and add the following code:
|
25
|
+
|
26
|
+
@oauth = ConstantContact::Auth::OAuth2.new(
|
27
|
+
:api_key => 'your api key',
|
28
|
+
:api_secret => 'your secret key',
|
29
|
+
:redirect_url => 'your redirect url'
|
30
|
+
)
|
31
|
+
|
32
|
+
@error = params[:error]
|
33
|
+
@user = params[:username]
|
34
|
+
@code = params[:code]
|
35
|
+
|
36
|
+
if @code
|
37
|
+
response = @oauth.get_access_token(@code)
|
38
|
+
if response
|
39
|
+
token = response['access_token']
|
40
|
+
cc = ConstantContact::Api.new('your api key')
|
41
|
+
@contacts = cc.get_contacts(token)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
Note: 'your redirect url' is the URL of the action you just created.
|
47
|
+
|
48
|
+
4. Create a view for the above mentioned action with the following code:
|
49
|
+
|
50
|
+
<% if @error %>
|
51
|
+
<p>
|
52
|
+
<%=@error%>
|
53
|
+
</p>
|
54
|
+
<% end %>
|
55
|
+
|
56
|
+
<% if @code %>
|
57
|
+
<% if @contacts %>
|
58
|
+
<% for contact in @contacts %>
|
59
|
+
<p>
|
60
|
+
Contact name: <%= contact.first_name + contact.last_name %>
|
61
|
+
</p>
|
62
|
+
<% end %>
|
63
|
+
<% end %>
|
64
|
+
<% else %>
|
65
|
+
<a href="<%=@oauth.get_authorization_url%>">Click to authorize</a>
|
66
|
+
<% end %>
|
67
|
+
|
68
|
+
5. The first time you access the action in browser you should see the "Click to authorize" link.
|
69
|
+
Follow the link, go through all the Constant Contact steps required
|
70
|
+
and then you will be redirected back to your action and you should see the list of contacts.
|
71
|
+
|
72
|
+
|
73
|
+
B. Sinatra example :
|
74
|
+
|
75
|
+
|
76
|
+
1. Install the gem :
|
77
|
+
|
78
|
+
gem install constantcontact
|
79
|
+
|
80
|
+
2. Add the following code in myapp.rb (just an example):
|
81
|
+
require 'active_support'
|
82
|
+
require 'constantcontact'
|
83
|
+
|
84
|
+
get '/my_url' do
|
85
|
+
@oauth = ConstantContact::Auth::OAuth2.new(
|
86
|
+
:api_key => 'your api key',
|
87
|
+
:api_secret => 'your secret key',
|
88
|
+
:redirect_url => 'your redirect url'
|
89
|
+
)
|
90
|
+
|
91
|
+
@error = params[:error]
|
92
|
+
@user = params[:username]
|
93
|
+
@code = params[:code]
|
94
|
+
|
95
|
+
if @code
|
96
|
+
response = @oauth.get_access_token(@code)
|
97
|
+
if response
|
98
|
+
token = response['access_token']
|
99
|
+
cc = ConstantContact::Api.new('your api key')
|
100
|
+
@contacts = cc.get_contacts(token)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
erb :my_view
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
Note: 'your redirect url' is the URL of the route you just created ( get '/my_url' ).
|
109
|
+
|
110
|
+
4. Create a my_view.rhtml (or my_view.erb) with the following code:
|
111
|
+
|
112
|
+
<% if @error %>
|
113
|
+
<p>
|
114
|
+
<%=@error%>
|
115
|
+
</p>
|
116
|
+
<% end %>
|
117
|
+
|
118
|
+
<% if @code %>
|
119
|
+
<% if @contacts %>
|
120
|
+
<% for contact in @contacts %>
|
121
|
+
<p>
|
122
|
+
Contact name: <%= contact.first_name + contact.last_name %>
|
123
|
+
</p>
|
124
|
+
<% end %>
|
125
|
+
<% end %>
|
126
|
+
<% else %>
|
127
|
+
<a href="<%=@oauth.get_authorization_url%>">Click to authorize</a>
|
128
|
+
<% end %>
|
129
|
+
|
130
|
+
5. The first time you access the action in browser you should see the "Click to authorize" link.
|
131
|
+
Follow the link, go through all the Constant Contact steps required
|
132
|
+
and then you will be redirected back to your action and you should see the list of contacts.
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'constantcontact/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "constantcontact"
|
9
|
+
s.version = ConstantContact::SDK::VERSION
|
10
|
+
s.platform = Gem::Platform::RUBY
|
11
|
+
s.authors = ["ConstantContact"]
|
12
|
+
s.homepage = "http://www.constantcontact.com"
|
13
|
+
s.summary = %q{Constant Contact SDK for Ruby}
|
14
|
+
s.email = "apisupport@constantcontact.com"
|
15
|
+
s.description = "Ruby library for interactions with Constant Contact v2 API"
|
16
|
+
s.version = "1.0.0"
|
17
|
+
s.license = "MIT"
|
18
|
+
|
19
|
+
s.files = [
|
20
|
+
'.rspec',
|
21
|
+
'constantcontact.gemspec',
|
22
|
+
'README.md'
|
23
|
+
]
|
24
|
+
s.files += Dir['lib/**/*.rb']
|
25
|
+
s.files += Dir['spec/**/*.rb']
|
26
|
+
s.executables = []
|
27
|
+
s.require_paths = [ "lib", "spec" ]
|
28
|
+
|
29
|
+
s.add_dependency("rest-client")
|
30
|
+
s.add_dependency("json")
|
31
|
+
s.add_development_dependency("rspec")
|
32
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#
|
2
|
+
# constantcontact.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rest_client'
|
9
|
+
require 'json'
|
10
|
+
require 'cgi'
|
11
|
+
require 'cgi/session'
|
12
|
+
require 'cgi/session/pstore'
|
13
|
+
|
14
|
+
|
15
|
+
module ConstantContact
|
16
|
+
autoload :Api, "constantcontact/api"
|
17
|
+
|
18
|
+
module Auth
|
19
|
+
autoload :OAuth2, "constantcontact/auth/oauth2"
|
20
|
+
autoload :Session, "constantcontact/auth/session_data_store"
|
21
|
+
end
|
22
|
+
|
23
|
+
module Components
|
24
|
+
autoload :Component, "constantcontact/components/component"
|
25
|
+
autoload :ResultSet, "constantcontact/components/result_set"
|
26
|
+
autoload :Activity, "constantcontact/components/activities/activity"
|
27
|
+
autoload :ActivityError, "constantcontact/components/activities/activity_error"
|
28
|
+
autoload :AddContacts, "constantcontact/components/activities/add_contacts"
|
29
|
+
autoload :AddContactsImportData, "constantcontact/components/activities/add_contacts_import_data"
|
30
|
+
autoload :ExportContacts, "constantcontact/components/activities/export_contacts"
|
31
|
+
autoload :Address, "constantcontact/components/contacts/address"
|
32
|
+
autoload :Contact, "constantcontact/components/contacts/contact"
|
33
|
+
autoload :ContactList, "constantcontact/components/contacts/contact_list"
|
34
|
+
autoload :CustomField, "constantcontact/components/contacts/custom_field"
|
35
|
+
autoload :EmailAddress, "constantcontact/components/contacts/email_address"
|
36
|
+
autoload :Note, "constantcontact/components/contacts/note"
|
37
|
+
autoload :ClickThroughDetails, "constantcontact/components/email_marketing/click_through_details"
|
38
|
+
autoload :Campaign, "constantcontact/components/email_marketing/campaign"
|
39
|
+
autoload :MessageFooter, "constantcontact/components/email_marketing/message_footer"
|
40
|
+
autoload :Schedule, "constantcontact/components/email_marketing/schedule"
|
41
|
+
autoload :TestSend, "constantcontact/components/email_marketing/test_send"
|
42
|
+
autoload :BounceActivity, "constantcontact/components/tracking/bounce_activity"
|
43
|
+
autoload :ClickActivity, "constantcontact/components/tracking/click_activity"
|
44
|
+
autoload :ForwardActivity, "constantcontact/components/tracking/forward_activity"
|
45
|
+
autoload :OpenActivity, "constantcontact/components/tracking/open_activity"
|
46
|
+
autoload :OptOutActivity, "constantcontact/components/tracking/opt_out_activity"
|
47
|
+
autoload :SendActivity, "constantcontact/components/tracking/send_activity"
|
48
|
+
autoload :TrackingActivity, "constantcontact/components/tracking/tracking_activity"
|
49
|
+
autoload :TrackingSummary, "constantcontact/components/tracking/tracking_summary"
|
50
|
+
autoload :VerifiedEmailAddress, "constantcontact/components/account/verified_email_address"
|
51
|
+
end
|
52
|
+
|
53
|
+
module Exceptions
|
54
|
+
autoload :CtctException, "constantcontact/exceptions/ctct_exception"
|
55
|
+
autoload :IllegalArgumentException, "constantcontact/exceptions/illegal_argument_exception"
|
56
|
+
autoload :OAuth2Exception, "constantcontact/exceptions/oauth2_exception"
|
57
|
+
end
|
58
|
+
|
59
|
+
module Services
|
60
|
+
autoload :BaseService, "constantcontact/services/base_service"
|
61
|
+
autoload :ActivityService, "constantcontact/services/activity_service"
|
62
|
+
autoload :CampaignScheduleService, "constantcontact/services/campaign_schedule_service"
|
63
|
+
autoload :CampaignTrackingService, "constantcontact/services/campaign_tracking_service"
|
64
|
+
autoload :ContactService, "constantcontact/services/contact_service"
|
65
|
+
autoload :ContactTrackingService, "constantcontact/services/contact_tracking_service"
|
66
|
+
autoload :EmailMarketingService, "constantcontact/services/email_marketing_service"
|
67
|
+
autoload :ListService, "constantcontact/services/list_service"
|
68
|
+
autoload :AccountService, "constantcontact/services/account_service"
|
69
|
+
end
|
70
|
+
|
71
|
+
module Util
|
72
|
+
autoload :Config, "constantcontact/util/config"
|
73
|
+
autoload :Helpers, "constantcontact/util/helpers"
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,541 @@
|
|
1
|
+
#
|
2
|
+
# api.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
class Api
|
9
|
+
|
10
|
+
# Class constructor
|
11
|
+
# @param [String] api_key - Constant Contact API Key
|
12
|
+
# @return
|
13
|
+
def initialize(api_key)
|
14
|
+
Services::BaseService.api_key = api_key
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
# Get verified addresses for the account
|
19
|
+
# @param [String] access_token - Valid access token
|
20
|
+
# @return [Array<VerifiedEmailAddress>] an array of email addresses
|
21
|
+
def get_verified_email_addresses(access_token)
|
22
|
+
Services::AccountService.get_verified_email_addresses(access_token)
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
# Get a set of contacts
|
27
|
+
# @param [String] access_token - Valid access token
|
28
|
+
# @param [Integer] param - denotes the number of results per set, limited to 50,
|
29
|
+
# or a next parameter provided from a previous call
|
30
|
+
# @return [ResultSet<Contact>] a ResultSet of Contacts
|
31
|
+
def get_contacts(access_token, param = nil)
|
32
|
+
param = determine_param(param)
|
33
|
+
Services::ContactService.get_contacts(access_token, param)
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# Get an individual contact
|
38
|
+
# @param [String] access_token - Valid access token
|
39
|
+
# @param [Integer] contact_id - Id of the contact to retrieve
|
40
|
+
# @return [Contact]
|
41
|
+
def get_contact(access_token, contact_id)
|
42
|
+
Services::ContactService.get_contact(access_token, contact_id)
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
# Get contacts with a specified email eaddress
|
47
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
48
|
+
# @param [String] email - contact email address to search for
|
49
|
+
# @return [ResultSet<Contact>] a ResultSet of Contacts
|
50
|
+
def get_contact_by_email(access_token, email)
|
51
|
+
Services::ContactService.get_contacts(access_token, {'email' => email})
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
# Add a new contact to an account
|
56
|
+
# @param [String] access_token - Valid access token
|
57
|
+
# @param [Contact] contact - Contact to add
|
58
|
+
# @param [Boolean] action_by_visitor - if the action is being taken by the visitor
|
59
|
+
# @return [Contact]
|
60
|
+
def add_contact(access_token, contact, action_by_visitor = false)
|
61
|
+
Services::ContactService.add_contact(access_token, contact, action_by_visitor)
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
# Sets an individual contact to 'REMOVED' status
|
66
|
+
# @param [String] access_token - Valid access token
|
67
|
+
# @param [Mixed] contact - Either a Contact id or the Contact itself
|
68
|
+
# @raise [IllegalArgumentException] If contact is not an integer or a Contact object
|
69
|
+
# @return [Boolean]
|
70
|
+
def delete_contact(access_token, contact)
|
71
|
+
contact_id = get_argument_id(contact, 'Contact')
|
72
|
+
Services::ContactService.delete_contact(access_token, contact_id)
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
# Delete a contact from all contact lists
|
77
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
78
|
+
# @param [Mixed] contact - Contact id or the Contact object itself
|
79
|
+
# @raise [IllegalArgumentException] If contact is not an integer or a Contact object
|
80
|
+
# @return [Boolean]
|
81
|
+
def delete_contact_from_lists(access_token, contact)
|
82
|
+
contact_id = get_argument_id(contact, 'Contact')
|
83
|
+
Services::ContactService.delete_contact_from_lists(access_token, contact_id)
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
# Delete a contact from all contact lists
|
88
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
89
|
+
# @param [Mixed] contact - Contact id or a Contact object
|
90
|
+
# @param [Mixed] list - ContactList id or a ContactList object
|
91
|
+
# @raise [IllegalArgumentException] If contact is not an integer or a Contact object
|
92
|
+
# @return [Boolean]
|
93
|
+
def delete_contact_from_list(access_token, contact, list)
|
94
|
+
contact_id = get_argument_id(contact, 'Contact')
|
95
|
+
list_id = get_argument_id(list, 'ContactList')
|
96
|
+
Services::ContactService.delete_contact_from_list(access_token, contact_id, list_id)
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
# Update an individual contact
|
101
|
+
# @param [String] access_token - Valid access token
|
102
|
+
# @param [Contact] contact - Contact to update
|
103
|
+
# @param [Boolean] action_by_visitor - if the action is being taken by the visitor
|
104
|
+
# @return [Contact]
|
105
|
+
def update_contact(access_token, contact, action_by_visitor = false)
|
106
|
+
Services::ContactService.update_contact(access_token, contact, action_by_visitor)
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
# Get lists
|
111
|
+
# @param [String] access_token - Valid access token
|
112
|
+
# @return [Array<ContactList>] Array of ContactList objects
|
113
|
+
def get_lists(access_token)
|
114
|
+
Services::ListService.get_lists(access_token)
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
# Get an individual list
|
119
|
+
# @param [String] access_token - Valid access token
|
120
|
+
# @param [Integer] list_id - Id of the list to retrieve
|
121
|
+
# @return [ContactList]
|
122
|
+
def get_list(access_token, list_id)
|
123
|
+
Services::ListService.get_list(access_token, list_id)
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
# Add a new list to an account
|
128
|
+
# @param [String] access_token - Valid access token
|
129
|
+
# @param [ContactList] list - List to add
|
130
|
+
# @return [ContactList]
|
131
|
+
def add_list(access_token, list)
|
132
|
+
Services::ListService.add_list(access_token, list)
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
# Update a contact list
|
137
|
+
# @param [String] access_token - Valid access token
|
138
|
+
# @param [ContactList] list - ContactList to update
|
139
|
+
# @return [ContactList]
|
140
|
+
def update_list(access_token, list)
|
141
|
+
Services::ListService.update_list(access_token, list)
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
# Get contact that belong to a specific list
|
146
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
147
|
+
# @param [Mixed] list - Integer id of the list or ContactList object
|
148
|
+
# @raise [IllegalArgumentException] If contact is not an integer or contact
|
149
|
+
# @return [Array<Contact>] An array of contacts
|
150
|
+
def get_contacts_from_list(access_token, list)
|
151
|
+
list_id = get_argument_id(list, 'ContactList')
|
152
|
+
Services::ListService.get_contacts_from_list(access_token, list_id)
|
153
|
+
end
|
154
|
+
|
155
|
+
|
156
|
+
# Get a set of campaigns
|
157
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
158
|
+
# @param [String] param - denotes the number of results per set, limited to 50, or a next parameter provided
|
159
|
+
# from a previous call
|
160
|
+
# @return [ResultSet<Campaign>]
|
161
|
+
def get_email_campaigns(access_token, param = nil)
|
162
|
+
param = determine_param(param)
|
163
|
+
Services::EmailMarketingService.get_campaigns(access_token, param)
|
164
|
+
end
|
165
|
+
|
166
|
+
|
167
|
+
# Get an individual campaign
|
168
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
169
|
+
# @param [Integer] campaign_id - Valid campaign id
|
170
|
+
# @return [Campaign]
|
171
|
+
def get_email_campaign(access_token, campaign_id)
|
172
|
+
Services::EmailMarketingService.get_campaign(access_token, campaign_id)
|
173
|
+
end
|
174
|
+
|
175
|
+
|
176
|
+
# Delete an individual campaign
|
177
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
178
|
+
# @param [Mixed] campaign - Id of a campaign or a Campaign object
|
179
|
+
# @raise IllegalArgumentException - if a Campaign object or campaign id is not passed
|
180
|
+
# @return [Boolean]
|
181
|
+
def delete_email_campaign(access_token, campaign)
|
182
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
183
|
+
Services::EmailMarketingService.delete_campaign(access_token, campaign_id)
|
184
|
+
end
|
185
|
+
|
186
|
+
|
187
|
+
# Create a new campaign
|
188
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
189
|
+
# @param [Campaign] campaign - Campaign to be created
|
190
|
+
# @return [Campaign] - created campaign
|
191
|
+
def add_email_campaign(access_token, campaign)
|
192
|
+
Services::EmailMarketingService.add_campaign(access_token, campaign)
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
# Update a specific campaign
|
197
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
198
|
+
# @param [Campaign] campaign - Campaign to be updated
|
199
|
+
# @return [Campaign] - updated campaign
|
200
|
+
def update_email_campaign(access_token, campaign)
|
201
|
+
Services::EmailMarketingService.update_campaign(access_token, campaign)
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
# Schedule a campaign to be sent
|
206
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
207
|
+
# @param [Mixed] campaign - Id of a campaign or a Campaign object
|
208
|
+
# @param [Schedule] schedule - Schedule to be associated with the provided campaign
|
209
|
+
# @return [Campaign] - updated campaign
|
210
|
+
def add_email_campaign_schedule(access_token, campaign, schedule)
|
211
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
212
|
+
Services::CampaignScheduleService.add_schedule(access_token, campaign_id, schedule)
|
213
|
+
end
|
214
|
+
|
215
|
+
|
216
|
+
# Get an array of schedules associated with a given campaign
|
217
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
218
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
219
|
+
# @return [Array<Schedule>]
|
220
|
+
def get_email_campaign_schedules(access_token, campaign)
|
221
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
222
|
+
Services::CampaignScheduleService.get_schedules(access_token, campaign_id)
|
223
|
+
end
|
224
|
+
|
225
|
+
|
226
|
+
# Get a specific schedule associated with a given campaign
|
227
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
228
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
229
|
+
# @param [Mixed] schedule - Schedule id or Schedule object itself
|
230
|
+
# @raise IllegalArgumentException
|
231
|
+
# @return [Schedule]
|
232
|
+
def get_email_campaign_schedule(access_token, campaign, schedule)
|
233
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
234
|
+
schedule_id = get_argument_id(schedule, 'Schedule')
|
235
|
+
Services::CampaignScheduleService.get_schedule(access_token, campaign_id, schedule_id)
|
236
|
+
end
|
237
|
+
|
238
|
+
|
239
|
+
# Update a specific schedule associated with a given campaign
|
240
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
241
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
242
|
+
# @param [Schedule] schedule - Schedule to be updated
|
243
|
+
# @return [Schedule]
|
244
|
+
def update_email_campaign_schedule(access_token, campaign, schedule)
|
245
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
246
|
+
Services::CampaignScheduleService.update_schedule(access_token, campaign_id, schedule)
|
247
|
+
end
|
248
|
+
|
249
|
+
|
250
|
+
# Delete a specific schedule associated with a given campaign
|
251
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
252
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
253
|
+
# @param [Mixed] schedule - Schedule id or Schedule object itself
|
254
|
+
# @raise IllegalArgumentException
|
255
|
+
# @return [Boolean]
|
256
|
+
def delete_email_campaign_schedule(access_token, campaign, schedule)
|
257
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
258
|
+
schedule_id = get_argument_id(schedule, 'Schedule')
|
259
|
+
Services::CampaignScheduleService.delete_schedule(access_token, campaign_id, schedule_id)
|
260
|
+
end
|
261
|
+
|
262
|
+
|
263
|
+
# Send a test send of a campaign
|
264
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
265
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
266
|
+
# @param [TestSend] test_send - test send details
|
267
|
+
# @return [TestSend]
|
268
|
+
def send_email_campaign_test(access_token, campaign, test_send)
|
269
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
270
|
+
Services::CampaignScheduleService.send_test(access_token, campaign_id, test_send)
|
271
|
+
end
|
272
|
+
|
273
|
+
|
274
|
+
# Get sends for a campaign
|
275
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
276
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
277
|
+
# @param [String] param - next value returned from a previous request (used in pagination)
|
278
|
+
# @return [ResultSet<SendActivity>]
|
279
|
+
def get_email_campaign_sends(access_token, campaign, param = nil)
|
280
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
281
|
+
param = determine_param(param)
|
282
|
+
Services::CampaignTrackingService.get_sends(access_token, campaign_id, param)
|
283
|
+
end
|
284
|
+
|
285
|
+
|
286
|
+
# Get bounces for a campaign
|
287
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
288
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
289
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
290
|
+
# an initial request
|
291
|
+
# @return [ResultSet<BounceActivity>]
|
292
|
+
def get_email_campaign_bounces(access_token, campaign, param = nil)
|
293
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
294
|
+
param = determine_param(param)
|
295
|
+
Services::CampaignTrackingService.get_bounces(access_token, campaign_id, param)
|
296
|
+
end
|
297
|
+
|
298
|
+
|
299
|
+
# Get clicks for a campaign
|
300
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
301
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
302
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
303
|
+
# an initial request
|
304
|
+
# @return [ResultSet<ClickActivity>]
|
305
|
+
def get_email_campaign_clicks(access_token, campaign, param = nil)
|
306
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
307
|
+
param = determine_param(param)
|
308
|
+
Services::CampaignTrackingService.get_clicks(access_token, campaign_id, param)
|
309
|
+
end
|
310
|
+
|
311
|
+
|
312
|
+
# Get opens for a campaign
|
313
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
314
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
315
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
316
|
+
# an initial request
|
317
|
+
# @return [ResultSet<OpenActivity>]
|
318
|
+
def get_email_campaign_opens(access_token, campaign, param = nil)
|
319
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
320
|
+
param = determine_param(param)
|
321
|
+
Services::CampaignTrackingService.get_opens(access_token, campaign_id, param)
|
322
|
+
end
|
323
|
+
|
324
|
+
|
325
|
+
# Get forwards for a campaign
|
326
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
327
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
328
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
329
|
+
# an initial request
|
330
|
+
# @return [ResultSet<ForwardActivity>]
|
331
|
+
def get_email_campaign_forwards(access_token, campaign, param = nil)
|
332
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
333
|
+
param = determine_param(param)
|
334
|
+
Services::CampaignTrackingService.get_forwards(access_token, campaign_id, param)
|
335
|
+
end
|
336
|
+
|
337
|
+
|
338
|
+
# Get unsubscribes for a campaign
|
339
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
340
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
341
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
342
|
+
# an initial request
|
343
|
+
# @return [ResultSet<UnsubscribeActivity>] - Containing a results array of UnsubscribeActivity
|
344
|
+
def get_email_campaign_unsubscribes(access_token, campaign, param = nil)
|
345
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
346
|
+
param = determine_param(param)
|
347
|
+
Services::CampaignTrackingService.get_unsubscribes(access_token, campaign_id, param)
|
348
|
+
end
|
349
|
+
|
350
|
+
|
351
|
+
# Get a reporting summary for a campaign
|
352
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
353
|
+
# @param [Mixed] campaign - Campaign id or Campaign object itself
|
354
|
+
# @return [TrackingSummary]
|
355
|
+
def get_email_campaign_summary_report(access_token, campaign)
|
356
|
+
campaign_id = get_argument_id(campaign, 'Campaign')
|
357
|
+
Services::CampaignTrackingService.get_summary(access_token, campaign_id)
|
358
|
+
end
|
359
|
+
|
360
|
+
|
361
|
+
# Get sends for a Contact
|
362
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
363
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
364
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
365
|
+
# an initial request
|
366
|
+
# @return [ResultSet<SendActivity>]
|
367
|
+
def get_contact_sends(access_token, contact, param = nil)
|
368
|
+
contact_id = get_argument_id(contact, 'Contact')
|
369
|
+
Services::ContactTrackingService.get_sends(access_token, contact_id, param)
|
370
|
+
end
|
371
|
+
|
372
|
+
|
373
|
+
# Get bounces for a Contact
|
374
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
375
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
376
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
377
|
+
# an initial request
|
378
|
+
# @return [ResultSet<BounceActivity>]
|
379
|
+
def get_contact_bounces(access_token, contact, param = nil)
|
380
|
+
contact_id = get_argument_id(contact, 'Contact')
|
381
|
+
Services::ContactTrackingService.get_bounces(access_token, contact_id, param)
|
382
|
+
end
|
383
|
+
|
384
|
+
|
385
|
+
# Get clicks for a Contact
|
386
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
387
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
388
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
389
|
+
# an initial request
|
390
|
+
# @return [ResultSet<ClickActivity>]
|
391
|
+
def get_contact_clicks(access_token, contact, param = nil)
|
392
|
+
contact_id = get_argument_id(contact, 'Contact')
|
393
|
+
param = determine_param(param)
|
394
|
+
Services::ContactTrackingService.get_clicks(access_token, contact_id, param)
|
395
|
+
end
|
396
|
+
|
397
|
+
|
398
|
+
# Get opens for a Contact
|
399
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
400
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
401
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
402
|
+
# an initial request
|
403
|
+
# @return [ResultSet<OpenActivity>]
|
404
|
+
def get_contact_opens(access_token, contact, param = nil)
|
405
|
+
contact_id = get_argument_id(contact, 'Contact')
|
406
|
+
param = determine_param(param)
|
407
|
+
Services::ContactTrackingService.get_opens(access_token, contact_id, param)
|
408
|
+
end
|
409
|
+
|
410
|
+
|
411
|
+
# Get forwards for a Contact
|
412
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
413
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
414
|
+
# @param [Mixed] param - either the next link from a previous request, or a limit or restrict the page size of
|
415
|
+
# an initial request
|
416
|
+
# @return [ResultSet<ForwardActivity>]
|
417
|
+
def get_contact_forwards(access_token, contact, param = nil)
|
418
|
+
contact_id = get_argument_id(contact, 'Contact')
|
419
|
+
param = determine_param(param)
|
420
|
+
Services::ContactTrackingService.get_forwards(access_token, contact_id, param)
|
421
|
+
end
|
422
|
+
|
423
|
+
|
424
|
+
# Get unsubscribes for a Contact
|
425
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
426
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
427
|
+
# @param [Hash] param - either the next link from a previous request, or a limit or restrict the page size of
|
428
|
+
# an initial request
|
429
|
+
# @return [UnsubscribeActivity] - Containing a results array of UnsubscribeActivity
|
430
|
+
def get_contact_unsubscribes(access_token, contact, param = nil)
|
431
|
+
contact_id = get_argument_id(contact, 'Contact')
|
432
|
+
param = determine_param(param)
|
433
|
+
Services::ContactTrackingService.get_unsubscribes(access_token, contact_id, param)
|
434
|
+
end
|
435
|
+
|
436
|
+
|
437
|
+
# Get a reporting summary for a Contact
|
438
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
439
|
+
# @param [Mixed] contact - Contact id or Contact object itself
|
440
|
+
# @return [TrackingSummary]
|
441
|
+
def get_contact_summary_report(access_token, contact)
|
442
|
+
contact_id = get_argument_id(contact, 'Contact')
|
443
|
+
Services::ContactTrackingService.get_summary(access_token, contact_id)
|
444
|
+
end
|
445
|
+
|
446
|
+
|
447
|
+
# Get an array of activities
|
448
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
449
|
+
# @return [Array<Activity>]
|
450
|
+
def get_activities(access_token)
|
451
|
+
Services::ActivityService.get_activities(access_token)
|
452
|
+
end
|
453
|
+
|
454
|
+
|
455
|
+
# Get a single activity by id
|
456
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
457
|
+
# @param [String] activity_id - Activity id
|
458
|
+
# @return [Activity]
|
459
|
+
def get_activity(access_token, activity_id)
|
460
|
+
Services::ActivityService.get_activity(access_token, activity_id)
|
461
|
+
end
|
462
|
+
|
463
|
+
|
464
|
+
# Add an AddContacts activity to add contacts in bulk
|
465
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
466
|
+
# @param [AddContacts] add_contacts - Add Contacts
|
467
|
+
# @return [Activity]
|
468
|
+
def add_add_contacts_activity(access_token, add_contacts)
|
469
|
+
Services::ActivityService.create_add_contacts_activity(access_token, add_contacts)
|
470
|
+
end
|
471
|
+
|
472
|
+
|
473
|
+
# Add a ClearLists Activity to remove all contacts from the provided lists
|
474
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
475
|
+
# @param [Array<Lists>] lists - Add Contacts Activity
|
476
|
+
# @return [Activity]
|
477
|
+
def add_clear_lists_activity(access_token, lists)
|
478
|
+
Services::ActivityService.add_clear_lists_activity(access_token, lists)
|
479
|
+
end
|
480
|
+
|
481
|
+
|
482
|
+
# Add a Remove Contacts From Lists Activity
|
483
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
484
|
+
# @param [Array<EmailAddress>] email_addresses - email addresses to be removed
|
485
|
+
# @param [Array<Lists>] lists - lists to remove the provided email addresses from
|
486
|
+
# @return [Activity]
|
487
|
+
def add_remove_contacts_from_lists_activity(access_token, email_addresses, lists)
|
488
|
+
Services::ActivityService.add_remove_contacts_from_lists_activity(access_token, email_addresses, lists)
|
489
|
+
end
|
490
|
+
|
491
|
+
|
492
|
+
# Create an Export Contacts Activity
|
493
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
494
|
+
# @param [<Array>Contacts] export_contacts - Contacts to be exported
|
495
|
+
# @return [Activity]
|
496
|
+
def add_export_contacts_activity(access_token, export_contacts)
|
497
|
+
Services::ActivityService.add_export_contacts_activity(access_token, export_contacts)
|
498
|
+
end
|
499
|
+
|
500
|
+
|
501
|
+
private
|
502
|
+
|
503
|
+
|
504
|
+
# Get the id of object, or attempt to convert the argument to an int
|
505
|
+
# @param [Mixed] item - object or a numeric value
|
506
|
+
# @param [String] class_name - class name to test the given object against
|
507
|
+
# @raise IllegalArgumentException - if the item is not an instance of the class name given, or cannot be
|
508
|
+
# converted to a numeric value
|
509
|
+
# @return [Integer]
|
510
|
+
def get_argument_id(item, class_name)
|
511
|
+
item_id = nil
|
512
|
+
if item.is_a?(Integer)
|
513
|
+
item_id = item
|
514
|
+
elsif item.class.to_s.split('::').last == class_name
|
515
|
+
item_id = item.id
|
516
|
+
else
|
517
|
+
raise Exceptions::IllegalArgumentException.new(sprintf(Util::Config.get('errors.id_or_object'), class_name))
|
518
|
+
end
|
519
|
+
item_id
|
520
|
+
end
|
521
|
+
|
522
|
+
|
523
|
+
# Append the limit parameter, if the value is an integer
|
524
|
+
# @param [String] param - parameter value
|
525
|
+
# @return [Hash] the parameters as a hash object
|
526
|
+
def determine_param(param)
|
527
|
+
params = {}
|
528
|
+
if param
|
529
|
+
param = param.to_s
|
530
|
+
if param[0, 1] == '?'
|
531
|
+
hash_params = CGI::parse(param[1..-1])
|
532
|
+
params = Hash[*hash_params.collect {|key, value| [key, value.first] }.flatten]
|
533
|
+
else
|
534
|
+
params['limit'] = param
|
535
|
+
end
|
536
|
+
end
|
537
|
+
params
|
538
|
+
end
|
539
|
+
|
540
|
+
end
|
541
|
+
end
|