cloudcms-server 3.3.1-beta.8 → 4.0.0-beta.1

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.
Files changed (109) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/broadcast/broadcast.js +6 -3
  4. package/broadcast/providers/redis.js +24 -49
  5. package/clients/nrp.js +117 -0
  6. package/clients/redis.js +64 -0
  7. package/d1/index.js +629 -0
  8. package/d1/index.js.works +203 -0
  9. package/d1/package.json +86 -0
  10. package/d1/package.json.works +14 -0
  11. package/duster/helpers/sample/nyt.js +2 -1
  12. package/framework/controllers.js +4 -4
  13. package/index.js +26 -14
  14. package/insight/insight.js +1 -1
  15. package/launchpad/index.js +203 -11
  16. package/launchpad/launchers/cluster.js +103 -110
  17. package/launchpad/launchers/redis.js +70 -0
  18. package/launchpad/launchers/single.js +36 -22
  19. package/locks/locks.js +63 -9
  20. package/locks/providers/cluster.js +3 -1
  21. package/locks/providers/memory.js +10 -7
  22. package/locks/providers/redis.js +62 -82
  23. package/middleware/admin/admin.js +3 -3
  24. package/middleware/authentication/adapters/session.js +11 -8
  25. package/middleware/authentication/authentication.js +28 -16
  26. package/middleware/authentication/authenticators/default.js +5 -2
  27. package/middleware/authentication/authenticators/session.js +5 -2
  28. package/middleware/authentication/providers/saml.js +1 -1
  29. package/middleware/authorization/authorization.js +11 -8
  30. package/middleware/awareness/awareness.js +55 -31
  31. package/middleware/awareness/plugins/editorial.js +4 -4
  32. package/middleware/awareness/providers/abstract-async.js +107 -84
  33. package/middleware/awareness/providers/abstract.js +1 -1
  34. package/middleware/awareness/providers/memory.js +0 -14
  35. package/middleware/awareness/providers/redis.js +186 -279
  36. package/middleware/cache/cache.js +4 -2
  37. package/middleware/cache/providers/redis.js +127 -89
  38. package/middleware/cache/providers/shared-memory.js +3 -3
  39. package/middleware/cloudcms/cloudcms.js +22 -16
  40. package/middleware/form/form.js +3 -3
  41. package/middleware/modules/modules.js +63 -10
  42. package/middleware/proxy/proxy.js +8 -21
  43. package/middleware/stores/stores.js +48 -5
  44. package/middleware/themes/themes.js +49 -0
  45. package/middleware/virtual-config/virtual-config.js +11 -8
  46. package/middleware/wcm/wcm.js +4 -4
  47. package/notifications/notifications.js +27 -4
  48. package/package.json +30 -25
  49. package/server/index.js +508 -412
  50. package/server/standalone.js +9 -0
  51. package/temp/clusterlock/index.js +3 -3
  52. package/temp/clusterlock/package.json +1 -1
  53. package/temp/passport-saml/LICENSE +23 -0
  54. package/temp/passport-saml/README.md +406 -0
  55. package/temp/passport-saml/lib/node-saml/algorithms.d.ts +5 -0
  56. package/temp/passport-saml/lib/node-saml/algorithms.js +41 -0
  57. package/temp/passport-saml/lib/node-saml/algorithms.js.map +1 -0
  58. package/temp/passport-saml/lib/node-saml/index.d.ts +3 -0
  59. package/temp/passport-saml/lib/node-saml/index.js +6 -0
  60. package/temp/passport-saml/lib/node-saml/index.js.map +1 -0
  61. package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.d.ts +45 -0
  62. package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.js +86 -0
  63. package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.js.map +1 -0
  64. package/temp/passport-saml/lib/node-saml/saml-post-signing.d.ts +3 -0
  65. package/temp/passport-saml/lib/node-saml/saml-post-signing.js +15 -0
  66. package/temp/passport-saml/lib/node-saml/saml-post-signing.js.map +1 -0
  67. package/temp/passport-saml/lib/node-saml/saml.d.ts +77 -0
  68. package/temp/passport-saml/lib/node-saml/saml.js +1170 -0
  69. package/temp/passport-saml/lib/node-saml/saml.js.map +1 -0
  70. package/temp/passport-saml/lib/node-saml/types.d.ts +95 -0
  71. package/temp/passport-saml/lib/node-saml/types.js +8 -0
  72. package/temp/passport-saml/lib/node-saml/types.js.map +1 -0
  73. package/temp/passport-saml/lib/node-saml/utility.d.ts +3 -0
  74. package/temp/passport-saml/lib/node-saml/utility.js +19 -0
  75. package/temp/passport-saml/lib/node-saml/utility.js.map +1 -0
  76. package/temp/passport-saml/lib/node-saml/xml.d.ts +21 -0
  77. package/temp/passport-saml/lib/node-saml/xml.js +140 -0
  78. package/temp/passport-saml/lib/node-saml/xml.js.map +1 -0
  79. package/temp/passport-saml/lib/passport-saml/index.d.ts +6 -0
  80. package/temp/passport-saml/lib/passport-saml/index.js +11 -0
  81. package/temp/passport-saml/lib/passport-saml/index.js.map +1 -0
  82. package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.d.ts +13 -0
  83. package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.js +63 -0
  84. package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.js.map +1 -0
  85. package/temp/passport-saml/lib/passport-saml/strategy.d.ts +20 -0
  86. package/temp/passport-saml/lib/passport-saml/strategy.js +167 -0
  87. package/temp/passport-saml/lib/passport-saml/strategy.js.map +1 -0
  88. package/temp/passport-saml/lib/passport-saml/types.d.ts +51 -0
  89. package/temp/passport-saml/lib/passport-saml/types.js +11 -0
  90. package/temp/passport-saml/lib/passport-saml/types.js.map +1 -0
  91. package/temp/passport-saml/package.json +96 -0
  92. package/util/auth.js +6 -6
  93. package/util/cloudcms.js +85 -88
  94. package/util/proxy-factory.js +159 -268
  95. package/util/redis.js +113 -0
  96. package/util/renditions.js +12 -6
  97. package/util/request.js +48 -12
  98. package/util/util.js +16 -2
  99. package/launchpad/launchers/sticky-cluster.js +0 -43
  100. package/temp/memored/.jshintrc +0 -4
  101. package/temp/memored/README.md +0 -240
  102. package/temp/memored/demo/demo1.js +0 -37
  103. package/temp/memored/demo/demo2.js +0 -32
  104. package/temp/memored/gulpfile.js +0 -8
  105. package/temp/memored/index.js +0 -343
  106. package/temp/memored/package.json +0 -54
  107. package/temp/memored/spec/memored.spec.js +0 -265
  108. package/web/cms/ice.js +0 -109
  109. package/web/cms/preview.js +0 -106
