Surcharge du LoginEngine (overriding)
Chose promise, chose due
Je vais tenter d’expliquer à travers ce nouvel article l’amélioration du LoginEngine grâce au mécanisme de la surcharge (overriding). Je rappelle que je suis en pleine phase d’apprentissage moi aussi donc si vous relevez des erreurs ou des incorrections, n’hésitez pas à commenter ! (ce sera peut être mon premier commentaire !)
Principe de la surcharge
La surcharge du LoginEngine consiste à utiliser le principe d’héritage de la programmation objet couplé à la puissance du framework rails MVC. Ainsi nous allons pouvoir ajouter des foncionnalités au LoginEngine sans en modifier le code initial.
Ajout de nouvelles informations
Chaque application nécessite des informations différentes concerant ses utilisateurs. Nous allons ici prendre l’exemple de l’ajout du numéro de téléphone au compte utilisateur.
Le LoginEngine utilise 2 modèles, user.rb et user_notify.rb, nous allons nous interresser au user.rb que nous allons surcharger. Dans un premier temps nous allons donc générer un nouveau modèle et un nouveau controleur dans notre application qui porteront le même nom que ceux du login engine.
Génération
Avec Radrails, onglet Generators, créer un controller appelé “user” puis créer un modèle du même nom (user). En ligne de commande cela donne (à la racine de l’application Rails):
NB : Un helper (user_helper.rb sera aussi généré.)$ ruby script/generate model user
$ ruby script/generate controller user
Controleur
Editer ensuite le controler pour lui spécifier votre layout.
class UserController < ApplicationController
layout 'votrelayout'
end
Modèle
Et surtout éditer le modèle comme suit :
Ainsi nous avons indiquer que nous utilisons le LoginEngine et en plus nous avons ajouter la validation d’un champs que nous allons intégrer dans nos vues.class User < ActiveRecord::Base
include LoginEngine::AuthenticatedUser
validatespresenceof :phone
end
Vue
Pour surcharger les vues du LoginEngine, rien de plus simple, il vous faut créer un répertoire views/user (même nom que le répetoire du LoginEngine) et créer les vues que vous avez besoins de réécrire (nous aurons seulement besoin de _edit.rhtml, mais libre à vous de modifier aussi les autres !).
Pour plus de simplicité il suffit de copier coller le répertoire views/user du LoginEngine vers le répertoire views/user de votre application. Dorénavant ce seront donc les vues de votre application qui seront utilisées pour le LoginEngine.
Modifiez donc _edit.rhtml comme suit :
<div class="user_edit">
<table>
<%= form_input changeable(user, "firstname"), "First Name", "firstname" %>
<%= form_input changeable(user, "lastname"), "Last Name","lastname" %>
<%= form_input changeable(user, "phone"), "Phone", "phone" %>
<%= form_input changeable(user, "login"), "Login ID", "login", :size => 30 %><br/>
<%= form_input changeable(user, "email"), "Email", "email" %>
<% if submit %>
<%= form_input :submit_button, (user.new_record? ? 'Signup' : 'Change Settings'), :class => 'two_columns' %>
<% end %>
</table>
</div>
Nous avons donc seulement ajouté une ligne pour le téléphone !
Fonctionnement
Pour comprendre un peu mieux ce qu’il se passe lorsque nous appèlerons notre application pour créer un nouvel utilisateur, voici ce que va faire le framework :
- Appel du controleur du LoginEngine (user_controller.rb)
- Appel du controleur de l’application (user_controller.rb) (ajout des nouveaux attributs et nouvelles méthodes par héritage)
- Appel de la vue _edit.rhtml de l’application (Celle du LoginEngine n’est plus utilisée)
- Appel du modèle du LoginEngine (user.rb)
- Appel du modèle de l’application (user.rb) (mécanisme d’héritage.)
Faute de temps ce soir, j’aborderai dans un autre article l’association d’un user avec un autre objet, tels que des commentaires ou des articles dans le cas d’une application de blog comme Typo !
Trackbacks
Use this link to trackback from your own site.
[…] Voilà la dernière partie de mon tour d’horizon sur le LoginEngine ! Nous avons vu comment installer le LoginEngine, puis comment le surcharger, nous allons maintenant voir comment l’utiliser dans le cadre d’une application classique (telle qu’un petit blog.) […]