marketingcloudsdk 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +26 -0
  3. data/Gemfile +3 -0
  4. data/Gemfile.lock +92 -0
  5. data/Guardfile +8 -0
  6. data/LICENSE.md +13 -0
  7. data/README.md +130 -0
  8. data/Rakefile +1 -0
  9. data/lib/marketingcloudsdk.rb +74 -0
  10. data/lib/marketingcloudsdk/client.rb +283 -0
  11. data/lib/marketingcloudsdk/http_request.rb +113 -0
  12. data/lib/marketingcloudsdk/objects.rb +757 -0
  13. data/lib/marketingcloudsdk/rest.rb +122 -0
  14. data/lib/marketingcloudsdk/soap.rb +288 -0
  15. data/lib/marketingcloudsdk/targeting.rb +58 -0
  16. data/lib/marketingcloudsdk/utils.rb +47 -0
  17. data/lib/marketingcloudsdk/version.rb +39 -0
  18. data/lib/new.rb +1240 -0
  19. data/marketingcloudsdk.gemspec +30 -0
  20. data/samples/sample-AddSubscriberToList.rb +56 -0
  21. data/samples/sample-CreateAndStartDataExtensionImport.rb +29 -0
  22. data/samples/sample-CreateAndStartListImport.rb +27 -0
  23. data/samples/sample-CreateContentAreas.rb +48 -0
  24. data/samples/sample-CreateDataExtensions.rb +54 -0
  25. data/samples/sample-CreateProfileAttributes.rb +48 -0
  26. data/samples/sample-SendEmailToDataExtension.rb +23 -0
  27. data/samples/sample-SendEmailToList.rb +23 -0
  28. data/samples/sample-SendTriggeredSends.rb +30 -0
  29. data/samples/sample-bounceevent.rb +70 -0
  30. data/samples/sample-campaign.rb +211 -0
  31. data/samples/sample-clickevent.rb +71 -0
  32. data/samples/sample-contentarea.rb +122 -0
  33. data/samples/sample-dataextension.rb +209 -0
  34. data/samples/sample-directverb.rb +55 -0
  35. data/samples/sample-email.rb +122 -0
  36. data/samples/sample-email.senddefinition.rb +134 -0
  37. data/samples/sample-folder.rb +143 -0
  38. data/samples/sample-import.rb +104 -0
  39. data/samples/sample-list.rb +105 -0
  40. data/samples/sample-list.subscriber.rb +97 -0
  41. data/samples/sample-openevent.rb +70 -0
  42. data/samples/sample-profileattribute.rb +57 -0
  43. data/samples/sample-sentevent.rb +70 -0
  44. data/samples/sample-subscriber.rb +136 -0
  45. data/samples/sample-triggeredsend.rb +130 -0
  46. data/samples/sample-unsubevent.rb +72 -0
  47. data/samples/sample_helper.rb.template +8 -0
  48. data/spec/client_spec.rb +210 -0
  49. data/spec/helper_funcs_spec.rb +11 -0
  50. data/spec/http_request_spec.rb +36 -0
  51. data/spec/objects_helper_spec.rb +32 -0
  52. data/spec/objects_spec.rb +484 -0
  53. data/spec/rest_spec.rb +48 -0
  54. data/spec/soap_spec.rb +140 -0
  55. data/spec/spec_helper.rb +14 -0
  56. data/spec/targeting_spec.rb +39 -0
  57. metadata +260 -0
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'marketingcloudsdk/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "marketingcloudsdk"
8
+ spec.version = MarketingCloudSDK::VERSION
9
+ spec.authors = ["Ashok Magar"]
10
+ spec.email = ["amagar@salesforce.com"]
11
+ spec.description = %q{API wrapper for SOAP and REST API with Salesforce Marketing Cloud (ExactTarget)}
12
+ spec.summary = %q{Fuel Client Library for Ruby}
13
+ spec.homepage = "https://github.com/ExactTarget/FuelSDK-Ruby"
14
+ spec.license = ""
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(samples|test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler","~> 1.3"
22
+ spec.add_development_dependency 'rake','~>0.9'
23
+ spec.add_development_dependency "rspec",'~> 2.0'
24
+ spec.add_development_dependency "guard",'~> 1.1'
25
+ spec.add_development_dependency "guard-rspec",'~> 2.0'
26
+
27
+ spec.add_dependency "savon", "2.2.0"
28
+ spec.add_dependency "json", "~>1.8",">= 1.8.1"
29
+ spec.add_dependency "jwt", "~>1.0",">= 1.0.0"
30
+ end
@@ -0,0 +1,56 @@
1
+ require 'fuelsdk'
2
+ require_relative 'sample_helper'
3
+
4
+ begin
5
+ stubObj = ET_Client.new auth
6
+
7
+ NewListName = "RubySDKList"
8
+
9
+ ## Example using AddSubscriberToList() method
10
+ ## Typically this method will be used with a pre-existing list but for testing purposes one is being created.
11
+
12
+ # Create List
13
+ p '>>> Create List'
14
+ postList = ET_List.new
15
+ postList.authStub = stubObj
16
+ postList.props = {"ListName" => NewListName, "Description" => "This list was created with the RubySDK", "Type" => "Private" }
17
+ postResponse = postList.post
18
+ p 'Post Status: ' + postResponse.status.to_s
19
+ p 'Code: ' + postResponse.code.to_s
20
+ p 'Message: ' + postResponse.message.to_s
21
+ p 'Result Count: ' + postResponse.results.length.to_s
22
+ p 'Results: ' + postResponse.results.inspect
23
+ raise 'Failure creating list' unless postResponse.success?
24
+
25
+ if postResponse.status then
26
+
27
+ newListID = postResponse.results[0][:new_id]
28
+ # Adding Subscriber To a List
29
+ p '>>> Add Subscriber To a List'
30
+ AddSubResponse = stubObj.AddSubscriberToList("AddSubTesting@bh.exacttarget.com", [newListID], "Test")
31
+ p 'AddSubResponse Status: ' + AddSubResponse.status.to_s
32
+ p 'Code: ' + AddSubResponse.code.to_s
33
+ p 'Message: ' + AddSubResponse.message.to_s
34
+ p 'Result Count: ' + AddSubResponse.results.length.to_s
35
+ p 'Results: ' + AddSubResponse.results.inspect
36
+ raise 'Failure adding user to list' unless AddSubResponse.success?
37
+
38
+ # Delete List
39
+ p '>>> Delete List'
40
+ deleteSub = ET_List.new()
41
+ deleteSub.authStub = stubObj
42
+ deleteSub.props = {"ID" => newListID}
43
+ deleteResponse = deleteSub.delete
44
+ p 'Delete Status: ' + deleteResponse.status.to_s
45
+ p 'Code: ' + deleteResponse.code.to_s
46
+ p 'Message: ' + deleteResponse.message.to_s
47
+ p 'Results Length: ' + deleteResponse.results.length.to_s
48
+ p 'Results: ' + deleteResponse.results.to_s
49
+ raise 'Failure deleting list' unless deleteResponse.success?
50
+ end
51
+
52
+ rescue => e
53
+ p "Caught exception: #{e.message}"
54
+ p e.backtrace
55
+ end
56
+
@@ -0,0 +1,29 @@
1
+ require 'fuelsdk'
2
+ require_relative 'sample_helper'
3
+
4
+ begin
5
+ myclient = FuelSDK::Client.new auth
6
+
7
+ DataExtensionCustomerKey = "62476204-bfd3-de11-95ca-001e0bbae8cc"
8
+ CSVFileName = "SDKExample.csv"
9
+
10
+ =begin
11
+ * Parameters:
12
+ * Data Extension CustomerKey - CustomerKey values are displayed in the UI as External Key
13
+ * File Name - File must be a CSV located on your ExactTarget FTP Site
14
+ * Overwrite (Boolean) - Set to True in order to overwrite all existing data in the data extension. Required if Data Extension does not have a primary key.
15
+ =end
16
+
17
+ response = myclient.CreateAndStartDataExtensionImport(DataExtensionCustomerKey, CSVFileName, true)
18
+ p 'Response Status: ' + response.status.to_s
19
+ p 'Code: ' + response.code.to_s
20
+ p 'Message: ' + response.message.to_s
21
+ p 'Results Length: ' + response.results.length.to_s
22
+ p 'Results: ' + response.results.to_s
23
+
24
+ rescue => e
25
+ p "Caught exception: #{e.message}"
26
+ p e.backtrace
27
+ end
28
+
29
+
@@ -0,0 +1,27 @@
1
+ require 'fuelsdk'
2
+ require_relative 'sample_helper'
3
+
4
+ begin
5
+ myclient = FuelSDK::Client.new auth
6
+ ListID = "1956035"
7
+ CSVFileName = "SDKExample.csv"
8
+
9
+ =begin
10
+ * Parameters:
11
+ * List ID
12
+ * File Name - File must be a CSV located on your ExactTarget FTP Site
13
+ =end
14
+
15
+ response = myclient.CreateAndStartListImport(ListID, CSVFileName)
16
+ p 'Response Status: ' + response.status.to_s
17
+ p 'Code: ' + response.code.to_s
18
+ p 'Message: ' + response.message.to_s
19
+ p 'Results Length: ' + response.results.length.to_s
20
+ p 'Results: ' + response.results.to_s
21
+
22
+ rescue => e
23
+ p "Caught exception: #{e.message}"
24
+ p e.backtrace
25
+ end
26
+
27
+
@@ -0,0 +1,48 @@
1
+ require 'fuelsdk'
2
+ require_relative 'sample_helper'
3
+
4
+ begin
5
+ myclient = FuelSDK::Client.new auth
6
+
7
+ ## Example using CreateContentAreas() method
8
+
9
+ NameOfContentAreaOne = "ExampleContentAreaOne"
10
+ NameOfContentAreaTwo = "ExampleContentAreaTwo"
11
+
12
+ # Declare a Ruby Hash which contain all of the details for a DataExtension
13
+ contAreaOne = {"CustomerKey" => NameOfContentAreaOne, "Name"=>NameOfContentAreaOne, "Content"=> "<b>Some HTML Content Goes here</b>"}
14
+ contAreaTwo = {"CustomerKey" => NameOfContentAreaTwo, "Name"=>NameOfContentAreaTwo, "Content"=> "<b>Some Different HTML Content Goes here</b>"}
15
+
16
+ # Call CreateDataExtensions passing in both DataExtension Hashes as an Array
17
+ response = myclient.CreateContentAreas([contAreaOne,contAreaTwo])
18
+ p 'Response Status: ' + response.status.to_s
19
+ p 'Code: ' + response.code.to_s
20
+ p 'Message: ' + response.message.to_s
21
+ p 'Results Length: ' + response.results.length.to_s
22
+ p 'Results: ' + response.results.to_s
23
+
24
+ p '>>> Delete contAreaOne'
25
+ contArea = ET_ContentArea.new
26
+ contArea.authStub = myclient
27
+ contArea.props = {"CustomerKey" => NameOfContentAreaOne}
28
+ delResponse = contArea.delete
29
+ p 'Delete Status: ' + delResponse.status.to_s
30
+ p 'Code: ' + delResponse.code.to_s
31
+ p 'Message: ' + delResponse.message.to_s
32
+ p 'Results: ' + delResponse.results.inspect
33
+
34
+ p '>>> Delete contAreaTwo'
35
+ contArea = ET_ContentArea.new
36
+ contArea.authStub = myclient
37
+ contArea.props = {"CustomerKey" => NameOfContentAreaTwo}
38
+ delResponse = contArea.delete
39
+ p 'Delete Status: ' + delResponse.status.to_s
40
+ p 'Code: ' + delResponse.code.to_s
41
+ p 'Message: ' + delResponse.message.to_s
42
+ p 'Results: ' + delResponse.results.inspect
43
+
44
+ rescue => e
45
+ p "Caught exception: #{e.message}"
46
+ p e.backtrace
47
+ end
48
+
@@ -0,0 +1,54 @@
1
+ require 'fuelsdk'
2
+ require_relative 'sample_helper'
3
+
4
+ begin
5
+ myclient = ET_Client.new auth
6
+
7
+ ## Example using CreateDataExtensions() method
8
+
9
+ # Declare a Ruby Hash which contain all of the details for a DataExtension
10
+ deOne = {"Name" => "HelperDEOne","CustomerKey" => "HelperDEOne"}
11
+ deOne['columns'] = [{"Name" => "Name", "FieldType" => "Text", "IsPrimaryKey" => "true", "MaxLength" => "100", "IsRequired" => "true"},{"Name" => "OtherField", "FieldType" => "Text"}]
12
+
13
+ # Declare a 2nd Ruby Hash which contain all of the details for a DataExtension
14
+ deTwo = {"Name" => "HelperDETwo","CustomerKey" => "HelperDETwo"}
15
+ deTwo['columns'] = [{"Name" => "Name", "FieldType" => "Text", "IsPrimaryKey" => "true", "MaxLength" => "100", "IsRequired" => "true"},{"Name" => "OtherField", "FieldType" => "Text"}]
16
+
17
+ # Call CreateDataExtensions passing in both DataExtension Hashes as an Array
18
+ createDEResponse = myclient.CreateDataExtensions([deOne, deTwo])
19
+ p 'CreateDataExtensions Status: ' + createDEResponse.status.to_s
20
+ p 'Code: ' + createDEResponse.code.to_s
21
+ p 'Message: ' + createDEResponse.message.to_s
22
+ p 'Results Length: ' + createDEResponse.results.length.to_s
23
+ p 'Results: ' + createDEResponse.results.to_s
24
+ raise 'Failure creating data extensions' unless createDEResponse.success?
25
+ raise 'Failure creating data extensions' unless createDEResponse.results.count == 2
26
+
27
+ # Cleaning up the newly created DEs
28
+ # Delete deOne
29
+ p '>>> Delete deOne'
30
+ de5 = ET_DataExtension.new
31
+ de5.authStub = myclient
32
+ de5.props = {"CustomerKey" => "HelperDEOne"}
33
+ delResponse = de5.delete
34
+ p 'Delete Status: ' + delResponse.status.to_s
35
+ p 'Code: ' + delResponse.code.to_s
36
+ p 'Message: ' + delResponse.message.to_s
37
+ p 'Results: ' + delResponse.results.inspect
38
+
39
+ # Delete deTwo
40
+ p '>>> Delete deTwo'
41
+ de5 = ET_DataExtension.new
42
+ de5.authStub = myclient
43
+ de5.props = {"CustomerKey" => "HelperDETwo"}
44
+ delResponse = de5.delete
45
+ p 'Delete Status: ' + delResponse.status.to_s
46
+ p 'Code: ' + delResponse.code.to_s
47
+ p 'Message: ' + delResponse.message.to_s
48
+ p 'Results: ' + delResponse.results.inspect
49
+
50
+ rescue => e
51
+ p "Caught exception: #{e.message}"
52
+ p e.backtrace
53
+ end
54
+
@@ -0,0 +1,48 @@
1
+ require 'fuelsdk'
2
+ require_relative 'sample_helper'
3
+
4
+ begin
5
+ myclient = FuelSDK::Client.new auth
6
+
7
+ ## Example using CreateProfileAttributes() method
8
+
9
+ NameOfAttributeOne = "ExampleAttributeOne"
10
+ NameOfAttributeTwo = "ExampleAttributeTwo"
11
+
12
+ # Declare a Ruby Hash which contain all of the details for a DataExtension
13
+ profileAttrOne = {"Name" => NameOfAttributeOne, "PropertyType"=>"string", "Description"=>"New Attribute from the SDK", "IsRequired"=>"false", "IsViewable"=>"false", "IsEditable"=>"true", "IsSendTime"=>"false"}
14
+ profileAttrTwo = {"Name" => NameOfAttributeTwo, "PropertyType"=>"string", "Description"=>"New Attribute from the SDK", "IsRequired"=>"false", "IsViewable"=>"false", "IsEditable"=>"true", "IsSendTime"=>"false"}
15
+
16
+ # Call CreateDataExtensions passing in both DataExtension Hashes as an Array
17
+ response = myclient.CreateProfileAttributes([profileAttrOne,profileAttrTwo])
18
+ p 'Response Status: ' + response.status.to_s
19
+ p 'Code: ' + response.code.to_s
20
+ p 'Message: ' + response.message.to_s
21
+ p 'Results Length: ' + response.results.length.to_s
22
+ p 'Results: ' + response.results.to_s
23
+
24
+ p '>>> Delete profileAttrOne'
25
+ profileattr = ET_ProfileAttribute.new
26
+ profileattr.authStub = myclient
27
+ profileattr.props = {"Name" => NameOfAttributeOne}
28
+ delResponse = profileattr.delete
29
+ p 'Delete Status: ' + delResponse.status.to_s
30
+ p 'Code: ' + delResponse.code.to_s
31
+ p 'Message: ' + delResponse.message.to_s
32
+ p 'Results: ' + delResponse.results.inspect
33
+
34
+ p '>>> Delete profileAttrTwo'
35
+ profileattr = ET_ProfileAttribute.new
36
+ profileattr.authStub = myclient
37
+ profileattr.props = {"Name" => NameOfAttributeTwo}
38
+ delResponse = profileattr.delete
39
+ p 'Delete Status: ' + delResponse.status.to_s
40
+ p 'Code: ' + delResponse.code.to_s
41
+ p 'Message: ' + delResponse.message.to_s
42
+ p 'Results: ' + delResponse.results.inspect
43
+
44
+ rescue => e
45
+ p "Caught exception: #{e.message}"
46
+ p e.backtrace
47
+ end
48
+
@@ -0,0 +1,23 @@
1
+ require 'fuelsdk'
2
+ require_relative 'sample_helper'
3
+
4
+ begin
5
+ myclient = FuelSDK::Client.new auth
6
+
7
+ EmailIDForSendDefinition = "3113962"
8
+ SendClassificationCustomerKey = "2239"
9
+ SendableDataExtensionCustomerKey = "F6F3871A-D124-499B-BBF5-3EFC0E827A51"
10
+
11
+ # Call SendEmailToDataExtension
12
+ response = myclient.SendEmailToDataExtension(EmailIDForSendDefinition, SendableDataExtensionCustomerKey,SendClassificationCustomerKey)
13
+ p 'Response Status: ' + response.status.to_s
14
+ p 'Code: ' + response.code.to_s
15
+ p 'Message: ' + response.message.to_s
16
+ p 'Results Length: ' + response.results.length.to_s
17
+ p 'Results: ' + response.results.to_s
18
+
19
+ rescue => e
20
+ p "Caught exception: #{e.message}"
21
+ p e.backtrace
22
+ end
23
+
@@ -0,0 +1,23 @@
1
+ require 'fuelsdk'
2
+ require_relative 'sample_helper'
3
+
4
+ begin
5
+ myclient = FuelSDK::Client.new auth
6
+
7
+ EmailIDForSendDefinition = "3113962"
8
+ ListIDForSendDefinition = "1729515"
9
+ SendClassificationCustomerKey = "2239"
10
+
11
+ # Call SendEmailToList
12
+ response = myclient.SendEmailToList(EmailIDForSendDefinition, ListIDForSendDefinition,SendClassificationCustomerKey)
13
+ p 'Response Status: ' + response.status.to_s
14
+ p 'Code: ' + response.code.to_s
15
+ p 'Message: ' + response.message.to_s
16
+ p 'Results Length: ' + response.results.length.to_s
17
+ p 'Results: ' + response.results.to_s
18
+
19
+ rescue => e
20
+ p "Caught exception: #{e.message}"
21
+ p e.backtrace
22
+ end
23
+
@@ -0,0 +1,30 @@
1
+ require 'fuelsdk'
2
+ require_relative 'sample_helper'
3
+
4
+ begin
5
+ myclient = FuelSDK::Client.new auth
6
+
7
+ TriggeredSendCustomerKey = "TEXTEXT"
8
+ AltTriggeredSendCustomerKey = "FailTest"
9
+ SubscriberEmailAddress = "SDKExample@bh.exacttarget.com"
10
+
11
+ # Call SendTriggeredSends which can be used to send emails to multiple definitions with a single request
12
+ # Limit usage to 50 subscribers per request.
13
+ tsOne = {"CustomerKey" => TriggeredSendCustomerKey}
14
+ tsOne['Subscribers'] = [{"EmailAddress"=>SubscriberEmailAddress, "SubscriberKey" => SubscriberEmailAddress}]
15
+ tsTwo = {"CustomerKey" => AltTriggeredSendCustomerKey}
16
+ tsTwo['Subscribers'] = [{"EmailAddress"=>SubscriberEmailAddress, "SubscriberKey" => SubscriberEmailAddress}]
17
+
18
+ response = myclient.SendTriggeredSends([tsOne,tsTwo])
19
+ p 'Response Status: ' + response.status.to_s
20
+ p 'Code: ' + response.code.to_s
21
+ p 'Message: ' + response.message.to_s
22
+ p 'Results Length: ' + response.results.length.to_s
23
+ p 'Results: ' + response.results.to_s
24
+
25
+ rescue => e
26
+ p "Caught exception: #{e.message}"
27
+ p e.backtrace
28
+ end
29
+
30
+
@@ -0,0 +1,70 @@
1
+ require 'fuelsdk'
2
+ require_relative 'sample_helper'
3
+
4
+ begin
5
+ stubObj = FuelSDK::Client.new auth
6
+
7
+ ## Modify the date below to reduce the number of results returned from the request
8
+ ## Setting this too far in the past could result in a very large response size
9
+ retrieveDate = '2011-01-15T13:00:00.000'
10
+
11
+ p '>>> Retrieve Filtered BounceEvents with GetMoreResults'
12
+ getBounceEvent = FuelSDK::BounceEvent.new()
13
+ getBounceEvent.authStub = stubObj
14
+ getBounceEvent.props = ["SendID","SubscriberKey","EventDate","Client.ID","EventType","BatchID","TriggeredSendDefinitionObjectID","PartnerKey"]
15
+ getBounceEvent.filter = {'Property' => 'EventDate','SimpleOperator' => 'greaterThan','DateValue' => retrieveDate}
16
+ getResponse = getBounceEvent.get
17
+ p 'Retrieve Status: ' + getResponse.status.to_s
18
+ p 'Code: ' + getResponse.code.to_s
19
+ p 'Message: ' + getResponse.message.to_s
20
+ p 'MoreResults: ' + getResponse.more?.to_s
21
+ p 'RequestID: ' + getResponse.request_id.to_s
22
+ p 'Results Length: ' + getResponse.results.length.to_s
23
+ # Since this could potentially return a large number of results, we do not want to print the results
24
+ p 'Results: ' + getResponse.results.to_s
25
+ raise 'Failure retrieving bounce events' unless getResponse.success?
26
+
27
+ while getResponse.more? do
28
+ p '>>> Continue Retrieve Filtered BounceEvents with GetMoreResults'
29
+ getResponse = getBounceEvent.continue
30
+ p 'Retrieve Status: ' + getResponse.status.to_s
31
+ p 'Code: ' + getResponse.code.to_s
32
+ p 'Message: ' + getResponse.message.to_s
33
+ p 'MoreResults: ' + getResponse.more?.to_s
34
+ p 'RequestID: ' + getResponse.request_id.to_s
35
+ p 'Results Length: ' + getResponse.results.length.to_s
36
+ end
37
+
38
+ # The following request could potentially bring back large amounts of data if run against a production account
39
+ =begin
40
+ p '>>> Retrieve All BounceEvents with GetMoreResults'
41
+ getBounceEvent = FuelSDK::BounceEvent.new()
42
+ getBounceEvent.authStub = stubObj
43
+ getBounceEvent.props = ["SendID","SubscriberKey","EventDate","Client.ID","EventType","BatchID","TriggeredSendDefinitionObjectID","PartnerKey"]
44
+ getResponse = getBounceEvent.get
45
+ p 'Retrieve Status: ' + getResponse.status.to_s
46
+ p 'Code: ' + getResponse.code.to_s
47
+ p 'Message: ' + getResponse.message.to_s
48
+ p 'MoreResults: ' + getResponse.more?.to_s
49
+ p 'RequestID: ' + getResponse.request_id.to_s
50
+ p 'Results Length: ' + getResponse.results.length.to_s
51
+ # Since this could potentially return a large number of results, we do not want to print the results
52
+ #p 'Results: ' + getResponse.results.to_s
53
+
54
+ while getResponse.more? do
55
+ p '>>> Continue Retrieve All BounceEvents with GetMoreResults'
56
+ getResponse = getBounceEvent.continue
57
+ p 'Retrieve Status: ' + getResponse.status.to_s
58
+ p 'Code: ' + getResponse.code.to_s
59
+ p 'Message: ' + getResponse.message.to_s
60
+ p 'MoreResults: ' + getResponse.more?.to_s
61
+ p 'RequestID: ' + getResponse.request_id.to_s
62
+ p 'Results Length: ' + getResponse.results.length.to_s
63
+ end
64
+ =end
65
+
66
+ rescue => e
67
+ p "Caught exception: #{e.message}"
68
+ p e.backtrace
69
+ end
70
+