aboutyou-sdk 0.0.24 → 0.0.25

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +8 -8
  2. data/lib/{aboutyou-sdk/CacheProvider/Dalli.rb → AboutYou/CacheProvider/dalli.rb} +18 -19
  3. data/lib/{aboutyou-sdk/CacheProvider/Redis.rb → AboutYou/CacheProvider/redis.rb} +19 -20
  4. data/lib/{aboutyou-sdk/Criteria/ProductFields.rb → AboutYou/Criteria/product_fields.rb} +25 -27
  5. data/lib/{aboutyou-sdk/Criteria/ProductSearchCriteria.rb → AboutYou/Criteria/product_search_criteria.rb} +128 -123
  6. data/lib/{aboutyou-sdk/Factory/DefaultModelFactory.rb → AboutYou/Factory/default_model_factory.rb} +267 -224
  7. data/lib/AboutYou/Model/Basket/abstract_basket_item.rb +57 -0
  8. data/lib/AboutYou/Model/Basket/basket_item.rb +95 -0
  9. data/lib/AboutYou/Model/Basket/basket_set.rb +199 -0
  10. data/lib/AboutYou/Model/Basket/basket_set_item.rb +54 -0
  11. data/lib/AboutYou/Model/Basket/basket_variant_item.rb +123 -0
  12. data/lib/{aboutyou-sdk/Model/CategoryManager/DefaultCategoryManager.rb → AboutYou/Model/CategoryManager/default_category_manager.rb} +80 -65
  13. data/lib/{aboutyou-sdk/Model/FacetManager/DefaultFacetManager.rb → AboutYou/Model/FacetManager/default_facet_manager.rb} +58 -50
  14. data/lib/{aboutyou-sdk/Model/ProductSearchResult/FacetCount.rb → AboutYou/Model/ProductSearchResult/facet_count.rb} +2 -3
  15. data/lib/AboutYou/Model/ProductSearchResult/facet_counts.rb +67 -0
  16. data/lib/{aboutyou-sdk/Model/ProductSearchResult/PriceRange.rb → AboutYou/Model/ProductSearchResult/price_range.rb} +17 -18
  17. data/lib/AboutYou/Model/ProductSearchResult/sale_counts.rb +79 -0
  18. data/lib/AboutYou/Model/ProductSearchResult/terms_count.rb +40 -0
  19. data/lib/{aboutyou-sdk/Model/AbstractModel.rb → AboutYou/Model/abstract_model.rb} +2 -3
  20. data/lib/{aboutyou-sdk/Model/App.rb → AboutYou/Model/app.rb} +15 -15
  21. data/lib/{aboutyou-sdk/Model/Autocomplete.rb → AboutYou/Model/autocomplete.rb} +25 -32
  22. data/lib/AboutYou/Model/basket.rb +235 -0
  23. data/lib/AboutYou/Model/categories_result.rb +24 -0
  24. data/lib/AboutYou/Model/category.rb +102 -0
  25. data/lib/AboutYou/Model/category_tree.rb +37 -0
  26. data/lib/AboutYou/Model/facet.rb +86 -0
  27. data/lib/AboutYou/Model/facet_group.rb +96 -0
  28. data/lib/AboutYou/Model/facet_group_set.rb +209 -0
  29. data/lib/AboutYou/Model/image.rb +102 -0
  30. data/lib/{aboutyou-sdk/Model/ImageSize.rb → AboutYou/Model/image_size.rb} +9 -5
  31. data/lib/AboutYou/Model/initiate_order.rb +53 -0
  32. data/lib/AboutYou/Model/order.rb +22 -0
  33. data/lib/AboutYou/Model/product.rb +353 -0
  34. data/lib/AboutYou/Model/product_search_result.rb +114 -0
  35. data/lib/AboutYou/Model/products_ean_result.rb +43 -0
  36. data/lib/AboutYou/Model/products_result.rb +56 -0
  37. data/lib/AboutYou/Model/result_error.rb +28 -0
  38. data/lib/AboutYou/Model/variant.rb +214 -0
  39. data/lib/AboutYou/Model/variants_result.rb +91 -0
  40. data/lib/AboutYou/client.rb +128 -0
  41. data/lib/{aboutyou-sdk/Constants.rb → AboutYou/constants.rb} +3 -5
  42. data/lib/AboutYou/query.rb +343 -0
  43. data/lib/AboutYou/query_builder.rb +530 -0
  44. data/lib/ay.rb +566 -0
  45. data/tests/Sinatra-test/Main.rb +3 -0
  46. data/tests/testAutocomplete.rb +5 -6
  47. data/tests/testCatFilter.rb +8 -9
  48. data/tests/testCatTree.rb +3 -3
  49. data/tests/testCategoryCaching.rb +4 -5
  50. data/tests/{testFacetCaching.rb → testDalliCache.rb} +4 -5
  51. data/tests/testFacetTypes.rb +5 -6
  52. data/tests/testFacets.rb +7 -8
  53. data/tests/testFetchFacet.rb +5 -6
  54. data/tests/testJavaScript.rb +3 -4
  55. data/tests/testProdCatLongestPath.rb +7 -8
  56. data/tests/testProductSearchResult.rb +6 -7
  57. data/tests/testProductsByEans.rb +6 -7
  58. data/tests/testProductsByIds.rb +6 -7
  59. data/tests/testRedisCache.rb +4 -5
  60. data/tests/testSuggest.rb +5 -6
  61. data/tests/testVariantsByIds.rb +7 -8
  62. metadata +46 -46
  63. data/lib/aboutyou-sdk.rb +0 -596
  64. data/lib/aboutyou-sdk/Client.rb +0 -134
  65. data/lib/aboutyou-sdk/Model/Basket.rb +0 -268
  66. data/lib/aboutyou-sdk/Model/Basket/AbstractBasketItem.rb +0 -76
  67. data/lib/aboutyou-sdk/Model/Basket/BasketItem.rb +0 -100
  68. data/lib/aboutyou-sdk/Model/Basket/BasketSet.rb +0 -192
  69. data/lib/aboutyou-sdk/Model/Basket/BasketSetItem.rb +0 -46
  70. data/lib/aboutyou-sdk/Model/Basket/BasketVariantItem.rb +0 -137
  71. data/lib/aboutyou-sdk/Model/CategoriesResult.rb +0 -15
  72. data/lib/aboutyou-sdk/Model/Category.rb +0 -126
  73. data/lib/aboutyou-sdk/Model/CategoryTree.rb +0 -35
  74. data/lib/aboutyou-sdk/Model/Facet.rb +0 -105
  75. data/lib/aboutyou-sdk/Model/FacetGroup.rb +0 -110
  76. data/lib/aboutyou-sdk/Model/FacetGroupSet.rb +0 -242
  77. data/lib/aboutyou-sdk/Model/Image.rb +0 -134
  78. data/lib/aboutyou-sdk/Model/InitiateOrder.rb +0 -50
  79. data/lib/aboutyou-sdk/Model/Order.rb +0 -17
  80. data/lib/aboutyou-sdk/Model/Product.rb +0 -335
  81. data/lib/aboutyou-sdk/Model/ProductSearchResult.rb +0 -125
  82. data/lib/aboutyou-sdk/Model/ProductSearchResult/FacetCounts.rb +0 -59
  83. data/lib/aboutyou-sdk/Model/ProductSearchResult/SaleCounts.rb +0 -71
  84. data/lib/aboutyou-sdk/Model/ProductSearchResult/TermsCount.rb +0 -36
  85. data/lib/aboutyou-sdk/Model/ProductsEansResult.rb +0 -47
  86. data/lib/aboutyou-sdk/Model/ProductsResult.rb +0 -52
  87. data/lib/aboutyou-sdk/Model/ResultError.rb +0 -24
  88. data/lib/aboutyou-sdk/Model/Variant.rb +0 -255
  89. data/lib/aboutyou-sdk/Model/VariantsResult.rb +0 -102
  90. data/lib/aboutyou-sdk/Query.rb +0 -350
  91. data/lib/aboutyou-sdk/QueryBuilder.rb +0 -499
