aboutyou-sdk 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZDM2NDY3ZmIyNzA3NDQxMzJiMjUyMWQ0MjU1ZTNiYjVmNDc0NDY0OQ==
4
+ OTM0MmUzNTAxZDAzY2NiMmVhNzg4YjY1MmYzYjBhZmMzNjg3ODFlNw==
5
5
  data.tar.gz: !binary |-
6
- NGQ4Mzk1Zjk3ODJmMTU1NGJmYjViOGYxMWU4ZTVlYjNlZGU2ZDk4NQ==
6
+ ZTg2NzY5NzQ3YWQzM2Q4ZDI5MTRkOGJkOGYyZmFkYTdhMWZkMzU1NQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YjQ0ZDU5NzRmZTFkZDMzYjBhNWI0MGVlMGQxZGI0NzViZmUwOGQ5YzliM2Uy
10
- OTU2NzJhNTBmMTNmYWRiMmU3MDk1YTEzNjg3MTQzNzM2NjkyYjQxNTc2Njg2
11
- NDQ1YTlhNWE2NjdiMTMxYmRiMTA1YjQyZjE2NTdmZTIwMTU0MzY=
9
+ ZDM1NTc0ZjFmZmVlYjI0YWY0YTI1MTk2MGYyNTkwMGNiOWZmNDI1NjA0MzUx
10
+ ZWQzMGNlNjVlMzI0YjY3MTZkYTIyMmI2NjlmOGZiMzVmZjY3ZTk3NmU1YTM5
11
+ ZTk2NmM1MTM5NmRkOTkzYzk5ZWI4YzhkOGYwNzNmMGEzNzczNGQ=
12
12
  data.tar.gz: !binary |-
13
- OGU1ODc0NGMzNjhhODJiMzkyYmJhMDVmNGI4OGI2ZDRhMDFmNTU2YjVlMTNh
14
- NjI0MDc5ZTgyZjQxZjJmNTk3NmZiNjY4MmZiYmU4MDg1YmQ3ZDZiM2EzMDMz
15
- Zjg3ZDg3NTZlZGUyNTVjNjM4ZWQ4MmViM2ViZTMzM2NkMDUzMWE=
13
+ ZmE2MTI3OThmMjRlODhhMTNlNGQ1M2ExOTJmYzFhOTNjNjU0YWMzNWZmMDI4
14
+ OWEyODkyNWIyNzMwZTU2NjA2M2MwZDRmYTA4Y2MxOGNjY2JlYzM1ZjAyNjJl
15
+ ZWVhYWUyMWQ0ZGMxODIxYmU5ZmM5MmQyMzVkMGQxMGYyZjM5YmI=
data/lib/aboutyou-sdk.rb CHANGED
@@ -6,539 +6,493 @@ require_rel "aboutyou-sdk"
6
6
 
7
7
  ###
8
8
  # Provides access to the Collins Frontend Platform.
9
- # This class is abstract because it's not meant to be instanciated.
10
9
  # All the public methods cover a single API query.
11
10
  #
12
11
  # @author Collins GmbH & Co KG
13
12
  ###
14
13
  class AY
