aboutyou-sdk 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/lib/aboutyou-sdk.rb +63 -46
- data/lib/aboutyou-sdk/Client.rb +7 -0
- data/lib/aboutyou-sdk/Constants.rb +70 -35
- data/lib/aboutyou-sdk/Criteria/ProductFields.rb +77 -30
- data/lib/aboutyou-sdk/Criteria/ProductSearchCriteria.rb +442 -409
- data/lib/aboutyou-sdk/Factory/DefaultModelFactory.rb +485 -337
- data/lib/aboutyou-sdk/Model/CategoryManager/DefaultCategoryManager.rb +1 -1
- data/lib/aboutyou-sdk/Query.rb +11 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MDdiN2JjYmMwYTVkOGY2MTUwYmQ0MzdlZGNjODRiMDdkNTlmNDA0ZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NGI0M2JmOTg4MjI2ODk0YzA2NGNmOGE1ODJhNmMwM2ZiOTAzNDBiZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZTVmODJjYjM2YTI0NTg1ODk3OWU3NWU4ODc2ZjI5ZjIxZGZhY2E4N2M4ZmFk
|
10
|
+
MzkwNmQ4ZjY3NTFhOTNkYTJiNzJhZDExNjkxNzgxOTE4NDkxODM4MmMxOTVm
|
11
|
+
YmRhZDczYjE1ZTQ4ODc4MTE1ZWVlYWM4NWMwNTYwNTlhNzVhNDQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjI3Zjk2MGVkNTQxMzRlYzJjZWY0NjVkYmRmYzQyYzM2ODJlZTQ4MDg0MWJh
|
14
|
+
NGU1NWRlNDk4NmZkYTdmNjE2Nzk0MmQyNDAxYmViYTFlMjU0MDdmMTY1M2U3
|
15
|
+
MmYxMTM3ZWVmMTIwNmRiMTA5YTE0MzAzNjRlOGM5MGVlMDRmYWM=
|
data/lib/aboutyou-sdk.rb
CHANGED
@@ -2,44 +2,57 @@ require 'httparty'
|
|
2
2
|
require 'json'
|
3
3
|
require 'require_all'
|
4
4
|
|
5
|
-
require_rel
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
require_rel 'aboutyou-sdk'
|
6
|
+
|
7
|
+
###
|
8
|
+
# Provides access to the Collins Frontend Platform.
|
9
|
+
# All the public methods cover a single API query.
|
10
|
+
#
|
11
|
+
# author:: Collins GmbH & Co KG
|
12
|
+
###
|
13
13
|
class AY
|
14
|
+
|
15
|
+
# url for staging
|
14
16
|
IMAGE_URL_STAGE = 'http://mndb.staging.aboutyou.de/mmdb/file'
|
17
|
+
# url for the sandbox
|
15
18
|
IMAGE_URL_SANDBOX = 'http://mndb.sandbox.aboutyou.de/mmdb/file'
|
19
|
+
# url for live
|
16
20
|
IMAGE_URL_LIVE = 'http://cdn.aboutyou.de/file'
|
17
21
|
|
22
|
+
# the client which performs the api calls
|
18
23
|
attr_accessor :aboutYouClient
|
24
|
+
# the app id of the app which should be represented by an instance of AY
|
19
25
|
attr_accessor :appId
|
26
|
+
# the authentifaction token from dev-center for the app id
|
20
27
|
attr_accessor :appPassword
|
28
|
+
# the endpoint used for api calls
|
21
29
|
attr_accessor :apiEndPoint
|
30
|
+
# the environment which should be used by the app
|
22
31
|
attr_accessor :environment
|
32
|
+
# a logger template
|
23
33
|
attr_accessor :logger
|
34
|
+
# the model factory builds model objects based on the api response
|
24
35
|
attr_accessor :modelFactoryInstance
|
36
|
+
# the url for getting images
|
25
37
|
attr_accessor :baseImageUrl
|
38
|
+
# the session id from a user using this app
|
26
39
|
attr_accessor :sessionId
|
27
40
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
41
|
+
###
|
42
|
+
# the Constructor for the AY class
|
43
|
+
#
|
44
|
+
# * *Args* :
|
45
|
+
# - +appId+ -> The App-Id of the App
|
46
|
+
# - +appPassword+ -> The Auth-Token of the App
|
47
|
+
# - +sessionId+ -> A String containing the sessionId of the User
|
48
|
+
# - +apiEndPoint+ -> Can be either live or staging
|
49
|
+
# - +resultFactory+ -> If nil it will use the DefaultModelFactory with the DefaultFacetManager
|
50
|
+
# - +logger+ -> Logger-Template
|
51
|
+
# - +facetManagerCache+ -> The prefered Caching-Strategy
|
52
|
+
#
|
53
|
+
# * *Returns* :
|
54
|
+
# - Instance of AY
|
55
|
+
###
|
43
56
|
def initialize(
|
44
57
|
appId,
|
45
58
|
appPassword,
|
@@ -53,34 +66,40 @@ class AY
|
|
53
66
|
self.sessionId = sessionId
|
54
67
|
self.appId = appId
|
55
68
|
self.appPassword = appPassword
|
56
|
-
self.aboutYouClient = AboutYou::SDK::Client.new(
|
69
|
+
self.aboutYouClient = AboutYou::SDK::Client.new(
|
70
|
+
appId,
|
71
|
+
appPassword,
|
72
|
+
apiEndPoint,
|
73
|
+
logger
|
74
|
+
)
|
57
75
|
resultFactory ? self.modelFactoryInstance = resultFactory : initDefaultFactory(facetManagerCache)
|
58
76
|
|
59
77
|
if apiEndPoint == AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE
|
60
|
-
self.baseImageUrl=(IMAGE_URL_STAGE)
|
78
|
+
self.baseImageUrl = (IMAGE_URL_STAGE)
|
61
79
|
self.environment = AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE
|
62
80
|
elsif apiEndPoint == AboutYou::SDK::Constants::API_ENVIRONMENT_SANDBOX
|
63
|
-
self.baseImageUrl=(IMAGE_URL_SANDBOX)
|
81
|
+
self.baseImageUrl = (IMAGE_URL_SANDBOX)
|
64
82
|
self.environment = AboutYou::SDK::Constants::API_ENVIRONMENT_SANDBOX
|
65
|
-
else
|
66
|
-
self.baseImageUrl=(IMAGE_URL_LIVE)
|
83
|
+
else
|
84
|
+
self.baseImageUrl = (IMAGE_URL_LIVE)
|
67
85
|
end
|
68
86
|
end
|
69
87
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
88
|
+
###
|
89
|
+
# Adds a single item into the basket.
|
90
|
+
# You can specify an amount. Please mind, that an amount > 1 will result
|
91
|
+
# in #amount basket positions.
|
92
|
+
# So if you read out the basket again later, it's your job to
|
93
|
+
# merge the positions again.
|
94
|
+
#
|
95
|
+
# * *Args* :
|
96
|
+
# - +sessionId+ -> A String containing the sessionId of the User
|
97
|
+
# - +variantId+ -> Id of the Variant which should be added to the basket
|
98
|
+
# - +amount+ -> The Amount of the Item which should be added to the basket
|
99
|
+
#
|
100
|
+
# * *Returns* :
|
101
|
+
# - Instance of AboutYou::SDK::Model::Basket
|
102
|
+
###
|
84
103
|
def addItemToBasket(sessionId, variantId, amount = 1)
|
85
104
|
|
86
105
|
basket = AboutYou::SDK::Model::Basket.new
|
@@ -471,7 +490,7 @@ class AY
|
|
471
490
|
|
472
491
|
###
|
473
492
|
# Returns the URL to the Collins JavaScript file for helper functions
|
474
|
-
# to add product variants into the basket of
|
493
|
+
# to add product variants into the basket of AboutYou or auto-resizing
|
475
494
|
# the Iframe. This URL may be changed in future, so please use this method instead
|
476
495
|
# of hardcoding the URL into your HTML template.
|
477
496
|
#
|
@@ -520,9 +539,7 @@ class AY
|
|
520
539
|
# Setter-Method for the api endpoint
|
521
540
|
#
|
522
541
|
# * *Args* :
|
523
|
-
# - +apiEndPoint+ -> the endpoint can be the string 'stage' or 'live',
|
524
|
-
# then the default endpoints will be used or
|
525
|
-
# an absolute url
|
542
|
+
# - +apiEndPoint+ -> the endpoint can be the string 'stage' or 'live', then the default endpoints will be used or an absolute url
|
526
543
|
###
|
527
544
|
def apiEndpoint=(apiEndPoint)
|
528
545
|
|
data/lib/aboutyou-sdk/Client.rb
CHANGED
@@ -7,13 +7,20 @@ module AboutYou
|
|
7
7
|
###
|
8
8
|
class Client
|
9
9
|
|
10
|
+
# url for staging-api-requests
|
10
11
|
API_END_POINT_STAGE = 'http://shop-api.staging.aboutyou.de/api'
|
12
|
+
# url for sandbox-api-requests
|
11
13
|
API_END_POINT_SANDBOX = 'http://shop-api.sandbox.aboutyou.de/api'
|
14
|
+
# url for live-api-requests
|
12
15
|
API_END_POINT_LIVE = 'https://shop-api.aboutyou.de/api'
|
13
16
|
|
17
|
+
# the app id of the app which should be represented by an instance of AY
|
14
18
|
attr_accessor :appId
|
19
|
+
# the authentifaction token from dev-center for the app id
|
15
20
|
attr_accessor :appPassword
|
21
|
+
# the url used for api calls
|
16
22
|
attr_accessor :apiEndPoint
|
23
|
+
# the page id of the current page visited by an user
|
17
24
|
attr_accessor :pageId
|
18
25
|
|
19
26
|
|
@@ -6,43 +6,78 @@ module AboutYou
|
|
6
6
|
# Author:: Collins GmbH & Co KG
|
7
7
|
###
|
8
8
|
module Constants
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
9
|
+
|
10
|
+
# Version of the SDK
|
11
|
+
SDK_VERSION = 0.1
|
12
|
+
# Group Id for Brands
|
13
|
+
FACET_BRAND = 0
|
14
|
+
# Group Id for Color
|
15
|
+
FACET_COLOR = 1
|
16
|
+
# Group Id for Size
|
17
|
+
FACET_SIZE = 2
|
18
|
+
# Group Id for Gender/Age
|
19
|
+
FACET_GENDERAGE = 3
|
20
|
+
# Group Id for Cupsize
|
21
|
+
FACET_CUPSIZE = 4
|
22
|
+
# Group Id for Length
|
23
|
+
FACET_LENGTH = 5
|
24
|
+
# Group Id for Dimensions
|
25
|
+
FACET_DIMENSION3 = 6
|
26
|
+
# Group Id for Size-Codes
|
27
|
+
FACET_SIZE_CODE = 206
|
28
|
+
# Group Id for Size_Run
|
29
|
+
FACET_SIZE_RUN = 172
|
30
|
+
# Group Id for Clothing_Unisex_Int
|
31
|
+
FACET_CLOTHING_UNISEX_INT = 173
|
32
|
+
# Group Id for Clothing_Unisex_Inch
|
33
|
+
FACET_CLOTHING_UNISEX_INCH = 174
|
34
|
+
# Group Id for Clothing_Unisex_Eur
|
35
|
+
FACET_SHOES_UNISEX_EUR = 194
|
36
|
+
# Group Id for Clothing_Women_DE
|
37
|
+
FACET_CLOTHING_WOMEN_DE = 175
|
38
|
+
# Group Id for Clothing_Unisex_Onesize
|
39
|
+
FACET_CLOTHING_UNISEX_ONESIZE = 204
|
40
|
+
# Group Id for Shoes_Unisex_Adidas_Eur
|
41
|
+
FACET_SHOES_UNISEX_ADIDAS_EUR = 195
|
42
|
+
# Group Id for Clothing_Women_Belts_Cm
|
43
|
+
FACET_CLOTHING_WOMEN_BELTS_CM = 181
|
44
|
+
# Group Id for Clothing_Women_Inch
|
45
|
+
FACET_CLOTHING_WOMEN_INCH = 180
|
46
|
+
# Group Id for Clothing_Men_Belts_Cm
|
47
|
+
FACET_CLOTHING_MEN_BELTS_CM = 190
|
48
|
+
# Group Id for Clothing_Men_Inch
|
49
|
+
FACET_CLOTHING_MEN_INCH = 189
|
50
|
+
# Group Id for Clothing_Men_De
|
51
|
+
FACET_CLOTHING_MEN_DE = 187
|
52
|
+
# Group Id for Condition
|
53
|
+
FACET_CONDITION = 234
|
54
|
+
# Group Id for Quantity_Per_Pack
|
55
|
+
FACET_QUANTITY_PER_PACK = 263
|
56
|
+
# Group Id for Season Code
|
57
|
+
FACET_SEASON_CODE = 289
|
58
|
+
|
59
|
+
# Sort-argument passed to api for relevance
|
60
|
+
SORT_RELEVANCE = 'relevance'
|
61
|
+
# Sort-argument passed to api for last updated
|
62
|
+
SORT_UPDATED = 'updated_date'
|
63
|
+
# Sort-argument passed to api for creation date
|
64
|
+
SORT_CREATED = 'created_date'
|
65
|
+
# Sort-argument passed to api for most viewed
|
66
|
+
SORT_MOST_VIEWED = 'most_viewed'
|
67
|
+
# Sort-argument passed to api for price
|
68
|
+
SORT_PRICE = 'price'
|
33
69
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
SORT_PRICE = 'price'
|
70
|
+
# argument for api when requiring products
|
71
|
+
TYPE_PRODUCTS = 'products'
|
72
|
+
# argument for api when requiring categories
|
73
|
+
TYPE_CATEGORIES = 'categories'
|
39
74
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
75
|
+
# environment-named for api-staging
|
76
|
+
API_ENVIRONMENT_STAGE = 'stage'
|
77
|
+
# environment-named for api-sandbox
|
78
|
+
API_ENVIRONMENT_SANDBOX = 'sandbox'
|
79
|
+
# environment-named for api-live
|
80
|
+
API_ENVIRONMENT_LIVE = 'live'
|
46
81
|
end
|
47
82
|
end
|
48
83
|
end
|
@@ -1,54 +1,101 @@
|
|
1
1
|
module AboutYou
|
2
2
|
module SDK
|
3
3
|
module Criteria
|
4
|
+
###
|
5
|
+
# This class is used for the selection of certain product fields
|
6
|
+
# which should be fetched in addition when making an api call
|
7
|
+
#
|
8
|
+
# author:: Collins GmbH & Co KG
|
9
|
+
###
|
4
10
|
class ProductFields
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
IS_ACTIVE =
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
11
|
+
# id and name is set per default
|
12
|
+
|
13
|
+
#product field "is_active"
|
14
|
+
IS_ACTIVE = 'active'
|
15
|
+
#product field "brand_id"
|
16
|
+
BRAND = 'brand_id'
|
17
|
+
#product field "description_long"
|
18
|
+
DESCRIPTION_LONG = 'description_long'
|
19
|
+
#product field "description_short"
|
20
|
+
DESCRIPTION_SHORT = 'description_short'
|
21
|
+
#product field "default_variant"
|
22
|
+
DEFAULT_VARIANT = 'default_variant'
|
23
|
+
#product field "variants"
|
24
|
+
VARIANTS = 'variants'
|
25
|
+
#product field "min_price"
|
26
|
+
MIN_PRICE = 'min_price'
|
27
|
+
#product field "max_price"
|
28
|
+
MAX_PRICE = 'max_price'
|
29
|
+
#product field "sale"
|
30
|
+
IS_SALE = 'sale'
|
31
|
+
#product field "default_image"
|
32
|
+
DEFAULT_IMAGE = 'default_image'
|
33
|
+
#product field "attributes_merged"
|
34
|
+
ATTRIBUTES_MERGED = 'attributes_merged'
|
35
|
+
#product field "categories"
|
36
|
+
CATEGORIES = 'categories'
|
37
|
+
#product field "inactive_variants"
|
38
|
+
INACTIVE_VARIANTS = 'inactive_variants'
|
39
|
+
#product field "max_savings"
|
40
|
+
MAX_SAVINGS = 'max_savings'
|
41
|
+
#product field "max_savings_percentage"
|
42
|
+
MAX_SAVINGS_PERCENTAGE = 'max_savings_percentage'
|
43
|
+
#product field "tags"
|
44
|
+
TAGS = 'tags'
|
24
45
|
|
46
|
+
###
|
47
|
+
# filters a given set of fields
|
48
|
+
#
|
49
|
+
# * *Args* :
|
50
|
+
# - +fields+ -> an Array of product fields which should be filtered
|
51
|
+
#
|
52
|
+
# * *Returns* :
|
53
|
+
# - a filtered Array of product fields
|
54
|
+
###
|
25
55
|
def self.filterFields(fields)
|
26
56
|
fields = fields.uniq
|
27
57
|
|
28
58
|
# this simplifies parsing on (pre)fetching facets
|
29
|
-
if (
|
30
|
-
fields.include? ATTRIBUTES_MERGED && (
|
59
|
+
if (fields.include? ATTRIBUTES_MERGED) && (
|
31
60
|
fields.include?(BRAND) ||
|
32
61
|
fields.include?(VARIANTS) ||
|
33
62
|
fields.include?(DEFAULT_VARIANT)
|
34
63
|
)
|
35
|
-
)
|
36
64
|
fields.push(ATTRIBUTES_MERGED)
|
37
65
|
end
|
38
|
-
|
39
|
-
return fields;
|
66
|
+
fields
|
40
67
|
end
|
41
|
-
|
68
|
+
|
69
|
+
###
|
70
|
+
# determines whether the api call has to require Facets or not
|
71
|
+
#
|
72
|
+
# * *Args* :
|
73
|
+
# - +fields+ -> an Array of product fields which should be filtered
|
74
|
+
#
|
75
|
+
# * *Returns* :
|
76
|
+
# - a boolean which is true when ap call has to require facets
|
77
|
+
###
|
42
78
|
def self.requiresFacets(fields)
|
43
|
-
|
44
|
-
|
79
|
+
([BRAND,
|
80
|
+
VARIANTS,
|
81
|
+
DEFAULT_VARIANT,
|
82
|
+
ATTRIBUTES_MERGED
|
83
|
+
] & fields).count > 0
|
45
84
|
end
|
46
85
|
|
86
|
+
###
|
87
|
+
# determines whether the api call has to require Categories or not
|
88
|
+
#
|
89
|
+
# * *Args* :
|
90
|
+
# - +fields+ -> an Array of product fields which should be filtered
|
91
|
+
#
|
92
|
+
# * *Returns* :
|
93
|
+
# - a boolean which is true when ap call has to require categories
|
94
|
+
###
|
47
95
|
def self.requiresCategories(fields)
|
48
|
-
|
49
|
-
return fields.include?(CATEGORIES)
|
96
|
+
fields.include?(CATEGORIES)
|
50
97
|
end
|
51
98
|
end
|
52
99
|
end
|
53
100
|
end
|
54
|
-
end
|
101
|
+
end
|