Skip to content

Instantly share code, notes, and snippets.

@pgte
Created September 12, 2011 14:42
Show Gist options
  • Save pgte/1211432 to your computer and use it in GitHub Desktop.
Save pgte/1211432 to your computer and use it in GitHub Desktop.
design doc source
{
"_id": "_design/CQS/test10",
"_rev": "1-b906ada82e09f7dd1f85f4f8ee0e1b7b",
"name": "test10",
"ApproximateNumberOfMessages": 0,
"ApproximateNumberOfMessagesNotVisible": 0,
"VisibilityTimeout": 30,
"CreatedTimestamp": "2011-09-12T14:37:35.981Z",
"LastModifiedTimestamp": "2011-09-12T14:37:35.981Z",
"Policy": null,
"MaximumMessageSize": 8192,
"MessageRetentionPeriod": 345600,
"QueueArn": null,
"views": {
"visible_at": {
"map": "function (doc) {\n var NAME = \"test10\";\n var my_msg_id = function (doc) {\n var for_me = /^CQS\\/test10\\/(.*)$/;\n var match = for_me.exec(doc._id);\n if(!match)\n return null;\n\n var msg_id = match[1];\n match = /^([0-9a-f]{32})($|\\/(.*)$)/.exec(msg_id);\n if(!match)\n throw({forbidden: \"Invalid message id: \" + msg_id});\n\n return {'id':match[1], 'extra':match[3]};\n};\n var key, val, a;\n\n var msg_id = my_msg_id(doc);\n if(msg_id && doc.visible_at) {\n key = [doc.visible_at];\n\n // The client must be able to check out (\"receive\") the message using this view data,\n // which means MVCC stuff and anything else necessary.\n val = {\"_id\":doc._id, \"_rev\":doc._rev};\n for(a in doc)\n if(/^[A-Z]/.test(a))\n val[a] = doc[a];\n\n emit(key, val);\n }\n}",
"reduce": "_count"
}
},
"validate_doc_update": "function (newDoc, oldDoc, userCtx, secObj) {\n var NAME = \"test10\";\n\n var my_msg_id = function (doc) {\n var for_me = /^CQS\\/test10\\/(.*)$/;\n var match = for_me.exec(doc._id);\n if(!match)\n return null;\n\n var msg_id = match[1];\n match = /^([0-9a-f]{32})($|\\/(.*)$)/.exec(msg_id);\n if(!match)\n throw({forbidden: \"Invalid message id: \" + msg_id});\n\n return {'id':match[1], 'extra':match[3]};\n};\n\n if(! /^CQS\\//.test(newDoc._id)) // A simple test, hopefully future-proof\n throw({forbidden: \"This database is for CQS only\"});\n\n var msg_id = my_msg_id(newDoc); // Message ID is the part within the queue namespace.\n if(!msg_id)\n return; // Another ddoc will handle this validation.\n\n var good_keys = [ \"_id\", \"_rev\", \"_revisions\", \"_deleted\"\n , 'SenderId'\n , 'SentTimestamp'\n , 'visible_at'\n , 'ApproximateReceiveCount'\n , 'ApproximateFirstReceiveTimestamp'\n , 'MD5OfMessageBody'\n , 'Body'\n\n // Some extensions\n , 'ReceiverId'\n ];\n\n var key;\n for (key in newDoc)\n if(good_keys.indexOf(key) === -1)\n throw({forbidden: \"Invalid field: \" + key});\n\n if(newDoc._deleted) {\n if(oldDoc.ReceiverId !== userCtx.name)\n throw {forbidden: 'You may not delete this document'};\n\n return;\n }\n\n if(!newDoc.visible_at)\n throw {forbidden: 'Must set visible_at'};\n\n if(oldDoc) {\n // Checkout (\"receive\")\n if(newDoc.ReceiverId !== userCtx.name)\n throw({forbidden: 'Must set ReceiverId to your name: ' + JSON.stringify(userCtx.name)});\n\n } else {\n // Message send\n if(newDoc.SenderId !== userCtx.name)\n throw({forbidden: 'Must set SenderId to your name: ' + JSON.stringify(userCtx.name)});\n }\n}",
"_attachments": {
"cqs/api.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-+JLuB/t6XYn/0rEpKpgVCQ==",
"length": 1379,
"stub": true
},
"cqs/couch.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-hAr/e3FslxmPenXGl6rgsA==",
"length": 6058,
"stub": true
},
"cqs/ddoc.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-RZqd/VwPBCbigWaLUXDWyA==",
"length": 9503,
"stub": true
},
"cqs/lib.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-CdWtGrCpEk9XZkO42GDTzw==",
"length": 2562,
"stub": true
},
"cqs/message.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-nMtW+ydvtuWuqZy/pkuS1A==",
"length": 4957,
"stub": true
},
"cqs/queue.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-HFJXjz5LtsSmYnFzqVbFdg==",
"length": 9710,
"stub": true
},
"cqs/test/all.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-o3ckU96faHKat7g9Jlnbmw==",
"length": 9757,
"stub": true
},
"cqs/test/run.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-kxHXvPGEEn9pIFUTRK6m2Q==",
"length": 4673,
"stub": true
},
"cqs/assert.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-T+9Cacx+2rjtV6j/UgtLaA==",
"length": 609,
"stub": true
},
"cqs/events.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-e6Nz6pzO84q5yLeK/g8hRQ==",
"length": 4215,
"stub": true
},
"cqs/fs.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-bl2BYt4x4+BaRcPS8dxIOw==",
"length": 66,
"stub": true
},
"cqs/log4js.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-guGhQclsyj3HKLHZNqdbhA==",
"length": 900,
"stub": true
},
"cqs/path.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-w9ZF6GIDL1ZzeTVhxdLjKw==",
"length": 250,
"stub": true
},
"cqs/querystring.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-n/7Re9Mt0bBGBRgqYI5vLw==",
"length": 547,
"stub": true
},
"cqs/util.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-E5DPMr+aUtnWwVpwrMi/qA==",
"length": 103,
"stub": true
},
"jquery-1.6.1.min.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-7kr3wMEvLkjm0fwgRQejdA==",
"length": 91342,
"stub": true
},
"json2.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-sVDtjS0ILKfkF0t8V/xJtA==",
"length": 17413,
"stub": true
},
"main.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-oUftGHP7TSQDxG0xic01AQ==",
"length": 2267,
"stub": true
},
"request.jquery.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-fXwwrJRhOldqgtQyAKuuww==",
"length": 6385,
"stub": true
},
"require.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-aiE+Us/CDwKCacmNkCDhEQ==",
"length": 78199,
"stub": true
},
"test.html": {
"content_type": "text/html; charset=utf-8",
"revpos": 1,
"digest": "md5-gYDFnKV6E1Xfx9L5wRqDSg==",
"length": 390,
"stub": true
},
"boot.js": {
"content_type": "application/javascript",
"revpos": 1,
"digest": "md5-csUZdrMjZrPjBhDX45nl/A==",
"length": 167,
"stub": true
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment