|
// 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
|