@@ -0,0 +1,102 @@
1
+ module AboutYou
2
+ module SDK
3
+ module Model
4
+ ###
5
+ #
6
+ # This class is a represenatation of an Image model
7
+ #
8
+ ###
9
+ class Image
10
+ MIN_WIDTH = 50
11
+ MIN_HEIGHT = 50
12
+ MAX_WIDTH = 1400
13
+ MAX_HEIGHT = 2000
14
+
15
+ class << self
16
+ attr_accessor :base_url
17
+ end
18
+ # @var null|string[] */
19
+ attr_accessor :additional_items
20
+ # @var null|string */
21
+ attr_accessor :angle
22
+ # @var null|string */
23
+ attr_accessor :background
24
+ # @var null|string[] */
25
+ attr_accessor :color
26
+ # @var null|string */
27
+ attr_accessor :ext
28
+ # @var null|string */
29
+ attr_accessor :gender
30
+ # @var string */
31
+ attr_accessor :hash
32
+ # @var ImageSize */
33
+ attr_accessor :image_size
34
+ # @var integer */
35
+ attr_accessor :file_size
36
+ # @var null|string */
37
+ attr_accessor :focus
38
+ # @var string */
39
+ attr_accessor :mime_type
40
+ # @var null|\stdClass */
41
+ attr_accessor :model_data
42
+ # @var null|integer */
43
+ attr_accessor :next_detail_level
44
+ # @var null|string */
45
+ attr_accessor :preparation
46
+ # @var null|array */
47
+ attr_accessor :tags
48
+ # @var null|string */
49
+ attr_accessor :type
50
+ # @var string */
51
+ attr_accessor :view
52
+
53
+ ###
54
+ # @param \stdClass $json_object
55
+ #
56
+ # @return static
57
+ ###
58
+ def self.create_from_json(json_object)
59
+ image = new
60
+
61
+ image.additional_items = json_object['additional_items'] ? json_object['additional_items'] : nil
62
+ image.angle = json_object['angle'] ? json_object['angle'] : nil
63
+ image.background = json_object['background'] ? json_object['background'] : nil
64
+ image.color = json_object['color'] ? json_object['color'] : nil
65
+ image.ext = json_object['ext'] ? json_object['ext'] : nil
66
+ image.file_size = json_object['size'] ? json_object['size'] : 0
67
+ image.focus = json_object['focus'] ? json_object['focus'] : nil
68
+ image.gender = json_object['gender'] ? json_object['gender'] : nil
69
+ image.hash = json_object['hash'] ? json_object['hash'] : nil
70
+ image.mime_type = json_object['mime'] ? json_object['mime'] : nil
71
+ image.model_data = json_object['model_data'] ? json_object['model_data'] : nil
72
+ image.next_detail_level = json_object['next_detail_level'] ? json_object['next_detail_level'] : nil
73
+ image.preparation = json_object['preparation'] ? json_object['preparation'] : nil
74
+ image.tags = json_object['tags'] ? json_object['tags'] : nil
75
+ image.type = json_object['type'] ? json_object['type'] : nil
76
+ image.view = json_object['view'] ? json_object['view'] : nil
77
+
78
+ image.image_size = ImageSize.new(
79
+ Integer(json_object['image']['width']),
80
+ Integer(json_object['image']['height'])
81
+ )
82
+
83
+ image
84
+ end
85
+
86
+ ###
87
+ # @param int $width
88
+ # @param int $height
89
+ #
90
+ # @return string returns the relative url
91
+ ###
92
+ def url(width = 200, height = 200)
93
+ width = [[width, MAX_WIDTH].min, MIN_WIDTH].max
94
+ height = [[height, MAX_HEIGHT].min, MIN_HEIGHT].max
95
+
96
+ self.class.base_url + '/' + hash + '?width=' + String(width) +
97
+ '&height=' + String(height)
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -1,21 +1,25 @@
1
1
  module AboutYou
