Update.
This commit is contained in:
+65
@@ -0,0 +1,65 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "scheduler" for Scheduler, Future
|
||||
import "timer" for Timer
|
||||
|
||||
class CacheService {
|
||||
construct new() {
|
||||
_cache = {}
|
||||
}
|
||||
|
||||
get(key) {
|
||||
var op = async { |k|
|
||||
Timer.sleep(1)
|
||||
return _cache.containsKey(k) ? _cache[k] : null
|
||||
}
|
||||
return await op(key)
|
||||
}
|
||||
|
||||
set(key, value) {
|
||||
var op = async { |k, v|
|
||||
Timer.sleep(1)
|
||||
_cache[k] = v
|
||||
return true
|
||||
}
|
||||
return await op(key, value)
|
||||
}
|
||||
|
||||
has(key) {
|
||||
var op = async { |k|
|
||||
return _cache.containsKey(k)
|
||||
}
|
||||
return await op(key)
|
||||
}
|
||||
|
||||
clear() {
|
||||
var op = async {
|
||||
_cache = {}
|
||||
return true
|
||||
}
|
||||
return await op()
|
||||
}
|
||||
|
||||
getOrSet(key, defaultValue) {
|
||||
if (this.has(key)) {
|
||||
return this.get(key)
|
||||
}
|
||||
this.set(key, defaultValue)
|
||||
return defaultValue
|
||||
}
|
||||
}
|
||||
|
||||
var cache = CacheService.new()
|
||||
|
||||
System.print(cache.has("foo")) // expect: false
|
||||
System.print(cache.get("foo")) // expect: null
|
||||
|
||||
System.print(cache.set("foo", "bar")) // expect: true
|
||||
System.print(cache.has("foo")) // expect: true
|
||||
System.print(cache.get("foo")) // expect: bar
|
||||
|
||||
System.print(cache.clear()) // expect: true
|
||||
System.print(cache.has("foo")) // expect: false
|
||||
|
||||
System.print(cache.getOrSet("baz", "default")) // expect: default
|
||||
System.print(cache.get("baz")) // expect: default
|
||||
Reference in New Issue
Block a user