Command line interface - gropax/qres GitHub Wiki
Get resources from server:
$ qres get 123
$ qres get 1,2,3
$ seq 3 | qres get # Read ids from stdin
Create resources on server:
$ qres new ~/my/file.txt
$ ls *.txt | qres new # Create from stdin
Edit resources on server:
$ seq 3 | qres get | qres mod -f title,description --editor # Edit fields in Vim
$ seq 3 | qres get | qres mod -f title,description -c 'mycmd -x' # Modify using external command
Fetch an object using its location URL:
$ echo "http://boug.re/resources/1" | qget
Can fetch objects of different types, from different locations:
$ echo "http://boug.re/resources/1\nhttp://grou.be/tags/2" | qget
Can fetch objects from their ids. (Is it really useful, since we indentify them by their URL?)
$ qget res 123
$ seq 3 | qget res
$ qget res 123 | qmod -f title --editor
$ qget http://boug.re/resources/1 $ echo http://boug.re/resources/1 | qget $ qget -f title,id -d "\t"
La commande qmod
permet d'éditer une collection d'object sous forme de CSV dans un éditeur de texte.
$ echo http://boug.re/resources/1 | qget | qmod --fields title --editor $ echo http://boug.re/resources/1 | qget | qmod --fields title --command 'mycmd %'
Si le champs n'existe pas, que faire :
- retourner une erreur ?
- si oui, comment editer des objects de type différents simultannément ?
- si non, ne rien faire pour les objects concernés ?
On veut pouvoir editer simultannément des objects de types différents.
La stucture JSON retournée par le serveur décrit le contrat que doit respecter l'object :
- on ne doit pas changer son format (retirer ou ajouter des champs)
- tous les champs, même vides, doivent être retournés par le serveur
- l'objet dans son entier doit être envoyer dans les requête PUT
Il faut distinguer les champs des relations :
- dans le format JSON
- dans la CLI. Cela permet entre autres choses de traiter des objets de types différents de la même façon. (S'il en était autrement, peut-être que "tags" ferait référence à un champs dans un objet, et à une relation dans un autre : on se retrouverait en sortie avec des objets JSON côte-à-côte avec des string.) $ qget # retourne l'objet $ qget --fields title # retourne des champs (CSV) $ qget --relation tags # retourne une collection d'objets (SelectMany)
Commande differente pour effectuer des requêtes sur des objets: $ qry
Commande qjoin
pour exécuter une commande sur des groupes d'objets provenants d'une même expansion.
$ ... | qget -r tags | qget -f name | qjoin tr "\n" ","
sport,tennis,nadal
cuisine,poulet
...
Pour que cela fonctionne, chaque ligne doit contenir, en plus des données relatives à l'objet, des métas données concernant l'exécution en cours.
Possibilité d'accéder aux champs des sous objets:
$ qget -r tags.name