diff options
Diffstat (limited to 'js/dojo-1.6/dojox/data/CouchDBRestStore.js')
| -rw-r--r-- | js/dojo-1.6/dojox/data/CouchDBRestStore.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/js/dojo-1.6/dojox/data/CouchDBRestStore.js b/js/dojo-1.6/dojox/data/CouchDBRestStore.js new file mode 100644 index 0000000..a3d09a3 --- /dev/null +++ b/js/dojo-1.6/dojox/data/CouchDBRestStore.js @@ -0,0 +1,92 @@ +/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.CouchDBRestStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.data.CouchDBRestStore"] = true;
+dojo.provide("dojox.data.CouchDBRestStore");
+dojo.require("dojox.data.JsonRestStore");
+
+
+
+// A CouchDBRestStore is an extension of JsonRestStore to handle CouchDB's idiosyncrasies, special features,
+// and deviations from standard HTTP Rest.
+// NOTE: CouchDB is not designed to be run on a public facing network. There is no access control
+// on database documents, and you should NOT rely on client side control to implement security.
+
+
+dojo.declare("dojox.data.CouchDBRestStore",
+ dojox.data.JsonRestStore,
+ {
+ save: function(kwArgs){
+ var actions = this.inherited(arguments); // do the default save and then update for version numbers
+ var prefix = this.service.servicePath;
+ for(var i = 0; i < actions.length; i++){
+ // need to update the item's version number after it has been committed
+ (function(item,dfd){
+ dfd.addCallback(function(result){
+ if(result){
+ item.__id = prefix + result.id; // update the object with the results of the post
+ item._rev = result.rev;
+ }
+ return result;
+ });
+ })(actions[i].content,actions[i].deferred);
+ }
+ },
+ fetch: function(args){
+ // summary:
+ // This only differs from JsonRestStore in that it, will put the query string the query part of the URL and it handles start and count
+ args.query = args.query || '_all_docs?';
+ if(args.start){
+ args.query = (args.query ? (args.query + '&') : '') + 'startkey=' + args.start;
+ delete args.start;
+ }
+ if(args.count){
+ args.query = (args.query ? (args.query + '&') : '') + 'limit=' + args.count;
+ delete args.count;
+ }
+ return this.inherited(arguments);
+ },
+ _processResults: function(results){
+ var rows = results.rows;
+ if(rows){
+ var prefix = this.service.servicePath;
+ var self = this;
+ for(var i = 0; i < rows.length;i++){
+ var realItem = rows[i].value;
+ realItem.__id= prefix + rows[i].id;
+ realItem._id= rows[i].id;
+ realItem._loadObject= dojox.rpc.JsonRest._loader;
+ rows[i] = realItem;
+ }
+ return {totalCount:results.total_rows, items:results.rows};
+ }else{
+ return {items:results};
+ }
+
+ }
+ }
+);
+
+// create a set of stores
+dojox.data.CouchDBRestStore.getStores = function(couchServerUrl){
+ var dfd = dojo.xhrGet({
+ url: couchServerUrl+"_all_dbs",
+ handleAs: "json",
+ sync: true
+ });
+ var stores = {};
+ dfd.addBoth(function(dbs){
+ for(var i = 0; i < dbs.length; i++){
+ stores[dbs[i]] = new dojox.data.CouchDBRestStore({target:couchServerUrl + dbs[i],idAttribute:"_id"});
+ }
+ return stores;
+ });
+ return stores;
+};
+
+}
|
