Created
September 12, 2011 14:42
-
-
Save pgte/1211432 to your computer and use it in GitHub Desktop.
design doc source
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"_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