From e2195d9c7b2a9cf10bab381c7a9cfc2329e15d2c Mon Sep 17 00:00:00 2001 From: Joel Jeske Date: Sat, 31 May 2014 14:47:48 -0500 Subject: [PATCH 1/3] Fixed typo of referencing but not calling function --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2c3459f..9edaff3 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ angular.module('myModuleName') * find all persons older than 40 years */ - var myQuery = $indexedDB.queryBuilder().$index('age_idx').$gt(40).$asc.compile(); + var myQuery = $indexedDB.queryBuilder().$index('age_idx').$gt(40).$asc().compile(); myObjectStore.each(myQuery).then(function(cursor){ cursor.key; cursor.value; From a12fcc36b0bac4d35721f22eafd6acc9baeae357 Mon Sep 17 00:00:00 2001 From: Joel Jeske Date: Sat, 31 May 2014 14:58:12 -0500 Subject: [PATCH 2/3] Added new QueryBuilder option to specify a function to be called to determine if it should be added to the result set. Fixed error in where is called for each cursor but promise resolve can only be called once --- src/indexeddb.js | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/indexeddb.js b/src/indexeddb.js index ebeb768..885eba7 100644 --- a/src/indexeddb.js +++ b/src/indexeddb.js @@ -203,7 +203,7 @@ angular.module('xc.indexedDB', []).provider('$indexedDB', function() { req.onnotify = function(e) { $rootScope.$apply(function(){ d.notify(e.target.result); - }); + }); } req.onerror = function(e) { $rootScope.$apply(function(){ @@ -252,7 +252,7 @@ angular.module('xc.indexedDB', []).provider('$indexedDB', function() { req.onnotify = function(e) { $rootScope.$apply(function(){ d.notify(e.target.result); - }); + }); } req.onerror = function(e) { $rootScope.$apply(function(){ @@ -423,10 +423,10 @@ angular.module('xc.indexedDB', []).provider('$indexedDB', function() { * * @params {object} options optional query parameters, see defaultQueryOptions * and QueryBuilder for details - * @returns {object} IDBCursor ...wrapped in a promise + * @returns {object} Array of values from store ...wrapped in a promise */ "each": function(options){ - var d = $q.defer(); + var results = [], d = $q.defer(); return this.internalObjectStore(this.storeName, READWRITE).then(function(store){ var req; options = options || defaultQueryOptions; @@ -436,9 +436,16 @@ angular.module('xc.indexedDB', []).provider('$indexedDB', function() { req = store.openCursor(options.keyRange, options.direction); } req.onsuccess = req.onerror = function(e) { - $rootScope.$apply(function(){ - d.resolve(e.target.result); - }); + var cursor = e.target.result; + if(cursor){ + if(!options.filter || options.filter(cursor.value)) + results.push(cursor.value); + cursor.continue(); + } else { + $rootScope.$apply(function(){ + d.resolve(results); + }); + } }; return d.promise; }); @@ -588,6 +595,20 @@ angular.module('xc.indexedDB', []).provider('$indexedDB', function() { this.result.useIndex = indexName; return this; }, + /** + * @ngdoc method + * @name QueryBuilder.$filter + * @function + * + * @description optionally specify an function to determine if the item should be included + * + * @params {function} filter filter function to use + * @returns {object} this QueryBuilder, for chaining params + */ + "$filter": function(filter) { + this.result.filter = filter; + return this; + }, /** * @ngdoc method * @name QueryBuilder.compile From d54ffe6b11d5c3c6a422e6c00a90eb4f8bd5c866 Mon Sep 17 00:00:00 2001 From: Joel Jeske Date: Sat, 26 Jul 2014 18:41:27 -0500 Subject: [PATCH 3/3] Corrected defaults for query builder to maintain original state of defaults --- src/indexeddb.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/indexeddb.js b/src/indexeddb.js index 885eba7..fcf873e 100644 --- a/src/indexeddb.js +++ b/src/indexeddb.js @@ -460,7 +460,7 @@ angular.module('xc.indexedDB', []).provider('$indexedDB', function() { * @description utility object to easily create IDBKeyRange for cursor queries */ var QueryBuilder = function() { - this.result = defaultQueryOptions; + this.result = angular.extend({}, defaultQueryOptions); }; QueryBuilder.prototype = { /**