Yes, jq is json manipulation tool, so it can’t format javascript function in 
“map” attribute, it treats it just as a string.

The thing with line-breaks is that even while document with multiline formatted 
function is a valid design document (i.e. the function can be evaluated as 
javascript) it is not a valid json, because json does not allow un-escaped 
line-breaks. Curl and Fauxtron stripping\escaping line-breaks during upload, so 
formatting doc in a file and then uploading it works.

For the reverse operation in just a command line, from top of my head, 
something like this should do the trick:

$ curl http://localhost:5984/koi/_design/ddoc | jq . | perl -pe 's/\\n/\n/g'

Here curl pulls the ddoc, jq formats it to a pretty printed json, perl replaces 
escaped line-breaks with the real ones. This could be done with different 
tools, obviously, just a question of personal preferences.


Regards,
Eric.


> On Aug 14, 2017, at 12:41, Ronny Berndt <[email protected]> wrote:
> 
> @Stefan:
> Thanks for the hint, couchdb-compile looks nice!
> 
> @Eric
> If i search for that, i saw jq as json tool.
> 
> jq formats the key/value pairs of the json well, but i doesn’t see a 
> possibility to
> format the line breaks in the functions (e.g. map) itself? 
> So after download \n has to be converted to a real linebreak. couchdb-compile 
> will escape to linebreak to \n…
> 
> Regards, Ronny
> 
>> Am 14.08.2017 um 17:24 schrieb Eiri <[email protected]>:
>> 
>> To the first one any pretty printing command line utility will work, I 
>> really like jq (https://stedolan.github.io/jq/)
>> 
>> So with my example just piping to jq with no arguments gives formatted json 
>> which then could be sent to file:
>> 
>> $ curl http://localhost:5984/koi/_design/ddoc -s | jq .
>> {
>> "_id": "_design/ddoc",
>> "_rev": "2-969b8f6ac9911b15c7884d9d5d527093",
>> "views": {
>>   "name": {
>>     "map": "function(doc) { emit(doc.name, doc.age); }"
>>   }
>> }
>> }
>> $ curl http://localhost:5984/koi/_design/ddoc -s | jq . > ddoc2.json
>> 
>> In reality jq is much more powerful tool, so check it out if you haven’t 
>> seen it before.
>> 
>> 
>> For the second one, if I understand the question correctly, no, a design 
>> document doesn’t need to be no-linebreaks json. As long as its values are 
>> strings and evaluates to a proper javascript it could be formatted as 
>> necessary, json and javascript function parts alike, i.e. the following is 
>> perfectly valid design document:
>> 
>> {
>> "_id": "_design/ddoc",
>> "_rev": "2-969b8f6ac9911b15c7884d9d5d527093",
>> "views": {
>>   "name": {
>>     "map": "function(doc) {
>>        var name = doc.name;
>>        var age = doc.age;
>>        emit(name, age); 
>>     }"
>>   }
>> }
>> }
>> 
>> 
>> 
>> Regards,
>> Eric
>> 
>> 
>>> On Aug 14, 2017, at 11:50, Ronny Berndt <[email protected]> wrote:
>>> 
>>> Hi Eric,
>>> 
>>> thank you for your answer.
>>> 
>>> My problem is, if you get the design doc, you get one line of json (no 
>>> linebreaks, etc…).
>>> How to reformat to 
>>> 1. a doc with linebreaks to easily edit the file
>>> 2. reformat two one line (or isn’T it necessary for the upload)?
>>> 
>>> all with command line tools (or automatic after downloading/uploading)?
>>> 
>>> Regards, Ronny
>>> 
>>>> Am 14.08.2017 um 16:13 schrieb Eiri <[email protected]>:
>>>> 
>>>> Hi Ronny,
>>>> 
>>>> For me “a-ha” moment was to realise that design document is just an 
>>>> ordinary CouchDB document, so it can be created and updated with any http 
>>>> client: curl, httpie, whatnot. I’ve writed up a gist with basic demo on 
>>>> using curl for that: 
>>>> https://gist.github.com/eiri/70e3a44421ade7f01d4394ef08f80091
>>>> 
>>>> Key moments to notice there that while updating design document it must 
>>>> have revision and that value of “map” is a string, but it need to be a 
>>>> proper javascript, as it’ll be evaluated as such.
>>>> 
>>>> So yes, it is easily possible to manage design documents without third 
>>>> party tools.
>>>> 
>>>> Sorry, I don’t know the answer on your third question, I’m more of a 
>>>> command line guy.
>>>> 
>>>> 
>>>> Regards,
>>>> Eric 
>>>> 
>>>> 
>>>>> On Aug 11, 2017, at 15:44, Ronny Berndt <[email protected]> wrote:
>>>>> 
>>>>> Hi,
>>>>> 
>>>>> I have some questions regarding the edit of design documents:
>>>>> 
>>>>> 
>>>>> 1. What is the best way to edit design documents locally and upload it to 
>>>>> couchdb?
>>>>> 2. Is it easily possible without third party tools like couchapp or 
>>>>> couchdb-bootstrap?
>>>>> 3. How can I add a list function in Fauxton?
>>>>> 
>>>>> Cheers, Ronny
>>>> 
>>> 
>> 
> 

Reply via email to