statebus 7.0.2 → 7.0.5
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.
- package/{clients.js → client-library.js} +310 -281
- package/extras/tests.js +110 -106
- package/package.json +3 -4
- package/{servers.js → server-library.js} +341 -247
- package/statebus.js +132 -76
package/extras/tests.js
CHANGED
|
@@ -129,13 +129,13 @@ test(function prune (done) {
|
|
|
129
129
|
|
|
130
130
|
test(function auto_vars (done) {
|
|
131
131
|
var n = require('../statebus')()
|
|
132
|
-
n('r/*').
|
|
132
|
+
n('r/*').getter = function (rest, o) {return {rest, o}}
|
|
133
133
|
log(n.get('r/3'))
|
|
134
134
|
assert(n.get('r/3').rest === '3')
|
|
135
135
|
assert(n.get('r/3').o === undefined,
|
|
136
136
|
'o is not undefined: ' + JSON.stringify(n.get('r/3')))
|
|
137
137
|
|
|
138
|
-
n('v/*').
|
|
138
|
+
n('v/*').getter = function (vars, star) {return {vars: vars, rest: star}}
|
|
139
139
|
log(n.get('v/[3,9 4]').rest)
|
|
140
140
|
log(n.get('v/[3,9 4]').rest.match(/$Bad/))
|
|
141
141
|
assert(n.get('v/[3,9 4]').rest === '[3,9 4]')
|
|
@@ -145,7 +145,7 @@ test(function auto_vars (done) {
|
|
|
145
145
|
assert(n.get('v/[3,9 4]').vars.match(/^Bad/))
|
|
146
146
|
assert(Array.isArray(n.get('v/[3,4]').vars))
|
|
147
147
|
|
|
148
|
-
n('a/*').
|
|
148
|
+
n('a/*').setter = function (t, k, obj) {
|
|
149
149
|
log('k:', k, 't:', t, 'o:', obj)
|
|
150
150
|
assert(k === 'a/foo')
|
|
151
151
|
assert(typeof obj === 'object')
|
|
@@ -158,7 +158,7 @@ test(function auto_vars (done) {
|
|
|
158
158
|
n.set({key: 'a/foo', i:i})
|
|
159
159
|
|
|
160
160
|
log('Forgetting things now')
|
|
161
|
-
n('v/*').
|
|
161
|
+
n('v/*').forgetter = function (vars, star) {log('(from auto_vars) forgot v/' + star)}
|
|
162
162
|
n.forget('v/[3,9 4]')
|
|
163
163
|
n.forget('v/[3,4]')
|
|
164
164
|
|
|
@@ -202,9 +202,9 @@ test(function transactions (done) {
|
|
|
202
202
|
bus.honk = 'statelog'
|
|
203
203
|
bus.label = 'tranny'
|
|
204
204
|
|
|
205
|
-
// Test
|
|
206
|
-
bus('foo1').
|
|
207
|
-
log('
|
|
205
|
+
// Test getter handlers with t.done()
|
|
206
|
+
bus('foo1').getter = function (t) {
|
|
207
|
+
log('gettering foo1')
|
|
208
208
|
setTimeout(()=>{
|
|
209
209
|
log('returning something for foo1')
|
|
210
210
|
t.done({something: 'yeah'})
|
|
@@ -215,7 +215,7 @@ test(function transactions (done) {
|
|
|
215
215
|
setTimeout(() => { log('test foo1'); assert(foo1.something === 'yeah') }, 10)
|
|
216
216
|
|
|
217
217
|
// And return a value directly
|
|
218
|
-
bus('foo2').
|
|
218
|
+
bus('foo2').getter = (t) => { return {something: 'yeah'} }
|
|
219
219
|
var foo2 = bus.get('foo2')
|
|
220
220
|
setTimeout(() => { log('test foo2'); assert(foo2.something === 'yeah') }, 10)
|
|
221
221
|
|
|
@@ -227,11 +227,11 @@ test(function transactions (done) {
|
|
|
227
227
|
bus.set({key: 'softrock1', a:1})
|
|
228
228
|
bus.set({key: 'softrock2', a:1})
|
|
229
229
|
|
|
230
|
-
// Test
|
|
231
|
-
bus('rock1').
|
|
232
|
-
bus('rock2').
|
|
233
|
-
bus('softrock1').
|
|
234
|
-
bus('softrock2').
|
|
230
|
+
// Test setter handlers with t.done(o), t.abort, 'done', 'abort'
|
|
231
|
+
bus('rock1').setter = (t) => {setTimeout(()=>{ t.abort() }, 0)}
|
|
232
|
+
bus('rock2').setter = ( ) => {return 'abort'}
|
|
233
|
+
bus('softrock1').setter = (t) => {setTimeout(()=>{ t.done() }, 0)}
|
|
234
|
+
bus('softrock2').setter = ( ) => {return 'done'}
|
|
235
235
|
|
|
236
236
|
//bus.honk = true
|
|
237
237
|
setTimeout(() => {
|
|
@@ -250,10 +250,10 @@ test(function transactions (done) {
|
|
|
250
250
|
|
|
251
251
|
// Test the delete handlers with t.done(o), t.abort, 'done', 'abort'
|
|
252
252
|
log("Now let's delete")
|
|
253
|
-
bus('rock1').
|
|
254
|
-
bus('rock2').
|
|
255
|
-
bus('softrock1').
|
|
256
|
-
bus('softrock2').
|
|
253
|
+
bus('rock1').deleter = (t) => {setTimeout(()=>{ t.abort() }, 0)}
|
|
254
|
+
bus('rock2').deleter = ( ) => {return 'abort'}
|
|
255
|
+
bus('softrock1').deleter = (t) => {setTimeout(()=>{ t.done() }, 0)}
|
|
256
|
+
bus('softrock2').deleter = ( ) => {return 'done'}
|
|
257
257
|
|
|
258
258
|
log('Delete some rocks')
|
|
259
259
|
bus.delete('rock1')
|
|
@@ -333,7 +333,7 @@ test(function translate_fields (done) {
|
|
|
333
333
|
})
|
|
334
334
|
|
|
335
335
|
test(function basics (done) {
|
|
336
|
-
bus('basic wait').
|
|
336
|
+
bus('basic wait').getter = function () {
|
|
337
337
|
setTimeout(function () {bus.set.fire({key:'basic wait', a:1})},
|
|
338
338
|
30)
|
|
339
339
|
}
|
|
@@ -356,9 +356,9 @@ test(function basics (done) {
|
|
|
356
356
|
// Multi-handlers
|
|
357
357
|
test(function multiple_handlers1 (done) {
|
|
358
358
|
var cuss = require('../statebus')()
|
|
359
|
-
cuss('foo').
|
|
360
|
-
cuss('foo').
|
|
361
|
-
cuss('foo').
|
|
359
|
+
cuss('foo').getter = () => {log('do nothing 1')}
|
|
360
|
+
cuss('foo').getter = () => {log('do nothing 2')}
|
|
361
|
+
cuss('foo').getter = () => (log('doing something'),{b: 3})
|
|
362
362
|
cuss.get('foo', (o) => {
|
|
363
363
|
log('Multi-handle got', o)
|
|
364
364
|
cuss.forget()
|
|
@@ -368,10 +368,10 @@ test(function multiple_handlers1 (done) {
|
|
|
368
368
|
|
|
369
369
|
test(function multiple_handlers2 (done) {
|
|
370
370
|
var cuss = require('../statebus')()
|
|
371
|
-
cuss('foo').
|
|
372
|
-
cuss('foo').
|
|
373
|
-
cuss('foo').
|
|
374
|
-
//cuss('foo').
|
|
371
|
+
cuss('foo').setter = (o) => {log('do nothing 1')}
|
|
372
|
+
cuss('foo').setter = (o) => {log('do nothing 2')}
|
|
373
|
+
cuss('foo').setter = (o) => {log('doin something'); cuss.set.fire(o)}
|
|
374
|
+
//cuss('foo').setter = (o) => {log('doin abortion'); cuss.set.abort(o)}
|
|
375
375
|
cuss.set({key: 'foo', b: 55})
|
|
376
376
|
log('over and out')
|
|
377
377
|
setTimeout(()=>{done()})
|
|
@@ -443,7 +443,7 @@ test(function get_once (done) {
|
|
|
443
443
|
})
|
|
444
444
|
|
|
445
445
|
test(function once (done) {
|
|
446
|
-
bus('takeawhile').
|
|
446
|
+
bus('takeawhile').getter = (t) => {
|
|
447
447
|
setTimeout(_=> t.return({_: 3}), 150)
|
|
448
448
|
}
|
|
449
449
|
bus.once(_=> {
|
|
@@ -469,7 +469,7 @@ test(function get_remote (done) {
|
|
|
469
469
|
var count = 0
|
|
470
470
|
|
|
471
471
|
// The moon responds in 30ms
|
|
472
|
-
bus('moon').
|
|
472
|
+
bus('moon').getter =
|
|
473
473
|
function (k) { setTimeout(function () {bus.set.fire({key:k})},30) }
|
|
474
474
|
function cb (o) {
|
|
475
475
|
count++
|
|
@@ -531,7 +531,7 @@ test(function identity (done) {
|
|
|
531
531
|
var key = 'kooder'
|
|
532
532
|
var count = 0
|
|
533
533
|
function fire () { bus.set.fire({key: 'kooder', count: count}) }
|
|
534
|
-
bus(key).
|
|
534
|
+
bus(key).getter = function () { setTimeout(fire, 10) }
|
|
535
535
|
function cb() {
|
|
536
536
|
count++
|
|
537
537
|
log('cb called', count, 'times')
|
|
@@ -546,7 +546,7 @@ test(function identity (done) {
|
|
|
546
546
|
// 2. First return from pending get
|
|
547
547
|
assert(count === 1, 'cb called '+count+'!=1 times')
|
|
548
548
|
bus.forget(key, cb)
|
|
549
|
-
bus(key).
|
|
549
|
+
bus(key).getter.delete(fire)
|
|
550
550
|
done()
|
|
551
551
|
}, 40)
|
|
552
552
|
})
|
|
@@ -557,7 +557,7 @@ test(function forgetting (done) {
|
|
|
557
557
|
var key = 'kooder'
|
|
558
558
|
var count = 0
|
|
559
559
|
function fire () { log('firing!'); bus.set.fire({key: key, count: count}) }
|
|
560
|
-
bus(key).
|
|
560
|
+
bus(key).getter = function () { setTimeout(fire, 10) }
|
|
561
561
|
|
|
562
562
|
function cb (o) {
|
|
563
563
|
count++
|
|
@@ -578,7 +578,7 @@ test(function forgetting (done) {
|
|
|
578
578
|
// Done
|
|
579
579
|
setTimeout(function () {
|
|
580
580
|
assert(count === 2, "Count should be 2 but is", count)
|
|
581
|
-
bus(key).
|
|
581
|
+
bus(key).getter.delete(fire)
|
|
582
582
|
done()
|
|
583
583
|
}, 100)
|
|
584
584
|
})
|
|
@@ -586,7 +586,7 @@ test(function forgetting (done) {
|
|
|
586
586
|
// Can we return an object that getes another?
|
|
587
587
|
test(function nested_get (done) {
|
|
588
588
|
function outer () { return {inner: bus.get('inner') } }
|
|
589
|
-
bus('outer').
|
|
589
|
+
bus('outer').getter = outer
|
|
590
590
|
log('geting the outer wrapper')
|
|
591
591
|
var obj = bus.get('outer')
|
|
592
592
|
log('Ok, we geted:', obj)
|
|
@@ -598,7 +598,7 @@ test(function nested_get (done) {
|
|
|
598
598
|
|
|
599
599
|
// Done
|
|
600
600
|
setTimeout(function () {
|
|
601
|
-
bus('outer').
|
|
601
|
+
bus('outer').getter.delete(outer)
|
|
602
602
|
done()
|
|
603
603
|
}, 10)
|
|
604
604
|
})
|
|
@@ -609,9 +609,9 @@ test(function russian_doll_nesting (done) {
|
|
|
609
609
|
function big () { return {middle: bus.get('middle') } }
|
|
610
610
|
function middle () { return {small: bus.get('small') } }
|
|
611
611
|
function small () { return {nothing: nothing} }
|
|
612
|
-
bus('big').
|
|
613
|
-
bus('middle').
|
|
614
|
-
bus('small').
|
|
612
|
+
bus('big').getter = big
|
|
613
|
+
bus('middle').getter = middle
|
|
614
|
+
bus('small').getter = small
|
|
615
615
|
|
|
616
616
|
log('geting')
|
|
617
617
|
var obj = bus.get('big')
|
|
@@ -638,9 +638,9 @@ test(function russian_doll_nesting (done) {
|
|
|
638
638
|
|
|
639
639
|
// Done
|
|
640
640
|
setTimeout(function () {
|
|
641
|
-
bus('big').
|
|
642
|
-
bus('middle').
|
|
643
|
-
bus('small').
|
|
641
|
+
bus('big').getter.delete(big)
|
|
642
|
+
bus('middle').getter.delete(middle)
|
|
643
|
+
bus('small').getter.delete(small)
|
|
644
644
|
done()
|
|
645
645
|
}, 50)
|
|
646
646
|
})
|
|
@@ -649,11 +649,11 @@ test(function some_handlers_suicide (done) {
|
|
|
649
649
|
// These handlers stop reacting after they successfully complete:
|
|
650
650
|
//
|
|
651
651
|
// .on_set
|
|
652
|
-
// .
|
|
653
|
-
// .
|
|
654
|
-
// .
|
|
652
|
+
// .setter
|
|
653
|
+
// .forgetter
|
|
654
|
+
// .deleter
|
|
655
655
|
//
|
|
656
|
-
// Ok, that's everyting except for a .
|
|
656
|
+
// Ok, that's everyting except for a .getter handler, which
|
|
657
657
|
// runs until its key has been forget()ed.
|
|
658
658
|
|
|
659
659
|
// XXX todo
|
|
@@ -848,7 +848,7 @@ test(function proxies (done) {
|
|
|
848
848
|
})
|
|
849
849
|
|
|
850
850
|
test(function only_one (done) {
|
|
851
|
-
bus('only_one/*').
|
|
851
|
+
bus('only_one/*').getter = function (k) {
|
|
852
852
|
var id = k[k.length-1]
|
|
853
853
|
return {selected: bus.get('selector').choice == id}
|
|
854
854
|
}
|
|
@@ -885,7 +885,7 @@ test(function only_one (done) {
|
|
|
885
885
|
|
|
886
886
|
test(function set_can_trigger_toget (done) {
|
|
887
887
|
// bus.honk = true
|
|
888
|
-
bus('set_trigger_toget').
|
|
888
|
+
bus('set_trigger_toget').getter =
|
|
889
889
|
function (k, old) {
|
|
890
890
|
old.yes = Math.random()
|
|
891
891
|
return old
|
|
@@ -900,7 +900,7 @@ test(function set_can_trigger_toget (done) {
|
|
|
900
900
|
triggered++
|
|
901
901
|
log('Triggered', triggered, 'times', obj)
|
|
902
902
|
|
|
903
|
-
// XXX todo: because of a bug in how
|
|
903
|
+
// XXX todo: because of a bug in how getter is handled, this triggers 4 times instead of 3
|
|
904
904
|
assert(triggered <= 4)
|
|
905
905
|
log('GGGGGGGGGGGG')
|
|
906
906
|
})
|
|
@@ -920,7 +920,7 @@ test(function rollback_setfire (done) {
|
|
|
920
920
|
log('Firing wait')
|
|
921
921
|
bus.set.fire({key: 'wait', count: count})
|
|
922
922
|
}, 50) }
|
|
923
|
-
bus('wait').
|
|
923
|
+
bus('wait').getter = wait
|
|
924
924
|
|
|
925
925
|
// Initialize
|
|
926
926
|
bus.set.fire({key: 'undo me', state: 'start'})
|
|
@@ -965,14 +965,14 @@ test(function rollback_setfire (done) {
|
|
|
965
965
|
60)
|
|
966
966
|
|
|
967
967
|
setTimeout(function () {
|
|
968
|
-
bus('wait').
|
|
968
|
+
bus('wait').getter.delete(wait)
|
|
969
969
|
assert(phase === 3)
|
|
970
970
|
done()
|
|
971
971
|
}, 80)
|
|
972
972
|
})
|
|
973
973
|
|
|
974
974
|
test(function rollback_del (done) {
|
|
975
|
-
bus('wait forever').
|
|
975
|
+
bus('wait forever').getter = function () {} // shooting blanks
|
|
976
976
|
bus.set.fire({key: 'kill me', alive: true})
|
|
977
977
|
|
|
978
978
|
// First do a del that will roll back
|
|
@@ -996,7 +996,7 @@ test(function rollback_del (done) {
|
|
|
996
996
|
test(function rollback_set (done) {
|
|
997
997
|
var sets = []
|
|
998
998
|
var all_done = false
|
|
999
|
-
bus('candy').
|
|
999
|
+
bus('candy').setter = function (o) {sets.push(o); bus.set.fire(o)}
|
|
1000
1000
|
bus.set.fire({key: 'candy', flavor: 'lemon'})
|
|
1001
1001
|
|
|
1002
1002
|
log('Trying some rollbacks starting with', bus.cache['candy'])
|
|
@@ -1041,7 +1041,7 @@ test(function rollback_set (done) {
|
|
|
1041
1041
|
|
|
1042
1042
|
test(function rollback_abort (done) {
|
|
1043
1043
|
var bus = require('../statebus')()
|
|
1044
|
-
bus('foo').
|
|
1044
|
+
bus('foo').setter = (o, t) => {t.abort()}
|
|
1045
1045
|
bus(()=> {
|
|
1046
1046
|
var o = bus.get('foo')
|
|
1047
1047
|
o.bar = 3
|
|
@@ -1058,7 +1058,7 @@ test(function loading_quirk (done) {
|
|
|
1058
1058
|
// if the return from a get didn't actually change state
|
|
1059
1059
|
|
|
1060
1060
|
// First define a delayed set.fire
|
|
1061
|
-
bus('wait a sec').
|
|
1061
|
+
bus('wait a sec').getter = function (k) {
|
|
1062
1062
|
setTimeout(function () { bus.set.fire({key: k}) }, 50)
|
|
1063
1063
|
}
|
|
1064
1064
|
|
|
@@ -1122,23 +1122,27 @@ function setup_servers () {
|
|
|
1122
1122
|
c.ws_mount('/*', 'statei://localhost:' + port)
|
|
1123
1123
|
|
|
1124
1124
|
s.set({key: 'users',
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1125
|
+
val: [ {link: 'user/1'},
|
|
1126
|
+
{link: 'user/2'},
|
|
1127
|
+
{link: 'user/3'} ] })
|
|
1128
|
+
s.set({ key: 'user/1', val: {
|
|
1129
|
+
name: 'mike',
|
|
1130
|
+
email: 'toomim@gmail.com',
|
|
1131
|
+
admin: true,
|
|
1132
|
+
pass: '$2a$10$Ti7BgAZS8sB0Z62o2NKsIuCdmU3q9xP7jexVccTcG19Y8qpBpl/1y'
|
|
1133
|
+
}})
|
|
1134
|
+
s.set({ key: 'user/2', val: {
|
|
1135
|
+
name: 'j',
|
|
1136
|
+
email: 'jtoomim@gmail.com',
|
|
1137
|
+
admin: true,
|
|
1138
|
+
pass: '$2a$10$Ti7BgAZS8sB0Z62o2NKsIuCdmU3q9xP7jexVccTcG19Y8qpBpl/1y'
|
|
1139
|
+
}})
|
|
1140
|
+
s.set({ key: 'user/3', val: {
|
|
1141
|
+
name: 'boo',
|
|
1142
|
+
email: 'boo@gmail.com',
|
|
1143
|
+
admin: false,
|
|
1144
|
+
pass: '$2a$10$4UTjzf5OOGdkrCEsT.hO/.csKqf7u8mZ23ZT6stamBAWNV7u5WJuu'
|
|
1145
|
+
}})
|
|
1142
1146
|
|
|
1143
1147
|
return {s, c}
|
|
1144
1148
|
}
|
|
@@ -1182,18 +1186,22 @@ test(function login (done) {
|
|
|
1182
1186
|
c(function () {
|
|
1183
1187
|
var u = c.get('/current_user')
|
|
1184
1188
|
log('Current user changed!', c.label, JSON.stringify(u))
|
|
1185
|
-
if (u.logged_in) {
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
+
if (u.val.logged_in) {
|
|
1190
|
+
var user = c.get(u.val.user.link)
|
|
1191
|
+
log('Yay! We are logged in as', u.val.user,
|
|
1192
|
+
'which is loaded as', user)
|
|
1193
|
+
if (user.val) {
|
|
1194
|
+
assert(user.val.name === 'mike')
|
|
1195
|
+
c.forget()
|
|
1196
|
+
setTimeout(function () {done()}, 200)
|
|
1197
|
+
}
|
|
1189
1198
|
} else
|
|
1190
1199
|
log("Ok... we aren't logged in yet. We be patient.")
|
|
1191
1200
|
})
|
|
1192
1201
|
|
|
1193
1202
|
delay(200, () => {
|
|
1194
|
-
// c.honk = user0.honk = true
|
|
1195
1203
|
var u = c.get('/current_user')
|
|
1196
|
-
u.
|
|
1204
|
+
u.val = {login_as: {name: 'mike', pass: 'yeah'}}
|
|
1197
1205
|
log('Logging in')
|
|
1198
1206
|
//s.honk = true
|
|
1199
1207
|
c.set(u)
|
|
@@ -1207,10 +1215,10 @@ test(function wrong_password (done) {
|
|
|
1207
1215
|
|
|
1208
1216
|
var u = c.get('/current_user')
|
|
1209
1217
|
//assert(u.logged_in && u.user.name == 'mike')
|
|
1210
|
-
u.
|
|
1218
|
+
u.val = {login_as: {name: 'j', pass: 'nah'}}
|
|
1211
1219
|
c.set(u)
|
|
1212
1220
|
delay(500, () => {
|
|
1213
|
-
assert(!u.login_as, 'Aborted login needs to abort')
|
|
1221
|
+
assert(!u.val.login_as, 'Aborted login needs to abort')
|
|
1214
1222
|
log('Good, the login failed.')
|
|
1215
1223
|
done()
|
|
1216
1224
|
})
|
|
@@ -1225,54 +1233,50 @@ test(function create_account (done) {
|
|
|
1225
1233
|
delay(500, () => {
|
|
1226
1234
|
log('Logging in')
|
|
1227
1235
|
cu = c.get('/current_user')
|
|
1228
|
-
cu.
|
|
1236
|
+
cu.val = {login_as: {name: 'mike', pass: 'yeah'}}
|
|
1229
1237
|
c.set(cu)
|
|
1230
1238
|
})
|
|
1231
1239
|
|
|
1232
1240
|
// Log out
|
|
1233
1241
|
delay(500, () => {
|
|
1234
|
-
assert(c.get('/current_user').logged_in)
|
|
1242
|
+
assert(c.get('/current_user').val.logged_in)
|
|
1235
1243
|
log('Logging out')
|
|
1236
|
-
cu.logout = true; c.set(cu)
|
|
1244
|
+
cu.val.logout = true; c.set(cu)
|
|
1237
1245
|
})
|
|
1238
1246
|
|
|
1239
1247
|
// Create bob and log in as bob
|
|
1240
1248
|
delay(400, () => {
|
|
1241
1249
|
log('Creating bob')
|
|
1242
|
-
assert(!cu.logged_in, '3 logged in')
|
|
1243
|
-
cu.create_account = {name: 'bob', email: 'b@o.b', pass: 'boob'}
|
|
1250
|
+
assert(!cu.val.logged_in, '3 logged in')
|
|
1251
|
+
cu.val.create_account = {name: 'bob', email: 'b@o.b', pass: 'boob'}
|
|
1244
1252
|
c.set(cu)
|
|
1245
1253
|
|
|
1246
1254
|
log('Logging in as bob')
|
|
1247
|
-
delete cu.create_account
|
|
1248
|
-
cu.login_as = {name: 'bob', pass: 'boob'}
|
|
1255
|
+
delete cu.val.create_account
|
|
1256
|
+
cu.val.login_as = {name: 'bob', pass: 'boob'}
|
|
1249
1257
|
c.set(cu)
|
|
1250
1258
|
})
|
|
1251
1259
|
|
|
1252
1260
|
// Log out
|
|
1253
1261
|
delay(600, () => {
|
|
1254
|
-
assert(cu.logged_in)
|
|
1255
|
-
assert(cu.user.
|
|
1256
|
-
&& cu.user.email === 'b@o.b'
|
|
1257
|
-
&& cu.user.pass === undefined
|
|
1258
|
-
&& cu.user.key.match(/\/user\/.*/),
|
|
1259
|
-
'Bad user', cu)
|
|
1262
|
+
assert(cu.val.logged_in)
|
|
1263
|
+
assert(cu.val.user.link === '/user/bob')
|
|
1260
1264
|
|
|
1261
1265
|
log('Now let\'s log out!')
|
|
1262
|
-
cu.logout = true; c.set(cu)
|
|
1266
|
+
cu.val.logout = true; c.set(cu)
|
|
1263
1267
|
})
|
|
1264
1268
|
|
|
1265
1269
|
// Log back in as boob
|
|
1266
1270
|
delay(600, () => {
|
|
1267
1271
|
log('Logging back in as boob')
|
|
1268
|
-
assert(!cu.logged_in, 'Still logged in, as ' + cu.key)
|
|
1269
|
-
cu.login_as = {name: 'bob', pass:'boob'}
|
|
1272
|
+
assert(!cu.val.logged_in, 'Still logged in, as ' + cu.key)
|
|
1273
|
+
cu.val.login_as = {name: 'bob', pass:'boob'}
|
|
1270
1274
|
c.set(cu)
|
|
1271
1275
|
})
|
|
1272
1276
|
|
|
1273
1277
|
delay(600, () => {
|
|
1274
|
-
assert(cu.logged_in)
|
|
1275
|
-
assert(cu.user.
|
|
1278
|
+
assert(cu.val.logged_in)
|
|
1279
|
+
assert(cu.val.user.link === '/user/bob')
|
|
1276
1280
|
done()
|
|
1277
1281
|
})
|
|
1278
1282
|
})
|
|
@@ -1375,7 +1379,7 @@ test(function connections_2 (done) {
|
|
|
1375
1379
|
test(function flashbacks (done) {
|
|
1376
1380
|
// We have an echo canceler. If you set state, it shouldn't send the
|
|
1377
1381
|
// same state back to you, but it should send it to everyone else. But if
|
|
1378
|
-
// the state is changed in a
|
|
1382
|
+
// the state is changed in a setter handler, it *should* send you
|
|
1379
1383
|
// changes.
|
|
1380
1384
|
|
|
1381
1385
|
var port = 3873
|
|
@@ -1384,7 +1388,7 @@ test(function flashbacks (done) {
|
|
|
1384
1388
|
var s = require('../statebus').serve({port: port, file_store: false})
|
|
1385
1389
|
s.label = 's'
|
|
1386
1390
|
|
|
1387
|
-
s('x').
|
|
1391
|
+
s('x').setter = (o, t) => {
|
|
1388
1392
|
log('Saving x with', o)
|
|
1389
1393
|
o.x++ // Change the value of o.x a little
|
|
1390
1394
|
t.done(o)
|
|
@@ -1423,12 +1427,12 @@ test(function common_time (done) {
|
|
|
1423
1427
|
b.honk = 3
|
|
1424
1428
|
|
|
1425
1429
|
// Define a `front' that proxies for `back'
|
|
1426
|
-
b('front').
|
|
1430
|
+
b('front').getter = () => {
|
|
1427
1431
|
var copy = b.clone(b.get('back'))
|
|
1428
1432
|
copy.key = 'front'
|
|
1429
1433
|
return copy
|
|
1430
1434
|
}
|
|
1431
|
-
b('front').
|
|
1435
|
+
b('front').setter = (o, t) => {
|
|
1432
1436
|
var copy = b.clone(o)
|
|
1433
1437
|
copy.key = 'back'
|
|
1434
1438
|
|
|
@@ -1607,8 +1611,8 @@ if (false) {
|
|
|
1607
1611
|
|
|
1608
1612
|
// Make stuff as user A
|
|
1609
1613
|
var cu = c.get('/current_user')
|
|
1610
|
-
c.set({key: '/current_user', create_account: {name: 'a', pass: 'a'}})
|
|
1611
|
-
c.set({key: '/current_user', login_as: {name: 'a', pass: 'a'}})
|
|
1614
|
+
c.set({key: '/current_user', val: {create_account: {name: 'a', pass: 'a'}}})
|
|
1615
|
+
c.set({key: '/current_user', val: {login_as: {name: 'a', pass: 'a'}}})
|
|
1612
1616
|
var a_closet = c.get('/user/a/foo')
|
|
1613
1617
|
var a_private = c.get('/user/a/private/foo')
|
|
1614
1618
|
|
|
@@ -1620,14 +1624,14 @@ if (false) {
|
|
|
1620
1624
|
// User A can see it
|
|
1621
1625
|
delay(450, ()=> {
|
|
1622
1626
|
log('1. Now curr user is', cu)
|
|
1623
|
-
assert(cu.logged_in == true, 'not logged in')
|
|
1627
|
+
assert(cu.val.logged_in == true, 'not logged in')
|
|
1624
1628
|
log('closet is', a_closet)
|
|
1625
1629
|
assert(a_closet._ === 3, 'closet not right')
|
|
1626
1630
|
assert(a_private._ === 4, 'private not right')
|
|
1627
1631
|
|
|
1628
1632
|
// Set up User B
|
|
1629
|
-
c.set({key: '/current_user', create_account: {name: 'b', pass: 'b'}})
|
|
1630
|
-
c.set({key: '/current_user', login_as: {name: 'b', pass: 'b'}})
|
|
1633
|
+
c.set({key: '/current_user', val: {create_account: {name: 'b', pass: 'b'}}})
|
|
1634
|
+
c.set({key: '/current_user', val: {login_as: {name: 'b', pass: 'b'}}})
|
|
1631
1635
|
})
|
|
1632
1636
|
|
|
1633
1637
|
// User B can't see private stuff
|
|
@@ -1660,12 +1664,12 @@ if (false) {
|
|
|
1660
1664
|
*/
|
|
1661
1665
|
|
|
1662
1666
|
var user = 3
|
|
1663
|
-
bus('user').
|
|
1667
|
+
bus('user').getter =
|
|
1664
1668
|
function (k) {
|
|
1665
1669
|
return {user: user}
|
|
1666
1670
|
}
|
|
1667
1671
|
|
|
1668
|
-
bus('user').
|
|
1672
|
+
bus('user').setter =
|
|
1669
1673
|
function (o) {
|
|
1670
1674
|
if (o.funny)
|
|
1671
1675
|
bus.set({key: 'user', user: 'funny'})
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "statebus",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.5",
|
|
4
4
|
"description": "Synchronize state.",
|
|
5
5
|
"main": "statebus.js",
|
|
6
6
|
"scripts": {
|
|
@@ -10,9 +10,8 @@
|
|
|
10
10
|
"repository": "invisible-college/statebus",
|
|
11
11
|
"files": [
|
|
12
12
|
"statebus.js",
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"node_modules/braidify",
|
|
13
|
+
"client-library.js",
|
|
14
|
+
"server-library.js",
|
|
16
15
|
"extras/tests.js",
|
|
17
16
|
"extras/tcp-bind.js"
|
|
18
17
|
],
|