2014-09-20 11:49:04 -04:00
|
|
|
Revision =
|
|
|
|
fromTime: (time) ->
|
|
|
|
time = if time then new Date(time) else new Date()
|
|
|
|
return time.getTime().toString(16)
|
|
|
|
compare: (a, b) ->
|
2014-11-27 06:56:58 -05:00
|
|
|
return 0 if not a and not b
|
|
|
|
return -1 if not a
|
|
|
|
return 1 if not b
|
2014-09-20 11:49:04 -04:00
|
|
|
return 1 if a.length > b.length
|
|
|
|
return -1 if a.length < b.length
|
|
|
|
return 1 if a > b
|
|
|
|
return -1 if a < b
|
|
|
|
return 0
|
|
|
|
|
|
|
|
exports.Revision = Revision
|
|
|
|
|
|
|
|
class AttachedCache
|
|
|
|
constructor: (opt_prop, @tag) ->
|
|
|
|
@prop = opt_prop
|
|
|
|
if typeof @tag == 'undefined'
|
|
|
|
@tag = opt_prop
|
|
|
|
@prop = '_cache'
|
|
|
|
get: (obj, otherwise) ->
|
|
|
|
tag = @tag(obj)
|
|
|
|
cache = @_getCache(obj)
|
|
|
|
if cache? and cache.tag == tag
|
|
|
|
return cache.value
|
|
|
|
value = if typeof otherwise == 'function' then otherwise() else otherwise
|
|
|
|
@_setCache(obj, {tag: tag, value: value})
|
|
|
|
return value
|
2015-01-18 12:09:17 -05:00
|
|
|
drop: (obj) ->
|
|
|
|
if obj[@prop]?
|
|
|
|
obj[@prop] = undefined
|
2014-09-20 11:49:04 -04:00
|
|
|
_getCache: (obj) -> obj[@prop]
|
|
|
|
_setCache: (obj, value) ->
|
|
|
|
if not Object::hasOwnProperty.call obj, @prop
|
|
|
|
Object.defineProperty obj, @prop, writable: true
|
|
|
|
obj[@prop] = value
|
|
|
|
|
|
|
|
exports.AttachedCache = AttachedCache
|