15
- IMAGE_URL_STAGE = 'http://mndb.staging.aboutyou.de/mmdb/file'
16
- IMAGE_URL_SANDBOX = 'http://mndb.sandbox.aboutyou.de/mmdb/file'
17
- IMAGE_URL_LIVE = 'http://cdn.aboutyou.de/file'
18
-
19
- attr_accessor :aboutYouClient
20
- attr_accessor :appId
21
- attr_accessor :appPassword
22
- attr_accessor :apiEndPoint
23
- attr_accessor :environment
24
- attr_accessor :logger
25
- attr_accessor :modelFactoryInstance
26
- attr_accessor :baseImageUrl
27
- attr_accessor :sessionId
28
-
29
-
30
- ###
31
- # @param string $appId
32
- # @param string $appPassword
33
- # @param string $apiEndPoint Constants::API_ENVIRONMENT_LIVE for live environment, Constants::API_ENVIRONMENT_STAGE for staging
34
- # @param ResultFactoryInterface $resultFactory if null it will use the DefaultModelFactory with the DefaultFacetManager
35
- # @param LoggerInterface $logger
36
- # @param \Aboutyou\Common\Cache\CacheMultiGet|\Doctrine\Common\Cache\CacheMultiGet $facetManagerCache
37
- ###
38
- def initialize(appId,appPassword,sessionId = 'SESSION_ID', apiEndPoint = AboutYou::SDK::Constants::API_ENVIRONMENT_LIVE, resultFactory = nil, logger = nil,facetManagerCache = nil)
39
- aboutYouClient = AboutYou::SDK::Client.new(appId, appPassword, apiEndPoint, logger)
40
-
41
- if (apiEndPoint === AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE)
42
- self.setBaseImageUrl(IMAGE_URL_STAGE)
43
- self.environment = AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE
44
- elsif (apiEndPoint === AboutYou::SDK::Constants::API_ENVIRONMENT_SANDBOX)
45
- self.setBaseImageUrl(IMAGE_URL_SANDBOX)
46
- self.environment = AboutYou::SDK::Constants::API_ENVIRONMENT_SANDBOX
47
- else
48
- self.setBaseImageUrl(IMAGE_URL_LIVE)
49
- end
50
-
51
- self.sessionId = sessionId
52
- self.appId = appId
53
- self.appPassword = appPassword
54
- self.aboutYouClient = aboutYouClient
55
- self.apiEndPoint = apiEndPoint
14
+ IMAGE_URL_STAGE = 'http://mndb.staging.aboutyou.de/mmdb/file'
15
+ IMAGE_URL_SANDBOX = 'http://mndb.sandbox.aboutyou.de/mmdb/file'
16
+ IMAGE_URL_LIVE = 'http://cdn.aboutyou.de/file'
17
+
18
+ attr_accessor :aboutYouClient
19
+ attr_accessor :appId
20
+ attr_accessor :appPassword
21
+ attr_accessor :apiEndPoint
22
+ attr_accessor :environment
23
+ attr_accessor :logger
24
+ attr_accessor :modelFactoryInstance
25
+ attr_accessor :baseImageUrl
26
+ attr_accessor :sessionId
27
+
28
+ ###
29
+ # @param apiEndPoint=>live = AboutYou::SDK::Constants::API_ENVIRONMENT_LIVE
30
+ # @param apiEndPoint=>staging = AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE
31
+ # @param resultFactory if null it will use the DefaultModelFactory with the DefaultFacetManager
32
+ ###
33
+ def initialize(appId,appPassword,sessionId = 'SESSION_ID', apiEndPoint = AboutYou::SDK::Constants::API_ENVIRONMENT_LIVE, resultFactory = nil, logger = nil,facetManagerCache = nil)
34
+
35
+ self.sessionId = sessionId
36
+ self.appId = appId
37
+ self.appPassword = appPassword
38
+ self.aboutYouClient = AboutYou::SDK::Client.new(appId, appPassword, apiEndPoint, logger)
39
+
40
+ if apiEndPoint == AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE
41
+ self.baseImageUrl=(IMAGE_URL_STAGE)
42
+ self.environment = AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE
43
+ elsif apiEndPoint == AboutYou::SDK::Constants::API_ENVIRONMENT_SANDBOX
44
+ self.baseImageUrl=(IMAGE_URL_SANDBOX)
45
+ self.environment = AboutYou::SDK::Constants::API_ENVIRONMENT_SANDBOX
46
+ else
47
+ self.baseImageUrl=(IMAGE_URL_LIVE)
56
48
  end
57
-
58
-
59
- ###
60
- # Adds a single item into the basket.
61
- # You can specify an amount. Please mind, that an amount > 1 will result in #amount basket positions.
62
- # So if you read out the basket again later, it's your job to merge the positions again.
63
- #
64
- # It is highly recommend to use the basket update method, to manage your items.
65
- #
66
- # @param string $sessionId
67
- # @param integer $variantId
68
- # @param integer $amount
69
- #
70
- # @return Basket
71
- #
72
- # @throws \InvalidArgumentException
73
- ##
74
- def addItemToBasket(sessionId, variantId, amount = 1)
75
-
76
- if (!variantId.is_a? Long)
77
-
78
- if (variantId.is_a String && variantId[/\d/])
79
- variantId = Integer(variantId);
80
- else
81
- raise 'the variant id must be an integer or string with digits'
82
- end
83
- end
84
-
85
- basket = AboutYou::SDK::Model::Basket.new()
86
-
87
- amount.times do
88
- item = AboutYou::SDK::Model::Basket::BasketItem.new(generateBasketItemId(), variantId)
89
- basket.updateItem(item)
90
- end
91
-
92
- updateBasket(sessionId, basket);
49
+ end
50
+
51
+
52
+ ###
53
+ # Adds a single item into the basket.
54
+ # You can specify an amount. Please mind, that an amount > 1 will result in #amount basket positions.
55
+ # So if you read out the basket again later, it's your job to merge the positions again.
56
+ #
57
+ # It is highly recommend to use the basket update method, to manage your items.
58
+ #
59
+ # @param string $sessionId
60
+ # @param integer $variantId
61
+ # @param integer $amount
62
+ #
63
+ # @return Basket
64
+ #
65
+ # @throws \InvalidArgumentException
66
+ ##
67
+ def addItemToBasket(sessionId, variantId, amount = 1)
68
+
69
+ basket = AboutYou::SDK::Model::Basket.new
70
+
71
+ unless variantId.is_a? Long
72
+ if variantId.is_a? String && variantId[/\d/]
73
+ variantId = Integer(variantId)
74
+ else
75
+ raise 'the variant id must be an integer or string with digits'
76
+ end
93
77
  end
