aboutyou-sdk 0.0.22 → 0.0.23
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.
- checksums.yaml +8 -8
- data/lib/aboutyou-sdk.rb +0 -3
- data/lib/aboutyou-sdk/CacheProvider/Dalli.rb +58 -0
- data/lib/aboutyou-sdk/CacheProvider/Redis.rb +58 -0
- data/lib/aboutyou-sdk/Model/AbstractModel.rb +7 -18
- data/lib/aboutyou-sdk/Model/App.rb +38 -26
- data/lib/aboutyou-sdk/Model/Autocomplete.rb +74 -63
- data/lib/aboutyou-sdk/Model/Basket.rb +243 -237
- data/lib/aboutyou-sdk/Model/CategoryManager/DefaultCategoryManager.rb +13 -1
- data/lib/aboutyou-sdk/Model/FacetManager/DefaultFacetManager.rb +14 -2
- data/lib/aboutyou-sdk/Model/ProductSearchResult/FacetCount.rb +20 -13
- data/lib/aboutyou-sdk/Model/ProductSearchResult/FacetCounts.rb +39 -18
- data/lib/aboutyou-sdk/Model/ProductSearchResult/PriceRange.rb +30 -28
- data/lib/aboutyou-sdk/Model/ProductSearchResult/SaleCounts.rb +57 -44
- data/lib/aboutyou-sdk/Model/ProductSearchResult/TermsCount.rb +27 -18
- data/lib/aboutyou-sdk/Query.rb +1 -0
- data/tests/testSaleCounts.rb +5 -0
- metadata +3 -30
@@ -1,261 +1,267 @@
|
|
1
1
|
module AboutYou
|
2
2
|
module SDK
|
3
3
|
module Model
|
4
|
+
###
|
5
|
+
# This Class represents a basket model
|
6
|
+
#
|
7
|
+
# author:: Collins GmbH & Co KG
|
8
|
+
###
|
4
9
|
class Basket
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
else
|
75
|
-
itemsMerged[key] = Hash[
|
76
|
-
'item' => item,
|
77
|
-
'price' => item.totalPrice(),
|
78
|
-
'amount' => 1
|
10
|
+
# array of items in the basket
|
11
|
+
attr_accessor :items
|
12
|
+
# errors of the basket
|
13
|
+
attr_accessor :errors
|
14
|
+
attr_accessor :uniqueVariantCount
|
15
|
+
attr_accessor :products
|
16
|
+
attr_accessor :totalPrice
|
17
|
+
attr_accessor :totalNet
|
18
|
+
attr_accessor :totalVat
|
19
|
+
attr_accessor :totalAmount
|
20
|
+
attr_accessor :deletedItems
|
21
|
+
attr_accessor :updatesItems
|
22
|
+
|
23
|
+
|
24
|
+
###
|
25
|
+
# @param object $jsonObject
|
26
|
+
# @param ModelFactoryInterface $factory
|
27
|
+
#
|
28
|
+
# @return Basket
|
29
|
+
###
|
30
|
+
def self.createFromJson(jsonObject, factory)
|
31
|
+
|
32
|
+
basket = self.new
|
33
|
+
basket.errors = Hash.new
|
34
|
+
basket.deletedItems = Hash.new
|
35
|
+
basket.updatedItems = Hash.new
|
36
|
+
basket.totalPrice = jsonObject["total_price"];
|
37
|
+
basket.totalNet = jsonObject["total_net"];
|
38
|
+
basket.totalVat = jsonObject["total_vat"]
|
39
|
+
basket.parseItems(jsonObject, factory);
|
40
|
+
basket.totalAmount = self.items.count
|
41
|
+
|
42
|
+
return basket;
|
43
|
+
end
|
44
|
+
|
45
|
+
###
|
46
|
+
# @return boolean
|
47
|
+
###
|
48
|
+
def hasErrors()
|
49
|
+
|
50
|
+
return self.errors.count > 0;
|
51
|
+
end
|
52
|
+
|
53
|
+
###
|
54
|
+
# @param $itemId
|
55
|
+
#
|
56
|
+
# @return BasketItem|BasketSet|null
|
57
|
+
###
|
58
|
+
def item(itemId)
|
59
|
+
|
60
|
+
if (self.items.key?(itemId))
|
61
|
+
return self.items[itemId]
|
62
|
+
else
|
63
|
+
return nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def collectedItems()
|
68
|
+
|
69
|
+
items = self.items;
|
70
|
+
itemsMerged = Hash.new
|
71
|
+
items.each do |item|
|
72
|
+
key = item.uniqueKey();
|
73
|
+
if (itemsMerged.key?(key))
|
74
|
+
amount = itemsMerged[key]['amount'] + 1;
|
75
|
+
itemsMerged[key] = Hash[
|
76
|
+
'item' => item,
|
77
|
+
'price' => (item.totalPrice() * amount),
|
78
|
+
'amount' => amount
|
79
79
|
]
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
###
|
87
|
-
# build order line for update query
|
88
|
-
# @return array
|
89
|
-
###
|
90
|
-
def orderLinesArray()
|
91
|
-
|
92
|
-
orderLines = Array(nil)
|
93
|
-
|
94
|
-
(self.deletedItems.uniq).each do |itemId|
|
95
|
-
orderLines.push(Hash['delete' =>itemId])
|
96
|
-
end
|
97
|
-
|
98
|
-
self.updatedItems.each do |item|
|
99
|
-
orderLines.push(item)
|
100
|
-
end
|
101
|
-
|
102
|
-
return orderLines
|
103
|
-
end
|
104
|
-
|
105
|
-
def parseItems(jsonObject, factory)
|
106
|
-
|
107
|
-
products = Hash.new
|
108
|
-
if (jsonObject["products"])
|
109
|
-
jsonObject["products"].each do |key, jsonProduct|
|
110
|
-
products[key] = factory.createProduct(jsonProduct);
|
80
|
+
else
|
81
|
+
itemsMerged[key] = Hash[
|
82
|
+
'item' => item,
|
83
|
+
'price' => item.totalPrice(),
|
84
|
+
'amount' => 1
|
85
|
+
]
|
111
86
|
end
|
112
|
-
|
113
|
-
|
114
|
-
self.products = products;
|
115
|
-
|
116
|
-
vids = Array(nil)
|
117
|
-
if (jsonObject["order_lines"])
|
118
|
-
jsonObject["order_lines"].each do |key, jsonItem|
|
119
|
-
if (jsonItem["set_items"])
|
120
|
-
item = factory.createBasketSet(jsonItem, products);
|
121
|
-
else
|
122
|
-
vids.push(jsonItem["variantId"])
|
123
|
-
item = factory.createBasketItem(jsonItem, products);
|
124
|
-
end
|
125
|
-
|
126
|
-
if (item.hasErrors)
|
127
|
-
self.errors[key] = item;
|
128
|
-
else
|
129
|
-
self.items[item.id] = item;
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
vids = vids.uniq
|
135
|
-
self.uniqueVariantCount = vids.count;
|
136
|
-
end
|
137
|
-
|
138
|
-
###
|
139
|
-
# Methods to manipulate basket
|
140
|
-
#
|
141
|
-
# this api is unstable method names and signatures may be changed in the future
|
142
|
-
###
|
143
|
-
|
144
|
-
|
145
|
-
###
|
146
|
-
# @param string $itemId
|
147
|
-
#
|
148
|
-
# @return $this
|
149
|
-
###
|
150
|
-
def deleteItem(itemId)
|
151
|
-
|
152
|
-
self.deletedItems[itemId] = itemId;
|
153
|
-
return self
|
154
|
-
end
|
155
|
-
|
156
|
-
###
|
157
|
-
# @param string[] $itemIds
|
158
|
-
#
|
159
|
-
# @return $this
|
160
|
-
###
|
161
|
-
def deleteItems(itemIds)
|
162
|
-
|
163
|
-
itemIds.each do |itemId|
|
164
|
-
self.deletedItems[itemId] = itemId
|
165
|
-
end
|
166
|
-
return self
|
167
|
-
end
|
168
|
-
|
169
|
-
###
|
170
|
-
# @return $this
|
171
|
-
###
|
172
|
-
def deleteAllItems()
|
87
|
+
end
|
173
88
|
|
174
|
-
|
89
|
+
return itemsMerged
|
90
|
+
end
|
175
91
|
|
176
|
-
|
177
|
-
|
92
|
+
###
|
93
|
+
# build order line for update query
|
94
|
+
# @return array
|
95
|
+
###
|
96
|
+
def orderLinesArray()
|
178
97
|
|
179
|
-
|
180
|
-
ids.push = item.id
|
181
|
-
end
|
182
|
-
|
183
|
-
self.deleteItems(ids)
|
184
|
-
end
|
185
|
-
|
186
|
-
return self;
|
187
|
-
end
|
188
|
-
|
189
|
-
###
|
190
|
-
# @param BasketItem $basketItem
|
191
|
-
#
|
192
|
-
# @return $this
|
193
|
-
###
|
194
|
-
def updateItem(basketItem)
|
195
|
-
|
196
|
-
item = Hash[
|
197
|
-
'id' => basketItem.id,
|
198
|
-
'variant_id' => basketItem.variantId(),
|
199
|
-
'app_id' => basketItem.appId()
|
200
|
-
]
|
201
|
-
additionalData = basketItem.additionalData();
|
202
|
-
if (additionalData)
|
203
|
-
self.checkAdditionData(additionalData);
|
204
|
-
item['additional_data'] = additionalData;
|
205
|
-
end
|
98
|
+
orderLines = Array(nil)
|
206
99
|
|
207
|
-
|
100
|
+
(self.deletedItems.uniq).each do |itemId|
|
101
|
+
orderLines.push(Hash['delete' =>itemId])
|
102
|
+
end
|
208
103
|
|
209
|
-
|
210
|
-
|
104
|
+
self.updatedItems.each do |item|
|
105
|
+
orderLines.push(item)
|
106
|
+
end
|
211
107
|
|
212
|
-
|
213
|
-
|
214
|
-
#
|
215
|
-
# @return $this
|
216
|
-
###
|
217
|
-
def updateItemSet(basketSet)
|
108
|
+
return orderLines
|
109
|
+
end
|
218
110
|
|
219
|
-
|
111
|
+
def parseItems(jsonObject, factory)
|
220
112
|
|
221
|
-
|
222
|
-
|
113
|
+
products = Hash.new
|
114
|
+
if (jsonObject["products"])
|
115
|
+
jsonObject["products"].each do |key, jsonProduct|
|
116
|
+
products[key] = factory.createProduct(jsonProduct);
|
223
117
|
end
|
118
|
+
end
|
119
|
+
|
120
|
+
self.products = products;
|
121
|
+
|
122
|
+
vids = Array(nil)
|
123
|
+
if (jsonObject["order_lines"])
|
124
|
+
jsonObject["order_lines"].each do |key, jsonItem|
|
125
|
+
if (jsonItem["set_items"])
|
126
|
+
item = factory.createBasketSet(jsonItem, products);
|
127
|
+
else
|
128
|
+
vids.push(jsonItem["variantId"])
|
129
|
+
item = factory.createBasketItem(jsonItem, products);
|
130
|
+
end
|
131
|
+
|
132
|
+
if (item.hasErrors)
|
133
|
+
self.errors[key] = item;
|
134
|
+
else
|
135
|
+
self.items[item.id] = item;
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
vids = vids.uniq
|
141
|
+
self.uniqueVariantCount = vids.count;
|
142
|
+
end
|
143
|
+
|
144
|
+
###
|
145
|
+
# Methods to manipulate basket
|
146
|
+
#
|
147
|
+
# this api is unstable method names and signatures may be changed in the future
|
148
|
+
###
|
149
|
+
|
150
|
+
|
151
|
+
###
|
152
|
+
# @param string $itemId
|
153
|
+
#
|
154
|
+
# @return $this
|
155
|
+
###
|
156
|
+
def deleteItem(itemId)
|
157
|
+
|
158
|
+
self.deletedItems[itemId] = itemId;
|
159
|
+
return self
|
160
|
+
end
|
161
|
+
|
162
|
+
###
|
163
|
+
# @param string[] $itemIds
|
164
|
+
#
|
165
|
+
# @return $this
|
166
|
+
###
|
167
|
+
def deleteItems(itemIds)
|
168
|
+
|
169
|
+
itemIds.each do |itemId|
|
170
|
+
self.deletedItems[itemId] = itemId
|
171
|
+
end
|
172
|
+
return self
|
173
|
+
end
|
174
|
+
|
175
|
+
###
|
176
|
+
# @return $this
|
177
|
+
###
|
178
|
+
def deleteAllItems()
|
179
|
+
|
180
|
+
items = self.items
|
181
|
+
|
182
|
+
if !(items.empty?)
|
183
|
+
ids = Array(nil);
|
184
|
+
|
185
|
+
items.each do |item|
|
186
|
+
ids.push = item.id
|
187
|
+
end
|
224
188
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
189
|
+
self.deleteItems(ids)
|
190
|
+
end
|
191
|
+
|
192
|
+
return self;
|
193
|
+
end
|
194
|
+
|
195
|
+
###
|
196
|
+
# @param BasketItem $basketItem
|
197
|
+
#
|
198
|
+
# @return $this
|
199
|
+
###
|
200
|
+
def updateItem(basketItem)
|
201
|
+
|
202
|
+
item = Hash[
|
203
|
+
'id' => basketItem.id,
|
204
|
+
'variant_id' => basketItem.variantId(),
|
205
|
+
'app_id' => basketItem.appId()
|
206
|
+
]
|
207
|
+
additionalData = basketItem.additionalData();
|
208
|
+
if (additionalData)
|
209
|
+
self.checkAdditionData(additionalData);
|
210
|
+
item['additional_data'] = additionalData;
|
211
|
+
end
|
212
|
+
|
213
|
+
self.updatedItems[basketItem.id] = item;
|
214
|
+
|
215
|
+
return self
|
216
|
+
end
|
217
|
+
|
218
|
+
###
|
219
|
+
# @param BasketSet $basketSet
|
220
|
+
#
|
221
|
+
# @return $this
|
222
|
+
###
|
223
|
+
def updateItemSet(basketSet)
|
224
|
+
|
225
|
+
items = basketSet.items;
|
226
|
+
|
227
|
+
if (items.empty?)
|
228
|
+
raise 'InvalidArgumentException! BasketSet needs at least one item'
|
229
|
+
end
|
230
|
+
|
231
|
+
itemSet = Array(nil);
|
232
|
+
items.each do |subItem|
|
233
|
+
item = Hash[
|
234
|
+
'variant_id' => subItem.variantId(),
|
235
|
+
'app_id' => subItem.appId()
|
236
|
+
]
|
237
|
+
additionalData = subItem.additionalData();
|
238
|
+
if (additionalData)
|
239
|
+
checkAdditionData(additionalData);
|
240
|
+
item['additional_data'] = additionalData;
|
241
|
+
end
|
242
|
+
itemSet.push = item;
|
243
|
+
end
|
238
244
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
245
|
+
self.updatedItems[basketSet.id] = Hash[
|
246
|
+
'id' => basketSet.id,
|
247
|
+
'additional_data' => basketSet.additionalData,
|
248
|
+
'set_items' => itemSet
|
249
|
+
]
|
244
250
|
|
245
|
-
|
246
|
-
|
251
|
+
return self;
|
252
|
+
end
|
247
253
|
|
248
|
-
|
249
|
-
def checkAdditionData(additionalData = nil, imageUrlRequired = false)
|
250
254
|
|
251
|
-
|
252
|
-
raise 'InvalidArgumentException! description is required in additional data'
|
253
|
-
end
|
255
|
+
def checkAdditionData(additionalData = nil, imageUrlRequired = false)
|
254
256
|
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
257
|
+
if (additionalData && !additionalData.key?('description'))
|
258
|
+
raise 'InvalidArgumentException! description is required in additional data'
|
259
|
+
end
|
260
|
+
|
261
|
+
if (additionalData.key?('internal_infos') && !(additionalData['internal_infos'].is_a? Array))
|
262
|
+
raise 'InvalidArgumentException! internal_infos must be an array'
|
263
|
+
end
|
264
|
+
end
|
259
265
|
end
|
260
266
|
end
|
261
267
|
end
|