OSDN Git Service

operator move to cache
[pettanr/pettanr.git] / app / assets / javascripts / pettanr / cache.js.coffee
1 class Pettanr.Cache\r
2   \r
3   constructor: (options) ->\r
4     @operators = options.operators\r
5     @data = {}\r
6     _.extend(this, Backbone.Events)\r
7   \r
8   # return cached items\r
9   store: (items) ->\r
10     if _.isArray(items)\r
11       return_items = _.map items, (item) =>\r
12         r = @restore(item.cache_key())\r
13         r = @store(item) if !r\r
14         r\r
15     else\r
16       item = items\r
17       cached_item = @restore(item.cache_key())\r
18       return_items = if cached_item\r
19         cached_item  # merge?\r
20       else\r
21         @data[item.cache_key()] = item\r
22       @refresh(return_items)\r
23     return_items\r
24   \r
25   restore: (key) ->\r
26     k = if _.isString(key)\r
27       key\r
28     else\r
29       key.cache_key()\r
30     item = @data[k]\r
31     #if item\r
32     #  @refresh(item)\r
33   \r
34   retrieve: (model, id, force) ->\r
35     empty_item = new model({id: id})\r
36     if force\r
37       # query\r
38       empty_item.fetch().done =>\r
39         @trigger('retrieve', empty_item)\r
40     else if id\r
41       # existence item\r
42       item = @store(empty_item)\r
43       if item\r
44         @trigger('retrieve', item)\r
45       else\r
46         empty_item.fetch().done =>\r
47           @store(empty_item)\r
48           @trigger('retrieve', empty_item)\r
49     else\r
50       # new item\r
51       @trigger('retrieve', empty_item)\r
52   \r
53   edit: (model, id) ->\r
54     @listenTo(this, 'retrieve', @edit_retrieve)\r
55     @retrieve(model, id)\r
56   \r
57   edit_retrieve: (item) ->\r
58     editting_item = item.clone()\r
59     # get latest item\r
60     editting_item.fetch().done =>\r
61       @trigger('edit', editting_item)\r
62   \r
63   refresh: (item) ->\r
64     if item.expire_time\r
65       if Date.now() >= return_items.expire_time\r
66         @sync(item)\r
67     item\r
68   \r
69   sync: (item) ->\r
70     item.fetch().done =>\r
71       item.expire_time.setTime(Date.now() + 10 * 60 * 1000)\r
72   \r
73 class Pettanr.Cache.Retriever\r
74   \r
75   constructor: (@model, @id) ->\r
76     _.extend(this, Backbone.Events)\r
77   \r
78   retrieve: (force) ->\r
79     empty_item = new @model({id: @id})\r
80     if force\r
81       # query\r
82       empty_item.fetch().done =>\r
83         @trigger('retrieve', empty_item)\r
84     else if @id\r
85       # existence item\r
86       item = Pettanr.cache.restore(empty_item)\r
87       if item\r
88         @trigger('retrieve', item)\r
89       else\r
90         empty_item.fetch().done =>\r
91           Pettanr.cache.store(empty_item)\r
92           @trigger('retrieve', empty_item)\r
93     else\r
94       # new item\r
95       @trigger('retrieve', empty_item)\r
96   \r