aboutyou-sdk 0.0.13 → 0.0.14
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 +30 -17
- data/lib/aboutyou-sdk/Factory/DefaultModelFactory.rb +4 -1
- data/lib/aboutyou-sdk/Model/CategoryManager/DefaultCategoryManager.rb +19 -14
- data/lib/aboutyou-sdk/Model/FacetManager/DefaultFacetManager.rb +20 -21
- data/lib/aboutyou-sdk/Query.rb +1 -4
- data/tests/testCategoryCaching.rb +1 -5
- data/tests/testRedisCache.rb +31 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDBmNjhmNzliNGI3N2JjOTk4MDgxODc0NDBjNTYwZjI5N2RlNGIzZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YWZkODI5NmM1ODhhMDFiOWJkNTBmODI3ZjczYTIzYjRjZDJiMzc2OQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MDJhYjY1MGRhYjc3ZjEyOWM4YTNiZDlhMGY0YjZiOGM0Y2UxNWM5YjI1ZTQx
|
10
|
+
NzY4Y2JiMzljMDBlYzliNTVhYjY4ODNmN2ExYjQyMTlmMDBhY2M3NmUzYzBj
|
11
|
+
ZDg4YzdlOGZhNzA5Yjg0ZGZmZjdmOGE2YzQyNDc1MWM0MTE3NjI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDAxMWRlNjQyNDdkZWU4ZjU1M2I1OTQ3ZjExMTViNmEwMjFlYzA3NzcyZjg0
|
14
|
+
MDI2OTg2MmMzMmQzMTRkMmI1Y2U3NmY5ZTQxNjEyZGU5YTUzZjRjYzNiZTJi
|
15
|
+
NTAyMmYyNDUwMGZmMWE0NWM1N2E4ZTE2NDk2YTA4YmM0MTdlYzM=
|
data/lib/aboutyou-sdk.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'httparty'
|
2
2
|
require 'json'
|
3
3
|
require 'require_all'
|
4
|
+
require 'dalli'
|
5
|
+
require 'redis'
|
6
|
+
|
4
7
|
|
5
8
|
require_rel 'aboutyou-sdk'
|
6
9
|
|
@@ -60,11 +63,17 @@ class AY
|
|
60
63
|
appPassword,
|
61
64
|
sessionId = 'SESSION_ID',
|
62
65
|
cache = nil,
|
63
|
-
cacheServer=
|
66
|
+
cacheServer= nil,
|
64
67
|
apiEndPoint = AboutYou::SDK::Constants::API_ENVIRONMENT_LIVE,
|
65
68
|
resultFactory = nil,
|
66
69
|
logger = nil
|
67
|
-
|
70
|
+
)
|
71
|
+
|
72
|
+
if cacheServer == nil
|
73
|
+
cacheServer = 'localhost:11211' if cache == 'memcache'
|
74
|
+
cacheServer = {:host => "localhost", :port => 6379} if cache == 'redis'
|
75
|
+
end
|
76
|
+
|
68
77
|
self.sessionId = sessionId
|
69
78
|
self.appId = appId
|
70
79
|
self.appPassword = appPassword
|
@@ -74,21 +83,26 @@ class AY
|
|
74
83
|
apiEndPoint,
|
75
84
|
logger
|
76
85
|
)
|
86
|
+
|
87
|
+
self.cache = Dalli::Client.new(cacheServer, {:value_max_bytes => 5242880}) if cache == 'memcache'
|
88
|
+
self.cache = Redis.new(cacheServer) if cache == 'redis'
|
77
89
|
|
90
|
+
if resultFactory
|
91
|
+
self.modelFactoryInstance = resultFactory
|
92
|
+
else
|
93
|
+
initDefaultFactory(self.cache)
|
94
|
+
end
|
95
|
+
|
78
96
|
if apiEndPoint == AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE
|
79
97
|
self.baseImageUrl = (IMAGE_URL_STAGE)
|
80
98
|
self.environment = AboutYou::SDK::Constants::API_ENVIRONMENT_STAGE
|
81
99
|
elsif apiEndPoint == AboutYou::SDK::Constants::API_ENVIRONMENT_SANDBOX
|
82
100
|
self.baseImageUrl = (IMAGE_URL_SANDBOX)
|
83
101
|
self.environment = AboutYou::SDK::Constants::API_ENVIRONMENT_SANDBOX
|
84
|
-
|
102
|
+
elsif apiEndPoint == AboutYou::SDK::Constants::API_ENVIRONMENT_LIVE
|
85
103
|
self.baseImageUrl = (IMAGE_URL_LIVE)
|
104
|
+
self.environment = AboutYou::SDK::Constants::API_ENVIRONMENT_LIVE
|
86
105
|
end
|
87
|
-
if cache == 'memcache'
|
88
|
-
require 'dalli'
|
89
|
-
self.cache = Dalli::Client.new(cacheServer, {:value_max_bytes => 5242880})
|
90
|
-
end
|
91
|
-
resultFactory ? self.modelFactoryInstance = resultFactory : initDefaultFactory(self.cache)
|
92
106
|
end
|
93
107
|
|
94
108
|
###
|
@@ -561,7 +575,7 @@ class AY
|
|
561
575
|
# * *Args* :
|
562
576
|
# - +baseImageUrl+ -> nil will reset to the default url, false to get relative urls, otherwise the url prefix
|
563
577
|
###
|
564
|
-
def baseImageUrl=(baseImageUrl = nil)
|
578
|
+
def baseImageUrl= (baseImageUrl = nil)
|
565
579
|
|
566
580
|
if !baseImageUrl
|
567
581
|
@baseImageUrl = IMAGE_URL_LIVE
|
@@ -571,7 +585,7 @@ class AY
|
|
571
585
|
@baseImageUrl = ''
|
572
586
|
end
|
573
587
|
|
574
|
-
self.modelFactory.baseImageUrl=
|
588
|
+
self.modelFactory.baseImageUrl = self.baseImageUrl
|
575
589
|
end
|
576
590
|
|
577
591
|
|
@@ -582,13 +596,12 @@ class AY
|
|
582
596
|
# - +cache+ -> an Instance of the used cache [optional]
|
583
597
|
###
|
584
598
|
def initDefaultFactory(cache = nil)
|
585
|
-
|
586
|
-
|
587
|
-
|
599
|
+
self.modelFactoryInstance = AboutYou::SDK::Factory::DefaultModelFactory.new(self)
|
600
|
+
|
601
|
+
self.modelFactoryInstance.initializeManagers(
|
602
|
+
AboutYou::SDK::Model::FacetManager::DefaultFacetManager.new(cache, self.appId, self),
|
603
|
+
AboutYou::SDK::Model::CategoryManager::DefaultCategoryManager.new(cache, self.appId, self)
|
588
604
|
)
|
589
|
-
|
590
|
-
|
591
|
-
self.modelFactoryInstance=(resultFactory)
|
605
|
+
self.modelFactoryInstance.baseImageUrl=(self.baseImageUrl)
|
592
606
|
end
|
593
|
-
|
594
607
|
end
|
@@ -27,8 +27,11 @@ module AboutYou
|
|
27
27
|
# * *Returns* :
|
28
28
|
# - an instance of AboutYou::SDK::Factory::DefaultModelFactory
|
29
29
|
###
|
30
|
-
def initialize(shopApi = nil
|
30
|
+
def initialize(shopApi = nil)
|
31
31
|
self.shopApi = shopApi
|
32
|
+
end
|
33
|
+
|
34
|
+
def initializeManagers(facetManager, categoryManager)
|
32
35
|
self.categoryManager = categoryManager
|
33
36
|
self.facetManager = facetManager
|
34
37
|
AboutYou::SDK::Model::FacetGroupSet.facetManager = self.facetManager
|
@@ -20,6 +20,7 @@ module AboutYou
|
|
20
20
|
attr_accessor :cache
|
21
21
|
# the cache key for the app
|
22
22
|
attr_accessor :cacheKey
|
23
|
+
# instance of AY
|
23
24
|
attr_accessor :shopApi
|
24
25
|
|
25
26
|
###
|
@@ -43,17 +44,18 @@ module AboutYou
|
|
43
44
|
# Gets the cached Categories for this app
|
44
45
|
###
|
45
46
|
def loadCachedCategories
|
46
|
-
if self.cache
|
47
|
-
parseJson(self.cache.get(self.cacheKey), self.shopApi.modelFactoryInstance)
|
48
|
-
end
|
47
|
+
parseJson(self.cache.get(self.cacheKey), self.shopApi.modelFactoryInstance) if self.cache && self.cache.get(self.cacheKey)
|
49
48
|
end
|
50
49
|
|
51
50
|
###
|
52
51
|
# This method caches the currently read-in categories
|
53
52
|
###
|
54
53
|
def cacheCategories(jsonObject)
|
55
|
-
if self.cache
|
56
|
-
|
54
|
+
self.cache.set(self.cacheKey, jsonObject, DEFAULT_CACHE_DURATION) if self.cache.instance_of?(Dalli::Client)
|
55
|
+
if self.cache.instance_of?(Redis)
|
56
|
+
jsonObject = jsonObject.to_json unless jsonObject.is_a? String
|
57
|
+
self.cache.set(self.cacheKey, jsonObject)
|
58
|
+
self.cache.expire(self.cacheKey, DEFAULT_CACHE_DURATION)
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
@@ -61,9 +63,8 @@ module AboutYou
|
|
61
63
|
# This method clears the cache
|
62
64
|
###
|
63
65
|
def clearCache
|
64
|
-
if self.cache
|
65
|
-
|
66
|
-
end
|
66
|
+
self.cache.delete(self.cacheKey) if self.cache.instance_of?(Dalli::Client)
|
67
|
+
self.cache.del(self.cacheKey) if self.cache.instance_of?(Redis)
|
67
68
|
end
|
68
69
|
|
69
70
|
###
|
@@ -78,12 +79,16 @@ module AboutYou
|
|
78
79
|
# - Instance of AboutYou::SDK::Model::CategoryManager::DefaultCategoryManager
|
79
80
|
###
|
80
81
|
def parseJson(jsonObject, factory)
|
81
|
-
self.categories
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
jsonObject
|
86
|
-
|
82
|
+
unless self.categories
|
83
|
+
self.categories = {}
|
84
|
+
jsonObject = JSON.parse(jsonObject) if jsonObject.is_a? String
|
85
|
+
|
86
|
+
if jsonObject
|
87
|
+
self.cacheCategories(jsonObject)
|
88
|
+
self.parentChildIds = jsonObject["parent_child"]
|
89
|
+
jsonObject["ids"].each do |id, jsonCategory|
|
90
|
+
self.categories[id] = factory.createCategory(jsonCategory)
|
91
|
+
end
|
87
92
|
end
|
88
93
|
end
|
89
94
|
end
|
@@ -27,41 +27,40 @@ module AboutYou
|
|
27
27
|
self.cache = cache;
|
28
28
|
self.shopApi = shopApi
|
29
29
|
self.cacheKey = 'AY:SDK:' + String(appId) + ':facets';
|
30
|
-
self.facets = Hash.new
|
31
30
|
|
32
|
-
self.loadCachedFacets
|
31
|
+
self.loadCachedFacets
|
33
32
|
end
|
34
33
|
|
35
|
-
def loadCachedFacets
|
36
|
-
|
37
|
-
if (self.cache)
|
38
|
-
parseJson(self.cache.get(self.cacheKey), self.shopApi.modelFactoryInstance)
|
39
|
-
end
|
34
|
+
def loadCachedFacets
|
35
|
+
parseJson(self.cache.get(self.cacheKey), self.shopApi.modelFactoryInstance) if self.cache && self.cache.get(self.cacheKey)
|
40
36
|
end
|
41
37
|
|
42
38
|
def cacheFacets(jsonObject)
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
39
|
+
self.cache.set(self.cacheKey, jsonObject, DEFAULT_CACHE_DURATION) if self.cache.instance_of?(Dalli::Client)
|
40
|
+
if self.cache.instance_of?(Redis)
|
41
|
+
jsonObject = jsonObject.to_json unless jsonObject.is_a?(String)
|
42
|
+
self.cache.set(self.cacheKey, jsonObject)
|
43
|
+
self.cache.expire(self.cacheKey, DEFAULT_CACHE_DURATION)
|
44
|
+
end
|
47
45
|
end
|
48
46
|
|
49
|
-
def clearCache
|
50
|
-
|
51
|
-
|
52
|
-
self.cache.delete(self.cacheKey);
|
53
|
-
end
|
47
|
+
def clearCache
|
48
|
+
self.cache.delete(self.cacheKey) if self.cache.instance_of?(Dalli::Client)
|
49
|
+
self.cache.del(self.cacheKey) if self.cache.instance_of?(Redis)
|
54
50
|
end
|
55
51
|
|
56
52
|
def parseJson(jsonObject, factory, query=nil)
|
57
|
-
|
58
|
-
|
59
|
-
|
53
|
+
unless self.facets
|
54
|
+
jsonObject = JSON.parse(jsonObject) if jsonObject.is_a?(String)
|
55
|
+
if jsonObject
|
56
|
+
self.cacheFacets(jsonObject)
|
57
|
+
self.facets = factory.createFacetsList(jsonObject, query)
|
58
|
+
end
|
60
59
|
end
|
61
60
|
end
|
62
61
|
|
63
|
-
def isEmpty
|
64
|
-
return (self.facets.empty?)
|
62
|
+
def isEmpty
|
63
|
+
return (self.facets.empty?)
|
65
64
|
end
|
66
65
|
|
67
66
|
###
|
data/lib/aboutyou-sdk/Query.rb
CHANGED
@@ -124,14 +124,12 @@ module AboutYou
|
|
124
124
|
def fetchProductsByIds(ids,fields = [])
|
125
125
|
|
126
126
|
super(ids, fields)
|
127
|
-
|
128
127
|
if AboutYou::SDK::Criteria::ProductFields.requiresCategories(fields)
|
129
128
|
self.requireCategoryTree
|
130
129
|
end
|
131
130
|
if AboutYou::SDK::Criteria::ProductFields.requiresFacets(fields)
|
132
131
|
self.requireFacets
|
133
132
|
end
|
134
|
-
|
135
133
|
return self
|
136
134
|
end
|
137
135
|
|
@@ -193,8 +191,7 @@ module AboutYou
|
|
193
191
|
# - Instance of AboutYou::SDK::Query
|
194
192
|
###
|
195
193
|
def requireCategoryTree(fetchForced = false)
|
196
|
-
|
197
|
-
unless fetchForced || self.factory.categoryManager.isEmpty
|
194
|
+
if fetchForced || !self.factory.categoryManager.isEmpty
|
198
195
|
return self
|
199
196
|
end
|
200
197
|
|
@@ -4,11 +4,7 @@ require_relative'../lib/aboutyou-sdk.rb'
|
|
4
4
|
|
5
5
|
get "/doCache" do
|
6
6
|
shop = AY.new(281, 'e6068c4ca020262613d06122663cb300', 'sessionId', 'memcache')
|
7
|
-
shop.fetchProductsByIds(
|
8
|
-
[661132, 660971, 661367, 661361],
|
9
|
-
[AboutYou::SDK::Criteria::ProductFields::CATEGORIES,
|
10
|
-
AboutYou::SDK::Criteria::ProductFields::VARIANTS]
|
11
|
-
)
|
7
|
+
shop.fetchProductsByIds([661132, 660971, 661367, 661361], [AboutYou::SDK::Criteria::ProductFields::CATEGORIES])
|
12
8
|
end
|
13
9
|
|
14
10
|
get "/getCache" do
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
require "pry_debug"
|
3
|
+
require_relative'../lib/aboutyou-sdk.rb'
|
4
|
+
|
5
|
+
get "/doCache" do
|
6
|
+
shop = AY.new(281, 'e6068c4ca020262613d06122663cb300', 'sessionId', 'redis')
|
7
|
+
shop.fetchProductsByIds([661132, 660971, 661367, 661361], [AboutYou::SDK::Criteria::ProductFields::CATEGORIES])
|
8
|
+
end
|
9
|
+
|
10
|
+
get "/getCache" do
|
11
|
+
result = ""
|
12
|
+
shop = AY.new(281, 'e6068c4ca020262613d06122663cb300', 'sessionId', 'redis')
|
13
|
+
|
14
|
+
shop.fetchCategoryTree.categories.each do |key, cate|
|
15
|
+
result = result + cate.name + ' '
|
16
|
+
end
|
17
|
+
|
18
|
+
return result
|
19
|
+
end
|
20
|
+
|
21
|
+
get "/noCache" do
|
22
|
+
result = ""
|
23
|
+
shop = AY.new(281, 'e6068c4ca020262613d06122663cb300', 'sessionId', 'redis')
|
24
|
+
shop.cache.delete('AY:SDK:281:categories')
|
25
|
+
|
26
|
+
shop.fetchCategoryTree.categories.each do |key, cate|
|
27
|
+
result = result + cate.name + ' '
|
28
|
+
end
|
29
|
+
|
30
|
+
return result
|
31
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aboutyou-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ferenc Beutel
|
@@ -128,6 +128,7 @@ files:
|
|
128
128
|
- tests/testProductSearchResult.rb
|
129
129
|
- tests/testProductsByEans.rb
|
130
130
|
- tests/testProductsByIds.rb
|
131
|
+
- tests/testRedisCache.rb
|
131
132
|
- tests/testSuggest.rb
|
132
133
|
- tests/testVariantsByIds.rb
|
133
134
|
homepage: https://developer.aboutyou.de
|