@@ -1,343 +0,0 @@
1
- 'use strict';
2
-
3
- var cluster = require('cluster'),
4
- packageInfo = require('./package');
5
-
6
- var logger = {
7
- log: function() {},
8
- warn: function() {}
9
- };
10
-
11
- var messagesCounter = 0;
12
-
13
- var activeMessages = {};
14
-
15
- var purgeIntervalObj;
16
-
17
- /*
18
- message
19
- - workerPid
20
- - type
21
- - requestParams
22
- */
23
-
24
- var cache = {};
25
-
26
- function CacheEntry(data) { // ttl -> milliseconds
27
- this.key = data.key;
28
- this.value = data.value;
29
- this.creationTime = Date.now();
30
- if (data.ttl) {
31
- this.ttl = data.ttl;
32
- this.expirationTime = this.creationTime + data.ttl;
33
- }
34
- }
35
- CacheEntry.prototype.isExpired = function() {
36
- return this.expirationTime && Date.now() > this.expirationTime;
37
- };
38
- CacheEntry.prototype.toString = function() {
39
- return "Key: " + this.key + "; Value: " + this.value + "; Ttl: " + this.ttl;
40
- };
41
-
42
- function _findWorkerByPid(workerPid) {
43
- var i = 0,
44
- workerIds = Object.keys(cluster.workers),
45
- len = workerIds.length,
46
- worker;
47
-
48
- for (; i < len; i++) {
49
- if (cluster.workers[workerIds[i]].process.pid == workerPid) {
50
- worker = cluster.workers[workerIds[i]];
51
- break;
52
- }
53
- }
54
-
55
- return worker;
56
- }
57
-
58
- function _getResultParamsValues(paramsObj) {
59
- var result = [null],
60
- prop;
61
- if (paramsObj) {
62
- for (prop in paramsObj) {
63
- result.push(paramsObj[prop]);
64
- }
65
- }
66
- return result;
67
- }
68
-
69
- function _sendMessageToWorker(message) {
70
- var worker = _findWorkerByPid(message.workerPid);
71
- worker.send(message);
72
- }
73
-
74
- function _sendMessageToMaster(message) {
75
- message.channel = 'memored';
76
- message.workerPid = process.pid;
77
- message.id = process.pid + '::' + messagesCounter++;
78
- process.send(message);
79
- if (message.callback) {
80
- activeMessages[message.id] = message;
81
- }
82
- }
83
-
84
- function _readCacheValue(message) {
85
- var cacheEntry = cache[message.requestParams.key];
86
- if (!cacheEntry) return _sendMessageToWorker(message);
87
- if (cacheEntry.isExpired()) {
88
- process.nextTick(function() {
89
- delete cache[message.requestParams.key];
90
- });
91
- cacheEntry = null;
92
- }
93
-
94
- if (cacheEntry) {
95
- message.responseParams = {
96
- value: cacheEntry.value
97
- };
98
- if (cacheEntry.expirationTime) {
99
- message.responseParams.expirationTime = cacheEntry.expirationTime;
100
- }
101
- }
102
-
103
- _sendMessageToWorker(message);
104
- }
105
-
106
- function _storeCacheValue(message) {
107
- cache[message.requestParams.key] = new CacheEntry(message.requestParams);
108
- if (message.requestParams.ttl) {
109
- message.responseParams = {
110
- expirationTime: cache[message.requestParams.key].expirationTime
111
- };
112
- }
113
- _sendMessageToWorker(message);
114
- }
115
-
116
- function _removeCacheValue(message) {
117
- delete cache[message.requestParams.key];
118
- _sendMessageToWorker(message);
119
- }
120
-
121
- function _cleanCache(message) {
122
- cache = {};
123
- _sendMessageToWorker(message);
124
- }
125
-
126
- function _getCacheSize(message) {
127
- message.responseParams = {
128
- size: Object.keys(cache).length
129
- };
130
- _sendMessageToWorker(message);
131
- }
132
-
133
- function _getCacheKeys(message) {
134
- message.responseParams = {
135
- keys: Object.keys(cache)
136
- };
137
- _sendMessageToWorker(message);
138
- }
139
-
140
- function _purgeCache() {
141
- var now = Date.now();
142
- Object.keys(cache).forEach(function(cacheKey) {
143
- if (cache[cacheKey].expirationTime && cache[cacheKey].expirationTime < now) {
144
- delete cache[cacheKey];
145
- }
146
- });
147
- }
148
-
149
- function _masterIncomingMessagesHanlder(message) {
150
- logger.log('Master received message:', message);
151
-
152
- if (!message || message.channel !== 'memored') return false;
153
-
154
- switch (message.type) {
155
- case 'read':
156
- _readCacheValue(message);
157
- break;
158
- case 'store':
159
- _storeCacheValue(message);
160
- break;
161
- case 'remove':
162
- _removeCacheValue(message);
163
- break;
164
- case 'clean':
165
- _cleanCache(message);
166
- break;
167
- case 'size':
168
- _getCacheSize(message);
169
- break;
170
- case 'keys':
171
- _getCacheKeys(message);
172
- break;
173
- default:
174
- logger.warn('Received an invalid message type:', message.type);
175
- }
176
- }
177
-
178
- function _workerIncomingMessagesHandler(message) {
179
- logger.log('Worker received message:', message);
180
-
181
- var pendingMessage;
182
-
183
- if (!message || message.channel !== 'memored') return false;
184
-
185
- pendingMessage = activeMessages[message.id];
186
- if (pendingMessage && pendingMessage.callback) {
187
- pendingMessage.callback.apply(null, _getResultParamsValues(message.responseParams));
188
- delete activeMessages[message.id];
189
- }
190
-
191
- }
192
-
193
- if (cluster.isMaster) {
194
-
195
- Object.keys(cluster.workers).forEach(function(workerId) {
196
- cluster.workers[workerId].on('message', _masterIncomingMessagesHanlder);
197
- });
198
-
199
- // Listen for new workers so we can listen to its messages
200
- cluster.on('fork', function(worker) {
201
- worker.on('message', _masterIncomingMessagesHanlder);
202
- });
203
-
204
- // TODO: Only for testing purposes
205
- // setInterval(function() {
206
- // logger.log('\n------------------------------------------');
207
- // logger.log(cache);
208
- // logger.log('------------------------------------------\n');
209
- // }, 2000).unref();
210
-
211
- } else {
212
-
213
- process.on('message', _workerIncomingMessagesHandler);
214
-
215
- }
216
-
217
- function _setup(options) {
218
- options = options || {};
219
- logger = options.logger || logger;
220
-
221
- if (cluster.isMaster) {
222
-
223
- if (options.mockData) {
224
- options.mockData.forEach(function(mock) {
225
- // key, value, ttl
226
- cache[mock.key] = new CacheEntry(mock);
227
- });
228
- }
229
-
230
- if (options.purgeInterval) {
231
- purgeIntervalObj = setInterval(function() {
232
- _purgeCache();
233
- }, options.purgeInterval).unref();
234
- }
235
- }
236
- }
237
-
238
- function _read(key, callback) {
239
- if (cluster.isWorker) {
240
- _sendMessageToMaster({
241
- type: 'read',
242
- requestParams: {
243
- key: key
244
- },
245
- callback: callback
246
- });
247
- } else {
248
- logger.warn('Memored::read# Cannot call this function from master process');
249
- }
250
- }
251
-
252
- function _store(key, value, ttl, callback) {
253
- if (cluster.isWorker) {
254
- if (callback === undefined) {
255
- callback = ttl;
256
- ttl = undefined;
257
- }
258
-
259
- _sendMessageToMaster({
260
- type: 'store',
261
- requestParams: {
262
- key: key,
263
- value: value,
264
- ttl: ttl
265
- },
266
- callback: callback
267
- });
268
- } else {
269
- logger.warn('Memored::store# Cannot call this function from master process');
270
- }
271
- }
272
-
273
- function _remove(key, callback) {
274
- if (cluster.isWorker) {
275
- _sendMessageToMaster({
276
- type: 'remove',
277
- requestParams: {
278
- key: key
279
- },
280
- callback: callback
281
- });
282
- } else {
283
- logger.warn('Memored::remove# Cannot call this function from master process');
284
- }
285
- }
286
-
287
- function _clean(callback) {
288
- if (cluster.isWorker) {
289
- _sendMessageToMaster({
290
- type: 'clean',
291
- callback: callback
292
- });
293
- } else {
294
- logger.warn('Memored::clean# Cannot call this function from master process');
295
- }
296
- }
297
-
298
- function _size(callback) {
299
- if (cluster.isWorker) {
300
- _sendMessageToMaster({
301
- type: 'size',
302
- callback: callback
303
- });
304
- } else {
305
- setImmediate(callback,{
306
- size: Object.keys(cache).length
307
- });
308
- }
309
- }
310
-
311
- function _reset(callback) {
312
- if (cluster.isMaster) {
313
- clearInterval(purgeIntervalObj);
314
- setImmediate(callback);
315
- } else {
316
- logger.warn('Memored::reset# Cannot call this function from a worker process');
317
- }
318
- }
319
-
320
- function _keys(callback) {
321
- if (cluster.isWorker) {
322
- _sendMessageToMaster({
323
- type: 'keys',
324
- callback: callback
325
- });
326
- } else {
327
- setImmediate(callback,{
328
- keys: Object.keys(cache)
329
- });
330
- }
331
- }
332
-
333
- module.exports = {
334
- version: packageInfo.version,
335
- setup: _setup,
336
- read: _read,
337
- store: _store,
338
- remove: _remove,
339
- clean: _clean,
340
- size: _size,
341
- reset: _reset,
342
- keys: _keys
343
- };
@@ -1,54 +0,0 @@
1
- {
2
- "name": "memored",
3
- "version": "0.0.4",
4
- "description": "Shared in-memory module for cluster applications",
5
- "main": "index.js",
6
- "scripts": {
7
- "test": "gulp"
8
- },
9
- "author": {
10
- "name": "Paquitosoft"
11
- },
12
- "license": "MIT",
13
- "keywords": [
14
- "cache",
15
- "memory",
16
- "shared"
17
- ],
18
- "repository": {
19
- "type": "git",
20
- "url": "https://github.com/PaquitoSoft/memored.git"
21
- },
22
- "bugs": {
23
- "url": "https://github.com/PaquitoSoft/memored/issues"
24
- },
25
- "devDependencies": {
26
- "async": "^0.9.0",
27
- "chai": "^1.9.1",
28
- "faker": "^1.1.0",
29
- "gulp": "^3.8.7",
30
- "gulp-mocha": "^1.0.0"
31
- },
32
- "gitHead": "37d1ab5e06ab4fc5d3ff99d36bf4be7cbe019567",
33
- "homepage": "https://github.com/PaquitoSoft/memored",
34
- "_id": "memored@0.0.4",
35
- "_shasum": "70b21f1707cb28f04ea2ef9629109b75f8cf7791",
36
- "_from": "memored@*",
37
- "_npmVersion": "1.4.21",
38
- "_npmUser": {
39
- "name": "paquitosoft",
40
- "email": "paquitosoftware@gmail.com"
41
- },
42
- "maintainers": [
43
- {
44
- "name": "paquitosoft",
45
- "email": "paquitosoftware@gmail.com"
46
- }
47
- ],
48
- "dist": {
49
- "shasum": "70b21f1707cb28f04ea2ef9629109b75f8cf7791",
50
- "tarball": "http://registry.npmjs.org/memored/-/memored-0.0.4.tgz"
51
- },
52
- "directories": {},
53
- "_resolved": "https://registry.npmjs.org/memored/-/memored-0.0.4.tgz"
54
- }
@@ -1,265 +0,0 @@
1
- 'use strict';
2
-
3
- /* global describe, after, it */
4
- var cluster = require('cluster'),
5
- expect = require('chai').expect,
6
- faker = require('faker'),
7
- async = require('async'),
8
- memored = require('../index.js');
9
-
10
- function _createUser() {
11
- return {
12
- firstName: faker.Name.findName(),
13
- lastName: faker.Name.lastName(),
14
- email: faker.Internet.email(),
15
- address: {
16
- streetAddress: faker.Address.streetName() + ' - ' + faker.Address.streetAddress(),
17
- zipCode: faker.Address.zipCode(),
18
- city: faker.Address.city()
19
- }
20
- };
21
- }
22
-
23
- describe('Memored test suite', function() {
24
-
25
- if (cluster.isMaster) {
26
- cluster.fork();
27
-
28
- describe('Memored - purge', function() {
29
-
30
- var mockedData = [
31
- {
32
- key: 'mock1',
33
- value: _createUser(),
34
- ttl: 25
35
- },
36
- {
37
- key: 'mock2',
38
- value: _createUser(),
39
- ttl: 75
40
- },
41
- {
42
- key: 'mock3',
43
- value: _createUser()
44
- }
45
- ];
46
-
47
- it.only('Should auto-remove old data if configured to purge', function(done) {
48
- async.series({
49
- setup: function(next) {
50
- memored.setup({purgeInterval: 50, mockData: mockedData});
51
- next();
52
- },
53
- getCacheSize: function(next) {
54
- memored.size(function(data) {
55
- expect(data.size).to.equal(3);
56
- next();
57
- });
58
- },
59
- wait: function(next) {
60
- setTimeout(next, 60);
61
- },
62
- getCacheSize2: function(next) {
63
- memored.size(function(data) {
64
- expect(data.size).to.equal(2);
65
- next();
66
- });
67
- },
68
- waitAgain: function(next) {
69
- setTimeout(next, 50);
70
- },
71
- getCacheSize3: function(next) {
72
- memored.size(function(data) {
73
- expect(data.size).to.equal(1);
74
- next();
75
- });
76
- },
77
- }, done);
78
- });
79
- });
80
-
81
- } else {
82
-
83
- after(function() {
84
- process.exit();
85
- });
86
-
87
- describe('Memored - store', function() {
88
-
89
- it('Should store a value in the cache', function(done) {
90
- var user1 = _createUser();
91
- memored.store('user1', user1, function(err, expirationTime) {
92
- expect(err).to.equal(null);
93
- expect(expirationTime).to.equal(undefined);
94
- done();
95
- });
96
- });
97
-
98
- it('Should store a value and create an expiration time when ttl is used', function(done) {
99
- var user2 = _createUser(),
100
- t1 = Date.now();
101
- memored.store('user2', user2, 100, function(err, expirationTime) {
102
- expect(err).to.equals(null);
103
- expect(expirationTime).to.be.a('number');
104
- expect(expirationTime).to.be.least(t1 + 100);
105
- done();
106
- });
107
- });
108
-
109
- });
110
-
111
- describe('Memored - read', function() {
112
-
113
- it('Should read a cache entry', function(done) {
114
- var user3 = _createUser();
115
- async.series({
116
- storeValue: function(next) {
117
- memored.store('user3', user3, next);
118
- },
119
- readValue: function(next) {
120
- memored.read('user3', function(err, value) {
121
- expect(err).to.equals(null);
122
- expect(value).to.eql(user3);
123
- next();
124
- });
125
- }
126
- }, done);
127
- });
128
-
129
- it('Should return an undefined entry when looking for a non-existing cache entry', function(done) {
130
- memored.read('unknownKey', function(err, value) {
131
- expect(err).to.equals(null);
132
- expect(value).to.equal(undefined);
133
- done();
134
- });
135
- });
136
-
137
- it('Should respect cache entry ttl', function(done) {
138
- var user4 = _createUser(),
139
- t1 = Date.now();
140
-
141
- async.series({
142
- storeValue: function(next) {
143
- memored.store('user4', user4, 20, next);
144
- },
145
- readValue1: function(next) {
146
- memored.read('user4', function(err, value, expirationTime) {
147
- expect(err).to.equals(null);
148
- expect(value).to.eql(user4);
149
- expect(expirationTime).to.least(t1 + 20);
150
- next();
151
- });
152
- },
153
- readValue2: function(next) {
154
- setTimeout(function() {
155
- memored.read('user4', function(err, value) {
156
- expect(err).to.equals(null);
157
- expect(value).to.equal(undefined);
158
- next();
159
- });
160
- }, 30);
161
- }
162
- }, done);
163
- });
164
-
165
- });
166
-
167
- describe('Memored - remove', function() {
168
-
169
- it('Should remove a cache entry', function(done) {
170
- var user5 = _createUser();
171
- async.series({
172
- storeValue: function(next) {
173
- memored.store('user5', user5, next);
174
- },
175
- readValue1: function(next) {
176
- memored.read('user5', function(err, value) {
177
- expect(err).to.equals(null);
178
- expect(value).to.eql(user5);
179
- next();
180
- });
181
- },
182
- removeValue: function(next) {
183
- memored.remove('user5', next);
184
- },
185
- readValue2: function(next) {
186
- memored.read('user5', function(err, value) {
187
- expect(err).to.equals(null);
188
- expect(value).to.equal(undefined);
189
- next();
190
- });
191
- }
192
- }, done);
193
- });
194
-
195
- });
196
-
197
- describe('Memored - clean', function() {
198
- it('Should remove all values in cache', function(done) {
199
- var user6 = _createUser(),
200
- user7 = _createUser();
201
-
202
- async.series({
203
- soreValue1: function(next) {
204
- memored.store('user6', user6, next);
205
- },
206
- storeValue2: function(next) {
207
- memored.store('user7', user7, next);
208
- },
209
- readValue1: function(next) {
210
- memored.read('user6', function(err, value) {
211
- expect(err).to.equals(null);
212
- expect(value).to.eql(user6);
213
- next();
214
- });
215
- },
216
- readValue2: function(next) {
217
- memored.read('user7', function(err, value) {
218
- expect(err).to.equals(null);
219
- expect(value).to.eql(user7);
220
- next();
221
- });
222
- },
223
- cleanCache: function(next) {
224
- memored.clean(next);
225
- },
226
- readValue4: function(next) {
227
- memored.read('user6', function(err, value) {
228
- expect(err).to.equals(null);
229
- expect(value).to.equal(undefined);
230
- next();
231
- });
232
- },
233
- readValue5: function(next) {
234
- memored.read('user7', function(err, value) {
235
- expect(err).to.equals(null);
236
- expect(value).to.equal(undefined);
237
- next();
238
- });
239
- },
240
- }, done);
241
- });
242
- });
243
-
244
- describe('Memored - setup -- logger', function() {
245
- var customLogger = {
246
- messages: [],
247
- log: function() {
248
- this.messages.push(Array.prototype.slice.call(arguments).join(','));
249
- }
250
- };
251
- it('Should use a custom logger when requested', function(done) {
252
- memored.setup({
253
- logger: customLogger
254
- });
255
- expect(customLogger.messages).to.be.have.length(0);
256
- memored.store('user8', _createUser(), function() {
257
- expect(customLogger.messages).to.have.length(1);
258
- done();
259
- });
260
- });
261
- });
262
-
263
- }
264
-
265
- });