class Pettanr.Cache\r
\r
constructor: (options) ->\r
+ @operators = options.operators\r
@data = {}\r
+ @holds = {}\r
_.extend(this, Backbone.Events)\r
\r
# return cached items\r
r\r
else\r
item = items\r
- return_items = @data[item.cache_key()] = @restore(item.cache_key()) || item\r
+ cached_item = @restore(item.cache_key())\r
+ return_items = if cached_item\r
+ cached_item # merge?\r
+ else\r
+ @data[item.cache_key()] = item\r
@refresh(return_items)\r
return_items\r
\r
k = if _.isString(key)\r
key\r
else\r
- key.cache_key() # key = item\r
- @refresh(k)\r
+ key.cache_key()\r
+ item = @data[k]\r
+ #if item\r
+ # @refresh(item)\r
+ \r
+ is_hold: (item) ->\r
+ if @holds[item.cache_key()]\r
+ true\r
+ else\r
+ false\r
+ \r
+ hold: (item) ->\r
+ return @holds[item.cache_key()] if @holds[item.cache_key()]\r
+ @holds[item.cache_key()] = item.clone()\r
+ \r
+ fix: (item) ->\r
+ delete @holds[item.cache_key()]\r
+ @restore(item).fetch()\r
+ \r
+ release: (item) ->\r
+ delete @holds[item.cache_key()]\r
\r
refresh: (item) ->\r
- if item.expire_time\r
- if Date.now() >= return_items.expire_time\r
- @sync(item)\r
- item\r
+ @restore(item.cache_key()).fetch()\r
+ #if item.expire_time\r
+ # if Date.now() >= return_items.expire_time\r
+ # @sync(item)\r
+ #item\r
\r
sync: (item) ->\r
item.fetch().done =>\r
item.expire_time.setTime(Date.now() + 10 * 60 * 1000)\r
\r
+class Pettanr.Cache.Retriever\r
+ \r
+ constructor: (@model, @id) ->\r
+ _.extend(this, Backbone.Events)\r
+ \r
+ retrieve: (force) ->\r
+ empty_item = new @model({id: @id})\r
+ if force\r
+ # query (ex: folders/3?watch)\r
+ @retrieve_force(empty_item)\r
+ else if @id\r
+ # existence item\r
+ item = Pettanr.cache.restore(empty_item)\r
+ if item\r
+ @trigger('retrieve', item)\r
+ else\r
+ empty_item.fetch().done =>\r
+ Pettanr.cache.store(empty_item)\r
+ @trigger('retrieve', empty_item)\r
+ else\r
+ # new item\r
+ @trigger('retrieve', empty_item)\r
+ \r
+ retrieve_force: (item) ->\r
+ item.fetch().done =>\r
+ @trigger('retrieve', item)\r
+ \r
+ edit: (options = {}) ->\r
+ empty_item = new @model({id: @id})\r
+ item = empty_item.hold()\r
+ if options.with_elements\r
+ item = item.with_elements()\r
+ item.fetch().done =>\r
+ if options.with_elements\r
+ item.attributes = item.replaced_attributes({hold: true})\r
+ @trigger('retrieve', item)\r
+ \r