94
78
 
95
-
96
- def generateBasketItemId()
97
-
98
- 'i_' + SecureRandom.uuid
99
79
 
80
+ amount.times do
81
+ basket.updateItem(AboutYou::SDK::Model::Basket::BasketItem.new(generateBasketItemId, variantId))
100
82
  end
101
83
 
102
-
103
- ###
104
- # Remove basket item.
105
- #
106
- # @param string $sessionId Free to choose ID of the current website visitor.
107
- # @param string[] $itemIds array of basket item ids to delete, this can be sets or single items
108
- #
109
- # @return \Collins\ShopApi\Model\Basket
110
- ###
111
- def removeItemsFromBasket(sessionId, itemIds)
112
-
113
- basket = AboutYou::SDK::Model::Basket.new()
114
- basket.deleteItems(itemIds)
115
-
116
- updateBasket(sessionId, basket)
84
+ updateBasket(sessionId, basket)
85
+ end
86
+
87
+
88
+ def generateBasketItemId
89
+
90
+ 'i_' + SecureRandom.uuid
91
+ end
92
+
93
+
94
+ ###
95
+ # Remove basket item.
96
+ #
97
+ # @param string $sessionId Free to choose ID of the current website visitor.
98
+ # @param string[] $itemIds array of basket item ids to delete, this can be sets or single items
99
+ #
100
+ # @return \Collins\ShopApi\Model\Basket
101
+ ###
102
+ def removeItemsFromBasket(sessionId, itemIds)
103
+
104
+ basket = AboutYou::SDK::Model::Basket.new
105
+ basket.deleteItems(itemIds)
106
+
107
+ updateBasket(sessionId, basket)
108
+ end
109
+
110
+
111
+ ###
112
+ # @param string $sessionId
113
+ # @param Basket $basket
114
+ #
115
+ # @return \Collins\ShopApi\Model\Basket
116
+ ###
117
+ def updateBasket(sessionId, basket)
118
+
119
+ query.updateBasket(sessionId, basket).executeSingle
120
+ end
121
+
122
+
123
+ ###
124
+ # @param string $sessionId the session id
125
+ # @param string $successUrl callback URL if the order was OK
126
+ # @param string $cancelUrl callback URL if the order was canceled [optional]
127
+ # @param string $errorUrl callback URL if the order had any exceptions [optional]
128
+ #
129
+ # @return \Collins\ShopApi\Model\InitiateOrder
130
+ ###
131
+ def initiateOrder(sessionId,successUrl,cancelUrl = nil,errorUrl = nil)
132
+
133
+ query.initiateOrder(sessionId, successUrl, cancelUrl, errorUrl).executeSingle
134
+ end
135
+
136
+
137
+ ###
138
+ # Returns the result of an auto completion API request.
139
+ # Auto completion searches for products and categories by
140
+ # a given prefix ($searchword).
141
+ #
142
+ # @param string $searchword The prefix search word to search for.
143
+ # @param int $limit Maximum number of results.
144
+ # @param array $types Array of types to search for (Constants::TYPE_...).
145
+ #
146
+ # @return \Collins\ShopApi\Model\Autocomplete
147
+ ###
148
+ def fetchAutocomplete(searchword, limit = 50, types = [AboutYou::SDK::Constants::TYPE_PRODUCTS, AboutYou::SDK::Constants::TYPE_CATEGORIES])
149
+
150
+ query.fetchAutocomplete(searchword, limit, types).executeSingle
151
+ end
152
+
153
+
154
+ ###
155
+ # Fetch the basket of the given sessionId.
156
+ #
157
+ # @param string $sessionId Free to choose ID of the current website visitor.
158
+ #
159
+ # @return \Collins\ShopApi\Model\Basket
160
+ #
161
+ # @throws ShopApi\Exception\MalformedJsonException
162
+ # @throws ShopApi\Exception\UnexpectedResultException
163
+ ###
164
+ def fetchBasket(sessionId)
165
+
166
+ query.fetchBasket(sessionId).executeSingle
167
+ end
168
+
169
+
170
+ ###
171
+ # Returns the result of a category search API request.
172
+ # By passing one or several category ids it will return
173
+ # a result of the categories data.
174
+ #
175
+ # @param mixed $ids either a single category ID as integer or an array of IDs
176
+ #
177
+ # @return \Collins\ShopApi\Model\CategoriesResult
178
+ ###
179
+ def fetchCategoriesByIds(ids = nil)
180
+ # we allow to pass a single ID instead of an array
181
+
182
+ if ids
183
+ ids = Array(ids)
117
184
  end
118
185
 