2
2
  module SDK
3
3
  module Model
4
+ ###
5
+ #
6
+ # This class represents the image size of an image
7
+ #
8
+ ###
4
9
  class ImageSize
5
10
  # @var integer */
6
- @width;
7
11
  attr_accessor :width
8
12
 
9
13
  # @var integer */
10
- @height;
11
14
  attr_accessor :height
12
15
 
13
16
  def initialize(width, height)
17
+ self.width = width
18
+ self.height = height
14
19
 
15
- self.width = width;
16
- self.height = height;
20
+ self
17
21
  end
18
22
  end
19
23
  end
20
24
  end
21
- end
25
+ end
@@ -0,0 +1,53 @@
1
+ module AboutYou
2
+ module SDK
3
+ module Model
4
+ ###
5
+ #
6
+ # This class represents an initiate order model
7
+ #
8
+ ###
9
+ class InitiateOrder
10
+ attr_accessor :url
11
+ attr_accessor :user_token
12
+ attr_accessor :app_token
13
+ attr_accessor :error_code
14
+ attr_accessor :error_message
15
+
16
+ ###
17
+ # @param string $url
18
+ # @param string $user_token
19
+ # @param string $app_token
20
+ ###
21
+ def initialize(url, user_token, app_token)
22
+ self.url = url
23
+ self.user_token = user_token
24
+ self.app_token = app_token
25
+
26
+ self
27
+ end
28
+
29
+ ###
30
+ # @param \stdClass $json
31
+ #
32
+ # @return static
33
+ ###
34
+ def self.create_from_json(json_object)
35
+ order = new(
36
+ json_object['url'],
37
+ json_object['user_token'],
38
+ json_object['app_token']
39
+ )
40
+
41
+ order.parse_error_result(json_object)
42
+
43
+ order
44
+ end
45
+
46
+ def parse_error_result(json_object)
47
+ self.error_code = json_object.key?('error_code') ? json_object['error_code'] : 0
48
+ self.error_message = json_object.key?('error_message') ? json_object['error_message'] : nil
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,22 @@
1
+ module AboutYou
2
+ module SDK
3
+ module Model
4
+ ###
5
+ #
6
+ # This class represents an order model
7
+ #
8
+ ###
9
+ class Order
10
+ attr_accessor :id
11
+ attr_accessor :basket
12
+
13
+ def initialize(id, basket)
14
+ self.id = id
15
+ self.basket = basket
16
+
17
+ self
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,353 @@
1
+ module AboutYou
2
+ module SDK
3
+ module Model
4
+ ###
5
+ #
6
+ # This class represents an product model
7
+ #
8
+ ###
9
+ class Product
10
+ include AbstractModel
11
+
12
+ attr_accessor :id
13
+ attr_accessor :factory
14
+ attr_accessor :name
15
+ attr_accessor :is_sale
16
+ attr_accessor :is_active
17
+ attr_accessor :description_short
18
+ attr_accessor :description_long
19
+ attr_accessor :min_price
20
+ attr_accessor :max_price
21
+ attr_accessor :max_savings_price
22
+ attr_accessor :max_savings
23
+ attr_accessor :max_savings_percentage
24
+ attr_accessor :brand_id
25
+ attr_accessor :merchant_id
26
+ attr_accessor :category_id_paths
27
+ attr_accessor :facet_ids
28
+ attr_accessor :default_image
29
+ attr_accessor :default_variant
30
+ attr_accessor :selected_variant
31
+ attr_accessor :variants
32
+ attr_accessor :inactive_variants
33
+ attr_accessor :styles
34
+ attr_accessor :facet_groups
35
+ attr_accessor :root_categories
36
+ attr_accessor :active_root_categories
37
+ attr_accessor :leaf_categories
38
+ attr_accessor :active_leaf_categories
39
+
40
+ def self.create_from_json(json_object, factory, app_id)
41
+ product = new
42
+
43
+ # these are required fields
44
+ fail 'MalformedJsonException!' unless json_object['id'] || json_object['name']
45
+
46
+ product.factory = factory
47
+
48
+ product.id = json_object['id']
49
+ product.name = json_object['name']
50
+
51
+ product.is_sale = json_object['sale'] ? json_object['sale'] : false
52
+ product.description_short = json_object['description_short'] ? json_object['description_short'] : ''
53
+ product.description_long = json_object['description_long'] ? json_object['description_long'] : ''
54
+ product.is_active = json_object['active'] ? json_object['active'] : true
55
+ product.brand_id = json_object['brand_id'] ? json_object['brand_id'] : nil
56
+ product.merchant_id = json_object['merchant_id'] ? json_object['merchant_id'] : nil
57
+
58
+ product.min_price = json_object['min_price'] ? json_object['min_price'] : nil
59
+ product.max_price = json_object['max_price'] ? json_object['max_price'] : nil
60
+ product.max_savings_price = json_object['max_savings'] ? json_object['max_savings'] : nil
61
+ product.max_savings_percentage = json_object['max_savings_percentage'] ? json_object['max_savings_percentage'] : nil
62
+
63
+ product.default_image = json_object['default_image'] ? factory.create_image(json_object['default_image']) : nil
64
+ product.default_variant = json_object['default_variant'] ? factory.create_variant(json_object['default_variant'], self) : nil
65
+
66
+ product.variants = product.parse_variants(json_object, factory, product)
67
+ product.inactive_variants = product.parse_variants(json_object, factory, product, 'inactive_variants')
68
+ product.styles = product.parse_styles(json_object, factory)
69
+
70
+ key = 'categories.' + String(app_id)
71
+ product.category_id_paths = json_object[key] ? json_object[key] : []
72
+
73
+ product.facet_ids = product.parse_facet_ids(json_object)
74
+
75
+ product
76
+ end
77
+
78
+ def parse_variants(json_object, factory, product, attribute_name = 'variants')
79
+ variants = {}
80
+
81
+ json_object[attribute_name].each do |json_variant|
82
+ variants[json_variant['id']] = factory.create_variant(
83
+ json_variant,
84
+ product
85
+ )
86
+ end if
87
+ json_object.key?(attribute_name) &&
88
+ !json_object[attribute_name].empty?
89
+
90
+ variants
91
+ end
92
+
93
+ def parse_styles(json_object, factory)
94
+ styles = []
95
+
96
+ json_object['styles'].each do |style|
97
+ styles.push(factory.create_product(style))
98
+ end if json_object.key?('styles') && !json_object['styles'].empty?
99
+
100
+ styles
101
+ end
102
+
103
+ def parse_category_id_paths(json_object)
104
+ paths = []
105
+
106
+ json_object.each do |name, category_paths|
107
+ if name.index('categories') == 0
108
+ paths = category_paths
109
+ break
110
+ end
111
+ end
112
+
113
+ paths
114
+ end
115
+
116
+ def parse_facet_ids(json_object)
117
+ ids = parse_facet_ids_in_attributes_merged(json_object)
118
+ ids = parse_facet_ids_in_variants(json_object) if ids.nil?
119
+ ids = parse_facet_ids_in_brand(json_object) if ids.nil?
120
+
121
+ !ids.nil? ? ids : []
122
+ end
123
+
124
+ def parse_facet_ids_in_attributes_merged(json_object)
125
+ return nil unless json_object['attributes_merged']
126
+
127
+ parse_attributes_json(json_object['attributes_merged'])
128
+ end
129
+
130
+ def parse_attributes_json(attributes_json_object)
131
+ ids = {}
132
+
133
+ attributes_json_object.each do |group, facet_ids|
134
+ gid = group[11..group.length] # rm prefix 'attributes'
135
+
136
+ # TODO: Remove Workaround for Ticket ???
137
+ facet_ids = Array(facet_ids)
138
+ ids[gid] = facet_ids
139
+ end
140
+
141
+ ids
142
+ end
143
+
144
+ def parse_facet_ids_in_variants(json_object)
145
+ if json_object['variants']
146
+ ids = []
147
+ json_object['variants'].each do |variant|
148
+ ids.push(parse_attributes_json(variant['attributes']))
149
+ end
150
+ ids = AboutYou::SDK::Model::FacetGroupSet.merge_facet_ids(ids)
151
+ return ids
152
+ elsif json_object['default_variant']
153
+ ids = parse_attributes_json(
154
+ json_object['default_variant']['attributes']
155
+ )
156
+ return ids
157
+ end
158
+
159
+ nil
160
+ end
161
+
162
+ def parse_facet_ids_in_brand(json_object)
163
+ return nil unless json_object['brand_id']
164
+
165
+ { '0' => [json_object['brand_id']] }
166
+ end
167
+
168
+ def generate_facet_group_set
169
+ fail 'RuntimeException! To use this method, you must add the field
170
+ ProductFields::ATTRIBUTES_MERGED to the "product search" or
171
+ "products by ids"' if facet_ids.empty?
172
+
173
+ self.facet_groups = AboutYou::SDK::Model::FacetGroupSet.new(facet_ids)
174
+ end
175
+
176
+ def facet_group_set
177
+ generate_facet_group_set unless @facet_groups
178
+
179
+ @facet_groups
180
+ end
181
+
182
+ def category(active = false)
183
+ return nil unless category_id_paths
184
+
185
+ leaf_categories(active)[leaf_categories(active).keys[0]]
186
+ end
187
+
188
+ def category_with_longest_active_path
189
+ return nil unless category_id_paths
190
+
191
+ category_id_paths.sort! { |x, y| y.count <=> x.count }.each do |path|
192
+ return factory.category_manager.category(path[-1]) if
193
+ factory.category_manager.category(path[-1]).path_active?
194
+ end
195
+
196
+ nil
197
+ end
198
+
199
+ def leaf_categories(active_only = AboutYou::SDK::Model::Category::ACTIVE_ONLY)
200
+ factory.category_manager.categories(leaf_category_ids, active_only)
201
+ end
202
+
203
+ def root_category_ids
204
+ root_category = []
205
+ category_id_paths.each do |category_id_path|
206
+ root_category.push(category_id_path[0])
207
+ end
208
+
209
+ root_category.uniq
210
+ end
211
+
212
+ def leaf_category_ids
213
+ leaf_categories = []
214
+ category_id_paths.each do |category_id_path|
215
+ leaf_categories.push(category_id_path[-1])
216
+ end
217
+
218
+ leaf_categories.uniq
219
+ end
220
+
221
+ def categories(active_only = AboutYou::SDK::Model::Category::ACTIVE_ONLY)
222
+ root_categories(active_only)
223
+ end
224
+
225
+ def root_categories(active_only = Category::ACTIVE_ONLY)
226
+ factory.category_manager.categories(root_category_ids, active_only)
227
+ end
228
+
229
+ def group_facets(group_id)
230
+ facet_group_set.group(group_id) ? group.facets : []
231
+ end
232
+
233
+ def facet_groups(group_id)
234
+ all_groups = {}
235
+
236
+ variants.each do |variant|
237
+ variant.facet_group_set.groups.each do |group|
238
+ all_groups[group.unique_key] = group if group.id == group_id
239
+ end
240
+ end
241
+
242
+ all_groups
243
+ end
244
+
245
+ def selectable_facet_groups(selected_facet_group_set)
246
+ all_groups = {}
247
+ selected_group_ids = selected_facet_group_set.group_ids
248
+
249
+ variants.each do |variant|
250
+ next if facet_group_set.contains(selected_facet_group_set)
251
+
252
+ facet_group_set = variant.facet_group_set
253
+ ids = facet_group_set.group_ids
254
+
255
+ ids.each do |group_id|
256
+ next if selected_group_ids.include?(group_id)
257
+
258
+ group = facet_group_set.group(group_id)
259
+ fail 'RuntimeException! group for id ' + group_id +
260
+ ' not found' if group.nil?
261
+
262
+ all_groups[group_id][group.unique_key] = group
263
+ end
264
+ end
265
+
266
+ selected_group_ids.each do |group_id|
267
+ ids = selected_facet_group_set.ids
268
+ ids[group_id] = nil
269
+ my_facet_group_set = AboutYou::SDK::Model::FacetGroupSet.new(ids)
270
+ variants.each do |variant|
271
+ facet_group_set = variant.facet_group_set
272
+ if facet_group_set.contains(my_facet_group_set)
273
+ group = facet_group_set.group(group_id)
274
+ all_groups[group_id][group.unique_key] = group
275
+ end
276
+ end
277
+ end
278
+
279
+ all_groups
280
+ end
281
+
282
+ def excluded_facet_groups(selected_facet_group_set)
283
+ all_groups = {}
284
+
285
+ variants.each do |variant|
286
+ next unless facet_group_set.contains(selected_facet_group_set)
287
+
288
+ facet_group_set = variant.facet_group_set
289
+ facet_group_set.group_ids.each do |group_id|
290
+ next if selected_facet_group_set.group_ids.include?(group_id)
291
+ group = facet_group_set.group(group_id)
292
+ fail 'RuntimeException! group for id ' + String(group_id) +
293
+ ' not found' if group.nil?
294
+ facets = group.facets
295
+ next unless facets
296
+
297
+ unless all_groups[group_id]
298
+ all_groups[group_id] = AboutYou::SDK::Model::FacetGroup.new(
299
+ group.id,
300
+ group.name
301
+ )
302
+ all_groups[group_id].add_facets(facets)
303
+ end
304
+ end
305
+ end
306
+
307
+ all_groups
308
+ end
309
+
310
+ def brand
311
+ facet_group_set.facet(
312
+ AboutYou::SDK::Constants::FACET_BRAND,
313
+ brand_id
314
+ )
315
+ end
316
+
317
+ def variant_by_id(variant_id)
318
+ variants[variant_id] ? variants[variant_id] : nil
319
+ end
320
+
321
+ def variants_by_ean(ean)
322
+ variants = []
323
+
324
+ variants.each do |_key, variant|
325
+ variants.push(variant) if variant.ean == ean
326
+ end
327
+
328
+ variants
329
+ end
330
+
331
+ def variant_by_facet(facet_group_set)
332
+ key = facet_group_set.unique_key
333
+ variants.each do |variant|
334
+ return variant if variant.facet_group_set.unique_key == key
335
+ end
336
+
337
+ nil
338
+ end
339
+
340
+ def variants_by_facet_id(facet_id, group_id)
341
+ variants = []
342
+
343
+ facet = AboutYou::SDK::Facet.new(facet_id, '', '', group_id, '')
344
+ self.variants.each do |variant|
345
+ variants.push(variant) if variant.facet_group_set.contains(facet)
346
+ end
347
+
348
+ variants
349
+ end
350
+ end
351
+ end
352
+ end
353
+ end