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