diff options
author | Bernhard Posselt <nukeawhale@gmail.com> | 2013-04-11 20:32:34 +0200 |
---|---|---|
committer | Bernhard Posselt <nukeawhale@gmail.com> | 2013-04-11 20:32:34 +0200 |
commit | ce6b20c59e1140867f2353361d3524e3baeb4580 (patch) | |
tree | 7671d0e231ef7c2f5098a3b451b524eb536f0faa /js | |
parent | a9fb379b370a71f268dd501bc6a4e4d04eacc500 (diff) |
properly clear the query cache
Diffstat (limited to 'js')
-rw-r--r-- | js/app/services/bl/feedbl.coffee | 1 | ||||
-rw-r--r-- | js/app/services/models/feedmodel.coffee | 8 | ||||
-rw-r--r-- | js/app/services/models/foldermodel.coffee | 4 | ||||
-rw-r--r-- | js/public/app.js | 19 | ||||
-rw-r--r-- | js/tests/services/bl/feedblSpec.coffee | 4 | ||||
-rw-r--r-- | js/tests/services/models/feedmodelSpec.coffee | 11 | ||||
-rw-r--r-- | js/tests/services/models/foldermodelSpec.coffee | 20 |
7 files changed, 54 insertions, 13 deletions
diff --git a/js/app/services/bl/feedbl.coffee b/js/app/services/bl/feedbl.coffee index f6bd804e5..ef4fbac1c 100644 --- a/js/app/services/bl/feedbl.coffee +++ b/js/app/services/bl/feedbl.coffee @@ -128,6 +128,7 @@ NewLoading, _ExistsError) -> create: (url, parentId=0, onSuccess=null, onFailure=null) -> onSuccess or= -> onFailure or= -> + parentId = parseInt(parentId, 10) if angular.isUndefined(url) or url.trim() == '' throw new Error() diff --git a/js/app/services/models/feedmodel.coffee b/js/app/services/models/feedmodel.coffee index b7e0a4361..5c4473b3a 100644 --- a/js/app/services/models/feedmodel.coffee +++ b/js/app/services/models/feedmodel.coffee @@ -59,7 +59,7 @@ angular.module('News').factory '_FeedModel', angular.isUndefined(item.id) if updateById or updateByUrlHash - @update(data) + @update(data, clearCache) else # if the item is not yet in the name cache it must be added @_urlHash[data.urlHash] = data @@ -71,6 +71,8 @@ angular.module('News').factory '_FeedModel', # if there is no id we just want it to appear in the list else @_data.push(data) + if clearCache + @_invalidateCache() update: (data, clearCache=true) -> @@ -129,7 +131,7 @@ angular.module('News').factory '_FeedModel', getFolderUnreadCount: (folderId) -> - query = new _EqualQuery('folderId', folderId) + query = new _EqualQuery('folderId', parseInt(folderId)) count = 0 for feed in @get(query) count += feed.unreadCount @@ -138,7 +140,7 @@ angular.module('News').factory '_FeedModel', getAllOfFolder: (folderId) -> - query = new _EqualQuery('folderId', folderId) + query = new _EqualQuery('folderId', parseInt(folderId)) return @get(query) diff --git a/js/app/services/models/foldermodel.coffee b/js/app/services/models/foldermodel.coffee index 647ec790f..eb1059fc8 100644 --- a/js/app/services/models/foldermodel.coffee +++ b/js/app/services/models/foldermodel.coffee @@ -50,7 +50,7 @@ angular.module('News').factory '_FolderModel', angular.isUndefined(item.id) if updateById or updateByName - @update(data) + @update(data, clearCache) else # if the item is not yet in the name cache it must be added @_nameCache[data.name] = data @@ -62,6 +62,8 @@ angular.module('News').factory '_FolderModel', # if there is no id we just want it to appear in the list else @_data.push(data) + if clearCache + @_invalidateCache() update: (data, clearCache=true) -> diff --git a/js/public/app.js b/js/public/app.js index 761f2fac7..e9a35087a 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -745,6 +745,7 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. } onSuccess || (onSuccess = function() {}); onFailure || (onFailure = function() {}); + parentId = parseInt(parentId, 10); if (angular.isUndefined(url) || url.trim() === '') { throw new Error(); } @@ -1361,13 +1362,16 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. updateById = angular.isDefined(data.id) && angular.isDefined(this.getById(data.id)); updateByUrlHash = angular.isDefined(item) && angular.isUndefined(item.id); if (updateById || updateByUrlHash) { - return this.update(data); + return this.update(data, clearCache); } else { this._urlHash[data.urlHash] = data; if (angular.isDefined(data.id)) { return FeedModel.__super__.add.call(this, data, clearCache); } else { - return this._data.push(data); + this._data.push(data); + if (clearCache) { + return this._invalidateCache(); + } } } }; @@ -1434,7 +1438,7 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. FeedModel.prototype.getFolderUnreadCount = function(folderId) { var count, feed, query, _i, _len, _ref; - query = new _EqualQuery('folderId', folderId); + query = new _EqualQuery('folderId', parseInt(folderId)); count = 0; _ref = this.get(query); for (_i = 0, _len = _ref.length; _i < _len; _i++) { @@ -1447,7 +1451,7 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. FeedModel.prototype.getAllOfFolder = function(folderId) { var query; - query = new _EqualQuery('folderId', folderId); + query = new _EqualQuery('folderId', parseInt(folderId)); return this.get(query); }; @@ -1516,13 +1520,16 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. updateById = angular.isDefined(data.id) && angular.isDefined(this.getById(data.id)); updateByName = angular.isDefined(item) && angular.isUndefined(item.id); if (updateById || updateByName) { - return this.update(data); + return this.update(data, clearCache); } else { this._nameCache[data.name] = data; if (angular.isDefined(data.id)) { return FolderModel.__super__.add.call(this, data, clearCache); } else { - return this._data.push(data); + this._data.push(data); + if (clearCache) { + return this._invalidateCache(); + } } } }; diff --git a/js/tests/services/bl/feedblSpec.coffee b/js/tests/services/bl/feedblSpec.coffee index 4b534f998..40441f1b8 100644 --- a/js/tests/services/bl/feedblSpec.coffee +++ b/js/tests/services/bl/feedblSpec.coffee @@ -309,4 +309,6 @@ describe 'FeedBl', -> expect(onFailure).toHaveBeenCalled() expect(@FeedModel.getByUrlHash(hex_md5('johns')).error).toBe( - @response.msg)
\ No newline at end of file + @response.msg) + + diff --git a/js/tests/services/models/feedmodelSpec.coffee b/js/tests/services/models/feedmodelSpec.coffee index 1ac76a65e..c73c2149d 100644 --- a/js/tests/services/models/feedmodelSpec.coffee +++ b/js/tests/services/models/feedmodelSpec.coffee @@ -105,4 +105,15 @@ describe 'FeedModel', -> expect(@FeedModel.size()).toBe(1) + it 'should clear invalidate the query cache on adding folder with name', => + item = {faviconLink: null, urlHash: 'hi', test: 'heheh', folderId: 0} + + expect(@FeedModel.getAllOfFolder(0).length).toBe(0) + @FeedModel.add(item, false) + + expect(@FeedModel.getAllOfFolder(0).length).toBe(0) + + item2 = {faviconLink: null, urlHash: 'his', test: 'heheh', folderId: 0} + @FeedModel.add(item2) + expect(@FeedModel.getAllOfFolder(0).length).toBe(2)
\ No newline at end of file diff --git a/js/tests/services/models/foldermodelSpec.coffee b/js/tests/services/models/foldermodelSpec.coffee index d34b2e309..04bf02000 100644 --- a/js/tests/services/models/foldermodelSpec.coffee +++ b/js/tests/services/models/foldermodelSpec.coffee @@ -25,7 +25,7 @@ describe 'FolderModel', -> beforeEach module 'News' - beforeEach inject (@FolderModel, @_Model) => + beforeEach inject (@FolderModel, @_Model, @_EqualQuery) => it 'should extend model', => @@ -93,4 +93,20 @@ describe 'FolderModel', -> expect(@FolderModel.getByName('Hobo').id).toBe(3) expect(@FolderModel.getByName('Hobo').test).toBe('hoho') expect(@FolderModel.getById(3).test).toBe('hoho') - expect(@FolderModel.size()).toBe(1)
\ No newline at end of file + expect(@FolderModel.size()).toBe(1) + + + + it 'should clear invalidate the query cache on adding folder with name', => + item = {name: 'name1', test: 'hi'} + query = new @_EqualQuery('test', 'hi') + + expect(@FolderModel.get(query).length).toBe(0) + @FolderModel.add(item, false) + + expect(@FolderModel.get(query).length).toBe(0) + + item2 = {name: 'name', test: 'hi'} + @FolderModel.add(item2) + + expect(@FolderModel.get(query).length).toBe(2)
\ No newline at end of file |