Skip to content
This repository was archived by the owner on Nov 27, 2018. It is now read-only.

Commit 83f94cd

Browse files
committed
Row posts framed up. updated properties to always return array. updated munge to accept passed so we can in future abstract all munges into own file
1 parent 8a4440d commit 83f94cd

File tree

4 files changed

+155
-255
lines changed

4 files changed

+155
-255
lines changed

lib/fuelsdk.rb

-224
Original file line numberDiff line numberDiff line change
@@ -29,227 +29,3 @@ module FuelSDK
2929
ET_UnsubEvent = FuelSDK::UnsubEvent
3030
ET_TriggeredSend = FuelSDK::TriggeredSend
3131
ET_Campaign = FuelSDK::Campaign
32-
33-
=begin
34-
class ET_DataExtension < ET_CUDSupport
35-
attr_accessor :columns
36-
37-
def initialize
38-
super
39-
@obj = 'DataExtension'
40-
end
41-
42-
def post
43-
originalProps = @props
44-
45-
if @props.is_a? Array then
46-
multiDE = []
47-
@props.each { |currentDE|
48-
currentDE['Fields'] = {}
49-
currentDE['Fields']['Field'] = []
50-
currentDE['columns'].each { |key|
51-
currentDE['Fields']['Field'].push(key)
52-
}
53-
currentDE.delete('columns')
54-
multiDE.push(currentDE.dup)
55-
}
56-
57-
@props = multiDE
58-
else
59-
@props['Fields'] = {}
60-
@props['Fields']['Field'] = []
61-
62-
@columns.each { |key|
63-
@props['Fields']['Field'].push(key)
64-
}
65-
end
66-
67-
obj = super
68-
@props = originalProps
69-
return obj
70-
end
71-
72-
def patch
73-
@props['Fields'] = {}
74-
@props['Fields']['Field'] = []
75-
@columns.each { |key|
76-
@props['Fields']['Field'].push(key)
77-
}
78-
obj = super
79-
@props.delete("Fields")
80-
return obj
81-
end
82-
83-
class Column < ET_GetSupport
84-
def initialize
85-
super
86-
@obj = 'DataExtensionField'
87-
end
88-
89-
def get
90-
91-
if props and props.is_a? Array then
92-
@props = props
93-
end
94-
95-
if @props and @props.is_a? Hash then
96-
@props = @props.keys
97-
end
98-
99-
if filter and filter.is_a? Hash then
100-
@filter = filter
101-
end
102-
103-
fixCustomerKey = false
104-
if filter and filter.is_a? Hash then
105-
@filter = filter
106-
if @filter.has_key?("Property") && @filter["Property"] == "CustomerKey" then
107-
@filter["Property"] = "DataExtension.CustomerKey"
108-
fixCustomerKey = true
109-
end
110-
end
111-
112-
obj = ET_Get.new(@authStub, @obj, @props, @filter)
113-
@lastRequestID = obj.request_id
114-
115-
if fixCustomerKey then
116-
@filter["Property"] = "CustomerKey"
117-
end
118-
119-
return obj
120-
end
121-
end
122-
123-
class Row < ET_CUDSupport
124-
attr_accessor :Name, :CustomerKey
125-
126-
def initialize()
127-
super
128-
@obj = "DataExtensionObject"
129-
end
130-
131-
def get
132-
getName
133-
if props and props.is_a? Array then
134-
@props = props
135-
end
136-
137-
if @props and @props.is_a? Hash then
138-
@props = @props.keys
139-
end
140-
141-
if filter and filter.is_a? Hash then
142-
@filter = filter
143-
end
144-
145-
obj = ET_Get.new(@authStub, "DataExtensionObject[#{@Name}]", @props, @filter)
146-
@lastRequestID = obj.request_id
147-
148-
return obj
149-
end
150-
151-
def post
152-
getCustomerKey
153-
originalProps = @props
154-
## FIX THIS
155-
if @props.is_a? Array then
156-
# multiRow = []
157-
# @props.each { |currentDE|
158-
159-
# currentDE['columns'].each { |key|
160-
# currentDE['Fields'] = {}
161-
# currentDE['Fields']['Field'] = []
162-
# currentDE['Fields']['Field'].push(key)
163-
# }
164-
# currentDE.delete('columns')
165-
# multiRow.push(currentDE.dup)
166-
# }
167-
168-
# @props = multiRow
169-
else
170-
currentFields = []
171-
currentProp = {}
172-
173-
@props.each { |key,value|
174-
currentFields.push({"Name" => key, "Value" => value})
175-
}
176-
currentProp['CustomerKey'] = @CustomerKey
177-
currentProp['Properties'] = {}
178-
currentProp['Properties']['Property'] = currentFields
179-
end
180-
181-
obj = ET_Post.new(@authStub, @obj, currentProp)
182-
@props = originalProps
183-
obj
184-
end
185-
186-
def patch
187-
getCustomerKey
188-
currentFields = []
189-
currentProp = {}
190-
191-
@props.each { |key,value|
192-
currentFields.push({"Name" => key, "Value" => value})
193-
}
194-
currentProp['CustomerKey'] = @CustomerKey
195-
currentProp['Properties'] = {}
196-
currentProp['Properties']['Property'] = currentFields
197-
198-
ET_Patch.new(@authStub, @obj, currentProp)
199-
end
200-
def delete
201-
getCustomerKey
202-
currentFields = []
203-
currentProp = {}
204-
205-
@props.each { |key,value|
206-
currentFields.push({"Name" => key, "Value" => value})
207-
}
208-
currentProp['CustomerKey'] = @CustomerKey
209-
currentProp['Keys'] = {}
210-
currentProp['Keys']['Key'] = currentFields
211-
212-
ET_Delete.new(@authStub, @obj, currentProp)
213-
end
214-
215-
private
216-
def getCustomerKey
217-
if @CustomerKey.nil? then
218-
if @CustomerKey.nil? && @Name.nil? then
219-
raise 'Unable to process DataExtension::Row request due to CustomerKey and Name not being defined on ET_DatExtension::row'
220-
else
221-
de = ET_DataExtension.new
222-
de.authStub = @authStub
223-
de.props = ["Name","CustomerKey"]
224-
de.filter = {'Property' => 'CustomerKey','SimpleOperator' => 'equals','Value' => @Name}
225-
getResponse = de.get
226-
if getResponse.status && (getResponse.results.length == 1) then
227-
@CustomerKey = getResponse.results[0][:customer_key]
228-
else
229-
raise 'Unable to process DataExtension::Row request due to unable to find DataExtension based on Name'
230-
end
231-
end
232-
end
233-
end
234-
235-
def getName
236-
if @Name.nil? then
237-
if @CustomerKey.nil? && @Name.nil? then
238-
raise 'Unable to process DataExtension::Row request due to CustomerKey and Name not being defined on ET_DatExtension::row'
239-
else
240-
de = ET_DataExtension.new
241-
de.authStub = @authStub
242-
de.props = ["Name","CustomerKey"]
243-
de.filter = {'Property' => 'CustomerKey','SimpleOperator' => 'equals','Value' => @CustomerKey}
244-
getResponse = de.get
245-
if getResponse.status && (getResponse.results.length == 1) then
246-
@Name = getResponse.results[0][:name]
247-
else
248-
raise 'Unable to process DataExtension::Row request due to unable to find DataExtension based on CustomerKey'
249-
end
250-
end
251-
end
252-
end
253-
end
254-
end
255-
=end

