Skip to content

Commit

Permalink
Add a document validation script, and sync that also.
Browse files Browse the repository at this point in the history
  • Loading branch information
isaacs committed Mar 11, 2010
1 parent 347d74c commit b234005
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
29 changes: 29 additions & 0 deletions design/validate_doc_update.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
function (newDoc, oldDoc, user) {
var semver = /v?([0-9]+)\.([0-9]+)\.([0-9]+)([a-zA-Z-][a-zA-Z0-9-]*)?/;

function assert (ok, message) {
if (!ok) throw {forbidden:message};
}

// TODO: If the user doesn't have access to update this thing,
// then throw an unauthorized error

// if the newDoc is an {error:"blerg"}, then throw that right out.
// something detected in the _updates/package script.
if (newDoc.forbidden) throw {forbidden:newDoc.forbidden};

// make sure all the dist-tags and versions are valid semver
assert(newDoc["dist-tags"], "must have dist-tags");
assert(newDoc.versions, "must have versions");

for (var i in newDoc["dist-tags"]) {
assert(semver(newDoc["dist-tags"][i]),
"dist-tag "+i+" is not a valid version: "+newDoc["dist-tags"][i]);
assert(newDoc["dist-tags"][i] in newDoc.versions,
"dist-tag "+i+" refers to non-existent version: "+newDoc["dist-tags"][i]);
}
for (var i in newDoc.versions) {
assert(semver(i),
"version "+i+" is not a valid version");
}
}
5 changes: 4 additions & 1 deletion sync.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ var couchdb = require('./deps/node-couchdb/lib/couchdb'),
sys = require('sys'),
url = require('url'),

ddoc = {_id:"_design/app",shows:{},updates:{}},
ddoc = {_id:"_design/app",shows:{},updates:{}, validate_doc_update:""},

dev = false,
dburl = "http://localhost:5984/jsregistry",
Expand All @@ -17,6 +17,9 @@ var couchdb = require('./deps/node-couchdb/lib/couchdb'),
"design/shows/package.js" : function (data) {
ddoc.shows.package = data;
},
"design/validate_doc_update.js" : function (data) {
ddoc.validate_doc_update = data;
},
"design/updates/package.js" : function (data) {
ddoc.updates.package = data;
}
Expand Down

0 comments on commit b234005

Please sign in to comment.