Jim, Yes, but I haven't taken a look in a while. Thank you for reminding me of it! I'm going to use it for my first CouchApp example with json2js.
It saves me a ton of work. :) Ben On Tue, Sep 4, 2012 at 6:55 AM, Jim Klo <[email protected]> wrote: > Hi Ben, > > Granted this is much less framework. But have you seen Kanso? http://kan.so > > It would be nice if your solution used a command like tool rather than having > to script each serialization. > > - Jim > > On Sep 4, 2012, at 2:52 AM, "Ben Atkin" <[email protected]> wrote: > >> I made a couple of npm (node.js) modules for editing CouchDB design >> documents that involves fewer files than python CouchApp, but like >> python CouchApp supports two-way sync. The function source is left >> intact when converting between JavaScript source and JSON. The >> JavaScript source version just shows it in an embedded function >> expression, which makes it syntax highlightable. >> >> http://benatkin.com/2012/09/04/js2json-and-json2js/ >> https://github.com/benatkin/js2json >> https://github.com/benatkin/json2js >> >> Here's a quick example. If I stick this in books.js: >> >> module.exports = { >> "views": { >> "author": { >> "map": function(doc) { >> if (doc.type == 'book') >> emit(doc.author, null); >> } >> }, >> "title": { >> "map": function(doc) { >> if (doc.type == 'book') >> emit(doc.title, null); >> } >> } >> } >> } >> >> ...and run this (after npm install json2js js2json): >> >> var js2json = require('js2json'); >> var json2js = require('json2js'); >> var fs = require('fs'); >> >> var jsSource = fs.readFileSync('books.js', 'utf8'); >> var jsonValue = js2json.convert(jsSource); >> fs.writeFileSync('books.json', JSON.stringify(jsonValue, null, 2) + "\n"); >> var jsSourceFromJson = json2js.convert(jsonValue); >> fs.writeFileSync('books-from-json.js', jsSourceFromJson + "\n"); >> >> ...I get the following in books.json: >> >> { >> "views": { >> "author": { >> "map": "function(doc) {\n if (doc.type == 'book')\n >> emit(doc.author, null);\n}" >> }, >> "title": { >> "map": "function(doc) {\n if (doc.type == 'book')\n >> emit(doc.title, null);\n}" >> } >> } >> } >> >> ...and books-from-json.js is exactly the same as books.js. >> >> I explain it more in my blog post (linked at the top of this message). >> I need to add a cli tool that syncs, a way to handle attachments, and >> a way to handle embedded multiline strings for it to be a >> full-featured design doc editor. I have much bigger plans for this, >> though: I want to break up CouchApps into a bunch of smaller >> documents! The source and tests for these two modules is programmed in >> the same style. I think storing functions in JSON makes CouchDB just a >> little bit like Smalltalk, with a much more familiar language. >> >> Thanks for reading. Feedback welcome and appreciated. >> >> Ben