119
-
120
- ###
121
- # @param string $sessionId
122
- # @param Basket $basket
123
- #
124
- # @return \Collins\ShopApi\Model\Basket
125
- ###
126
- def updateBasket(sessionId, basket)
127
-
128
- query = query().updateBasket(sessionId, basket)
129
-
130
- query.executeSingle()
186
+ categoryManager = self.categoryManager
187
+ return AboutYou::SDK::Model::CategoriesResult.new(categoryManager, ids)
188
+ end
189
+
190
+
191
+ ###
192
+ # @param int $maxDepth -1 <= $maxDepth <= 10
193
+ #
194
+ # @return CategoryTree
195
+ #
196
+ # @throws ShopApi\Exception\MalformedJsonException
197
+ # @throws ShopApi\Exception\UnexpectedResultException
198
+ ###
199
+ def fetchCategoryTree
200
+
201
+ AboutYou::SDK::Model::CategoryTree.new(self.categoryManager)
202
+ end
203
+
204
+
205
+ ###
206
+ # The Categories will be fetch automatically, if required by any other fetch method
207
+ #
208
+ # For Example
209
+ # $productsResult = $api->fetchProductsByIds([12345], ['categories']);
210
+ # will fetch the categories with the same request.
211
+ # $rootCategories = $api->getCategoryManager()->getCategoryTree();
212
+ # will give you all categories for your Menu without an other request
213
+ #
214
+ # @param bool $fetchIfEmpty
215
+ #
216
+ # @return CategoryManagerInterface
217
+ ###
218
+ def categoryManager(fetchIfEmpty = true)
219
+
220
+ categoryManager = self.modelFactory.categoryManager
221
+
222
+ if fetchIfEmpty && categoryManager.isEmpty
223
+ query.requireCategoryTree.executeSingle
131
224
  end
132
225
 
133
-
134
- ###
135
- # @param string $sessionId the session id
136
- # @param string $successUrl callback URL if the order was OK
137
- # @param string $cancelUrl callback URL if the order was canceled [optional]
138
- # @param string $errorUrl callback URL if the order had any exceptions [optional]
139
- #
140
- # @return \Collins\ShopApi\Model\InitiateOrder
141
- ###
142
- def initiateOrder(sessionId,successUrl,cancelUrl = nil,errorUrl = nil)
143
-
144
- query = query().initiateOrder(sessionId, successUrl, cancelUrl, errorUrl)
145
-
146
- query.executeSingle()
147
- end
148
-
149
-
150
- ###
151
- # Returns the result of an auto completion API request.
152
- # Auto completion searches for products and categories by
153
- # a given prefix ($searchword).
154
- #
155
- # @param string $searchword The prefix search word to search for.
156
- # @param int $limit Maximum number of results.
157
- # @param array $types Array of types to search for (Constants::TYPE_...).
158
- #
159
- # @return \Collins\ShopApi\Model\Autocomplete
160
- ###
161
- def fetchAutocomplete(searchword, limit = 50, types = [AboutYou::SDK::Constants::TYPE_PRODUCTS, AboutYou::SDK::Constants::TYPE_CATEGORIES])
162
-
163
- query = query().fetchAutocomplete(searchword, limit, types)
164
-
165
- query.executeSingle()
226
+ categoryManager
227
+ end
228
+
229
+
230
+ ###
231
+ # @param integer[] $ids
232
+ # @param string[] $fields
233
+ #
234
+ # @return ProductsResult
235
+ #
236
+ # @throws ShopApi\Exception\MalformedJsonException
237
+ # @throws ShopApi\Exception\UnexpectedResultException
238
+ ###
239
+ def fetchProductsByIds(ids , fields = [])
240
+ # we allow to pass a single ID instead of an array
241
+ ids = Array(ids)
242
+ result = query.fetchProductsByIds(ids, fields).executeSingle
243
+ productsNotFound = result.getProductsNotFound
244
+
245
+ if !productsNotFound.empty? && self.logger
246
+ self.logger.warning('products not found: appid=' + self.appId + ' product ids=[' + productsNotFound.join(',') + ']')
166
247
  end
167
248
 
