Ruby Forum Rails France > Factoriser du code dans un module

Posted by Zangief Ief (z4n9ief)
on 07.08.2008 19:19
Bonjour,

Je souhaiterais grouper proprement un certain nombre d'action au sein
d'un fichier module, et pouvoir appeler ses actions depuis un contrôleur
ou un modèle.

Selon vous, quel serait le meilleur endroit pour ce fichier, et comment
pourrais-je faire pour l'inclure dans tous les contrôleurs et modèles ?
Et enfin, est-ce que l'appelle d'une action (appartenant au module) se
fait de la même façon depuis un contrôleur et depuis un modèle ?

Merci beaucoup pour vos lumières,
Zang'
Posted by Cyril Mougel (shingara)
on 07.08.2008 21:03
(Received via mailing list)
2008/8/7 Zangief Ief <list-incoming@andreas-s.net>:
> fait de la même façon depuis un contrôleur et depuis un modèle ?
>
> Merci beaucoup pour vos lumières,

Normalement si tu met des méthodes dans un module et que tu inclues le
module dans la classe à ce moment là les méthodes appartiennent aussi
à la classe donc elles pourront être appelé. Il n'y a strictement
aucun changement par rapport à un comportement de classe normale de
Ruby


--
Cyril Mougel
http://blog.shingara.fr
Posted by Zangief Ief (z4n9ief)
on 08.08.2008 00:03
Je viens d'essayé de placer toute les méthodes dans un modèle, mais je 
n'arrive pas à les appeler depuis un contrôleur... C'est faisable ?
Posted by Cyril Mougel (shingara)
on 08.08.2008 00:44
(Received via mailing list)
2008/8/8 Zangief Ief <list-incoming@andreas-s.net>:
>
> Je viens d'essayé de placer toute les méthodes dans un modèle, mais je
> n'arrive pas à les appeler depuis un contrôleur... C'est faisable ?

Normalement tu devrais avoir accès au model dans tes controlleurs.

Sans code on peux pas savoir ce que tu veux dire. Entre ton
interprétation et la notre il ne s'agit pas toujours de la même chose.

--
Cyril Mougel
http://blog.shingara.fr
Posted by Zangief Ief (z4n9ief)
on 08.08.2008 11:47
Voici l'ensemble des actions dont j'aurais besoin, que j'envisage de 
placer dans le modèle Person :

class Person < ActiveRecord::Base
  # Note : password et password_confirmation sont des champs virtuels.
  def password
  end

  def password_confirmation
  end

  def password=(password)
    self.salt = hash(Time.now)
    self.shadow = shadow(password)
  end

  def hash(string)
    Digest::SHA1.hexdigest(string)
  end

  def shadow(password)
    hash(self.salt + password)
  end

  def is_valid?(password)
    self.shadow == shadow(password)
  end
end

Cependant, ma problématique c'est que je voudrais pouvoir appeler 
certaines actions comme "is_valid?" depuis le contrôleur Session (avant 
d'ouvrir une session) sans dupliquer de code. Et je ne sais pas si cela 
est possible.
Posted by Cyril Mougel (shingara)
on 08.08.2008 13:50
(Received via mailing list)
2008/8/8 Zangief Ief <list-incoming@andreas-s.net>:
>  end
>  def shadow(password)
> d'ouvrir une session) sans dupliquer de code. Et je ne sais pas si cela
> est possible.

Oula, j'avais pas compris que c'était dans le modèle que tu voulais
mettre ça. Ca c'est pas propre du tout. Je pensais que tu voulais
faire un module.

Je te déconseille donc très très très vivement de faire ça.

--
Cyril Mougel
http://blog.shingara.fr
Posted by Zangief Ief (z4n9ief)
on 08.08.2008 15:14
Cyril Mougel wrote:
> Oula, j'avais pas compris que c'était dans le modèle que tu voulais
> mettre ça. Ca c'est pas propre du tout. Je pensais que tu voulais
> faire un module.

J'aimerais bien, mais quel serait le meilleur endroit pour stocker un 
tel module, comment
pourrais-je faire pour l'inclure dans des contrôleurs et modèles, et, 
enfin, est-ce que l'appelle d'une action (appartenant au module) se fait 
de la même façon depuis un contrôleur et depuis un modèle ?

Merci à nouveau.
Posted by Cyril Mougel (shingara)
on 08.08.2008 15:37
(Received via mailing list)
2008/8/8 Zangief Ief <list-incoming@andreas-s.net>:
> de la même façon depuis un contrôleur et depuis un modèle ?
à mettre dans un  /lib/, après le mieux est que tu t'amuses à tester.
Tu passes plus de temps à attendre ma réponse que si tu avais tout
simplement testé.


--
Cyril Mougel
http://blog.shingara.fr
Posted by Jean-Philippe Moal (Guest)
on 08.08.2008 17:42
(Received via mailing list)
Cyril Mougel a écrit :
> 
> à mettre dans un  /lib/, après le mieux est que tu t'amuses à tester.
> Tu passes plus de temps à attendre ma réponse que si tu avais tout
> simplement testé.
> 
> 

restful_authentication (et son prédécesseur) utilise lib/ et un include 
dans
ApplicationController, tu peut te base sur cela.

Par contre le fait de vouloir inclure un même module dans ses 
contrôleurs _et_
ses modèles me parait bizarre et peu conventionnel ?
Posted by Zangief Ief (z4n9ief)
on 08.08.2008 20:59
Merci à vous. Effectivement ce que j'avais prévu de faire n'était pas 
très net. En ayant regardé un peu le module de restful_authentication, 
j'ai mieux compris comment procéder.

Bonne soirée,
Z'