Charlie Charlie a écrit :
> effectivement, j'y songeais, mais dans le doute d'avoir la bonne 
> solution (que je n'ai pas encore), je pose la question ;)
>
> l'idée est simple:
> j'aime le principe du acts_as. Je trouve ça facile à développer et à 
> mettre en place.
>
> Donc, imaginons que j'ai une classe Stylo et que certains stylos peuvent 
> avoir une gomme ou non, 2 couleurs ou non etc etc, des espèces de 
> composants de personnalisation, je voudrais pouvoir faire:
>
> stylo1 = Stylo.new
>
> stylo2 = Stylo.new
>
> stylo1.acts_as_multicouleurs #=> imaginons que ce soit faisable....
> stylo1.ecrire_en_bleu #=> méthode du module acts_as_multicouleurs
> stylo1.acts_as_gomme #=> imaginons que ce soit faisable....
> stylo1.efface_derniere_ligne #=> méthode du module acts_as_gomme
>
> stylo2.ecrire_en_bleu # => erreur car stylo2 n'est pas multicouleurs
> stylo1.efface_derniere_ligne # => idem...
>
> stylo1.save #=> et là je sauvegarde le fait que mon stylo1 est un objet 
> de type Stylo mais avec ses différents composants : il a une gomme et 
> peut écrire en bleu, et disons que un gommage a supprimé 1% de ma gomme 
> (donc il faut que je stocke l'information, d'où l'idée du acts_as pour 
> le stockage persistant). Et donc la prochaine fois que j'initialise mon 
> objet, il faut que rails me regénère l'objet complet en mémoire avec 
> toutes ses méthodes et ses propriétés
>
> voila l'idée en gros... Est ce plus claire ? Si tu as une solution ou 
> une piste, je suis preneur!!!! ;)))))
>   

Moi je trouve que la solution d'écrire dans des modules et d'utiliser 
ensuite extend correspond parfaitement à tes besoins.
module Multicouleur
def ecrire_en_bleu
    p "j'écris en bleu"
end
def ecrire_en_rouge
    p"j'écris en rouge"
end
end

stylo1 = Stylo.new

stylo.extend Multicouleur

Cependant j'ai l'impression que tu veux utiliser des modules dont tu 
n'est pas l'auteur (plugin), dont le comportement est déjà prédéfini 
(Ils ajoutent des méthodes à ActiveRecord, et encore plus à la classe 
qui appelle acts_as). Ce comportement ne te satisfais pas, car tu ne 
voudrais pas inclure systématiquement les méthodes à tous les objets de 
la classe.
Regarde bien le code du plugin "acts_as" qui t'intéresse, il ne fait 
qu'ajouter des méthodes(de classe ou d'objet) à ActiveRecord. Un appel à 
acts_as va ajouter des méthodes à la classe qui l'appelle, et aux objets 
instances de cette classe. Une petite adaptation sera donc nécéssaire 
(il va falloir que tu triffouille le code du plugin).

Souvent le code de ces plugins est séparé en deux modules: le module 
"ClassMethods" et le module "InstanceMethods".

Il te suffit donc de le laisser charger le module "ClassMethods" (pour 
étendre les méthodes de class), mais pas le module InstanceMethods.
Celui là tu l'incluera au cas par cas avec
stylo1.extends(ActsAsBlabla::InstanceMethods)

Seb

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse [EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---

Répondre à