exact-target-api 0.0.1

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 (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +41 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +62 -0
  7. data/Rakefile +1 -0
  8. data/exact-target-api.gemspec +22 -0
  9. data/lib/exact-target-api.rb +43 -0
  10. data/lib/exact-target-api/base_object.rb +28 -0
  11. data/lib/exact-target-api/bounce_event.rb +8 -0
  12. data/lib/exact-target-api/campaign.rb +19 -0
  13. data/lib/exact-target-api/click_event.rb +8 -0
  14. data/lib/exact-target-api/client.rb +175 -0
  15. data/lib/exact-target-api/constructor.rb +34 -0
  16. data/lib/exact-target-api/content_area.rb +8 -0
  17. data/lib/exact-target-api/continue.rb +33 -0
  18. data/lib/exact-target-api/continue_rest.rb +24 -0
  19. data/lib/exact-target-api/create_wsdl.rb +53 -0
  20. data/lib/exact-target-api/cud_support.rb +19 -0
  21. data/lib/exact-target-api/cud_support_rest.rb +72 -0
  22. data/lib/exact-target-api/data_extension.rb +226 -0
  23. data/lib/exact-target-api/delete.rb +38 -0
  24. data/lib/exact-target-api/delete_rest.rb +18 -0
  25. data/lib/exact-target-api/describe.rb +25 -0
  26. data/lib/exact-target-api/email.rb +8 -0
  27. data/lib/exact-target-api/folder.rb +8 -0
  28. data/lib/exact-target-api/get.rb +64 -0
  29. data/lib/exact-target-api/get_rest.rb +25 -0
  30. data/lib/exact-target-api/get_support.rb +23 -0
  31. data/lib/exact-target-api/get_support_rest.rb +86 -0
  32. data/lib/exact-target-api/list.rb +68 -0
  33. data/lib/exact-target-api/list_subscriber.rb +10 -0
  34. data/lib/exact-target-api/open_event.rb +8 -0
  35. data/lib/exact-target-api/patch.rb +39 -0
  36. data/lib/exact-target-api/patch_rest.rb +19 -0
  37. data/lib/exact-target-api/post.rb +34 -0
  38. data/lib/exact-target-api/post_rest.rb +19 -0
  39. data/lib/exact-target-api/sent_event.rb +8 -0
  40. data/lib/exact-target-api/subscriber.rb +81 -0
  41. data/lib/exact-target-api/triggered_send.rb +15 -0
  42. data/lib/exact-target-api/unsub_event.rb +8 -0
  43. data/lib/exact-target-api/version.rb +3 -0
  44. metadata +113 -0
@@ -0,0 +1,38 @@
1
+ module ET
2
+ class Delete < ET::Constructor
3
+ def initialize(authStub, objType, props = nil)
4
+ @results = []
5
+ begin
6
+ authStub.refreshToken
7
+ if props.is_a? Array
8
+ obj = {
9
+ 'Objects' => [],
10
+ :attributes! => { 'Objects' => { 'xsi:type' => ('tns:' + objType) } }
11
+ }
12
+ props.each{ |p|
13
+ obj['Objects'] << p
14
+ }
15
+ else
16
+ obj = {
17
+ 'Objects' => props,
18
+ :attributes! => { 'Objects' => { 'xsi:type' => ('tns:' + objType) } }
19
+ }
20
+ end
21
+
22
+ response = authStub.auth.call(:delete, :message => obj)
23
+ ensure
24
+ super(response)
25
+ if @status
26
+ if @body[:delete_response][:overall_status] != "OK"
27
+ @status = false
28
+ end
29
+ if !@body[:delete_response][:results].is_a? Hash
30
+ @results = @results + @body[:delete_response][:results]
31
+ else
32
+ @results.push(@body[:delete_response][:results])
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,18 @@
1
+ module ET
2
+ class DeleteRest < ET::Constructor
3
+ def initialize(authStub, endpoint)
4
+ authStub.refreshToken
5
+
6
+ qs = {"access_token" => authStub.authToken}
7
+
8
+ uri = URI.parse(endpoint)
9
+ uri.query = URI.encode_www_form(qs)
10
+ http = Net::HTTP.new(uri.host, uri.port)
11
+ http.use_ssl = true
12
+ request = Net::HTTP::Delete.new(uri.request_uri)
13
+ requestResponse = http.request(request)
14
+ super(requestResponse, true)
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ module ET
2
+ class Describe < ET::Constructor
3
+ def initialize(authStub = nil, objType = nil)
4
+ begin
5
+ authStub.refreshToken
6
+ response = authStub.auth.call(:describe, :message => {
7
+ 'DescribeRequests' =>
8
+ {'ObjectDefinitionRequest' =>
9
+ {'ObjectType' => objType}
10
+ }
11
+ })
12
+ ensure
13
+ super(response)
14
+
15
+ if @status
16
+ objDef = @body[:definition_response_msg][:object_definition]
17
+
18
+
19
+ @overallStatus = !!objDef
20
+ @results = @body[:definition_response_msg][:object_definition][:properties]
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,8 @@
1
+ module ET
2
+ class Email < ET::CUDSupport
3
+ def initialize
4
+ super
5
+ @obj = 'Email'
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module ET
2
+ class Folder < ET::CUDSupport
3
+ def initialize
4
+ super
5
+ @obj = 'DataFolder'
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,64 @@
1
+ module ET
2
+ class Get < ET::Constructor
3
+ def initialize(client, objType, props = nil, filter = nil)
4
+ @results = []
5
+ client.refreshToken
6
+ if !props
7
+ resp = ET::Describe.new(client, objType)
8
+ if resp
9
+ props = []
10
+ resp.results.map { |p|
11
+ if p[:is_retrievable]
12
+ props << p[:name]
13
+ end
14
+ }
15
+ end
16
+ end
17
+
18
+ # If the properties is a hash, then we just want to use the keys
19
+ if props.is_a? Hash then
20
+ obj = {'ObjectType' => objType,'Properties' => props.keys}
21
+ else
22
+ obj = {'ObjectType' => objType,'Properties' => props}
23
+ end
24
+
25
+ if filter then
26
+ if filter.has_key?('LogicalOperator')
27
+ obj['Filter'] = filter
28
+ obj[:attributes!] = { 'Filter' => { 'xsi:type' => 'tns:ComplexFilterPart' }}
29
+ obj['Filter'][:attributes!] = { 'LeftOperand' => { 'xsi:type' => 'tns:SimpleFilterPart' }, 'RightOperand' => { 'xsi:type' => 'tns:SimpleFilterPart' }}
30
+ else
31
+ obj['Filter'] = filter
32
+ obj[:attributes!] = { 'Filter' => { 'xsi:type' => 'tns:SimpleFilterPart' } }
33
+ end
34
+ end
35
+
36
+ response = client.auth.call(:retrieve, message: {
37
+ 'RetrieveRequest' => obj
38
+ })
39
+
40
+ super(response)
41
+
42
+ if @status
43
+ if @body[:retrieve_response_msg][:overall_status] != "OK" && @body[:retrieve_response_msg][:overall_status] != "MoreDataAvailable" then
44
+ @status = false
45
+ @message = @body[:retrieve_response_msg][:overall_status]
46
+ end
47
+
48
+ @moreResults = false
49
+ if @body[:retrieve_response_msg][:overall_status] == "MoreDataAvailable" then
50
+ @moreResults = true
51
+ end
52
+
53
+ if (!@body[:retrieve_response_msg][:results].is_a? Hash) && (!@body[:retrieve_response_msg][:results].nil?) then
54
+ @results = @results + @body[:retrieve_response_msg][:results]
55
+ elsif (!@body[:retrieve_response_msg][:results].nil?)
56
+ @results.push(@body[:retrieve_response_msg][:results])
57
+ end
58
+
59
+ # Store the Last Request ID for use with continue
60
+ @request_id = @body[:retrieve_response_msg][:request_id]
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,25 @@
1
+ module ET
2
+
3
+ class GetRest < ET::Constructor
4
+ def initialize(authStub, endpoint, qs = nil)
5
+ authStub.refreshToken
6
+
7
+ if qs
8
+ qs['access_token'] = authStub.authToken
9
+ else
10
+ qs = {"access_token" => authStub.authToken}
11
+ end
12
+
13
+ uri = URI.parse(endpoint)
14
+ uri.query = URI.encode_www_form(qs)
15
+ http = Net::HTTP.new(uri.host, uri.port)
16
+ http.use_ssl = true
17
+ request = Net::HTTP::Get.new(uri.request_uri)
18
+ requestResponse = http.request(request)
19
+
20
+ @moreResults = false
21
+
22
+ super(requestResponse, true)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ module ET
2
+ class GetSupport < ET::BaseObject
3
+ attr_accessor :filter
4
+
5
+ def initialize
6
+ super
7
+ end
8
+
9
+ def get(data = nil, filter = nil)
10
+ obj = ET::Get.new(@client, @obj, data, filter)
11
+ @lastRequestID = obj.request_id
12
+ obj
13
+ end
14
+
15
+ def info
16
+ ET::Describe.new(@client, @obj)
17
+ end
18
+
19
+ def getMoreResults
20
+ ET::Continue.new(@client, @lastRequestID)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,86 @@
1
+ module ET
2
+ class GetSupportRest < ET::BaseObject
3
+ attr_reader :urlProps, :urlPropsRequired, :lastPageNumber
4
+
5
+ def initialize
6
+ super
7
+ end
8
+
9
+ def get(props = nil)
10
+ if props and props.is_a? Hash then
11
+ @props = props
12
+ end
13
+
14
+ completeURL = @endpoint
15
+ additionalQS = {}
16
+
17
+ if @props and @props.is_a? Hash then
18
+ @props.each do |k,v|
19
+ if @urlProps.include?(k) then
20
+ completeURL.sub!("{#{k}}", v)
21
+ else
22
+ additionalQS[k] = v
23
+ end
24
+ end
25
+ end
26
+
27
+ @urlPropsRequired.each do |value|
28
+ if !@props || !@props.has_key?(value) then
29
+ raise "Unable to process request due to missing required prop: #{value}"
30
+ end
31
+ end
32
+
33
+ @urlProps.each do |value|
34
+ completeURL.sub!("/{#{value}}", "")
35
+ end
36
+
37
+ obj = ET::GetRest.new(@authStub, completeURL,additionalQS)
38
+
39
+ if obj.results.has_key?('page')
40
+ @lastPageNumber = obj.results['page']
41
+ pageSize = obj.results['pageSize']
42
+ if obj.results.has_key?('count') then
43
+ count = obj.results['count']
44
+ elsif obj.results.has_key?('totalCount') then
45
+ count = obj.results['totalCount']
46
+ end
47
+
48
+ if !count.nil? && count > (@lastPageNumber * pageSize)
49
+ obj.moreResults = true
50
+ end
51
+ end
52
+ obj
53
+ end
54
+
55
+ def getMoreResults
56
+ if props and props.is_a? Hash
57
+ @props = props
58
+ end
59
+
60
+ originalPageValue = "1"
61
+ removePageFromProps = false
62
+
63
+ if !@props.nil? && @props.has_key?('$page')
64
+ originalPageValue = @props['page']
65
+ else
66
+ removePageFromProps = true
67
+ end
68
+
69
+ if @props.nil?
70
+ @props = {}
71
+ end
72
+
73
+ @props['$page'] = @lastPageNumber + 1
74
+
75
+ obj = self.get
76
+
77
+ if removePageFromProps then
78
+ @props.delete('$page')
79
+ else
80
+ @props['$page'] = originalPageValue
81
+ end
82
+
83
+ obj
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,68 @@
1
+ module ET
2
+ class List < ET::CUDSupport
3
+ attr_reader :list_id, :code, :message, :status
4
+
5
+ def initialize(client)
6
+ super()
7
+ @obj = 'List'
8
+ @client = client
9
+ end
10
+
11
+ def id
12
+ @list_id
13
+ end
14
+
15
+ # Example:
16
+ # {ListName: "NewListName", Description: "This list was created with the RubySDK", Type: "Private"}
17
+ def create(params)
18
+ stringify_keys!(params)
19
+ res = post(params)
20
+ assign_values(res)
21
+ self
22
+ end
23
+
24
+ def update(params)
25
+ stringify_keys!(params)
26
+ data = params.merge('ID' => @list_id)
27
+
28
+ res = patch(data)
29
+
30
+ puts "[DEBUG] List update: #{res.inspect}"
31
+
32
+ raise('implement me')
33
+
34
+ self
35
+ end
36
+
37
+ def find(id)
38
+ props = ["ID", "PartnerKey", "CreatedDate", "ModifiedDate", "Client.ID", "Client.PartnerClientKey", "ListName", "Description", "Category", "Type", "CustomerKey", "ListClassification", "AutomatedEmail.ID"]
39
+ filter = {'Property' => 'ID', 'SimpleOperator' => 'equals', 'Value' => id.to_s}
40
+ res = get(props, filter)
41
+
42
+ assign_values(res)
43
+
44
+ self
45
+ end
46
+
47
+ def destroy(id)
48
+ delete('ID' => id.to_s)
49
+ end
50
+
51
+ def subscriber
52
+ ET::Subscriber.new(@client, @list_id)
53
+ end
54
+
55
+ private
56
+
57
+ def assign_values(res)
58
+ if (r = res.results[0])
59
+ @list_id = r[:new_id] || r[:id]
60
+ else
61
+ @list_id = nil
62
+ end
63
+ @code = res.code.to_i
64
+ @message = res.message.to_s
65
+ @status = res.status
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,10 @@
1
+ module ET
2
+ class List
3
+ class Subscriber < ET::GetSupport
4
+ def initialize
5
+ super
6
+ @obj = 'ListSubscriber'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ module ET
2
+ class OpenEvent < ET::GetSupport
3
+ def initialize
4
+ super
5
+ @obj = 'OpenEvent'
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,39 @@
1
+ module ET
2
+ class Patch < ET::Constructor
3
+ def initialize(authStub, objType, props = nil)
4
+ @results = []
5
+ begin
6
+ authStub.refreshToken
7
+ if props.is_a? Array
8
+ obj = {
9
+ 'Objects' => [],
10
+ :attributes! => { 'Objects' => { 'xsi:type' => ('tns:' + objType) } }
11
+ }
12
+ props.each{ |p|
13
+ obj['Objects'] << p
14
+ }
15
+ else
16
+ obj = {
17
+ 'Objects' => props,
18
+ :attributes! => { 'Objects' => { 'xsi:type' => ('tns:' + objType) } }
19
+ }
20
+ end
21
+
22
+ response = authStub.auth.call(:update, :message => obj)
23
+
24
+ ensure
25
+ super(response)
26
+ if @status
27
+ if @body[:update_response][:overall_status] != "OK"
28
+ @status = false
29
+ end
30
+ if !@body[:update_response][:results].is_a? Hash then
31
+ @results = @results + @body[:update_response][:results]
32
+ else
33
+ @results.push(@body[:update_response][:results])
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,19 @@
1
+ module ET
2
+ class PatchRest < ET::Constructor
3
+ def initialize(authStub, endpoint, payload)
4
+ authStub.refreshToken
5
+
6
+ qs = {"access_token" => authStub.authToken}
7
+ uri = URI.parse(endpoint)
8
+ uri.query = URI.encode_www_form(qs)
9
+ http = Net::HTTP.new(uri.host, uri.port)
10
+ http.use_ssl = true
11
+ request = Net::HTTP::Patch.new(uri.request_uri)
12
+ request.body = payload.to_json
13
+ request.add_field "Content-Type", "application/json"
14
+ requestResponse = http.request(request)
15
+ super(requestResponse, true)
16
+
17
+ end
18
+ end
19
+ end