168
-
169
- ###
170
- # Fetch the basket of the given sessionId.
171
- #
172
- # @param string $sessionId Free to choose ID of the current website visitor.
173
- #
174
- # @return \Collins\ShopApi\Model\Basket
175
- #
176
- # @throws ShopApi\Exception\MalformedJsonException
177
- # @throws ShopApi\Exception\UnexpectedResultException
178
- ###
179
- def fetchBasket(sessionId)
180
-
181
- query = query().fetchBasket(sessionId)
249
+ result
250
+ end
251
+
252
+
253
+ ###
254
+ # @param integer[] $ids
255
+ #
256
+ # @return ShopApi\Model\VariantsResult
257
+ #
258
+ # @throws ShopApi\Exception\MalformedJsonException
259
+ # @throws ShopApi\Exception\UnexpectedResultException
260
+ ###
261
+ def fetchVariantsByIds(ids)
262
+ # we allow to pass a single ID instead of an array
263
+
264
+ ids = Array(ids)
265
+ result = query.fetchLiveVariantByIds(ids).executeSingle
266
+ variantsNotFound = result.variantsNotFound
267
+
268
+ if result.hasVariantsNotFound && self.logger
269
+ self.logger.warning('variants or products for variants not found: appid='+self.appId+' variant ids=['+variantsNotFound.join(',')+']')
270
+ end
271
+
272
+ result
273
+ end
274
+
275
+
276
+ ###
277
+ # @param string[] $eans
278
+ # @param string[] $fields
279
+ #
280
+ # @return ProductsEansResult
281
+ #
282
+ # @throws ShopApi\Exception\MalformedJsonException
283
+ # @throws ShopApi\Exception\UnexpectedResultException
284
+ ###
285
+ def fetchProductsByEans(eans,fields = [])
286
+ # we allow to pass a single ID instead of an array
287
+
288
+ eans = Array(eans)
289
+
290
+ query.fetchProductsByEans(eans, fields).executeSingle
291
+ end
292
+
293
+
294
+ ###
295
+ # @param ProductSearchCriteria $criteria
296
+ #
297
+ # @return ProductSearchResult
298
+ #
299
+ # @throws ShopApi\Exception\MalformedJsonException
300
+ # @throws ShopApi\Exception\UnexpectedResultException
301
+ ###
302
+ def fetchProductSearch(criteria)
303
+
304
+ query.fetchProductSearch(criteria).executeSingle
305
+ end
306
+
307
+
308
+ ###
309
+ # Fetch the facets of the given groupIds.
310
+ #
311
+ # @param array $groupIds The group ids.
312
+ #
313
+ # @return \Collins\ShopApi\Model\Facet[] With facet id as key.
314
+ #
315
+ # @throws ShopApi\Exception\MalformedJsonException
316
+ #@throws ShopApi\Exception\UnexpectedResultException
317
+ ###
318
+ def fetchFacets(groupIds=[])
319
+
320
+ query.fetchFacets(groupIds).executeSingle
321
+ end
322
+
323
+
324
+ def fetchFacetTypes
325
+
326
+ query.fetchFacetTypes.executeSingle
327
+ end
328
+
329
+
330
+ ###
331
+ # @param string|integer $orderId the order id
332
+ #
333
+ # @return \Collins\ShopApi\Model\Order the order
334
+ ###
335
+ def fetchOrder(orderId)
336
+
337
+ query.fetchOrder(orderId).executeSingle
338
+ end
339
+
340
+
341
+ ###
342
+ # Fetch single facets by id and group id
343
+ # For example:
344
+ # $shopApi->fetchFacet([
345
+ # ["id" => 123, "group_id" => 0 ],
346
+ # ["id" => 456, "group_id" => 0 ]
347
+ # ])
348
+ #
349
+ # @param array $params Array of (id, group_id) pairs
350
+ #
351
+ # @return \Collins\ShopApi\Model\Facet[] With facet id as key.
352
+ #
353
+ # @throws ShopApi\Exception\MalformedJsonException
354
+ # @throws ShopApi\Exception\UnexpectedResultException
355
+ ###
356
+ def fetchFacet(params)
357
+
358
+ query.fetchFacet(params).executeSingle
359
+ end
360
+
361
+
362
+ ###
363
+ # Returns the result of a suggest API request.
364
+ # Suggestions are words that are often searched together
365
+ # with the searchword you pass (e.g. "stretch" for "jeans").
366
+ #
367
+ # @param string $searchword The search string to search for.
368
+ #
369
+ # @return array
370
+ ###
371
+ def fetchSuggest(searchword)
372
+
373
+ query.fetchSuggest(searchword).executeSingle
374
+ end
375
+
376
+
377
+ ###
378
+ # Returns the list of child apps
379
+ #
380
+ # @return array
381
+ ###
382
+ def fetchChildApps
182
383
 
183
- query.executeSingle()
184
- end
185
-
186
-
187
- ###
188
- # Returns the result of a category search API request.
189
- # By passing one or several category ids it will return
190
- # a result of the categories data.
191
- #
192
- # @param mixed $ids either a single category ID as integer or an array of IDs
193
- #
194
- # @return \Collins\ShopApi\Model\CategoriesResult
195
- ###
196
- def fetchCategoriesByIds(ids = nil)
197
- # we allow to pass a single ID instead of an array
198
-
199
- if (ids != nil)
200
- ids = Array(ids)
201
- end
384
+ query.fetchChildApps.executeSingle
385
+ end
202
386
 
203
- categoryManager = self.categoryManager
204
- return AboutYou::SDK::Model::CategoriesResult.new(categoryManager, ids)
205
- end
206
-
207
387
 
