exact-target-api 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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