aboutyou-sdk 0.0.9 → 0.0.10
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.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
|