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,448 @@
1
+ #
2
+ # event_spot_service.rb
3
+ # ConstantContact
4
+ #
5
+ # Copyright (c) 2013 Constant Contact. All rights reserved.
6
+
7
+ module ConstantContact
8
+ module Services
9
+ class EventSpotService < BaseService
10
+ class << self
11
+
12
+ # Create a new event
13
+ # @param [Event] event - Event to be created
14
+ # @return [Event]
15
+ def add_event(event)
16
+ url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.events')
17
+ url = build_url(url)
18
+ payload = event.to_json
19
+ response = RestClient.post(url, payload, get_headers())
20
+ Components::Event.create(JSON.parse(response.body))
21
+ end
22
+
23
+
24
+ # Get a set of events
25
+ # @param [Hash] opts query parameters to be appended to the request
26
+ # @option opts [String] status email campaigns status of DRAFT, RUNNING, SENT, SCHEDULED.
27
+ # @option opts [String] modified_since ISO-8601 date string to return campaigns modified since then.
28
+ # @option opts [Integer] limit number of campaigns to return, 1 to 50.
29
+ # @return [ResultSet<Event>]
30
+ def get_events(opts = {})
31
+ url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.events')
32
+ url = build_url(url, opts)
33
+
34
+ response = RestClient.get(url, get_headers())
35
+ body = JSON.parse(response.body)
36
+
37
+ events = body['results'].collect do |event|
38
+ Components::Event.create_summary(event)
39
+ end
40
+
41
+ Components::ResultSet.new(events, body['meta'], Components::Event)
42
+ end
43
+
44
+
45
+ # Get event details for a specific event
46
+ # @param [Integer] event - Valid event id
47
+ # @return [Event]
48
+ def get_event(event)
49
+ event_id = get_id_for(event)
50
+ url = Util::Config.get('endpoints.base_url') +
51
+ sprintf(Util::Config.get('endpoints.event'), event_id)
52
+ url = build_url(url)
53
+ response = RestClient.get(url, get_headers())
54
+ Components::Event.create(JSON.parse(response.body))
55
+ end
56
+
57
+
58
+ # Update a specific EventSpot event
59
+ # @param [Event] event - Event to be updated
60
+ # @return [Event]
61
+ def update_event(event)
62
+ event_id = get_id_for(event)
63
+ url = Util::Config.get('endpoints.base_url') +
64
+ sprintf(Util::Config.get('endpoints.event'), event_id)
65
+ url = build_url(url)
66
+ payload = event.to_json
67
+ response = RestClient.put(url, payload, get_headers())
68
+ Components::Event.create(JSON.parse(response.body))
69
+ end
70
+
71
+
72
+ # Publish a specific EventSpot event
73
+ # @param [Event] event - Event to be updated
74
+ # @return [Event]
75
+ def publish_event(event)
76
+ event_id = get_id_for(event)
77
+ url = Util::Config.get('endpoints.base_url') +
78
+ sprintf(Util::Config.get('endpoints.event'), event_id)
79
+ url = build_url(url)
80
+ payload = [{:op => "REPLACE", :path => "#/status", :value => "ACTIVE"}].to_json
81
+ response = RestClient.patch(url, payload, get_headers())
82
+ Components::Event.create(JSON.parse(response.body))
83
+ end
84
+
85
+
86
+ # Cancel a specific EventSpot event
87
+ # @param [Event] event - Event to be updated
88
+ # @return [Event]
89
+ def cancel_event(event)
90
+ event_id = get_id_for(event)
91
+ url = Util::Config.get('endpoints.base_url') +
92
+ sprintf(Util::Config.get('endpoints.event'), event_id)
93
+ url = build_url(url)
94
+ payload = [{ :op => "REPLACE", :path => "#/status", :value => "CANCELLED" }].to_json
95
+ response = RestClient.patch(url, payload, get_headers())
96
+ Components::Event.create(JSON.parse(response.body))
97
+ end
98
+
99
+
100
+ # Create a new event fee
101
+ # @param [Integer] event - Valid event id
102
+ # @param [EventFee] fee - Event fee to be created
103
+ # @return [EventFee]
104
+ def add_fee(event, fee)
105
+ event_id = get_id_for(event)
106
+ url = Util::Config.get('endpoints.base_url') +
107
+ sprintf(Util::Config.get('endpoints.event_fees'), event_id)
108
+ url = build_url(url)
109
+ payload = fee.to_json
110
+ response = RestClient.post(url, payload, get_headers())
111
+ Components::EventFee.create(JSON.parse(response.body))
112
+ end
113
+
114
+
115
+ # Get an array of event fees
116
+ # @param [Integer] event - Valid event id
117
+ # @return [Array<EventFee>]
118
+ def get_fees(event)
119
+ event_id = get_id_for(event)
120
+ url = Util::Config.get('endpoints.base_url') +
121
+ sprintf(Util::Config.get('endpoints.event_fees'), event_id)
122
+ url = build_url(url)
123
+
124
+ response = RestClient.get(url, get_headers())
125
+ body = JSON.parse(response.body)
126
+
127
+ fees = body.collect do |fee|
128
+ Components::EventFee.create(fee)
129
+ end
130
+ end
131
+
132
+
133
+ # Get an individual event fee
134
+ # @param [Integer] event - Valid event id
135
+ # @param [Integer] fee - Valid fee id
136
+ # @return [EventFee]
137
+ def get_fee(event, fee)
138
+ event_id = get_id_for(event)
139
+ fee_id = get_id_for(fee)
140
+ url = Util::Config.get('endpoints.base_url') +
141
+ sprintf(Util::Config.get('endpoints.event_fee'), event_id, fee_id)
142
+ url = build_url(url)
143
+
144
+ response = RestClient.get(url, get_headers())
145
+ fee = Components::EventFee.create(JSON.parse(response.body))
146
+ end
147
+
148
+
149
+ # Update an individual event fee
150
+ # @param [Integer] event - Valid event id
151
+ # @param [Integer] fee - Valid fee id
152
+ # @return [EventFee]
153
+ def update_fee(event, fee)
154
+ event_id = get_id_for(event)
155
+ if fee.kind_of?(ConstantContact::Components::EventFee)
156
+ fee_id = fee.id
157
+ elsif fee.kind_of?(Hash)
158
+ fee_id = fee['id']
159
+ else
160
+ raise ArgumentError.new "Fee must be a Hash or ConstantContact::Components::Fee"
161
+ end
162
+
163
+ url = Util::Config.get('endpoints.base_url') +
164
+ sprintf(Util::Config.get('endpoints.event_fee'), event_id, fee_id)
165
+ url = build_url(url)
166
+ payload = fee.to_json
167
+
168
+ response = RestClient.put(url, payload, get_headers())
169
+ fee = Components::EventFee.create(JSON.parse(response.body))
170
+ end
171
+
172
+
173
+ # Delete an individual event fee
174
+ # @param [Integer] event - Valid event id
175
+ # @param [Integer] fee - Valid fee id
176
+ # @return [Boolean]
177
+ def delete_fee(event, fee)
178
+ event_id = get_id_for(event)
179
+ fee_id = get_id_for(fee)
180
+ url = Util::Config.get('endpoints.base_url') +
181
+ sprintf(Util::Config.get('endpoints.event_fee'), event_id, fee_id)
182
+ url = build_url(url)
183
+
184
+ response = RestClient.delete(url, get_headers())
185
+ response.code == 204
186
+ end
187
+
188
+
189
+ # Get a set of event registrants
190
+ # @param [Integer] event - Valid event id
191
+ # @return [ResultSet<Registrant>]
192
+ def get_registrants(event, opts = {})
193
+ event_id = event.kind_of?(ConstantContact::Components::Event) ? event.id : event
194
+ url = Util::Config.get('endpoints.base_url') +
195
+ sprintf(Util::Config.get('endpoints.event_registrants'), event_id)
196
+ url = build_url(url, opts)
197
+
198
+ response = RestClient.get(url, get_headers())
199
+ body = JSON.parse(response.body)
200
+
201
+ registrants = body['results'].collect do |registrant|
202
+ Components::Registrant.create(registrant)
203
+ end
204
+
205
+ Components::ResultSet.new(registrants, body['meta'])
206
+ end
207
+
208
+
209
+ # Get an individual event registant
210
+ # @param [Integer] event - Valid event id
211
+ # @param [Integer] registrant - Valid fee id
212
+ # @return [Registrant]
213
+ def get_registrant(event, registrant)
214
+ event_id = get_id_for(event)
215
+ registrant_id = get_id_for(registrant)
216
+ url = Util::Config.get('endpoints.base_url') +
217
+ sprintf(Util::Config.get('endpoints.event_registrant'), event_id, registrant_id)
218
+ url = build_url(url)
219
+
220
+ response = RestClient.get(url, get_headers())
221
+ Components::Registrant.create(JSON.parse(response.body))
222
+ end
223
+
224
+
225
+ # Get an array of event items for an individual event
226
+ # @param [Integer] event_id - event id to retrieve items for
227
+ # @return [Array<EventItem>]
228
+ def get_event_items(event_id)
229
+ url = Util::Config.get('endpoints.base_url') +
230
+ sprintf(Util::Config.get('endpoints.event_items'), event_id)
231
+ url = build_url(url)
232
+ response = RestClient.get(url, get_headers())
233
+
234
+ event_items = []
235
+ JSON.parse(response.body).each do |event_item|
236
+ event_items << Components::EventItem.create(event_item)
237
+ end
238
+
239
+ event_items
240
+ end
241
+
242
+
243
+ # Get an individual event item
244
+ # @param [Integer] event_id - id of event to retrieve item for
245
+ # @param [Integer] item_id - id of item to be retrieved
246
+ # @return [EventItem]
247
+ def get_event_item(event_id, item_id)
248
+ url = Util::Config.get('endpoints.base_url') +
249
+ sprintf(Util::Config.get('endpoints.event_item'), event_id, item_id)
250
+ url = build_url(url)
251
+ response = RestClient.get(url, get_headers())
252
+ Components::EventItem.create(JSON.parse(response.body))
253
+ end
254
+
255
+
256
+ # Create a new event item for an event
257
+ # @param [Integer] event_id - id of event to be associated with the event item
258
+ # @param [EventItem] event_item - event item to be created
259
+ # @return [EventItem]
260
+ def add_event_item(event_id, event_item)
261
+ url = Util::Config.get('endpoints.base_url') +
262
+ sprintf(Util::Config.get('endpoints.event_items'), event_id)
263
+ url = build_url(url)
264
+ payload = event_item.to_json
265
+ response = RestClient.post(url, payload, get_headers())
266
+ Components::EventItem.create(JSON.parse(response.body))
267
+ end
268
+
269
+
270
+ # Delete a specific event item for an event
271
+ # @param [Integer] event_id - id of event to delete an event item for
272
+ # @param [Integer] item_id - id of event item to be deleted
273
+ # @return [Boolean]
274
+ def delete_event_item(event_id, item_id)
275
+ url = Util::Config.get('endpoints.base_url') +
276
+ sprintf(Util::Config.get('endpoints.event_item'), event_id, item_id)
277
+ url = build_url(url)
278
+ response = RestClient.delete(url, get_headers())
279
+ response.code == 204
280
+ end
281
+
282
+
283
+ # Update a specific event item for an event
284
+ # @param [Integer] event_id - id of event associated with the event item
285
+ # @param [EventItem] event_item - event item to be updated
286
+ # @return [EventItem]
287
+ def update_event_item(event_id, event_item)
288
+ url = Util::Config.get('endpoints.base_url') +
289
+ sprintf(Util::Config.get('endpoints.event_item'), event_id, event_item.id)
290
+ url = build_url(url)
291
+ payload = event_item.to_json
292
+ response = RestClient.put(url, payload, get_headers())
293
+ Components::EventItem.create(JSON.parse(response.body))
294
+ end
295
+
296
+
297
+ # Get an array of attributes for an individual event item
298
+ # @param [Integer] event_id - event id to retrieve item for
299
+ # @param [Integer] item_id - event item id to retrieve attributes for
300
+ # @return [Array<EventItemAttribute>]
301
+ def get_event_item_attributes(event_id, item_id)
302
+ url = Util::Config.get('endpoints.base_url') +
303
+ sprintf(Util::Config.get('endpoints.event_item_attributes'), event_id, item_id)
304
+ url = build_url(url)
305
+ response = RestClient.get(url, get_headers())
306
+
307
+ event_item_attributes = []
308
+ JSON.parse(response.body).each do |event_item_attribute|
309
+ event_item_attributes << Components::EventItemAttribute.create(event_item_attribute)
310
+ end
311
+
312
+ event_item_attributes
313
+ end
314
+
315
+
316
+ # Get an individual event item attribute
317
+ # @param [Integer] event_id - id of event to retrieve item for
318
+ # @param [Integer] item_id - id of item to retrieve attribute for
319
+ # @param [Integer] attribute_id - id of attribute to be retrieved
320
+ # @return [EventItemAttribute]
321
+ def get_event_item_attribute(event_id, item_id, attribute_id)
322
+ url = Util::Config.get('endpoints.base_url') +
323
+ sprintf(Util::Config.get('endpoints.event_item_attribute'), event_id, item_id, attribute_id)
324
+ url = build_url(url)
325
+ response = RestClient.get(url, get_headers())
326
+ Components::EventItemAttribute.create(JSON.parse(response.body))
327
+ end
328
+
329
+
330
+ # Create a new event item attribute for an event item
331
+ # @param [Integer] event_id - id of event to be associated with the event item attribute
332
+ # @param [Integer] item_id - id of event item to be associated with the event item attribute
333
+ # @param [EventItemAttribute] event_item_attribute - event item attribute to be created
334
+ # @return [EventItemAttribute]
335
+ def add_event_item_attribute(event_id, item_id, event_item_attribute)
336
+ url = Util::Config.get('endpoints.base_url') +
337
+ sprintf(Util::Config.get('endpoints.event_item_attributes'), event_id, item_id)
338
+ url = build_url(url)
339
+ payload = event_item_attribute.to_json
340
+ response = RestClient.post(url, payload, get_headers())
341
+ Components::EventItemAttribute.create(JSON.parse(response.body))
342
+ end
343
+
344
+
345
+ # Delete a specific event item for an event
346
+ # @param [Integer] event_id - id of event to delete an event item attribute for
347
+ # @param [Integer] item_id - id of event item to delete an event item attribute for
348
+ # @param [Integer] attribute_id - id of attribute to be deleted
349
+ # @return [Boolean]
350
+ def delete_event_item_attribute(event_id, item_id, attribute_id)
351
+ url = Util::Config.get('endpoints.base_url') +
352
+ sprintf(Util::Config.get('endpoints.event_item_attribute'), event_id, item_id, attribute_id)
353
+ url = build_url(url)
354
+ response = RestClient.delete(url, get_headers())
355
+ response.code == 204
356
+ end
357
+
358
+
359
+ # Update a specific event item attribute for an event item
360
+ # @param [Integer] event_id - id of event associated with the event item
361
+ # @param [Integer] item_id - id of event item associated with the event item attribute
362
+ # @param [EventItemAttribute] event_item_attribute - event item to be updated
363
+ # @return [EventItemAttribute]
364
+ def update_event_item_attribute(event_id, item_id, event_item_attribute)
365
+ url = Util::Config.get('endpoints.base_url') +
366
+ sprintf(Util::Config.get('endpoints.event_item'), event_id, item_id, event_item_attribute.id)
367
+ url = build_url(url)
368
+ payload = event_item_attribute.to_json
369
+ response = RestClient.put(url, payload, get_headers())
370
+ Components::EventItemAttribute.create(JSON.parse(response.body))
371
+ end
372
+
373
+
374
+ # Get an array of promocodes for an individual event
375
+ # @param [Integer] event_id - event id to retrieve promocodes for
376
+ # @return [Array<Promocode>]
377
+ def get_promocodes(event_id)
378
+ url = Util::Config.get('endpoints.base_url') +
379
+ sprintf(Util::Config.get('endpoints.event_promocodes'), event_id)
380
+ url = build_url(url)
381
+ response = RestClient.get(url, get_headers())
382
+
383
+ promocodes = []
384
+ JSON.parse(response.body).each do |promocode|
385
+ promocodes << Components::Promocode.create(promocode)
386
+ end
387
+
388
+ promocodes
389
+ end
390
+
391
+
392
+ # Get an individual promocode
393
+ # @param [Integer] event_id - id of event to retrieve item for
394
+ # @param [Integer] promocode_id - id of item to be retrieved
395
+ # @return [Promocode]
396
+ def get_promocode(event_id, promocode_id)
397
+ url = Util::Config.get('endpoints.base_url') +
398
+ sprintf(Util::Config.get('endpoints.event_promocode'), event_id, promocode_id)
399
+ url = build_url(url)
400
+ response = RestClient.get(url, get_headers())
401
+ Components::Promocode.create(JSON.parse(response.body))
402
+ end
403
+
404
+
405
+ # Create a new promocode for an event
406
+ # @param [Integer] event_id - id of event to be associated with the promocode
407
+ # @param [Promocode] promocode - promocode to be created
408
+ # @return [Promocode]
409
+ def add_promocode(event_id, promocode)
410
+ url = Util::Config.get('endpoints.base_url') +
411
+ sprintf(Util::Config.get('endpoints.event_promocodes'), event_id)
412
+ url = build_url(url)
413
+ payload = promocode.to_json
414
+ response = RestClient.post(url, payload, get_headers())
415
+ Components::Promocode.create(JSON.parse(response.body))
416
+ end
417
+
418
+
419
+ # Delete a specific promocode for an event
420
+ # @param [Integer] event_id - id of event to delete a promocode for
421
+ # @param [Integer] promocode_id - id of promocode to be deleted
422
+ # @return [Boolean]
423
+ def delete_promocode(event_id, promocode_id)
424
+ url = Util::Config.get('endpoints.base_url') +
425
+ sprintf(Util::Config.get('endpoints.event_promocode'), event_id, promocode_id)
426
+ url = build_url(url)
427
+ response = RestClient.delete(url, get_headers())
428
+ response.code == 204
429
+ end
430
+
431
+
432
+ # Update a specific promocode for an event
433
+ # @param [Integer] event_id - id of event associated with the promocode
434
+ # @param [Promocode] promocode - promocode to be updated
435
+ # @return [Promocode]
436
+ def update_promocode(event_id, promocode)
437
+ url = Util::Config.get('endpoints.base_url') +
438
+ sprintf(Util::Config.get('endpoints.event_promocode'), event_id, promocode.id)
439
+ url = build_url(url)
440
+ payload = promocode.to_json
441
+ response = RestClient.put(url, payload, get_headers())
442
+ Components::Promocode.create(JSON.parse(response.body))
443
+ end
444
+
445
+ end
446
+ end
447
+ end
448
+ end