L'objectif de ce TP est la réalisation d'un petit outil de gestion de taches (todo-list) en ligne de commande.
L'outil permettra les actions suivantes :
taskman list [options]
Le listing des tâches acceptera les options suivantes :
- --sort-by-id : Trier les taches selon leur id
- --sort-by-date : Trier les taches selon leur date d'échéance
- --sort-by-flag : Trier les taches selon le poids des flags associés (par défaut)
Par défaut le listing affiche les taches urgentes dans un ordre indéterminé
(je vous laisse juge de ce qui sera le plus pratique par défaut ^_^
)
Exemple:
$ taskman list --sort-by-date
15: Acheter des pâtes aujourd'hui important
9 : Préparer anniversaire Sophie dans 1 semaine important
11: Réparer l'armoire - -
$ taskman add [options] NOM_DE_LA_TACHE
La commande add
acceptera les options suivantes
- --flag FLAG : Ajouter le mot clef FLAG à la nouvelle tache
- --date DATE : Ajouter l'échéance DATE à la nouvelle tâche
- DATE pourra etre une valeur sous la forme YYYY-MM-DD ou bien
today
,tomorrow
,X days
,X weeks
,X months
- DATE pourra etre une valeur sous la forme YYYY-MM-DD ou bien
Exemple:
$ taskman add --date today "Inviter Marie au resto"
25: Inviter Marie au resto - -
$ taskman mod [options] ID_DE_LA_TACHE
La commande mod
accepte les mêmes options que la commande add
Lorsque le FLAG contient le prefixe !
ou -
(ex: '-important'), alors le FLAG est retiré de la liste des flags de la tâche modifiée.
$ taskman del [options] ID_DE_LA_TACHE
Exemple :
$ taskman del [options] 15
15: Acheter des pâtes aujourd'hui important
Objectif : impémenter les fonctions tm_*
qui correspondront aux différentes actions du logiciel
et vérifier que la séquence d'actions suivantes se comporte correctement.
Pour commencer on travaillera dans un unique fichier taskman.rb
.
On supposera que les différentes options sont passées en paramètre des fonctions.
Dans un premier temps on stockera / lira la liste des taches dans la variable
globale $tasks
tm_list(....)
tm_add(...)
#on devrait voir un element en plus
tm_list()
tm_mod(....)
#on devrait voir un element modifié
tm_list()
tm_del(.....)
#on devrait voir un element en moins (celui ciblé)
tm_list()
tm_del(.....)
tm_list()
# la list devrait etre vide
On va organiser le code de l'exercice précédent. Pour cela on va regrouper l'ensemble sous un module Taskman .
Ensuite on pourra définir:
- une classe Cli (command-line interface) pour le programme principal
- une classe TaskList pour gérer la liste de taches.
Utiliser la variable ARGV dans Cli.main pour récupérer les parametres entrés par l'utilisateur pour lancer les bonnes actions dans taskman
http://ruby-doc.org/stdlib-2.3.1/libdoc/optparse/rdoc/OptionParser.html
On utilisera le fichier ENV['HOME'] + '/.taskman'
pour lire/sauvegarder la liste de taches
- supprimer la liste de taches "en dur" dans le code
- charger un fichier contenant la liste des taches avant listing, ajout, modification, effacement
- sauvegarder la nouvelle liste de taches apres listing, ajout, modification, effacement
Au chargement, le programme considerera la liste des taches vides si le fichier n'existe pas.
À l'enregistrement, le programme créera le fichier s'il n'existe pas.
http://ruby-doc.org/core-2.2.0/File.html ou bien http://ruby-doc.org/core-1.9.3/Marshal.html
- gestion des dates (parsing, affichage dans la liste, etc.)
- tri dans le list, etc.
- Utiliser bundler
- Faire un Gemfile
- Utiliser bundler
- Mettre à jour le Gemfile
- Faire un gemspec
- Faire un Rakefile
- Packager votre programme