208
- ###
209
- # @param int $maxDepth -1 <= $maxDepth <= 10
210
- #
211
- # @return CategoryTree
212
- #
213
- # @throws ShopApi\Exception\MalformedJsonException
214
- # @throws ShopApi\Exception\UnexpectedResultException
215
- ###
216
- def fetchCategoryTree()
217
-
218
- return AboutYou::SDK::Model::CategoryTree.new(self.categoryManager())
219
- end
220
-
221
- ###
222
- # The Categories will be fetch automatically, if required by any other fetch method
223
- #
224
- # For Example
225
- # $productsResult = $api->fetchProductsByIds([12345], ['categories']);
226
- # will fetch the categories with the same request.
227
- # $rootCategories = $api->getCategoryManager()->getCategoryTree();
228
- # will give you all categories for your Menu without an other request
229
- #
230
- # @param bool $fetchIfEmpty
231
- #
232
- # @return CategoryManagerInterface
233
- ###
234
- def categoryManager(fetchIfEmpty = true)
235
-
236
- categoryManager = self.modelFactory.categoryManager();
388
+ def query
237
389
 
238
- if (fetchIfEmpty && categoryManager.isEmpty)
239
- self.query().requireCategoryTree().executeSingle
240
- end
390
+ AboutYou::SDK::Query.new(self.aboutYouClient, modelFactory)
391
+ end
241
392
 
242
- return categoryManager;
243
- end
244
-
245
-
246
- ###
247
- # @param integer[] $ids
248
- # @param string[] $fields
249
- #
250
- # @return ProductsResult
251
- #
252
- # @throws ShopApi\Exception\MalformedJsonException
253
- # @throws ShopApi\Exception\UnexpectedResultException
254
- ###
255
- def fetchProductsByIds(ids , fields = Array(nil))
256
- # we allow to pass a single ID instead of an array
257
-
258
- ids = Array(ids)
259
- query = query().fetchProductsByIds(ids, fields)
260
- result = query.executeSingle()
261
-
262
- productsNotFound = result.getProductsNotFound()
263
- if (!productsNotFound.empty? && self.logger)
264
- self.logger.warning('products not found: appid=' + self.appId + ' product ids=[' + productsNotFound.join(',') + ']')
265
- end
266
-
267
- return result
393
+
394
+ def modelFactory
395
+
396
+ unless self.modelFactoryInstance
397
+ self.initDefaultFactory
268
398
  end
269
-
270
399
 
271
- ###
272
- # @param integer[] $ids
273
- #
274
- # @return ShopApi\Model\VariantsResult
275
- #
276
- # @throws ShopApi\Exception\MalformedJsonException
277
- # @throws ShopApi\Exception\UnexpectedResultException
278
- ###
279
- def fetchVariantsByIds(ids)
280
- # we allow to pass a single ID instead of an array
281
-
282
- ids = Array(ids)
283
- query = query().fetchLiveVariantByIds(ids)
284
-
285
- result = query.executeSingle()
286
-
287
- variantsNotFound = result.variantsNotFound()
288
- if (result.hasVariantsNotFound() && self.logger)
289
- self.logger.warning('variants or products for variants not found: appid='+self.appId+' variant ids=['+variantsNotFound.join(',')+']')
290
- end
291
-
292
- return result
293
- end
294
-
295
-
296
- ###
297
- # @param string[] $eans
298
- # @param string[] $fields
299
- #
300
- # @return ProductsEansResult
301
- #
302
- # @throws ShopApi\Exception\MalformedJsonException
303
- # @throws ShopApi\Exception\UnexpectedResultException
304
- ###
305
- def fetchProductsByEans(eans,fields = Array())
306
- # we allow to pass a single ID instead of an array
307
-
308
- eans = Array(eans)
309
-
310
- query = query().fetchProductsByEans(eans, fields)
311
-
312
- query.executeSingle()
400
+ self.modelFactoryInstance
401
+ end
402
+
403
+
404
+ ###
405
+ # @param string|nil $sessionId
406
+ #
407
+ # @return ProductSearchCriteria
408
+ ###
409
+ def productSearchCriteria(sessionId=nil)
410
+ unless sessionId
411
+ sessionId = self.sessionId
313
412
  end
314
413
 
315
-
316
- ###
317
- # @param ProductSearchCriteria $criteria
318
- #
319
- # @return ProductSearchResult
320
- #
321
- # @throws ShopApi\Exception\MalformedJsonException
322
- # @throws ShopApi\Exception\UnexpectedResultException
323
- ###
324
- def fetchProductSearch(criteria)
325
-
326
- query = query().fetchProductSearch(criteria)
327
-
328
- query.executeSingle()
329
- end
414
+ AboutYou::SDK::Criteria::ProductSearchCriteria.new(self.sessionId)
415
+ end
330
416
 
