# Ensemble de méthodes héritées par un modèle minirails # Les instances du modèle sont conservées dans la variable de classe # @@all qui est un tableau initialisé avec le contenu du fichier de nom @@file_name class ActiveRecord # variables de classe @@all=nil @@file_name=nil # Charger le fichier csv correspondant à la base des instances du modèle def self.load_db(file_name,sep=";") @@file_name=file_name @@all=[] @@id=0 @@col_names=nil IO.foreach(file_name) do |line| line.chomp! if @@col_names.nil? @@col_names=line.split(sep).map{|c|c.strip} # trouver les noms des colonnes @@col_names.each{|n| attr n,true} # créer les méthodes d'instance else fields = line.split(sep) h=Hash.new @@col_names.each_with_index{|name,index| h[name]=fields[index]} self.create(h) end end # puts "*** Lecture de #{file_name}" # puts "all",@@all end # sauver toutes les instances du modèle dans le fichier d'origine def self.save_db File.open(@@file_name,"w") do |file| file << @@col_names.join(';') << "\n" @@all.each do |v| file << @@col_names.map{|n|v.send n}.join(';')+"\n" end end end # créer une nouvelle instance et la conserver dans la liste des instances def self.create(h=nil) if h.kind_of? Array h.each{|o|self.create(o)} else self.new(h).save end end # retourner l'instance dont le numéro est l'entier qui est passé en paramètre # si le paramètre est :all (ou absent) retourne un tableau de toutes les instances # pour lesquelles le bloc s'évalue à true def self.find(option=:all) if option==:all if block_given? return @@all.select{|o|yield o} else return @@all end elsif option.kind_of? Integer objs=@@all.select{|o|o.id==option} return objs[0] end end # enlever les instances dont les numéros sont passés en paramètre def self.delete(*ids) ids.each do |i| ii=i.to_i @@all.delete_if{|o|o.id==ii} end @@all.compact! end # création d'une instance en évaluant le contenu du bloc # les couples d'un hash en paramètre initialisent les variables d'instances # du même nom def initialize(h=nil) raise "MiniRails: no database read" if @@all.nil? @id=@@id @@id+=1 yield self if block_given? change_attributes(h) if !h.nil? end # ajouter cette instance à la liste de toutes les instances def save objs=@@all.select{|o|o.id==id} if(objs.length==0) @@all<