-
-
Save glenux/d4299567fadd9e6eafa6903022d8602e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
## 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. | |
# | |
# | |
module Taskman | |
class TaskList | |
def initialize | |
@tasks = [ | |
{id: 1, title: 'Acheter des chaussettes' ,date: 0,flags:[] } , | |
{id: 25,title: 'Préparer cadeau de Cécile',date: 0,flags:['important']} | |
] | |
end | |
def list | |
@tasks.each do |item| | |
id = item[:id] | |
title = item[:title].to_s | |
date = item[:date] || '-' | |
flags = (item[:flags] || ['-']).join(',') | |
puts "%2d: %-35.35s %s %s" % [id, title, date, flags] | |
end | |
end | |
# Ajoute une nouvelle tache à la liste | |
def add title, date=nil, flags=nil # ... | |
# on calculer le nouvel ID en cherchant le max des id présents + 1 | |
id = @tasks.map{|t| t[:id]}.max + 1 | |
# on va fabriquer un hash avec les valeurs aux bons endroits | |
# et l'ajouter (d'un coup) | |
@tasks << { | |
id: id, | |
title: title, | |
date: date, | |
flags: flags | |
} | |
# that's all folks ! | |
return id | |
end | |
# Modifie une tache, d'apres son identifiant | |
# - en prenant (presque) les memes parametres que add | |
# - on veut pouvoir modifier le titre, la date, ou les flags | |
def mod id, modifs={} | |
# il faut trouver la bonne tache d'abord | |
task = @tasks.select{|t| t[:id] == id }.first # équivalent à [0] | |
# on modifie la valeur dans task, seulement si la clef est bien légitime | |
modifs.each do |key,val| | |
task[key] = val if task.keys.include? key | |
end | |
end | |
# on a besoin d'un id | |
def del id | |
# on parcours la liste, jusqu'à tomber sur l'id donné | |
# à ce moment, on vire la case ;) | |
@tasks.reject! {|t| t[:id] == id } | |
end | |
end | |
class Cli | |
def self.main | |
# on teste ? | |
tl = TaskList.new | |
tl.list | |
puts "---- (avec add)" | |
tl.add "Inviter Rachel au resto" | |
id = tl.add "Prendre des nouvelles de Vicky", 0, ['important'] | |
tl.list | |
puts "---- (avec mods)" | |
tl.mod id, { | |
title: "Appeler Christine pour prendre des nouvelles" | |
} | |
tl.mod 1, {flags: ['important']} | |
tl.list | |
end | |
end | |
end | |
Taskman::Cli.main | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment