fuelsdk 0.0.4 → 0.0.5
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.
- data/lib/fuelsdk.rb +2 -224
- data/lib/fuelsdk/client.rb +21 -37
- data/lib/fuelsdk/objects.rb +252 -52
- data/lib/fuelsdk/soap.rb +3 -12
- data/lib/fuelsdk/utils.rb +11 -0
- data/lib/fuelsdk/version.rb +1 -1
- data/samples/sample-AddSubscriberToList.rb +6 -2
- data/samples/sample-CreateDataExtensions.rb +5 -2
- data/samples/sample-dataextension.rb +42 -25
- data/spec/objects_helper_spec.rb +17 -10
- data/spec/objects_spec.rb +371 -0
- metadata +3 -2
data/lib/fuelsdk.rb
CHANGED
@@ -5,6 +5,7 @@ require 'date'
|
|
5
5
|
require 'jwt'
|
6
6
|
|
7
7
|
module FuelSDK
|
8
|
+
require 'fuelsdk/utils'
|
8
9
|
autoload :HTTPRequest, 'fuelsdk/http_request'
|
9
10
|
autoload :Targeting, 'fuelsdk/targeting'
|
10
11
|
autoload :Soap, 'fuelsdk/soap'
|
@@ -18,6 +19,7 @@ ET_Client = FuelSDK::Client
|
|
18
19
|
ET_BounceEvent = FuelSDK::BounceEvent
|
19
20
|
ET_ClickEvent = FuelSDK::ClickEvent
|
20
21
|
ET_ContentArea = FuelSDK::ContentArea
|
22
|
+
ET_DataExtension = FuelSDK::DataExtension
|
21
23
|
ET_DataFolder = FuelSDK::DataFolder
|
22
24
|
ET_Folder = FuelSDK::Folder
|
23
25
|
ET_Email = FuelSDK::Email
|
@@ -28,227 +30,3 @@ ET_Subscriber = FuelSDK::Subscriber
|
|
28
30
|
ET_UnsubEvent = FuelSDK::UnsubEvent
|
29
31
|
ET_TriggeredSend = FuelSDK::TriggeredSend
|
30
32
|
ET_Campaign = FuelSDK::Campaign
|
31
|
-
|
32
|
-
=begin
|
33
|
-
class ET_DataExtension < ET_CUDSupport
|
34
|
-
attr_accessor :columns
|
35
|
-
|
36
|
-
def initialize
|
37
|
-
super
|
38
|
-
@obj = 'DataExtension'
|
39
|
-
end
|
40
|
-
|
41
|
-
def post
|
42
|
-
originalProps = @props
|
43
|
-
|
44
|
-
if @props.is_a? Array then
|
45
|
-
multiDE = []
|
46
|
-
@props.each { |currentDE|
|
47
|
-
currentDE['Fields'] = {}
|
48
|
-
currentDE['Fields']['Field'] = []
|
49
|
-
currentDE['columns'].each { |key|
|
50
|
-
currentDE['Fields']['Field'].push(key)
|
51
|
-
}
|
52
|
-
currentDE.delete('columns')
|
53
|
-
multiDE.push(currentDE.dup)
|
54
|
-
}
|
55
|
-
|
56
|
-
@props = multiDE
|
57
|
-
else
|
58
|
-
@props['Fields'] = {}
|
59
|
-
@props['Fields']['Field'] = []
|
60
|
-
|
61
|
-
@columns.each { |key|
|
62
|
-
@props['Fields']['Field'].push(key)
|
63
|
-
}
|
64
|
-
end
|
65
|
-
|
66
|
-
obj = super
|
67
|
-
@props = originalProps
|
68
|
-
return obj
|
69
|
-
end
|
70
|
-
|
71
|
-
def patch
|
72
|
-
@props['Fields'] = {}
|
73
|
-
@props['Fields']['Field'] = []
|
74
|
-
@columns.each { |key|
|
75
|
-
@props['Fields']['Field'].push(key)
|
76
|
-
}
|
77
|
-
obj = super
|
78
|
-
@props.delete("Fields")
|
79
|
-
return obj
|
80
|
-
end
|
81
|
-
|
82
|
-
class Column < ET_GetSupport
|
83
|
-
def initialize
|
84
|
-
super
|
85
|
-
@obj = 'DataExtensionField'
|
86
|
-
end
|
87
|
-
|
88
|
-
def get
|
89
|
-
|
90
|
-
if props and props.is_a? Array then
|
91
|
-
@props = props
|
92
|
-
end
|
93
|
-
|
94
|
-
if @props and @props.is_a? Hash then
|
95
|
-
@props = @props.keys
|
96
|
-
end
|
97
|
-
|
98
|
-
if filter and filter.is_a? Hash then
|
99
|
-
@filter = filter
|
100
|
-
end
|
101
|
-
|
102
|
-
fixCustomerKey = false
|
103
|
-
if filter and filter.is_a? Hash then
|
104
|
-
@filter = filter
|
105
|
-
if @filter.has_key?("Property") && @filter["Property"] == "CustomerKey" then
|
106
|
-
@filter["Property"] = "DataExtension.CustomerKey"
|
107
|
-
fixCustomerKey = true
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
obj = ET_Get.new(@authStub, @obj, @props, @filter)
|
112
|
-
@lastRequestID = obj.request_id
|
113
|
-
|
114
|
-
if fixCustomerKey then
|
115
|
-
@filter["Property"] = "CustomerKey"
|
116
|
-
end
|
117
|
-
|
118
|
-
return obj
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
class Row < ET_CUDSupport
|
123
|
-
attr_accessor :Name, :CustomerKey
|
124
|
-
|
125
|
-
def initialize()
|
126
|
-
super
|
127
|
-
@obj = "DataExtensionObject"
|
128
|
-
end
|
129
|
-
|
130
|
-
def get
|
131
|
-
getName
|
132
|
-
if props and props.is_a? Array then
|
133
|
-
@props = props
|
134
|
-
end
|
135
|
-
|
136
|
-
if @props and @props.is_a? Hash then
|
137
|
-
@props = @props.keys
|
138
|
-
end
|
139
|
-
|
140
|
-
if filter and filter.is_a? Hash then
|
141
|
-
@filter = filter
|
142
|
-
end
|
143
|
-
|
144
|
-
obj = ET_Get.new(@authStub, "DataExtensionObject[#{@Name}]", @props, @filter)
|
145
|
-
@lastRequestID = obj.request_id
|
146
|
-
|
147
|
-
return obj
|
148
|
-
end
|
149
|
-
|
150
|
-
def post
|
151
|
-
getCustomerKey
|
152
|
-
originalProps = @props
|
153
|
-
## FIX THIS
|
154
|
-
if @props.is_a? Array then
|
155
|
-
# multiRow = []
|
156
|
-
# @props.each { |currentDE|
|
157
|
-
|
158
|
-
# currentDE['columns'].each { |key|
|
159
|
-
# currentDE['Fields'] = {}
|
160
|
-
# currentDE['Fields']['Field'] = []
|
161
|
-
# currentDE['Fields']['Field'].push(key)
|
162
|
-
# }
|
163
|
-
# currentDE.delete('columns')
|
164
|
-
# multiRow.push(currentDE.dup)
|
165
|
-
# }
|
166
|
-
|
167
|
-
# @props = multiRow
|
168
|
-
else
|
169
|
-
currentFields = []
|
170
|
-
currentProp = {}
|
171
|
-
|
172
|
-
@props.each { |key,value|
|
173
|
-
currentFields.push({"Name" => key, "Value" => value})
|
174
|
-
}
|
175
|
-
currentProp['CustomerKey'] = @CustomerKey
|
176
|
-
currentProp['Properties'] = {}
|
177
|
-
currentProp['Properties']['Property'] = currentFields
|
178
|
-
end
|
179
|
-
|
180
|
-
obj = ET_Post.new(@authStub, @obj, currentProp)
|
181
|
-
@props = originalProps
|
182
|
-
obj
|
183
|
-
end
|
184
|
-
|
185
|
-
def patch
|
186
|
-
getCustomerKey
|
187
|
-
currentFields = []
|
188
|
-
currentProp = {}
|
189
|
-
|
190
|
-
@props.each { |key,value|
|
191
|
-
currentFields.push({"Name" => key, "Value" => value})
|
192
|
-
}
|
193
|
-
currentProp['CustomerKey'] = @CustomerKey
|
194
|
-
currentProp['Properties'] = {}
|
195
|
-
currentProp['Properties']['Property'] = currentFields
|
196
|
-
|
197
|
-
ET_Patch.new(@authStub, @obj, currentProp)
|
198
|
-
end
|
199
|
-
def delete
|
200
|
-
getCustomerKey
|
201
|
-
currentFields = []
|
202
|
-
currentProp = {}
|
203
|
-
|
204
|
-
@props.each { |key,value|
|
205
|
-
currentFields.push({"Name" => key, "Value" => value})
|
206
|
-
}
|
207
|
-
currentProp['CustomerKey'] = @CustomerKey
|
208
|
-
currentProp['Keys'] = {}
|
209
|
-
currentProp['Keys']['Key'] = currentFields
|
210
|
-
|
211
|
-
ET_Delete.new(@authStub, @obj, currentProp)
|
212
|
-
end
|
213
|
-
|
214
|
-
private
|
215
|
-
def getCustomerKey
|
216
|
-
if @CustomerKey.nil? then
|
217
|
-
if @CustomerKey.nil? && @Name.nil? then
|
218
|
-
raise 'Unable to process DataExtension::Row request due to CustomerKey and Name not being defined on ET_DatExtension::row'
|
219
|
-
else
|
220
|
-
de = ET_DataExtension.new
|
221
|
-
de.authStub = @authStub
|
222
|
-
de.props = ["Name","CustomerKey"]
|
223
|
-
de.filter = {'Property' => 'CustomerKey','SimpleOperator' => 'equals','Value' => @Name}
|
224
|
-
getResponse = de.get
|
225
|
-
if getResponse.status && (getResponse.results.length == 1) then
|
226
|
-
@CustomerKey = getResponse.results[0][:customer_key]
|
227
|
-
else
|
228
|
-
raise 'Unable to process DataExtension::Row request due to unable to find DataExtension based on Name'
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
def getName
|
235
|
-
if @Name.nil? then
|
236
|
-
if @CustomerKey.nil? && @Name.nil? then
|
237
|
-
raise 'Unable to process DataExtension::Row request due to CustomerKey and Name not being defined on ET_DatExtension::row'
|
238
|
-
else
|
239
|
-
de = ET_DataExtension.new
|
240
|
-
de.authStub = @authStub
|
241
|
-
de.props = ["Name","CustomerKey"]
|
242
|
-
de.filter = {'Property' => 'CustomerKey','SimpleOperator' => 'equals','Value' => @CustomerKey}
|
243
|
-
getResponse = de.get
|
244
|
-
if getResponse.status && (getResponse.results.length == 1) then
|
245
|
-
@Name = getResponse.results[0][:name]
|
246
|
-
else
|
247
|
-
raise 'Unable to process DataExtension::Row request due to unable to find DataExtension based on CustomerKey'
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
253
|
-
end
|
254
|
-
=end
|
data/lib/fuelsdk/client.rb
CHANGED
@@ -100,42 +100,26 @@ module FuelSDK
|
|
100
100
|
refresh true
|
101
101
|
end
|
102
102
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
# patchResponse = newSub.patch
|
125
|
-
# return patchResponse
|
126
|
-
# end
|
127
|
-
# end
|
128
|
-
# return postResponse
|
129
|
-
#end
|
130
|
-
|
131
|
-
#def CreateDataExtensions(dataExtensionDefinitions)
|
132
|
-
# newDEs = FuelSDK::ET_DataExtension.new
|
133
|
-
# newDEs.authStub = self
|
134
|
-
|
135
|
-
# newDEs.props = dataExtensionDefinitions
|
136
|
-
# postResponse = newDEs.post
|
137
|
-
|
138
|
-
# return postResponse
|
139
|
-
#end
|
103
|
+
def AddSubscriberToList(email, ids, subscriber_key = nil)
|
104
|
+
s = FuelSDK::Subscriber.new
|
105
|
+
s.client = self
|
106
|
+
lists = ids.collect{|id| {'ID' => id}}
|
107
|
+
s.properties = {"EmailAddress" => email, "Lists" => lists}
|
108
|
+
s.propertiess['SubscriberKey'] = subscriber_key if subscriber_key
|
109
|
+
|
110
|
+
# Try to add the subscriber
|
111
|
+
if(rsp = s.post and rsp.results.first[:error_code] == '12014')
|
112
|
+
# subscriber already exists we need to update.
|
113
|
+
rsp = s.patch
|
114
|
+
end
|
115
|
+
rsp
|
116
|
+
end
|
117
|
+
|
118
|
+
def CreateDataExtensions(definitions)
|
119
|
+
de = FuelSDK::DataExtension.new
|
120
|
+
de.client = self
|
121
|
+
de.properties = definitions
|
122
|
+
de.post
|
123
|
+
end
|
140
124
|
end
|
141
125
|
end
|
data/lib/fuelsdk/objects.rb
CHANGED
@@ -1,56 +1,66 @@
|
|
1
1
|
module FuelSDK
|
2
2
|
module Objects
|
3
|
-
module
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
module Soap
|
4
|
+
module Read
|
5
|
+
attr_accessor :filter
|
6
|
+
def get _id=nil
|
7
|
+
client.soap_get _id||id, properties, filter
|
8
|
+
end
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
+
def info
|
11
|
+
client.soap_describe id
|
12
|
+
end
|
10
13
|
end
|
11
|
-
end
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
module CUD #create, update, delete
|
16
|
+
def post
|
17
|
+
client.soap_post id, properties
|
18
|
+
end
|
17
19
|
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
def patch
|
21
|
+
client.soap_patch id, properties
|
22
|
+
end
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
+
def delete
|
25
|
+
client.soap_delete id, properties
|
26
|
+
end
|
24
27
|
end
|
25
28
|
end
|
26
29
|
|
27
|
-
module
|
28
|
-
|
29
|
-
|
30
|
+
module Rest
|
31
|
+
module Read
|
32
|
+
def get
|
33
|
+
client.rest_get id, properties
|
34
|
+
end
|
30
35
|
end
|
31
|
-
end
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
+
module CUD
|
38
|
+
def post
|
39
|
+
client.rest_post id, properties
|
40
|
+
end
|
37
41
|
|
38
|
-
|
39
|
-
|
40
|
-
|
42
|
+
def patch
|
43
|
+
client.rest_patch id, properties
|
44
|
+
end
|
41
45
|
|
42
|
-
|
43
|
-
|
46
|
+
def delete
|
47
|
+
client.rest_delete id, properties
|
48
|
+
end
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
47
52
|
class Base
|
48
|
-
attr_accessor :
|
53
|
+
attr_accessor :properties, :client
|
49
54
|
attr_reader :id
|
50
55
|
|
51
56
|
alias props= properties= # backward compatibility
|
52
57
|
alias authStub= client= # backward compatibility
|
53
58
|
|
59
|
+
def properties
|
60
|
+
@properties = [@properties].compact unless @properties.kind_of? Array
|
61
|
+
@properties
|
62
|
+
end
|
63
|
+
|
54
64
|
def id
|
55
65
|
self.class.id
|
56
66
|
end
|
@@ -64,21 +74,21 @@ module FuelSDK
|
|
64
74
|
end
|
65
75
|
|
66
76
|
class BounceEvent < Objects::Base
|
67
|
-
include Objects::
|
77
|
+
include Objects::Soap::Read
|
68
78
|
end
|
69
79
|
|
70
80
|
class ClickEvent < Objects::Base
|
71
|
-
include Objects::
|
81
|
+
include Objects::Soap::Read
|
72
82
|
end
|
73
83
|
|
74
84
|
class ContentArea < Objects::Base
|
75
|
-
include Objects::
|
76
|
-
include Objects::
|
85
|
+
include Objects::Soap::Read
|
86
|
+
include Objects::Soap::CUD
|
77
87
|
end
|
78
88
|
|
79
89
|
class DataFolder < Objects::Base
|
80
|
-
include Objects::
|
81
|
-
include Objects::
|
90
|
+
include Objects::Soap::Read
|
91
|
+
include Objects::Soap::CUD
|
82
92
|
end
|
83
93
|
|
84
94
|
class Folder < DataFolder
|
@@ -90,16 +100,16 @@ module FuelSDK
|
|
90
100
|
end
|
91
101
|
|
92
102
|
class Email < Objects::Base
|
93
|
-
include Objects::
|
94
|
-
include Objects::
|
103
|
+
include Objects::Soap::Read
|
104
|
+
include Objects::Soap::CUD
|
95
105
|
end
|
96
106
|
|
97
107
|
class List < Objects::Base
|
98
|
-
include Objects::
|
99
|
-
include Objects::
|
108
|
+
include Objects::Soap::Read
|
109
|
+
include Objects::Soap::CUD
|
100
110
|
|
101
111
|
class Subscriber < Objects::Base
|
102
|
-
include Objects::
|
112
|
+
include Objects::Soap::Read
|
103
113
|
def id
|
104
114
|
'ListSubscriber'
|
105
115
|
end
|
@@ -107,26 +117,26 @@ module FuelSDK
|
|
107
117
|
end
|
108
118
|
|
109
119
|
class OpenEvent < Objects::Base
|
110
|
-
include Objects::
|
120
|
+
include Objects::Soap::Read
|
111
121
|
end
|
112
122
|
|
113
123
|
class SentEvent < Objects::Base
|
114
|
-
include Objects::
|
124
|
+
include Objects::Soap::Read
|
115
125
|
end
|
116
126
|
|
117
127
|
class Subscriber < Objects::Base
|
118
|
-
include Objects::
|
119
|
-
include Objects::
|
128
|
+
include Objects::Soap::Read
|
129
|
+
include Objects::Soap::CUD
|
120
130
|
end
|
121
131
|
|
122
132
|
class UnsubEvent < Objects::Base
|
123
|
-
include Objects::
|
133
|
+
include Objects::Soap::Read
|
124
134
|
end
|
125
135
|
|
126
136
|
class TriggeredSend < Objects::Base
|
137
|
+
include Objects::Soap::Read
|
138
|
+
include Objects::Soap::CUD
|
127
139
|
attr_accessor :subscribers
|
128
|
-
include Objects::SoapRead
|
129
|
-
include Objects::SoapCUD
|
130
140
|
def id
|
131
141
|
'TriggeredSendDefinition'
|
132
142
|
end
|
@@ -135,9 +145,199 @@ module FuelSDK
|
|
135
145
|
end
|
136
146
|
end
|
137
147
|
|
148
|
+
class DataExtension < Objects::Base
|
149
|
+
include Objects::Soap::Read
|
150
|
+
include Objects::Soap::CUD
|
151
|
+
attr_accessor :fields
|
152
|
+
alias columns= fields= # backward compatibility
|
153
|
+
|
154
|
+
def post
|
155
|
+
munge_fields self.properties
|
156
|
+
super
|
157
|
+
end
|
158
|
+
|
159
|
+
def patch
|
160
|
+
munge_fields self.properties
|
161
|
+
super
|
162
|
+
end
|
163
|
+
|
164
|
+
class Column < Objects::Base
|
165
|
+
include Objects::Soap::Read
|
166
|
+
def id
|
167
|
+
'DataExtensionField'
|
168
|
+
end
|
169
|
+
def get
|
170
|
+
if filter and filter.kind_of? Hash and \
|
171
|
+
filter.include? 'Property' and filter['Property'] == 'CustomerKey'
|
172
|
+
filter['Property'] = 'DataExtension.CustomerKey'
|
173
|
+
end
|
174
|
+
super
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
class Row < Objects::Base
|
179
|
+
include Objects::Soap::Read
|
180
|
+
include Objects::Soap::CUD
|
181
|
+
|
182
|
+
attr_accessor :name, :customer_key
|
183
|
+
|
184
|
+
# backward compatibility
|
185
|
+
alias Name= name=
|
186
|
+
alias CustomerKey= customer_key=
|
187
|
+
|
188
|
+
def id
|
189
|
+
'DataExtensionObject'
|
190
|
+
end
|
191
|
+
|
192
|
+
def get
|
193
|
+
super "#{id}[#{name}]"
|
194
|
+
end
|
195
|
+
|
196
|
+
def name
|
197
|
+
unless @name
|
198
|
+
retrieve_required
|
199
|
+
end
|
200
|
+
@name
|
201
|
+
end
|
202
|
+
|
203
|
+
def customer_key
|
204
|
+
unless @customer_key
|
205
|
+
retrieve_required
|
206
|
+
end
|
207
|
+
@customer_key
|
208
|
+
end
|
209
|
+
|
210
|
+
def post
|
211
|
+
munge_properties self.properties
|
212
|
+
super
|
213
|
+
end
|
214
|
+
|
215
|
+
def patch
|
216
|
+
munge_properties self.properties
|
217
|
+
super
|
218
|
+
end
|
219
|
+
|
220
|
+
def delete
|
221
|
+
munge_keys self.properties
|
222
|
+
super
|
223
|
+
end
|
224
|
+
|
225
|
+
private
|
226
|
+
#::TODO::
|
227
|
+
# opportunity for meta programming here... but need to get this out the door
|
228
|
+
def munge_keys d
|
229
|
+
d.each do |o|
|
230
|
+
|
231
|
+
next if explicit_keys(o) && explicit_customer_key(o)
|
232
|
+
|
233
|
+
formatted = []
|
234
|
+
o['CustomerKey'] = customer_key unless explicit_customer_key o
|
235
|
+
unless explicit_properties(o)
|
236
|
+
o.each do |k, v|
|
237
|
+
next if k == 'CustomerKey'
|
238
|
+
formatted.concat FuelSDK.format_name_value_pairs k => v
|
239
|
+
o.delete k
|
240
|
+
end
|
241
|
+
o['Keys'] = {'Key' => formatted }
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
def explicit_keys h
|
247
|
+
h['Keys'] and h['Keys']['Key']
|
248
|
+
end
|
249
|
+
|
250
|
+
def munge_properties d
|
251
|
+
d.each do |o|
|
252
|
+
|
253
|
+
next if explicit_properties(o) && explicit_customer_key(o)
|
254
|
+
|
255
|
+
formatted = []
|
256
|
+
o['CustomerKey'] = customer_key unless explicit_customer_key o
|
257
|
+
unless explicit_properties(o)
|
258
|
+
o.each do |k, v|
|
259
|
+
next if k == 'CustomerKey'
|
260
|
+
formatted.concat FuelSDK.format_name_value_pairs k => v
|
261
|
+
o.delete k
|
262
|
+
end
|
263
|
+
o['Properties'] = {'Property' => formatted }
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
def explicit_properties h
|
269
|
+
h['Properties'] and h['Properties']['Property']
|
270
|
+
end
|
271
|
+
|
272
|
+
def explicit_customer_key h
|
273
|
+
h['CustomerKey']
|
274
|
+
end
|
275
|
+
|
276
|
+
def retrieve_required
|
277
|
+
# have to use instance variables so we don't recursivelly retrieve_required
|
278
|
+
if !@name && !@customer_key
|
279
|
+
raise 'Unable to process DataExtension::Row ' \
|
280
|
+
'request due to missing CustomerKey and Name'
|
281
|
+
end
|
282
|
+
if !@name || !@customer_key
|
283
|
+
filter = {
|
284
|
+
'Property' => @name.nil? ? 'CustomerKey' : 'Name',
|
285
|
+
'SimpleOperator' => 'equals',
|
286
|
+
'Value' => @customer_key || @name
|
287
|
+
}
|
288
|
+
rsp = client.soap_get 'DataExtension', ['Name', 'CustomerKey'], filter
|
289
|
+
if rsp.success? && rsp.results.count == 1
|
290
|
+
self.name = rsp.results.first[:name]
|
291
|
+
self.customer_key = rsp.results.first[:customer_key]
|
292
|
+
else
|
293
|
+
raise 'Unable to process DataExtension::Row'
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
private
|
300
|
+
|
301
|
+
def munge_fields d
|
302
|
+
# maybe one day will make it smart enough to zip properties and fields if count is same?
|
303
|
+
if d.kind_of? Array and d.count > 1 and (fields and !fields.empty?)
|
304
|
+
# we could map the field to all DataExtensions, but lets make user be explicit.
|
305
|
+
# if they are going to use fields attribute properties should
|
306
|
+
# be a single DataExtension Defined in a Hash
|
307
|
+
raise 'Unable to handle muliple DataExtension definitions and a field definition'
|
308
|
+
end
|
309
|
+
|
310
|
+
d.each do |de|
|
311
|
+
|
312
|
+
if (explicit_fields(de) and (de['columns'] || de['fields'] || has_fields)) or
|
313
|
+
(de['columns'] and (de['fields'] || has_fields)) or
|
314
|
+
(de['fields'] and has_fields)
|
315
|
+
raise 'Fields are defined in too many ways. Please only define once.' # ahhh what, to do...
|
316
|
+
end
|
317
|
+
|
318
|
+
# let users who chose, to define fields explicitly within the hash definition
|
319
|
+
next if explicit_fields de
|
320
|
+
|
321
|
+
de['Fields'] = {'Field' => de['columns'] || de['fields'] || fields}
|
322
|
+
# sanitize
|
323
|
+
de.delete 'columns'
|
324
|
+
de.delete 'fields'
|
325
|
+
raise 'DataExtension needs atleast one field.' unless de['Fields']['Field']
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
def explicit_fields h
|
330
|
+
h['Fields'] and h['Fields']['Field']
|
331
|
+
end
|
332
|
+
|
333
|
+
def has_fields
|
334
|
+
fields and !fields.empty?
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
138
338
|
class Campaign < Objects::Base
|
139
|
-
include Objects::
|
140
|
-
include Objects::
|
339
|
+
include Objects::Rest::Read
|
340
|
+
include Objects::Rest::CUD
|
141
341
|
|
142
342
|
def properties
|
143
343
|
@properties ||= {}
|
@@ -150,8 +350,8 @@ module FuelSDK
|
|
150
350
|
end
|
151
351
|
|
152
352
|
class Asset < Objects::Base
|
153
|
-
include Objects::
|
154
|
-
include Objects::
|
353
|
+
include Objects::Rest::Read
|
354
|
+
include Objects::Rest::CUD
|
155
355
|
|
156
356
|
def properties
|
157
357
|
@properties ||= {}
|