lib/fuelsdk/objects.rb

+65-28
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ class Base
5656
alias props= properties= # backward compatibility
5757
alias authStub= client= # backward compatibility
5858

59+
def properties
60+
@properties = [@properties].compact unless @properties.kind_of? Array
61+
@properties
62+
end
63+
5964
def id
6065
self.class.id
6166
end
@@ -148,12 +153,12 @@ class DataExtension < Objects::Base
148153

149154

150155
def post
151-
munge_fields
156+
munge_fields self.properties
152157
super
153158
end
154159

155160
def patch
156-
munge_fields
161+
munge_fields self.properties
157162
super
158163
end
159164

@@ -182,44 +187,76 @@ class Row < Objects::Base
182187
alias CustomerKey= customer_key=
183188

184189
def id
185-
retrieve_required
186190
'DataExtensionObject'
187191
end
188192

189193
def get
194+
retrieve_required
195+
190196
super "#{id}[#{name}]"
191197
end
192198

199+
def name
200+
unless @name
201+
retrieve_required
202+
end
203+
@name
204+
end
205+
206+
def customer_key
207+
unless @customer_key
208+
retrieve_required
209+
end
210+
@customer_key
211+
end
212+
193213
def post
194-
properties = [properties] unless properties.kind_of? Array
195-
properties.each do |p|
196-
normalized = {}
197-
formatted = []
198-
p.each do |k, v|
199-
p.delete k
200-
formatted.concat client.format_attributes k => v
201-
end
202-
p['CustomerKey'] = customer_key
203-
p['Properties'] = {'Property' => formatted
204-
}
214+
munge_properties self.properties
215+
super
216+
end
217+
218+
def patch
219+
munge_properties self.properties
205220
super
206221
end
207222

