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.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +2 -0
  3. data/README.md +136 -0
  4. data/constantcontact-ruby.gemspec +31 -0
  5. data/lib/constantcontact/api.rb +1012 -0
  6. data/lib/constantcontact/auth/oauth2.rb +105 -0
  7. data/lib/constantcontact/auth/session_data_store.rb +69 -0
  8. data/lib/constantcontact/components/account/account_address.rb +26 -0
  9. data/lib/constantcontact/components/account/account_info.rb +38 -0
  10. data/lib/constantcontact/components/account/verified_email_address.rb +26 -0
  11. data/lib/constantcontact/components/activities/activity.rb +43 -0
  12. data/lib/constantcontact/components/activities/activity_error.rb +26 -0
  13. data/lib/constantcontact/components/activities/add_contacts.rb +127 -0
  14. data/lib/constantcontact/components/activities/add_contacts_import_data.rb +46 -0
  15. data/lib/constantcontact/components/activities/export_contacts.rb +30 -0
  16. data/lib/constantcontact/components/component.rb +48 -0
  17. data/lib/constantcontact/components/contacts/address.rb +27 -0
  18. data/lib/constantcontact/components/contacts/contact.rb +92 -0
  19. data/lib/constantcontact/components/contacts/contact_list.rb +26 -0
  20. data/lib/constantcontact/components/contacts/custom_field.rb +26 -0
  21. data/lib/constantcontact/components/contacts/email_address.rb +33 -0
  22. data/lib/constantcontact/components/contacts/note.rb +26 -0
  23. data/lib/constantcontact/components/email_marketing/campaign.rb +83 -0
  24. data/lib/constantcontact/components/email_marketing/campaign_preview.rb +29 -0
  25. data/lib/constantcontact/components/email_marketing/click_through_details.rb +27 -0
  26. data/lib/constantcontact/components/email_marketing/message_footer.rb +29 -0
  27. data/lib/constantcontact/components/email_marketing/schedule.rb +27 -0
  28. data/lib/constantcontact/components/email_marketing/test_send.rb +45 -0
  29. data/lib/constantcontact/components/event_spot/contact.rb +27 -0
  30. data/lib/constantcontact/components/event_spot/event.rb +69 -0
  31. data/lib/constantcontact/components/event_spot/event_address.rb +29 -0
  32. data/lib/constantcontact/components/event_spot/event_fee.rb +27 -0
  33. data/lib/constantcontact/components/event_spot/event_item.rb +36 -0
  34. data/lib/constantcontact/components/event_spot/event_item_attribute.rb +26 -0
  35. data/lib/constantcontact/components/event_spot/event_track.rb +31 -0
  36. data/lib/constantcontact/components/event_spot/guest.rb +31 -0
  37. data/lib/constantcontact/components/event_spot/guest_section.rb +34 -0
  38. data/lib/constantcontact/components/event_spot/notification_option.rb +27 -0
  39. data/lib/constantcontact/components/event_spot/online_meeting.rb +28 -0
  40. data/lib/constantcontact/components/event_spot/payment_address.rb +29 -0
  41. data/lib/constantcontact/components/event_spot/payment_summary.rb +33 -0
  42. data/lib/constantcontact/components/event_spot/promocode.rb +25 -0
  43. data/lib/constantcontact/components/event_spot/registrant.rb +52 -0
  44. data/lib/constantcontact/components/event_spot/registrant_fee.rb +29 -0
  45. data/lib/constantcontact/components/event_spot/registrant_field.rb +27 -0
  46. data/lib/constantcontact/components/event_spot/registrant_order.rb +39 -0
  47. data/lib/constantcontact/components/event_spot/registrant_promo_code.rb +31 -0
  48. data/lib/constantcontact/components/event_spot/registrant_promo_code_info.rb +27 -0
  49. data/lib/constantcontact/components/event_spot/registrant_section.rb +34 -0
  50. data/lib/constantcontact/components/event_spot/sale_item.rb +29 -0
  51. data/lib/constantcontact/components/library/file/library_file.rb +27 -0
  52. data/lib/constantcontact/components/library/folder/library_folder.rb +26 -0
  53. data/lib/constantcontact/components/library/info/library_summary.rb +26 -0
  54. data/lib/constantcontact/components/library/info/move_results.rb +26 -0
  55. data/lib/constantcontact/components/library/info/upload_status.rb +26 -0
  56. data/lib/constantcontact/components/result_set.rb +50 -0
  57. data/lib/constantcontact/components/tracking/bounce_activity.rb +28 -0
  58. data/lib/constantcontact/components/tracking/click_activity.rb +26 -0
  59. data/lib/constantcontact/components/tracking/forward_activity.rb +26 -0
  60. data/lib/constantcontact/components/tracking/open_activity.rb +26 -0
  61. data/lib/constantcontact/components/tracking/send_activity.rb +27 -0
  62. data/lib/constantcontact/components/tracking/tracking_activity.rb +26 -0
  63. data/lib/constantcontact/components/tracking/tracking_summary.rb +27 -0
  64. data/lib/constantcontact/components/tracking/unsubscribe_activity.rb +27 -0
  65. data/lib/constantcontact/exceptions/ctct_exception.rb +25 -0
  66. data/lib/constantcontact/exceptions/illegal_argument_exception.rb +11 -0
  67. data/lib/constantcontact/exceptions/oauth2_exception.rb +11 -0
  68. data/lib/constantcontact/exceptions/webhooks_exception.rb +11 -0
  69. data/lib/constantcontact/services/account_service.rb +39 -0
  70. data/lib/constantcontact/services/activity_service.rb +136 -0
  71. data/lib/constantcontact/services/base_service.rb +68 -0
  72. data/lib/constantcontact/services/campaign_schedule_service.rb +101 -0
  73. data/lib/constantcontact/services/campaign_tracking_service.rb +152 -0
  74. data/lib/constantcontact/services/contact_service.rb +105 -0
  75. data/lib/constantcontact/services/contact_tracking_service.rb +152 -0
  76. data/lib/constantcontact/services/email_marketing_service.rb +94 -0
  77. data/lib/constantcontact/services/event_spot_service.rb +448 -0
  78. data/lib/constantcontact/services/library_service.rb +281 -0
  79. data/lib/constantcontact/services/list_service.rb +81 -0
  80. data/lib/constantcontact/util/config.rb +180 -0
  81. data/lib/constantcontact/util/helpers.rb +27 -0
  82. data/lib/constantcontact/version.rb +12 -0
  83. data/lib/constantcontact/webhooks/helpers/validator.rb +30 -0
  84. data/lib/constantcontact/webhooks/models/billing_change_notification.rb +27 -0
  85. data/lib/constantcontact/webhooks/webhooks_util.rb +45 -0
  86. data/lib/constantcontact.rb +124 -0
  87. data/spec/constantcontact/api_spec.rb +1560 -0
  88. data/spec/constantcontact/auth/oauth2_spec.rb +125 -0
  89. data/spec/constantcontact/components/contacts/address_spec.rb +18 -0
  90. data/spec/constantcontact/components/contacts/contact_list_spec.rb +18 -0
  91. data/spec/constantcontact/components/contacts/contact_spec.rb +18 -0
  92. data/spec/constantcontact/components/contacts/custom_field_spec.rb +18 -0
  93. data/spec/constantcontact/components/contacts/email_address_spec.rb +18 -0
  94. data/spec/constantcontact/sdk_spec.rb +24 -0
  95. data/spec/constantcontact/services/account_service_spec.rb +46 -0
  96. data/spec/constantcontact/services/activity_service_spec.rb +244 -0
  97. data/spec/constantcontact/services/base_service_spec.rb +50 -0
  98. data/spec/constantcontact/services/campaign_schedule_service_spec.rb +115 -0
  99. data/spec/constantcontact/services/campaign_tracking_service_spec.rb +131 -0
  100. data/spec/constantcontact/services/contact_service_spec.rb +111 -0
  101. data/spec/constantcontact/services/contact_tracking_service_spec.rb +131 -0
  102. data/spec/constantcontact/services/email_marketing_spec.rb +100 -0
  103. data/spec/constantcontact/services/event_spot_spec.rb +423 -0
  104. data/spec/constantcontact/services/library_service_spec.rb +252 -0
  105. data/spec/constantcontact/services/list_service_spec.rb +89 -0
  106. data/spec/constantcontact/webhooks/webhooks_spec.rb +26 -0
  107. metadata +243 -0
