incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jim Klo <jim....@sri.com>
Subject Re: ANN: js2json and json2js (for CouchApps)
Date Tue, 04 Sep 2012 13:55:09 GMT
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" <ben@benatkin.com> 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

Mime
View raw message