constantcontact-ruby 2.2.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 +136 -0
- data/constantcontact-ruby.gemspec +31 -0
- data/lib/constantcontact/api.rb +1012 -0
- data/lib/constantcontact/auth/oauth2.rb +105 -0
- data/lib/constantcontact/auth/session_data_store.rb +69 -0
- data/lib/constantcontact/components/account/account_address.rb +26 -0
- data/lib/constantcontact/components/account/account_info.rb +38 -0
- data/lib/constantcontact/components/account/verified_email_address.rb +26 -0
- data/lib/constantcontact/components/activities/activity.rb +43 -0
- data/lib/constantcontact/components/activities/activity_error.rb +26 -0
- data/lib/constantcontact/components/activities/add_contacts.rb +127 -0
- data/lib/constantcontact/components/activities/add_contacts_import_data.rb +46 -0
- data/lib/constantcontact/components/activities/export_contacts.rb +30 -0
- data/lib/constantcontact/components/component.rb +48 -0
- data/lib/constantcontact/components/contacts/address.rb +27 -0
- data/lib/constantcontact/components/contacts/contact.rb +92 -0
- data/lib/constantcontact/components/contacts/contact_list.rb +26 -0
- data/lib/constantcontact/components/contacts/custom_field.rb +26 -0
- data/lib/constantcontact/components/contacts/email_address.rb +33 -0
- data/lib/constantcontact/components/contacts/note.rb +26 -0
- data/lib/constantcontact/components/email_marketing/campaign.rb +83 -0
- data/lib/constantcontact/components/email_marketing/campaign_preview.rb +29 -0
- data/lib/constantcontact/components/email_marketing/click_through_details.rb +27 -0
- data/lib/constantcontact/components/email_marketing/message_footer.rb +29 -0
- data/lib/constantcontact/components/email_marketing/schedule.rb +27 -0
- data/lib/constantcontact/components/email_marketing/test_send.rb +45 -0
- data/lib/constantcontact/components/event_spot/contact.rb +27 -0
- data/lib/constantcontact/components/event_spot/event.rb +69 -0
- data/lib/constantcontact/components/event_spot/event_address.rb +29 -0
- data/lib/constantcontact/components/event_spot/event_fee.rb +27 -0
- data/lib/constantcontact/components/event_spot/event_item.rb +36 -0
- data/lib/constantcontact/components/event_spot/event_item_attribute.rb +26 -0
- data/lib/constantcontact/components/event_spot/event_track.rb +31 -0
- data/lib/constantcontact/components/event_spot/guest.rb +31 -0
- data/lib/constantcontact/components/event_spot/guest_section.rb +34 -0
- data/lib/constantcontact/components/event_spot/notification_option.rb +27 -0
- data/lib/constantcontact/components/event_spot/online_meeting.rb +28 -0
- data/lib/constantcontact/components/event_spot/payment_address.rb +29 -0
- data/lib/constantcontact/components/event_spot/payment_summary.rb +33 -0
- data/lib/constantcontact/components/event_spot/promocode.rb +25 -0
- data/lib/constantcontact/components/event_spot/registrant.rb +52 -0
- data/lib/constantcontact/components/event_spot/registrant_fee.rb +29 -0
- data/lib/constantcontact/components/event_spot/registrant_field.rb +27 -0
- data/lib/constantcontact/components/event_spot/registrant_order.rb +39 -0
- data/lib/constantcontact/components/event_spot/registrant_promo_code.rb +31 -0
- data/lib/constantcontact/components/event_spot/registrant_promo_code_info.rb +27 -0
- data/lib/constantcontact/components/event_spot/registrant_section.rb +34 -0
- data/lib/constantcontact/components/event_spot/sale_item.rb +29 -0
- data/lib/constantcontact/components/library/file/library_file.rb +27 -0
- data/lib/constantcontact/components/library/folder/library_folder.rb +26 -0
- data/lib/constantcontact/components/library/info/library_summary.rb +26 -0
- data/lib/constantcontact/components/library/info/move_results.rb +26 -0
- data/lib/constantcontact/components/library/info/upload_status.rb +26 -0
- data/lib/constantcontact/components/result_set.rb +50 -0
- data/lib/constantcontact/components/tracking/bounce_activity.rb +28 -0
- data/lib/constantcontact/components/tracking/click_activity.rb +26 -0
- data/lib/constantcontact/components/tracking/forward_activity.rb +26 -0
- data/lib/constantcontact/components/tracking/open_activity.rb +26 -0
- data/lib/constantcontact/components/tracking/send_activity.rb +27 -0
- data/lib/constantcontact/components/tracking/tracking_activity.rb +26 -0
- data/lib/constantcontact/components/tracking/tracking_summary.rb +27 -0
- data/lib/constantcontact/components/tracking/unsubscribe_activity.rb +27 -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/exceptions/webhooks_exception.rb +11 -0
- data/lib/constantcontact/services/account_service.rb +39 -0
- data/lib/constantcontact/services/activity_service.rb +136 -0
- data/lib/constantcontact/services/base_service.rb +68 -0
- data/lib/constantcontact/services/campaign_schedule_service.rb +101 -0
- data/lib/constantcontact/services/campaign_tracking_service.rb +152 -0
- data/lib/constantcontact/services/contact_service.rb +105 -0
- data/lib/constantcontact/services/contact_tracking_service.rb +152 -0
- data/lib/constantcontact/services/email_marketing_service.rb +94 -0
- data/lib/constantcontact/services/event_spot_service.rb +448 -0
- data/lib/constantcontact/services/library_service.rb +281 -0
- data/lib/constantcontact/services/list_service.rb +81 -0
- data/lib/constantcontact/util/config.rb +180 -0
- data/lib/constantcontact/util/helpers.rb +27 -0
- data/lib/constantcontact/version.rb +12 -0
- data/lib/constantcontact/webhooks/helpers/validator.rb +30 -0
- data/lib/constantcontact/webhooks/models/billing_change_notification.rb +27 -0
- data/lib/constantcontact/webhooks/webhooks_util.rb +45 -0
- data/lib/constantcontact.rb +124 -0
- data/spec/constantcontact/api_spec.rb +1560 -0
- data/spec/constantcontact/auth/oauth2_spec.rb +125 -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/sdk_spec.rb +24 -0
- data/spec/constantcontact/services/account_service_spec.rb +46 -0
- data/spec/constantcontact/services/activity_service_spec.rb +244 -0
- data/spec/constantcontact/services/base_service_spec.rb +50 -0
- data/spec/constantcontact/services/campaign_schedule_service_spec.rb +115 -0
- data/spec/constantcontact/services/campaign_tracking_service_spec.rb +131 -0
- data/spec/constantcontact/services/contact_service_spec.rb +111 -0
- data/spec/constantcontact/services/contact_tracking_service_spec.rb +131 -0
- data/spec/constantcontact/services/email_marketing_spec.rb +100 -0
- data/spec/constantcontact/services/event_spot_spec.rb +423 -0
- data/spec/constantcontact/services/library_service_spec.rb +252 -0
- data/spec/constantcontact/services/list_service_spec.rb +89 -0
- data/spec/constantcontact/webhooks/webhooks_spec.rb +26 -0
- metadata +243 -0
@@ -0,0 +1,105 @@
|
|
1
|
+
#
|
2
|
+
# oauth2.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Auth
|
9
|
+
class OAuth2
|
10
|
+
attr_accessor :client_id, :client_secret, :redirect_uri, :props
|
11
|
+
|
12
|
+
|
13
|
+
# Class constructor
|
14
|
+
# @param [Hash] opts - the options to create an OAuth2 object with
|
15
|
+
# @option opts [String] :api_key - the Constant Contact API Key
|
16
|
+
# @option opts [String] :api_secret - the Constant Contact secret key
|
17
|
+
# @option opts [String] :redirect_url - the URL where Constact Contact is returning the authorization code
|
18
|
+
# @return
|
19
|
+
def initialize(opts = {})
|
20
|
+
@client_id = opts[:api_key] || Util::Config.get('auth.api_key')
|
21
|
+
@client_secret = opts[:api_secret] || Util::Config.get('auth.api_secret')
|
22
|
+
@redirect_uri = opts[:redirect_url] || Util::Config.get('auth.redirect_uri')
|
23
|
+
if @client_id.nil? || @client_id == '' || @client_secret.nil? || @client_secret.nil? || @redirect_uri.nil? || @redirect_uri == ''
|
24
|
+
raise ArgumentError.new "Either api_key, api_secret or redirect_uri is missing in explicit call or configuration."
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
# Get the URL at which the user can authenticate and authorize the requesting application
|
30
|
+
# @param [Boolean] server - whether or not to use OAuth2 server flow, alternative is client flow
|
31
|
+
# @param [String] state - an optional value used by the client to maintain state between the request and callback
|
32
|
+
# @return [String] the authorization URL
|
33
|
+
def get_authorization_url(server = true, state = nil)
|
34
|
+
response_type = server ? Util::Config.get('auth.response_type_code') : Util::Config.get('auth.response_type_token')
|
35
|
+
params = {
|
36
|
+
:response_type => response_type,
|
37
|
+
:client_id => @client_id,
|
38
|
+
:redirect_uri => @redirect_uri
|
39
|
+
}
|
40
|
+
if state
|
41
|
+
params[:state] = state
|
42
|
+
end
|
43
|
+
[
|
44
|
+
Util::Config.get('auth.base_url'),
|
45
|
+
Util::Config.get('auth.authorization_endpoint'),
|
46
|
+
'?',
|
47
|
+
Util::Helpers.http_build_query(params)
|
48
|
+
].join
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
# Obtain an access token
|
53
|
+
# @param [String] code - the code returned from Constant Contact after a user has granted access to his account
|
54
|
+
# @return [String] the access token
|
55
|
+
def get_access_token(code)
|
56
|
+
params = {
|
57
|
+
:grant_type => Util::Config.get('auth.authorization_code_grant_type'),
|
58
|
+
:client_id => @client_id,
|
59
|
+
:client_secret => @client_secret,
|
60
|
+
:code => code,
|
61
|
+
:redirect_uri => @redirect_uri
|
62
|
+
}
|
63
|
+
|
64
|
+
url = [
|
65
|
+
Util::Config.get('auth.base_url'),
|
66
|
+
Util::Config.get('auth.token_endpoint')
|
67
|
+
].join
|
68
|
+
|
69
|
+
response_body = ''
|
70
|
+
begin
|
71
|
+
response = RestClient.post(url, params)
|
72
|
+
response_body = JSON.parse(response)
|
73
|
+
rescue => e
|
74
|
+
response_body = e.respond_to?(:response) && e.response ?
|
75
|
+
JSON.parse(e.response) :
|
76
|
+
{'error' => '', 'error_description' => e.message}
|
77
|
+
end
|
78
|
+
|
79
|
+
if response_body['error_description']
|
80
|
+
error = response_body['error_description']
|
81
|
+
raise Exceptions::OAuth2Exception, error
|
82
|
+
end
|
83
|
+
|
84
|
+
response_body
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
# Get an information about an access token
|
89
|
+
# @param [String] access_token - Constant Contact OAuth2 access token
|
90
|
+
# @return array
|
91
|
+
def get_token_info(access_token)
|
92
|
+
params = {
|
93
|
+
:access_token => access_token
|
94
|
+
}
|
95
|
+
url = [
|
96
|
+
Util::Config.get('auth.base_url'),
|
97
|
+
Util::Config.get('auth.token_info')
|
98
|
+
].join
|
99
|
+
response = RestClient.post(url, params)
|
100
|
+
response_body = JSON.parse(response)
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#
|
2
|
+
# session_data_store.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Auth
|
9
|
+
class Session
|
10
|
+
attr_accessor :session
|
11
|
+
|
12
|
+
# Create and initialize the session
|
13
|
+
def initialize
|
14
|
+
cgi = CGI.new('html4')
|
15
|
+
|
16
|
+
# We make sure to delete an old session if one exists,
|
17
|
+
# not just to free resources, but to prevent the session
|
18
|
+
# from being maliciously hijacked later on.
|
19
|
+
begin
|
20
|
+
@session = CGI::Session.new(cgi, 'database_manager' => CGI::Session::PStore, 'new_session' => false)
|
21
|
+
@session.delete
|
22
|
+
rescue ArgumentError # if no old session
|
23
|
+
end
|
24
|
+
@session = CGI::Session.new(cgi, 'database_manager' => CGI::Session::PStore, 'new_session' => true)
|
25
|
+
@session['datastore'] = {}
|
26
|
+
end
|
27
|
+
|
28
|
+
# Add a new user to the data store
|
29
|
+
# @param [String] username - Constant Contact username
|
30
|
+
# @param [Hash] params - additional parameters
|
31
|
+
# @return
|
32
|
+
def add_user(username, params)
|
33
|
+
@session['datastore'][username] = params
|
34
|
+
end
|
35
|
+
|
36
|
+
# Get an existing user from the data store
|
37
|
+
# @param [String] username - Constant Contact username key
|
38
|
+
# @return [String] The username value
|
39
|
+
def get_user(username)
|
40
|
+
@session['datastore'].has_key?(username) ? @session['datastore'][username] : false
|
41
|
+
end
|
42
|
+
|
43
|
+
# Update an existing user in the data store
|
44
|
+
# @param [String] username - Constant Contact username
|
45
|
+
# @param [Hash] params - additional parameters
|
46
|
+
# @return
|
47
|
+
def update_user(username, params)
|
48
|
+
if @session['datastore'].has_key?(username)
|
49
|
+
@session['datastore'][username] = params
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Delete an existing user from the data store
|
54
|
+
# @param [String] username - Constant Contact username
|
55
|
+
# @return
|
56
|
+
def delete_user(username)
|
57
|
+
@session['datastore'][username] = nil
|
58
|
+
end
|
59
|
+
|
60
|
+
# Close current session
|
61
|
+
# @return
|
62
|
+
def close
|
63
|
+
@session.close
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# account_address.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class AccountAddress < Component
|
10
|
+
attr_accessor :city, :country_code, :line1, :postal_code, :state_code
|
11
|
+
|
12
|
+
# Factory method to create an AccountAddress object from a json string
|
13
|
+
# @param [Hash] props - properties to create object from
|
14
|
+
# @return [AccountAddress]
|
15
|
+
def self.create(props)
|
16
|
+
obj = AccountAddress.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
|
26
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#
|
2
|
+
# account_info.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class AccountInfo < Component
|
10
|
+
attr_accessor :website, :organization_name, :first_name, :last_name, :email, :phone, :country_code, :state_code,
|
11
|
+
:company_logo, :time_zone, :organization_addresses
|
12
|
+
|
13
|
+
# Class constructor
|
14
|
+
# @return [AccountInfo]
|
15
|
+
def initialize
|
16
|
+
end
|
17
|
+
|
18
|
+
# Factory method to create an AccountInfo object from a json string
|
19
|
+
# @param [Hash] props - properties to create object from
|
20
|
+
# @return [AccountInfo]
|
21
|
+
def self.create(props)
|
22
|
+
obj = AccountInfo.new
|
23
|
+
if props
|
24
|
+
props.each do |key, value|
|
25
|
+
key = key.to_s
|
26
|
+
if key == 'organization_addresses'
|
27
|
+
value = value || []
|
28
|
+
obj.organization_addresses = value.collect{|address| Components::AccountAddress.create(address) }
|
29
|
+
else
|
30
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
obj
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# verified_email_address.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class VerifiedEmailAddress < Component
|
10
|
+
attr_accessor :status, :email_address
|
11
|
+
|
12
|
+
# Factory method to create a VerifiedEmailAddress object from a json string
|
13
|
+
# @param [Hash] props - 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
|
26
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
# activity.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class Activity < Component
|
10
|
+
attr_accessor :id, :type, :status, :start_date, :finish_date, :file_name, :created_date,
|
11
|
+
:error_count, :errors, :warnings, :contact_count
|
12
|
+
|
13
|
+
# Factory method to create an Activity object from a json string
|
14
|
+
# @param [Hash] props - 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
|
43
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# activity_error.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
8
|
+
module Components
|
9
|
+
class ActivityError < Component
|
10
|
+
attr_accessor :message, :line_number, :email_address
|
11
|
+
|
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
|
26
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
#
|
2
|
+
# add_contacts.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
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
|
+
contacts.each do |contact|
|
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.birthday_day.nil?
|
48
|
+
used_columns << Util::Config.get('activities_columns.birthday_day')
|
49
|
+
end
|
50
|
+
|
51
|
+
if !contact.birthday_month.nil?
|
52
|
+
used_columns << Util::Config.get('activities_columns.birthday_month')
|
53
|
+
end
|
54
|
+
|
55
|
+
if !contact.anniversary.nil?
|
56
|
+
used_columns << Util::Config.get('activities_columns.anniversary')
|
57
|
+
end
|
58
|
+
|
59
|
+
if !contact.job_title.nil?
|
60
|
+
used_columns << Util::Config.get('activities_columns.job_title')
|
61
|
+
end
|
62
|
+
|
63
|
+
if !contact.company_name.nil?
|
64
|
+
used_columns << Util::Config.get('activities_columns.company_name')
|
65
|
+
end
|
66
|
+
|
67
|
+
if !contact.work_phone.nil?
|
68
|
+
used_columns << Util::Config.get('activities_columns.work_phone')
|
69
|
+
end
|
70
|
+
|
71
|
+
if !contact.home_phone.nil?
|
72
|
+
used_columns << Util::Config.get('activities_columns.home_phone')
|
73
|
+
end
|
74
|
+
|
75
|
+
contact.addresses.each do |address|
|
76
|
+
|
77
|
+
if !address.line1.nil?
|
78
|
+
used_columns << Util::Config.get('activities_columns.address1')
|
79
|
+
end
|
80
|
+
|
81
|
+
if !address.line2.nil?
|
82
|
+
used_columns << Util::Config.get('activities_columns.address2')
|
83
|
+
end
|
84
|
+
|
85
|
+
if !address.line3.nil?
|
86
|
+
used_columns << Util::Config.get('activities_columns.address3')
|
87
|
+
end
|
88
|
+
|
89
|
+
if !address.city.nil?
|
90
|
+
used_columns << Util::Config.get('activities_columns.city')
|
91
|
+
end
|
92
|
+
|
93
|
+
if !address.state_code.nil? || !address.state.nil?
|
94
|
+
used_columns << Util::Config.get('activities_columns.state')
|
95
|
+
end
|
96
|
+
|
97
|
+
if !address.country_code.nil?
|
98
|
+
used_columns << Util::Config.get('activities_columns.country')
|
99
|
+
end
|
100
|
+
|
101
|
+
if !address.postal_code.nil?
|
102
|
+
used_columns << Util::Config.get('activities_columns.postal_code')
|
103
|
+
end
|
104
|
+
|
105
|
+
if !address.sub_postal_code.nil?
|
106
|
+
used_columns << Util::Config.get('activities_columns.sub_postal_code')
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Custom Fields
|
111
|
+
if !contact.custom_fields.nil?
|
112
|
+
contact.custom_fields.each do |custom_field|
|
113
|
+
if custom_field.name.match('custom_field_')
|
114
|
+
custom_field_number = custom_field.name[13, custom_field.name.length]
|
115
|
+
used_columns << Util::Config.get('activities_columns.custom_field_' + custom_field_number)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
@column_names = used_columns.uniq
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#
|
2
|
+
# add_contacts_import_data.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
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, :birthday_month, :birthday_day, :anniversary,
|
12
|
+
:email_addresses, :addresses, :custom_fields
|
13
|
+
|
14
|
+
|
15
|
+
# Constructor to create an AddContactsImportData object from the given hash
|
16
|
+
# @param [Hash] props - properties to create object from
|
17
|
+
# @return [AddContactsImportData]
|
18
|
+
def initialize(props = {})
|
19
|
+
props.each do |key, value|
|
20
|
+
send("#{key}=", value) if respond_to? key
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Setter
|
25
|
+
def add_custom_field(custom_field)
|
26
|
+
@custom_fields = [] if @custom_fields.nil?
|
27
|
+
@custom_fields << custom_field
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
# Setter
|
32
|
+
def add_address(address)
|
33
|
+
@addresses = [] if @addresses.nil?
|
34
|
+
@addresses << address
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
# Setter
|
39
|
+
def add_email(email_address)
|
40
|
+
@email_addresses = [] if @email_addresses.nil?
|
41
|
+
@email_addresses << email_address
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# export_contacts.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
module ConstantContact
|
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
|
+
|
13
|
+
|
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
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,48 @@
|
|
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
|
+
|
11
|
+
def to_hash
|
12
|
+
hash = Hash.new
|
13
|
+
self.instance_variables.collect do |var|
|
14
|
+
hash[var.to_s[1..-1]] = self.class.to_hash_value(self.instance_variable_get(var))
|
15
|
+
end
|
16
|
+
hash
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.to_hash_value(val)
|
20
|
+
if val.is_a? ConstantContact::Components::Component
|
21
|
+
return val.to_hash
|
22
|
+
elsif val.is_a? Array
|
23
|
+
return val.collect{|subval| Component.to_hash_value(subval) }
|
24
|
+
elsif val.is_a? DateTime
|
25
|
+
return val.to_s
|
26
|
+
else
|
27
|
+
return val
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_json(val = nil)
|
32
|
+
self.to_hash.to_json
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
# Get the requested value from a hash, or return the default
|
38
|
+
# @param [Hash] hsh - the hash to search for the provided hash key
|
39
|
+
# @param [String] key - hash key to look for
|
40
|
+
# @param [String] default - value to return if the key is not found, default is null
|
41
|
+
# @return [String]
|
42
|
+
def self.get_value(hsh, key, default = nil)
|
43
|
+
hsh.has_key?(key) and hsh[key] ? hsh[key] : default
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,27 @@
|
|
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, :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 - 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
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|