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.
- checksums.yaml +8 -8
- data/lib/{aboutyou-sdk/CacheProvider/Dalli.rb → AboutYou/CacheProvider/dalli.rb} +18 -19
- data/lib/{aboutyou-sdk/CacheProvider/Redis.rb → AboutYou/CacheProvider/redis.rb} +19 -20
- data/lib/{aboutyou-sdk/Criteria/ProductFields.rb → AboutYou/Criteria/product_fields.rb} +25 -27
- data/lib/{aboutyou-sdk/Criteria/ProductSearchCriteria.rb → AboutYou/Criteria/product_search_criteria.rb} +128 -123
- data/lib/{aboutyou-sdk/Factory/DefaultModelFactory.rb → AboutYou/Factory/default_model_factory.rb} +267 -224
- data/lib/AboutYou/Model/Basket/abstract_basket_item.rb +57 -0
- data/lib/AboutYou/Model/Basket/basket_item.rb +95 -0
- data/lib/AboutYou/Model/Basket/basket_set.rb +199 -0
- data/lib/AboutYou/Model/Basket/basket_set_item.rb +54 -0
- data/lib/AboutYou/Model/Basket/basket_variant_item.rb +123 -0
- data/lib/{aboutyou-sdk/Model/CategoryManager/DefaultCategoryManager.rb → AboutYou/Model/CategoryManager/default_category_manager.rb} +80 -65
- data/lib/{aboutyou-sdk/Model/FacetManager/DefaultFacetManager.rb → AboutYou/Model/FacetManager/default_facet_manager.rb} +58 -50
- data/lib/{aboutyou-sdk/Model/ProductSearchResult/FacetCount.rb → AboutYou/Model/ProductSearchResult/facet_count.rb} +2 -3
- data/lib/AboutYou/Model/ProductSearchResult/facet_counts.rb +67 -0
- data/lib/{aboutyou-sdk/Model/ProductSearchResult/PriceRange.rb → AboutYou/Model/ProductSearchResult/price_range.rb} +17 -18
- data/lib/AboutYou/Model/ProductSearchResult/sale_counts.rb +79 -0
- data/lib/AboutYou/Model/ProductSearchResult/terms_count.rb +40 -0
- data/lib/{aboutyou-sdk/Model/AbstractModel.rb → AboutYou/Model/abstract_model.rb} +2 -3
- data/lib/{aboutyou-sdk/Model/App.rb → AboutYou/Model/app.rb} +15 -15
- data/lib/{aboutyou-sdk/Model/Autocomplete.rb → AboutYou/Model/autocomplete.rb} +25 -32
- data/lib/AboutYou/Model/basket.rb +235 -0
- data/lib/AboutYou/Model/categories_result.rb +24 -0
- data/lib/AboutYou/Model/category.rb +102 -0
- data/lib/AboutYou/Model/category_tree.rb +37 -0
- data/lib/AboutYou/Model/facet.rb +86 -0
- data/lib/AboutYou/Model/facet_group.rb +96 -0
- data/lib/AboutYou/Model/facet_group_set.rb +209 -0
- data/lib/AboutYou/Model/image.rb +102 -0
- data/lib/{aboutyou-sdk/Model/ImageSize.rb → AboutYou/Model/image_size.rb} +9 -5
- data/lib/AboutYou/Model/initiate_order.rb +53 -0
- data/lib/AboutYou/Model/order.rb +22 -0
- data/lib/AboutYou/Model/product.rb +353 -0
- data/lib/AboutYou/Model/product_search_result.rb +114 -0
- data/lib/AboutYou/Model/products_ean_result.rb +43 -0
- data/lib/AboutYou/Model/products_result.rb +56 -0
- data/lib/AboutYou/Model/result_error.rb +28 -0
- data/lib/AboutYou/Model/variant.rb +214 -0
- data/lib/AboutYou/Model/variants_result.rb +91 -0
- data/lib/AboutYou/client.rb +128 -0
- data/lib/{aboutyou-sdk/Constants.rb → AboutYou/constants.rb} +3 -5
- data/lib/AboutYou/query.rb +343 -0
- data/lib/AboutYou/query_builder.rb +530 -0
- data/lib/ay.rb +566 -0
- data/tests/Sinatra-test/Main.rb +3 -0
- data/tests/testAutocomplete.rb +5 -6
- data/tests/testCatFilter.rb +8 -9
- data/tests/testCatTree.rb +3 -3
- data/tests/testCategoryCaching.rb +4 -5
- data/tests/{testFacetCaching.rb → testDalliCache.rb} +4 -5
- data/tests/testFacetTypes.rb +5 -6
- data/tests/testFacets.rb +7 -8
- data/tests/testFetchFacet.rb +5 -6
- data/tests/testJavaScript.rb +3 -4
- data/tests/testProdCatLongestPath.rb +7 -8
- data/tests/testProductSearchResult.rb +6 -7
- data/tests/testProductsByEans.rb +6 -7
- data/tests/testProductsByIds.rb +6 -7
- data/tests/testRedisCache.rb +4 -5
- data/tests/testSuggest.rb +5 -6
- data/tests/testVariantsByIds.rb +7 -8
- metadata +46 -46
- data/lib/aboutyou-sdk.rb +0 -596
- data/lib/aboutyou-sdk/Client.rb +0 -134
- data/lib/aboutyou-sdk/Model/Basket.rb +0 -268
- data/lib/aboutyou-sdk/Model/Basket/AbstractBasketItem.rb +0 -76
- data/lib/aboutyou-sdk/Model/Basket/BasketItem.rb +0 -100
- data/lib/aboutyou-sdk/Model/Basket/BasketSet.rb +0 -192
- data/lib/aboutyou-sdk/Model/Basket/BasketSetItem.rb +0 -46
- data/lib/aboutyou-sdk/Model/Basket/BasketVariantItem.rb +0 -137
- data/lib/aboutyou-sdk/Model/CategoriesResult.rb +0 -15
- data/lib/aboutyou-sdk/Model/Category.rb +0 -126
- data/lib/aboutyou-sdk/Model/CategoryTree.rb +0 -35
- data/lib/aboutyou-sdk/Model/Facet.rb +0 -105
- data/lib/aboutyou-sdk/Model/FacetGroup.rb +0 -110
- data/lib/aboutyou-sdk/Model/FacetGroupSet.rb +0 -242
- data/lib/aboutyou-sdk/Model/Image.rb +0 -134
- data/lib/aboutyou-sdk/Model/InitiateOrder.rb +0 -50
- data/lib/aboutyou-sdk/Model/Order.rb +0 -17
- data/lib/aboutyou-sdk/Model/Product.rb +0 -335
- data/lib/aboutyou-sdk/Model/ProductSearchResult.rb +0 -125
- data/lib/aboutyou-sdk/Model/ProductSearchResult/FacetCounts.rb +0 -59
- data/lib/aboutyou-sdk/Model/ProductSearchResult/SaleCounts.rb +0 -71
- data/lib/aboutyou-sdk/Model/ProductSearchResult/TermsCount.rb +0 -36
- data/lib/aboutyou-sdk/Model/ProductsEansResult.rb +0 -47
- data/lib/aboutyou-sdk/Model/ProductsResult.rb +0 -52
- data/lib/aboutyou-sdk/Model/ResultError.rb +0 -24
- data/lib/aboutyou-sdk/Model/Variant.rb +0 -255
- data/lib/aboutyou-sdk/Model/VariantsResult.rb +0 -102
- data/lib/aboutyou-sdk/Query.rb +0 -350
- 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
|
-
|
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
|