331
-
332
- ###
333
- # Fetch the facets of the given groupIds.
334
- #
335
- # @param array $groupIds The group ids.
336
- #
337
- # @return \Collins\ShopApi\Model\Facet[] With facet id as key.
338
- #
339
- # @throws ShopApi\Exception\MalformedJsonException
340
- #@throws ShopApi\Exception\UnexpectedResultException
341
- ###
342
- def fetchFacets(groupIds=Array(nil))
343
-
344
- query = query().fetchFacets(groupIds)
345
-
346
- query.executeSingle()
347
- end
348
417
 
349
-
350
- def fetchFacetTypes()
351
-
352
- query = query().fetchFacetTypes()
353
-
354
- query.executeSingle()
355
- end
418
+ ###
419
+ # Returns the URL to the Collins JavaScript file for helper functions
420
+ # to add product variants into the basket of Mary & Paul or auto-resizing
421
+ # the Iframe. This URL may be changed in future, so please use this method instead
422
+ # of hardcoding the URL into your HTML template.
423
+ #
424
+ # @return string URL to the JavaScript file
425
+ ###
426
+ def javaScriptURL
356
427
 
357
-
358
- ###
359
- # @param string|integer $orderId the order id
360
- #
361
- # @return \Collins\ShopApi\Model\Order the order
362
- ###
363
- def fetchOrder(orderId)
364
-
365
- query = query().fetchOrder(orderId)
366
-
367
- query.executeSingle()
368
- end
369
-
370
-
371
- ###
372
- # Fetch single facets by id and group id
373
- # For example:
374
- # $shopApi->fetchFacet([
375
- # ["id" => 123, "group_id" => 0 ],
376
- # ["id" => 456, "group_id" => 0 ]
377
- # ])
378
- #
379
- # @param array $params Array of (id, group_id) pairs
380
- #
381
- # @return \Collins\ShopApi\Model\Facet[] With facet id as key.
382
- #
383
- # @throws ShopApi\Exception\MalformedJsonException
384
- # @throws ShopApi\Exception\UnexpectedResultException
385
- ###
386
- def fetchFacet(params)
387
-
388
- query = query().fetchFacet(params)
389
-
390
- query.executeSingle()
428
+ if self.environment === AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE
429
+ '//devcenter-staging-www1.pub.collins.kg:81/appjs/'+String(self.appId)+'.js'
430
+ else
431
+ '//developer.aboutyou.de/appjs/'+String(self.appId)+'.js'
391
432
  end
433
+ end
392
434
 
393
-
394
- ###
395
- # Returns the result of a suggest API request.
396
- # Suggestions are words that are often searched together
397
- # with the searchword you pass (e.g. "stretch" for "jeans").
398
- #
399
- # @param string $searchword The search string to search for.
400
- #
401
- # @return array
402
- ###
403
- def fetchSuggest(searchword)
404
-
405
- query = query().fetchSuggest(searchword)
406
-
407
- query.executeSingle()
408
- end
409
435
 
410
-
411
- ###
412
- # Returns the list of child apps
413
- #
414
- # @return array
415
- ###
416
- def fetchChildApps()
417
-
418
- query = query().fetchChildApps()
436
+ ###
437
+ # Returns a HTML script tag that loads the Collins JavaScript fie.
438
+ #
439
+ # @return string HTML script tag
440
+ ###
441
+ def javaScriptTag
419
442
 
420
- query.executeSingle()
421
- end
443
+ '<script type="text/javascript" src="' + self.javaScriptURL + '"></script>'
444
+ end
422
445
 
423
-
424
- def query()
425
-
426
- AboutYou::SDK::Query.new(self.aboutYouClient, modelFactory())
427
- end
428
446
 
429
- def modelFactory()
430
-
431
- if (!self.modelFactoryInstance)
432
- self.initDefaultFactory();
433
- #elsif (self.modelFactoryInstance instanceof \Closure)
434
- # $closure = $this->modelFactoryInstance;
435
- # $closure($this);
436
- end
437
-
438
- return self.modelFactoryInstance;
439
- end
440
-
441
- ###
442
- # @param string|nil $sessionId
443
- #
444
- # @return ProductSearchCriteria
445
- ###
446
- def productSearchCriteria(sessionId=nil)
447
- if !sessionId
448
- sessionId = self.sessionId
449
- end
450
- AboutYou::SDK::Criteria::ProductSearchCriteria.new(self.sessionId)
451
- end
447
+ ###
448
+ # @param string $appId the app id for client authentication
449
+ # @param string $appPassword the app password/token for client authentication.
450
+ ###
451
+ def appCredentials=(appId, appPassword)
452
452
 
