Skip to content

Instantly share code, notes, and snippets.

@glenux
Last active June 9, 2016 10:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save glenux/2b2a45eae053275e265629b25c771f50 to your computer and use it in GitHub Desktop.
Save glenux/2b2a45eae053275e265629b25c771f50 to your computer and use it in GitHub Desktop.

TP1 - Task Manager

glenn.rolland@netcat.io <=

L'objectif de ce TP est la réalisation d'un petit outil de gestion de taches (todo-list) en ligne de commande.

Préambule - Spécifications du logiciel

L'outil permettra les actions suivantes :

Lister les taches existantes

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                -               -

Ajouter des tâches

$ 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

Exemple:

$ taskman add --date today "Inviter Marie au resto"
25:  Inviter Marie au resto     -  -

Modifier une tâche

$ 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.

Supprimer une tâche

$ taskman del [options] ID_DE_LA_TACHE

Exemple :

$ taskman del [options] 15
15:  Acheter des pâtes                aujourd'hui     important

Exercice 1: Des fonctions simples pour chaque actions

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

Exercice 2 : Utiliser modules & classes

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.

Exercice 3 : Utiliser ARGV ...

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

Exercice 4 : Utiliser OptParser

http://ruby-doc.org/stdlib-2.3.1/libdoc/optparse/rdoc/OptionParser.html

Exercice 5/6 : Stocker dans un fichier & utiiser YAML/JSON

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

Exercice 7 : Implémenter les fonctions manquantes

  • gestion des dates (parsing, affichage dans la liste, etc.)
  • tri dans le list, etc.

Exercice 8 : Utiliser Thor

  • Utiliser bundler
  • Faire un Gemfile
  • Utiliser bundler
  • Mettre à jour le Gemfile

Exercice 9 : Faire un Gem

  • Faire un gemspec
  • Faire un Rakefile
  • Packager votre programme
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment