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,114 @@
|
|
1
|
+
module AboutYou
|
2
|
+
module SDK
|
3
|
+
module Model
|
4
|
+
###
|
5
|
+
#
|
6
|
+
# This class represents a product search result model
|
7
|
+
#
|
8
|
+
###
|
9
|
+
class ProductSearchResult
|
10
|
+
attr_accessor :products
|
11
|
+
attr_accessor :page_hash
|
12
|
+
attr_accessor :product_count
|
13
|
+
attr_accessor :sale_counts
|
14
|
+
attr_accessor :price_ranges
|
15
|
+
attr_accessor :facets
|
16
|
+
attr_accessor :categories
|
17
|
+
attr_accessor :raw_facets
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
self.products = {}
|
21
|
+
end
|
22
|
+
|
23
|
+
###
|
24
|
+
# @param \stdClass $json_object
|
25
|
+
# @param ModelFactoryInterface $factory
|
26
|
+
#
|
27
|
+
# @return static
|
28
|
+
###
|
29
|
+
def self.create_from_json(json_object, factory)
|
30
|
+
product_search_result = new
|
31
|
+
|
32
|
+
product_search_result.page_hash = json_object['page_hash']
|
33
|
+
product_search_result.product_count = json_object['product_count']
|
34
|
+
product_search_result.raw_facets = json_object['facets']
|
35
|
+
|
36
|
+
json_object['products'].each do |json_product|
|
37
|
+
product = factory.create_product(json_product)
|
38
|
+
product_search_result.products[product.id] = product
|
39
|
+
end
|
40
|
+
|
41
|
+
product_search_result.parse_facets(json_object['facets'], factory)
|
42
|
+
# free memory
|
43
|
+
json_object['categories'] = nil
|
44
|
+
json_object['prices'] = nil
|
45
|
+
json_object['sale'] = nil
|
46
|
+
|
47
|
+
product_search_result.facets = factory.create_facets_counts(
|
48
|
+
json_object
|
49
|
+
)
|
50
|
+
|
51
|
+
product_search_result
|
52
|
+
end
|
53
|
+
|
54
|
+
def parse_facets(json_object, factory)
|
55
|
+
self.categories = factory.create_categories_facets(
|
56
|
+
json_object['categories']
|
57
|
+
) if json_object['categories']
|
58
|
+
|
59
|
+
self.price_ranges = factory.create_price_ranges(
|
60
|
+
json_object['prices']
|
61
|
+
) if json_object['prices']
|
62
|
+
|
63
|
+
self.sale_counts = factory.create_sale_facet(
|
64
|
+
json_object['sale']
|
65
|
+
) if json_object['sale']
|
66
|
+
end
|
67
|
+
|
68
|
+
###
|
69
|
+
# Returns the min price in euro cent or null, if the price range was not requested/selected
|
70
|
+
#
|
71
|
+
# * @return integer|null
|
72
|
+
###
|
73
|
+
def min_price
|
74
|
+
return nil if price_ranges.empty?
|
75
|
+
|
76
|
+
price_ranges.each do |price_range|
|
77
|
+
next if price_range.product_count == 0
|
78
|
+
return price_range.min
|
79
|
+
end
|
80
|
+
|
81
|
+
price_ranges[0].min
|
82
|
+
end
|
83
|
+
|
84
|
+
###
|
85
|
+
# Returns the max price in euro cent, if the price range was not requested/selected
|
86
|
+
#
|
87
|
+
# @return integer|null
|
88
|
+
###
|
89
|
+
def max_price
|
90
|
+
return nil if price_ranges.empty?
|
91
|
+
|
92
|
+
price_ranges.reverse_each do |price_range|
|
93
|
+
next if price_range.product_count == 0
|
94
|
+
return price_range.max
|
95
|
+
end
|
96
|
+
|
97
|
+
price_ranges[-1].max
|
98
|
+
end
|
99
|
+
|
100
|
+
###
|
101
|
+
# @return Category[]
|
102
|
+
###
|
103
|
+
def category_tree
|
104
|
+
top_level_categories = []
|
105
|
+
categories.each do |category|
|
106
|
+
top_level_categories.push(category) if category.parent.nil?
|
107
|
+
end
|
108
|
+
|
109
|
+
top_level_categories
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module AboutYou
|
2
|
+
module SDK
|
3
|
+
module Model
|
4
|
+
###
|
5
|
+
#
|
6
|
+
# this class represents a products ean result model
|
7
|
+
#
|
8
|
+
###
|
9
|
+
class ProductsEansResult
|
10
|
+
attr_accessor :eans_not_found
|
11
|
+
attr_accessor :page_hash
|
12
|
+
attr_accessor :errors
|
13
|
+
attr_accessor :products
|
14
|
+
|
15
|
+
###
|
16
|
+
# @param \stdClass $json_object
|
17
|
+
# @param ModelFactoryInterface $factory
|
18
|
+
#
|
19
|
+
# @return static
|
20
|
+
###
|
21
|
+
def self.create_from_json(json_object, factory)
|
22
|
+
products_ean_result = new
|
23
|
+
products_ean_result.products = []
|
24
|
+
products_ean_result.eans_not_found = []
|
25
|
+
products_ean_result.errors = []
|
26
|
+
|
27
|
+
products_ean_result.page_hash = json_object['page_hash'] ? json_object['page_hash'] : nil
|
28
|
+
|
29
|
+
json_object['eans'].each do |json_product|
|
30
|
+
if json_product['error_code']
|
31
|
+
products_ean_result.errors.push(json_product)
|
32
|
+
products_ean_result.eans_not_found.push(json_product['ean'])
|
33
|
+
next
|
34
|
+
end
|
35
|
+
products_ean_result.products.push(factory.create_product(json_product))
|
36
|
+
end if json_object['eans']
|
37
|
+
|
38
|
+
products_ean_result
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module AboutYou
|
2
|
+
module SDK
|
3
|
+
module Model
|
4
|
+
###
|
5
|
+
#
|
6
|
+
# This class represents a products result model
|
7
|
+
#
|
8
|
+
###
|
9
|
+
class ProductsResult
|
10
|
+
include AbstractModel
|
11
|
+
|
12
|
+
attr_accessor :ids_not_found
|
13
|
+
attr_accessor :page_hash
|
14
|
+
attr_accessor :errors
|
15
|
+
attr_accessor :products
|
16
|
+
|
17
|
+
###
|
18
|
+
# @param \stdClass $json_object
|
19
|
+
# @param ModelFactoryInterface $factory
|
20
|
+
#
|
21
|
+
# @return static
|
22
|
+
###
|
23
|
+
def self.create_from_json(json_object, factory)
|
24
|
+
products_result = new
|
25
|
+
|
26
|
+
products_result.page_hash = json_object['page_hash'] ? json_object['page_hash'] : nil
|
27
|
+
products_result.errors = []
|
28
|
+
products_result.ids_not_found = []
|
29
|
+
products_result.products = {}
|
30
|
+
|
31
|
+
if json_object['ids']
|
32
|
+
json_object['ids'].each do |key, json_product|
|
33
|
+
if json_product['error_code']
|
34
|
+
products_result.ids_not_found.push(key)
|
35
|
+
products_result.errors.push(json_product)
|
36
|
+
next
|
37
|
+
end
|
38
|
+
products_result.products[Integer(key)] = factory.create_product(
|
39
|
+
json_product
|
40
|
+
)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
products_result
|
45
|
+
end
|
46
|
+
|
47
|
+
###
|
48
|
+
# @return integer[] array of product ids
|
49
|
+
###
|
50
|
+
def products_not_found
|
51
|
+
ids_not_found
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module AboutYou
|
2
|
+
module SDK
|
3
|
+
module Model
|
4
|
+
###
|
5
|
+
#
|
6
|
+
# This class represents an result error model
|
7
|
+
#
|
8
|
+
###
|
9
|
+
module ResultError
|
10
|
+
attr_accessor :error_ident
|
11
|
+
attr_accessor :error_code
|
12
|
+
attr_accessor :error_message
|
13
|
+
|
14
|
+
def initialize(json_object)
|
15
|
+
parse_error_result(json_object)
|
16
|
+
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def parse_error_result(json_object)
|
21
|
+
self.error_ident = json_object.key?('error_ident') ? String(json_object['error_ident']) : nil
|
22
|
+
self.error_code = json_object.key?('error_code') ? Integer(json_object['error_code']) : 0
|
23
|
+
self.error_message = json_object.key?('error_message') ? json_object['error_message'] : nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,214 @@
|
|
1
|
+
module AboutYou
|
2
|
+
module SDK
|
3
|
+
module Model
|
4
|
+
###
|
5
|
+
#
|
6
|
+
# This class represents a variant model
|
7
|
+
#
|
8
|
+
###
|
9
|
+
class Variant
|
10
|
+
include AbstractModel
|
11
|
+
|
12
|
+
attr_accessor :factory
|
13
|
+
attr_accessor :product
|
14
|
+
attr_accessor :id
|
15
|
+
attr_accessor :images
|
16
|
+
attr_accessor :selected_image
|
17
|
+
attr_accessor :about_number
|
18
|
+
attr_accessor :facet_groups
|
19
|
+
attr_accessor :ean
|
20
|
+
attr_accessor :is_default
|
21
|
+
attr_accessor :price
|
22
|
+
attr_accessor :old_price
|
23
|
+
attr_accessor :retail_price
|
24
|
+
attr_accessor :additional_info
|
25
|
+
attr_accessor :quantity
|
26
|
+
attr_accessor :facet_ids
|
27
|
+
attr_accessor :first_active_date
|
28
|
+
attr_accessor :first_sale_date
|
29
|
+
attr_accessor :created_date
|
30
|
+
attr_accessor :updated_date
|
31
|
+
attr_accessor :color
|
32
|
+
attr_accessor :length
|
33
|
+
attr_accessor :season_code
|
34
|
+
|
35
|
+
###
|
36
|
+
# @param \stdClass $json_object
|
37
|
+
# @param ModelFactoryInterface $factory
|
38
|
+
# @param Product $product
|
39
|
+
#
|
40
|
+
# @return static
|
41
|
+
###
|
42
|
+
def self.create_from_json(json_object, factory, product)
|
43
|
+
fail 'MalformedJsonException' unless json_object['id']
|
44
|
+
|
45
|
+
variant = new
|
46
|
+
variant.factory = factory
|
47
|
+
variant.product = product
|
48
|
+
|
49
|
+
variant.images = variant.parse_images(json_object['images'])
|
50
|
+
# free memory
|
51
|
+
json_object['images'] = nil
|
52
|
+
|
53
|
+
variant.id = json_object['id']
|
54
|
+
variant.about_number = (json_object['about_number']) ? json_object['about_number'] : nil
|
55
|
+
variant.ean = (json_object['ean']) ? json_object['ean'] : nil
|
56
|
+
variant.is_default = (json_object['default']) ? json_object['default'] : nil
|
57
|
+
variant.price = (json_object['price']) ? json_object['price'] : nil
|
58
|
+
variant.old_price = (json_object['old_price']) ? json_object['old_price'] : nil
|
59
|
+
variant.retail_price = (json_object['retail_price']) ? json_object['retail_price'] : nil
|
60
|
+
variant.additional_info = (json_object['additional_info']) ? json_object['additional_info'] : nil
|
61
|
+
variant.quantity = (json_object['quantity']) ? json_object['quantity'] : 0
|
62
|
+
variant.first_active_date = (json_object['first_active_date']) ? json_object['first_active_date'] : nil
|
63
|
+
variant.first_sale_date = (json_object['first_sale_date']) ? json_object['first_sale_date'] : nil
|
64
|
+
variant.created_date = (json_object['created_date']) ? json_object['created_date'] : nil
|
65
|
+
variant.updated_date = (json_object['updated_date']) ? json_object['updated_date'] : nil
|
66
|
+
|
67
|
+
variant.facet_ids = variant.parse_facet_ids(json_object)
|
68
|
+
variant.facet_groups = variant.generate_facet_group_set(json_object)
|
69
|
+
variant.color = variant.facet_group(AboutYou::SDK::Constants::FACET_COLOR)
|
70
|
+
variant.length = variant.facet_group(AboutYou::SDK::Constants::FACET_LENGTH)
|
71
|
+
variant.season_code = variant.facet_group(AboutYou::SDK::Constants::FACET_SEASON_CODE)
|
72
|
+
|
73
|
+
variant
|
74
|
+
end
|
75
|
+
|
76
|
+
def parse_images(image_json)
|
77
|
+
image_array = []
|
78
|
+
image_json.each do |image|
|
79
|
+
image_array.push(factory.create_image(image))
|
80
|
+
end if image_json
|
81
|
+
|
82
|
+
image_array
|
83
|
+
end
|
84
|
+
|
85
|
+
###
|
86
|
+
# Get image by given hash.
|
87
|
+
#
|
88
|
+
# @param string $hash The image hash.
|
89
|
+
#
|
90
|
+
# @return Image
|
91
|
+
###
|
92
|
+
def image_by_hash(hash)
|
93
|
+
images.each do |image|
|
94
|
+
return image if image.hash == hash
|
95
|
+
end
|
96
|
+
|
97
|
+
nil
|
98
|
+
end
|
99
|
+
|
100
|
+
###
|
101
|
+
# Select a specific image.
|
102
|
+
#
|
103
|
+
# @param string $hash The image hash or null for default image.
|
104
|
+
#
|
105
|
+
# @return void
|
106
|
+
#
|
107
|
+
# @depracted
|
108
|
+
###
|
109
|
+
def select_image(hash = nil)
|
110
|
+
if hash
|
111
|
+
self.selected_image = image_by_hash(hash)
|
112
|
+
true
|
113
|
+
else
|
114
|
+
self.selected_image = nil
|
115
|
+
false
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
###
|
120
|
+
# Get selected or default image.
|
121
|
+
#
|
122
|
+
# @return Image
|
123
|
+
###
|
124
|
+
def image
|
125
|
+
if selected_image
|
126
|
+
return selected_image
|
127
|
+
elsif images[0]
|
128
|
+
return images[0]
|
129
|
+
end
|
130
|
+
|
131
|
+
nil
|
132
|
+
end
|
133
|
+
|
134
|
+
def parse_facet_ids(json_object)
|
135
|
+
ids = {}
|
136
|
+
|
137
|
+
json_object['attributes'].each do |group, attribute_ids|
|
138
|
+
group_id = group[11..group.length] # rm prefix 'attributs_'
|
139
|
+
ids[Integer(group_id)] = attribute_ids
|
140
|
+
end unless json_object['attributes'].empty?
|
141
|
+
|
142
|
+
ids
|
143
|
+
end
|
144
|
+
|
145
|
+
def generate_facet_group_set(json_object)
|
146
|
+
ids = parse_facet_ids(json_object)
|
147
|
+
self.facet_groups = AboutYou::SDK::Model::FacetGroupSet.new(ids)
|
148
|
+
end
|
149
|
+
|
150
|
+
###
|
151
|
+
# @param integer $group_id
|
152
|
+
#
|
153
|
+
# @return FacetGroup|null
|
154
|
+
###
|
155
|
+
def facet_group(group_id)
|
156
|
+
facet_groups.group(group_id)
|
157
|
+
end
|
158
|
+
|
159
|
+
###
|
160
|
+
# @return FacetGroup|null
|
161
|
+
###
|
162
|
+
def size
|
163
|
+
###
|
164
|
+
# @todo: Instance level caching
|
165
|
+
###
|
166
|
+
group_id = size_group_id
|
167
|
+
facet_group(group_id) unless group_id.empty?
|
168
|
+
end
|
169
|
+
|
170
|
+
###
|
171
|
+
# @return integer|null
|
172
|
+
###
|
173
|
+
def size_group_id
|
174
|
+
keys = {}
|
175
|
+
groups = facet_groups.groups
|
176
|
+
size_run = facet_group(AboutYou::SDK::Constants::FACET_SIZE_RUN)
|
177
|
+
|
178
|
+
groups.each do |group|
|
179
|
+
keys[group.name] = group.group_id
|
180
|
+
end if groups.is_a?(Array)
|
181
|
+
|
182
|
+
size_run.facets.each do |facet|
|
183
|
+
group_name = facet.value
|
184
|
+
return keys[group_name] if keys.key?(group_name)
|
185
|
+
end unless size_run.empty?
|
186
|
+
|
187
|
+
return keys['size'] if keys.key?('size')
|
188
|
+
|
189
|
+
return keys['size_run'] if keys.key?('size_run')
|
190
|
+
|
191
|
+
nil
|
192
|
+
end
|
193
|
+
|
194
|
+
###
|
195
|
+
# Returns the quantity per pack for this variant.
|
196
|
+
# By default, this returns 1. But some items can have a bigger number.
|
197
|
+
#
|
198
|
+
# @return int quantity per pack
|
199
|
+
###
|
200
|
+
def quantity_per_pack
|
201
|
+
facet_group = facet_group(
|
202
|
+
AboutYou::SDK::Constants::FACET_QUANTITY_PER_PACK
|
203
|
+
)
|
204
|
+
return 1 unless facet_group
|
205
|
+
|
206
|
+
facets = facet_group.facets
|
207
|
+
return 1 unless facets
|
208
|
+
|
209
|
+
facets[0].value
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|