208223
private
224+
def munge_properties d
225+
d.each do |o|
226+
227+
next if explicit_properties(o) && explicit_customer_key(o)
228+
229+
formatted = []
230+
o.each do |k, v|
231+
formatted.concat client.format_name_value_pairs k => v
232+
o['Properties'] = {'Property' => formatted }
233+
o['CustomerKey'] = customer_key unless explicit_customer_key o
234+
o.delete k
235+
end
236+
end
237+
end
238+
239+
def explicit_properties h
240+
h['Properties'] and h['Properties']['Property']
241+
end
242+
243+
def explicit_customer_key h
244+
h['CustomerKey']
245+
end
246+
209247
def retrieve_required
210-
if !name && !customer_key
248+
# have to use instance variables so we don't recursivelly retrieve_required
249+
if !@name && !@customer_key
211250
raise 'Unable to process DataExtension::Row ' \
212251
'request due to missing CustomerKey and Name'
213252
end
214-
if !name || !customer_key
215-
de = DataExtension.new
216-
de.client = client
217-
de.filter = {
218-
'Property' => name.nil? ? 'CustomerKey' : 'Name',
253+
if !@name || !@customer_key
254+
filter = {
255+
'Property' => @name.nil? ? 'CustomerKey' : 'Name',
219256
'SimpleOperator' => 'equals',
220-
'Value' => customer_key || name
257+
'Value' => @customer_key || @name
221258
}
222-
rsp = de.get
259+
rsp = client.soap_get 'DataExtension', ['Name', 'CustomerKey'], filter
223260
if rsp.success? && rsp.results.count == 1
224261
self.name = rsp.results.first[:name]
225262
self.customer_key = rsp.results.first[:customer_key]
@@ -232,16 +269,16 @@ def retrieve_required
232269

233270
private
234271

235-
def munge_fields
236-
if self.properties.kind_of? Array and (fields and !fields.empty?)
272+
def munge_fields d
273+
# maybe one day will make it smart enough to zip properties and fields if count is same?
274+
if d.kind_of? Array and d.count > 1 and (fields and !fields.empty?)
237275
# we could map the field to all DataExtensions, but lets make user be explicit.
238276
# if they are going to use fields attribute properties should
239277
# be a single DataExtension Defined in a Hash
240278
raise 'Unable to handle muliple DataExtension definitions and a field definition'
241279
end
242280

243-
self.properties = [self.properties] unless self.properties.kind_of? Array
244-
self.properties.each do |de|
281+
d.each do |de|
245282

246283
if (explicit_fields(de) and (de['columns'] || de['fields'] || has_fields)) or
247284
(de['columns'] and (de['fields'] || has_fields)) or
@@ -260,8 +297,8 @@ def munge_fields
260297
end
261298
end
262299

263-
def explicit_fields de
264-
de['Fields'] and de['Fields']['Field']
300+
def explicit_fields h
301+
h['Fields'] and h['Fields']['Field']
265302
end
266303

267304
def has_fields

0 commit comments

Comments
 (0)