@@ -0,0 +1,152 @@
1
+ #
2
+ # campaign_tracking_service.rb
3
+ # ConstantContact
4
+ #
5
+ # Copyright (c) 2013 Constant Contact. All rights reserved.
6
+
7
+ module ConstantContact
8
+ module Services
9
+ class CampaignTrackingService < BaseService
10
+ class << self
11
+
12
+ # Get bounces for a given campaign
13
+ # @param [String] campaign_id - Campaign id
14
+ # @param [Hash] params - query parameters to be appended to request
15
+ # @return [ResultSet<BounceActivity>] - Containing a results array of BounceActivity
16
+ def get_bounces(campaign_id, params = {})
17
+ url = Util::Config.get('endpoints.base_url') +
18
+ sprintf(Util::Config.get('endpoints.campaign_tracking_bounces'), campaign_id)
19
+ url = build_url(url, params)
20
+
21
+ response = RestClient.get(url, get_headers())
22
+ body = JSON.parse(response.body)
23
+
24
+ bounces = []
25
+ body['results'].each do |bounce_activity|
26
+ bounces << Components::BounceActivity.create(bounce_activity)
27
+ end
28
+
29
+ Components::ResultSet.new(bounces, body['meta'])
30
+ end
31
+
32
+
33
+ # Get clicks for a given campaign
34
+ # @param [String] campaign_id - Campaign id
35
+ # @param [Hash] params - query parameters to be appended to request
36
+ # @return [ResultSet<ClickActivity>] - Containing a results array of ClickActivity
37
+ def get_clicks(campaign_id, params = {})
38
+ url = Util::Config.get('endpoints.base_url') +
39
+ sprintf(Util::Config.get('endpoints.campaign_tracking_clicks'), campaign_id)
40
+ url = build_url(url, params)
41
+
42
+ response = RestClient.get(url, get_headers())
43
+ body = JSON.parse(response.body)
44
+
45
+ clicks = []
46
+ body['results'].each do |click_activity|
47
+ clicks << Components::ClickActivity.create(click_activity)
48
+ end
49
+
50
+ Components::ResultSet.new(clicks, body['meta'])
51
+ end
52
+
53
+
54
+ # Get forwards for a given campaign
55
+ # @param [String] campaign_id - Campaign id
56
+ # @param [Hash] params - query parameters to be appended to request
57
+ # @return [ResultSet<ForwardActivity>] - Containing a results array of ForwardActivity
58
+ def get_forwards(campaign_id, params = {})
59
+ url = Util::Config.get('endpoints.base_url') +
60
+ sprintf(Util::Config.get('endpoints.campaign_tracking_forwards'), campaign_id)
61
+ url = build_url(url, params)
62
+
63
+ response = RestClient.get(url, get_headers())
64
+ body = JSON.parse(response.body)
65
+
66
+ forwards = []
67
+ body['results'].each do |forward_activity|
68
+ forwards << Components::ForwardActivity.create(forward_activity)
69
+ end
70
+
71
+ Components::ResultSet.new(forwards, body['meta'])
72
+ end
73
+
74
+
75
+ # Get opens for a given campaign
76
+ # @param [String] campaign_id - Campaign id
77
+ # @param [Hash] params - query parameters to be appended to request
78
+ # @return [ResultSet<OpenActivity>] - Containing a results array of OpenActivity
79
+ def get_opens(campaign_id, params = {})
80
+ url = Util::Config.get('endpoints.base_url') +
81
+ sprintf(Util::Config.get('endpoints.campaign_tracking_opens'), campaign_id)
82
+ url = build_url(url, params)
83
+
84
+ response = RestClient.get(url, get_headers())
85
+ body = JSON.parse(response.body)
86
+
87
+ opens = []
88
+ body['results'].each do |open_activity|
89
+ opens << Components::OpenActivity.create(open_activity)
90
+ end
91
+
92
+ Components::ResultSet.new(opens, body['meta'])
93
+ end
94
+
95
+
96
+ # Get sends for a given campaign
97
+ # @param [String] campaign_id - Campaign id
98
+ # @param [Hash] params - query parameters to be appended to request
99
+ # @return [ResultSet<SendActivity>] - Containing a results array of SendActivity
100
+ def get_sends(campaign_id, params = {})
101
+ url = Util::Config.get('endpoints.base_url') +
102
+ sprintf(Util::Config.get('endpoints.campaign_tracking_sends'), campaign_id)
103
+ url = build_url(url, params)
104
+
105
+ response = RestClient.get(url, get_headers())
106
+ body = JSON.parse(response.body)
107
+
108
+ sends = []
109
+ body['results'].each do |send_activity|
110
+ sends << Components::SendActivity.create(send_activity)
111
+ end
112
+
113
+ Components::ResultSet.new(sends, body['meta'])
114
+ end
115
+
116
+
117
+ # Get unsubscribes for a given campaign
118
+ # @param [String] campaign_id - Campaign id
119
+ # @param [Hash] params - query params to be appended to request
120
+ # @return [ResultSet<UnsubscribeActivity>] - Containing a results array of UnsubscribeActivity
121
+ def get_unsubscribes(campaign_id, params = {})
122
+ url = Util::Config.get('endpoints.base_url') +
123
+ sprintf(Util::Config.get('endpoints.campaign_tracking_unsubscribes'), campaign_id)
124
+ url = build_url(url, params)
125
+
126
+ response = RestClient.get(url, get_headers())
127
+ body = JSON.parse(response.body)
128
+
129
+ unsubscribes = []
130
+ body['results'].each do |unsubscribe_activity|
131
+ unsubscribes << Components::UnsubscribeActivity.create(unsubscribe_activity)
132
+ end
133
+
134
+ Components::ResultSet.new(unsubscribes, body['meta'])
135
+ end
136
+
137
+
138
+ # Get a summary of reporting data for a given campaign
139
+ # @param [Integer] campaign_id - Campaign id
140
+ # @return [TrackingSummary]
141
+ def get_summary(campaign_id)
142
+ url = Util::Config.get('endpoints.base_url') +
143
+ sprintf(Util::Config.get('endpoints.campaign_tracking_summary'), campaign_id)
144
+ url = build_url(url)
145
+ response = RestClient.get(url, get_headers())
146
+ Components::TrackingSummary.create(JSON.parse(response.body))
147
+ end
148
+
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,105 @@
1
+ #
2
+ # contact_service.rb
3
+ # ConstantContact
4
+ #
5
+ # Copyright (c) 2013 Constant Contact. All rights reserved.
6
+
7
+ module ConstantContact
8
+ module Services
9
+ class ContactService < BaseService
10
+ class << self
11
+
12
+ # Get an array of contacts
13
+ # @param [Hash] params - query parameters to be appended to the request
14
+ # @return [ResultSet<Contact>]
15
+ def get_contacts(params = {})
16
+ url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.contacts')
17
+ url = build_url(url, params)
18
+
19
+ response = RestClient.get(url, get_headers())
20
+ body = JSON.parse(response.body)
21
+
22
+ contacts = []
23
+ body['results'].each do |contact|
24
+ contacts << Components::Contact.create(contact)
25
+ end
26
+
27
+ Components::ResultSet.new(contacts, body['meta'])
28
+ end
29
+
30
+
31
+ # Get contact details for a specific contact
32
+ # @param [Integer] contact_id - Unique contact id
33
+ # @return [Contact]
34
+ def get_contact(contact_id)
35
+ url = Util::Config.get('endpoints.base_url') +
36
+ sprintf(Util::Config.get('endpoints.contact'), contact_id)
37
+ url = build_url(url)
38
+ response = RestClient.get(url, get_headers())
39
+ Components::Contact.create(JSON.parse(response.body))
40
+ end
41
+
42
+
43
+ # Add a new contact to the Constant Contact account
44
+ # @param [Contact] contact - Contact to add
45
+ # @param [Boolean] params - query params to be appended to the request
46
+ # @return [Contact]
47
+ def add_contact(contact, params = {})
48
+ url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.contacts')
49
+ url = build_url(url, params)
50
+ payload = contact.to_json
51
+ response = RestClient.post(url, payload, get_headers())
52
+ Components::Contact.create(JSON.parse(response.body))
53
+ end
54
+
55
+
56
+ # Delete contact details for a specific contact
57
+ # @param [Integer] contact_id - Unique contact id
58
+ # @return [Boolean]
59
+ def delete_contact(contact_id)
60
+ url = Util::Config.get('endpoints.base_url') + sprintf(Util::Config.get('endpoints.contact'), contact_id)
61
+ url = build_url(url)
62
+ response = RestClient.delete(url, get_headers())
63
+ response.code == 204
64
+ end
65
+
66
+
67
+ # Delete a contact from all contact lists
68
+ # @param [Integer] contact_id - Contact id to be removed from lists
69
+ # @return [Boolean]
70
+ def delete_contact_from_lists(contact_id)
71
+ url = Util::Config.get('endpoints.base_url') + sprintf(Util::Config.get('endpoints.contact_lists'), contact_id)
72
+ url = build_url(url)
73
+ response = RestClient.delete(url, get_headers())
74
+ response.code == 204
75
+ end
76
+
77
+
78
+ # Delete a contact from a specific contact list
79
+ # @param [Integer] contact_id - Contact id to be removed
80
+ # @param [Integer] list_id - ContactList id to remove the contact from
81
+ # @return [Boolean]
82
+ def delete_contact_from_list(contact_id, list_id)
83
+ url = Util::Config.get('endpoints.base_url') + sprintf(Util::Config.get('endpoints.contact_list'), contact_id, list_id)
84
+ url = build_url(url)
85
+ response = RestClient.delete(url, get_headers())
86
+ response.code == 204
87
+ end
88
+
89
+
90
+ # Update contact details for a specific contact
91
+ # @param [Contact] contact - Contact to be updated
92
+ # @param [Hash] params - query params to be appended to the request
93
+ # @return [Contact]
94
+ def update_contact(contact, params = {})
95
+ url = Util::Config.get('endpoints.base_url') + sprintf(Util::Config.get('endpoints.contact'), contact.id)
96
+ url = build_url(url, params)
97
+ payload = contact.to_json
98
+ response = RestClient.put(url, payload, get_headers())
99
+ Components::Contact.create(JSON.parse(response.body))
100
+ end
101
+
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,152 @@
1
+ #
2
+ # contact_tracking_service.rb
3
+ # ConstantContact
4
+ #
5
+ # Copyright (c) 2013 Constant Contact. All rights reserved.
6
+
7
+ module ConstantContact
8
+ module Services
9
+ class ContactTrackingService < BaseService
10
+ class << self
11
+
12
+ # Get bounces for a given contact
13
+ # @param [String] contact_id - Contact id
14
+ # @param [Hash] params - query parameters to be appended to request
15
+ # @return [ResultSet<BounceActivity>] - Containing a results array of BounceActivity
16
+ def get_bounces(contact_id, params = {})
17
+ url = Util::Config.get('endpoints.base_url') +
18
+ sprintf(Util::Config.get('endpoints.contact_tracking_bounces'), contact_id)
19
+ url = build_url(url, params)
20
+
21
+ response = RestClient.get(url, get_headers())
22
+ body = JSON.parse(response.body)
23
+
24
+ bounces = []
25
+ body['results'].each do |bounce_activity|
26
+ bounces << Components::BounceActivity.create(bounce_activity)
27
+ end
28
+
29
+ Components::ResultSet.new(bounces, body['meta'])
30
+ end
31
+
32
+
33
+ # Get clicks for a given contact
34
+ # @param [String] contact_id - Contact id
35
+ # @param [Hash] params - query parameters to be appended to request
36
+ # @return [ResultSet<ClickActivity>] - Containing a results array of ClickActivity
37
+ def get_clicks(contact_id, params = {})
38
+ url = Util::Config.get('endpoints.base_url') +
39
+ sprintf(Util::Config.get('endpoints.contact_tracking_clicks'), contact_id)
40
+ url = build_url(url, params)
41
+
42
+ response = RestClient.get(url, get_headers())
43
+ body = JSON.parse(response.body)
44
+
45
+ clicks = []
46
+ body['results'].each do |click_activity|
47
+ clicks << Components::ClickActivity.create(click_activity)
48
+ end
49
+
50
+ Components::ResultSet.new(clicks, body['meta'])
51
+ end
52
+
53
+
54
+ # Get forwards for a given contact
55
+ # @param [String] contact_id - Contact id
56
+ # @param [Hash] params - query parameters to be appended to request
57
+ # @return [ResultSet<ForwardActivity>] - Containing a results array of ForwardActivity
58
+ def get_forwards(contact_id, params = {})
59
+ url = Util::Config.get('endpoints.base_url') +
60
+ sprintf(Util::Config.get('endpoints.contact_tracking_forwards'), contact_id)
61
+ url = build_url(url, params)
62
+
63
+ response = RestClient.get(url, get_headers())
64
+ body = JSON.parse(response.body)
65
+
66
+ forwards = []
67
+ body['results'].each do |forward_activity|
68
+ forwards << Components::ForwardActivity.create(forward_activity)
69
+ end
70
+
71
+ Components::ResultSet.new(forwards, body['meta'])
72
+ end
73
+
74
+
75
+ # Get opens for a given contact
76
+ # @param [String] contact_id - Contact id
77
+ # @param [Hash] params - query parameters to be appended to request
78
+ # @return [ResultSet<OpenActivity>] - Containing a results array of OpenActivity
79
+ def get_opens(contact_id, params = {})
80
+ url = Util::Config.get('endpoints.base_url') +
81
+ sprintf(Util::Config.get('endpoints.contact_tracking_opens'), contact_id)
82
+ url = build_url(url, params)
83
+
84
+ response = RestClient.get(url, get_headers())
85
+ body = JSON.parse(response.body)
86
+
87
+ opens = []
88
+ body['results'].each do |open_activity|
89
+ opens << Components::OpenActivity.create(open_activity)
90
+ end
91
+
92
+ Components::ResultSet.new(opens, body['meta'])
93
+ end
94
+
95
+
96
+ # Get sends for a given contact
97
+ # @param [String] contact_id - Contact id
98
+ # @param [Hash] params - query parameters to be appended to request
99
+ # @return [ResultSet<SendActivity>] - Containing a results array of SendActivity
100
+ def get_sends(contact_id, params = {})
101
+ url = Util::Config.get('endpoints.base_url') +
102
+ sprintf(Util::Config.get('endpoints.contact_tracking_sends'), contact_id)
103
+ url = build_url(url, params)
104
+
105
+ response = RestClient.get(url, get_headers())
106
+ body = JSON.parse(response.body)
107
+
108
+ sends = []
109
+ body['results'].each do |send_activity|
110
+ sends << Components::SendActivity.create(send_activity)
111
+ end
112
+
113
+ Components::ResultSet.new(sends, body['meta'])
114
+ end
115
+
116
+
117
+ # Get unsubscribes for a given contact
118
+ # @param [String] contact_id - Contact id
119
+ # @param [Hash] params - query parameters to be appended to request
120
+ # @return [ResultSet<UnsubscribeActivity>] - Containing a results array of UnsubscribeActivity
121
+ def get_unsubscribes(contact_id, params = {})
122
+ url = Util::Config.get('endpoints.base_url') +
123
+ sprintf(Util::Config.get('endpoints.contact_tracking_unsubscribes'), contact_id)
124
+ url = build_url(url, params)
125
+
126
+ response = RestClient.get(url, get_headers())
127
+ body = JSON.parse(response.body)
128
+
129
+ unsubscribes = []
130
+ body['results'].each do |unsubscribe_activity|
131
+ unsubscribes << Components::UnsubscribeActivity.create(unsubscribe_activity)
132
+ end
133
+
134
+ Components::ResultSet.new(unsubscribes, body['meta'])
135
+ end
136
+
137
+
138
+ # Get a summary of reporting data for a given contact
139
+ # @param [String] contact_id - Contact id
140
+ # @return [TrackingSummary]
141
+ def get_summary(contact_id)
142
+ url = Util::Config.get('endpoints.base_url') +
143
+ sprintf(Util::Config.get('endpoints.contact_tracking_summary'), contact_id)
144
+ url = build_url(url)
145
+ response = RestClient.get(url, get_headers())
146
+ Components::TrackingSummary.create(JSON.parse(response.body))
147
+ end
148
+
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,94 @@
1
+ #
2
+ # email_marketing_service.rb
3
+ # ConstantContact
4
+ #
5
+ # Copyright (c) 2013 Constant Contact. All rights reserved.
6
+
7
+ module ConstantContact
8
+ module Services
9
+ class EmailMarketingService < BaseService
10
+ class << self
11
+
12
+ # Create a new campaign
13
+ # @param [Campaign] campaign - Campaign to be created
14
+ # @return [Campaign]
15
+ def add_campaign(campaign)
16
+ url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.campaigns')
17
+ url = build_url(url)
18
+ payload = campaign.to_json
19
+ response = RestClient.post(url, payload, get_headers())
20
+ Components::Campaign.create(JSON.parse(response.body))
21
+ end
22
+
23
+
24
+ # Get a set of campaigns
25
+ # @param [Hash] params - query parameters to be appended to the request
26
+ # @return [ResultSet<Campaign>]
27
+ def get_campaigns(params = {})
28
+ url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.campaigns')
29
+ url = build_url(url, params)
30
+
31
+ response = RestClient.get(url, get_headers())
32
+ body = JSON.parse(response.body)
33
+
34
+ campaigns = []
35
+ body['results'].each do |campaign|
36
+ campaigns << Components::Campaign.create_summary(campaign)
37
+ end
38
+
39
+ Components::ResultSet.new(campaigns, body['meta'])
40
+ end
41
+
42
+
43
+ # Get campaign details for a specific campaign
44
+ # @param [Integer] campaign_id - Valid campaign id
45
+ # @return [Campaign]
46
+ def get_campaign(campaign_id)
47
+ url = Util::Config.get('endpoints.base_url') +
48
+ sprintf(Util::Config.get('endpoints.campaign'), campaign_id)
49
+ url = build_url(url)
50
+ response = RestClient.get(url, get_headers())
51
+ Components::Campaign.create(JSON.parse(response.body))
52
+ end
53
+
54
+
55
+ # Get the preview of the given campaign
56
+ # @param [Integer] campaign_id - Valid campaign id
57
+ # @return [CampaignPreview]
58
+ def get_campaign_preview(campaign_id)
59
+ url = Util::Config.get('endpoints.base_url') +
60
+ sprintf(Util::Config.get('endpoints.campaign_preview'), campaign_id)
61
+ url = build_url(url)
62
+ response = RestClient.get(url, get_headers())
63
+ Components::CampaignPreview.create(JSON.parse(response.body))
64
+ end
65
+
66
+
67
+ # Delete an email campaign
68
+ # @param [Integer] campaign_id - Valid campaign id
69
+ # @return [Boolean]
70
+ def delete_campaign(campaign_id)
71
+ url = Util::Config.get('endpoints.base_url') +
72
+ sprintf(Util::Config.get('endpoints.campaign'), campaign_id)
73
+ url = build_url(url)
74
+ response = RestClient.delete(url, get_headers())
75
+ response.code == 204
76
+ end
77
+
78
+
79
+ # Update a specific email campaign
80
+ # @param [Campaign] campaign - Campaign to be updated
81
+ # @return [Campaign]
82
+ def update_campaign(campaign)
83
+ url = Util::Config.get('endpoints.base_url') +
84
+ sprintf(Util::Config.get('endpoints.campaign'), campaign.id)
85
+ url = build_url(url)
86
+ payload = campaign.to_json
87
+ response = RestClient.put(url, payload, get_headers())
88
+ Components::Campaign.create(JSON.parse(response.body))
89
+ end
90
+
91
+ end
92
+ end
93
+ end
94
+ end