453
-
454
- ###
455
- # Returns the URL to the Collins JavaScript file for helper functions
456
- # to add product variants into the basket of Mary & Paul or auto-resizing
457
- # the Iframe. This URL may be changed in future, so please use this method instead
458
- # of hardcoding the URL into your HTML template.
459
- #
460
- # @return string URL to the JavaScript file
461
- ###
462
- def javaScriptURL()
463
-
464
- if (self.environment === AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE)
465
- '//devcenter-staging-www1.pub.collins.kg:81/appjs/'+String(self.appId)+'.js'
466
- else
467
- '//developer.aboutyou.de/appjs/'+String(self.appId)+'.js'
468
- end
453
+ self.appId = appId
454
+ self.appPassword = appPassword
455
+ self.aboutYouClient.appId= appId
456
+ self.aboutYouClient.appPassword = appPassword
457
+ end
469
458
 
470
- end
471
459
 
460
+ ###
461
+ # @param string $apiEndPoint the endpoint can be the string 'stage' or 'live',
462
+ # then the default endpoints will be used or
463
+ # an absolute url
464
+ ###
465
+ def apiEndpoint=(apiEndPoint)
472
466
 
473
- ###
474
- # Returns a HTML script tag that loads the Collins JavaScript fie.
475
- #
476
- # @return string HTML script tag
477
- ###
478
- def javaScriptTag()
479
-
480
- '<script type="text/javascript" src="' + self.javaScriptURL() + '"></script>'
481
- end
467
+ self.aboutYouClient.apiEndpoint=(apiEndPoint)
468
+ end
482
469
 
483
-
484
- ###
485
- # @param string $appId the app id for client authentication
486
- # @param string $appPassword the app password/token for client authentication.
487
- ###
488
- def setAppCredentials(appId, appPassword)
489
-
490
- self.appId = appId
491
- self.appPassword = appPassword
492
- self.aboutYouClient.setAppCredentials(appId, appPassword)
493
- end
494
470
 
495
-
496
- ###
497
- # @param string $apiEndPoint the endpoint can be the string 'stage' or 'live',
498
- # then the default endpoints will be used or
499
- # an absolute url
500
- ###
501
- def setApiEndpoint(apiEndPoint)
502
-
503
- self.aboutYouClient.setApiEndpoint(apiEndPoint)
504
- end
471
+ ###
472
+ # @param null|false|string $baseImageUrl null will reset to the default url, false to get relative urls, otherwise the url prefix
473
+ ###
474
+ def baseImageUrl=(baseImageUrl = nil)
505
475
 
506
-
507
- ###
508
- # @param string $logTemplate
509
- #
510
- # @see http://api.guzzlephp.org/class-Guzzle.Log.MessageFormatter.html
511
- ###
512
- def setLogTemplate(logTemplate)
513
-
514
- self.aboutYouClient.setLogTemplate(logTemplate)
476
+ if !baseImageUrl
477
+ @baseImageUrl = IMAGE_URL_LIVE
478
+ elsif baseImageUrl.is_a? String
479
+ @baseImageUrl = baseImageUrl.gsub(/[#{'/'}]+$/,'')
480
+ else
481
+ @baseImageUrl = ''
515
482
  end
516
-
517
-
518
- ###
519
- # @param null|false|string $baseImageUrl null will reset to the default url, false to get relative urls, otherwise the url prefix
520
- ###
521
- def setBaseImageUrl(baseImageUrl = nil)
522
-
523
- if (baseImageUrl === nil)
524
- self.baseImageUrl = IMAGE_URL_LIVE
525
- elsif (baseImageUrl.is_a? String)
526
- self.baseImageUrl = baseImageUrl.gsub(/[#{'/'}]+$/,'')
527
- else
528
- self.baseImageUrl = ''
529
- end
530
-
531
- self.modelFactory().baseImageUrl=(self.baseImageUrl);
532
- end
533
-
534
- def initDefaultFactory(cache = nil)
535
483
 
536
- categoryManager = AboutYou::SDK::Model::CategoryManager::DefaultCategoryManager.new(cache, self.appId);
537
- facetManager = AboutYou::SDK::Model::FacetManager::DefaultFacetManager.new();
484
+ self.modelFactory.baseImageUrl=(self.baseImageUrl)
485
+ end
538
486
 
539
- resultFactory = AboutYou::SDK::Factory::DefaultModelFactory.new(self,facetManager,categoryManager)
540
- resultFactory.baseImageUrl=(self.baseImageUrl);
487
+ def initDefaultFactory(cache = nil)
541
488
 
542
- self.modelFactoryInstance=(resultFactory);
543
- end
489
+ resultFactory = AboutYou::SDK::Factory::DefaultModelFactory.new(self,
490
+ AboutYou::SDK::Model::FacetManager::DefaultFacetManager.new,
491
+ AboutYou::SDK::Model::CategoryManager::DefaultCategoryManager.new(cache, self.appId)
492
+ )
493
+ resultFactory.baseImageUrl=(self.baseImageUrl)
494
+
495
+ self.modelFactoryInstance=(resultFactory)
496
+ end
497
+
544
498
  end