vendredi, novembre 25, 2005

[Rails] Internationalisation

Dans un autre post, je croyais à cause de cette page (que je vais mettre à jour) que rails n'était pas internationalisable pour l'instant.

En fait c'est faux, apparement c'est déjà fait sous forme de plugins.
J'en ai trouvé 2 (que je n'ai pas testés):

[Rails] Valider un email

Je me doutais bien que quelqu'un l'avait déjà fait mais comme j'ai eu un peu de mal à trouver... voici le lien vers la doc de rails et le bout de code qui va bien (dommage que ce validateur n'existe pas par defaut dans la liste des validateurs):

class User < ActiveRecord::Base
  validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/, :message => "est invalide"
end

jeudi, novembre 24, 2005

[Rails] Comment faire un formulaire multipart/form-data

Dans la page rhtml du formulaire:
<%= start_form_tag ({:action => 'index'}, {:multipart => true, :method => 'POST'}) %>
Plus d'informations sur les paramètres de start_form_tag et form_tag
Technorati tags:

mercredi, novembre 23, 2005

[Rails] Les clefs étrangères

Avec Rails la plupart des choses se passent de manière transparente mais dans le cas des clefs étrangères, il y a une petite actuce en plus ;)
Imaginons 2 tables dans la base de données:
products [id, text, ...]
line_items[id, product_id, text, ...]
Il faut 2 choses:
  1. appeller la colonne avec la clef étrangère product_id (en plus de la contrainte dans la basse de données)
  2. ajouter une ligne supplémentaire à la classe: LineItem
class LineItem < ActiveRecord::Base
belongs_to :product
end

[Rails] un (super) petit helper pour les stylesheets css

Bien que je trouve l'idée des css excellente, un jour où l'autre on se retrouve perdu entre tous les styles. Le mieux est de re-organiser les styles entre eux et dans des fichiers séparés...
C'est exactement à ça que sert ce petit script:
def stylesheet_auto_link_tags
  stylesheets_path = "#{RAILS_ROOT}/public/stylesheets/" 
  candidates = [ "#{controller.controller_name}",
                  "#{controller.controller_name}_#{controller.action_name}" ]

  candidates.inject("") do |buf, css| 
    buf << stylesheet_link_tag(css) if FileTest.exist?("#{stylesheets_path}/#{css}.css")
    buf
  end
end
à ajouter dans application_helper.rb. Après il suffit de rajouter dans la page:
<%= stylesheet_auto_link_tags %>
"Automagically" ça va chercher la css qui porte le nom du controller ou du controller_action. Exemple: admin.css
En combinant ça avec la fonction @import dans admin.css:
@import "scaffold.css";
on nage en plein: DRY (Don't Repeat Yourself) - génial :)

lundi, novembre 21, 2005

[Rails] Comment Rails gère les pluriels

Surement LA fonctionnalité de Rails qui m'a le plus impressionnée!!

Rails se base sur des conventions de nommage notament le singulier et le pluriel.
Mais Rails est intellignent! Car il gère aussi les cas particuliers des pluriels (en anglais).

Un tableau extrait de "Agile Web Development with Rails" :
Class NameTable Name
Orderorders
TaxAgencytax_agencies
Batchbatches
Diagnosisdiagnoses
LineItemline_items
Personpeople
Datumdata
Quantityquantities

C'est pour cette raison qu'il vaut mieux, pour les noms des tables et des composants en interne, utiliser des mots anglais pour être sûr de ne pas avoir de mauvaises surprises.
Oiseau/oiseaux risque de ne pas fonctionner à moins que quelqu'un fasse une extension française pour Rails...

Par contre, il semble que les applications Rails ne soient pas encore internationalisable, ca ne devrait pas tarder ;)

Technorati tags:

dimanche, novembre 20, 2005

[Rails] Convention de nommage

Pour les conventions qui concerne Ruby voir mon autre post: Convention de nommage en Ruby.

Les actions suivent la même convention que les variables.
Les noms de tables sont comme les noms de variables mais au pluriel (ex: orders ou third_parties).
Les noms de fichiers comme les noms de variables.

Tableau extrait de "Agile Web Development with Rails" :
Model
Tableline_items
ClassLineItem
Fileapp/models/line_item.rb

Controller
URLhttp://.../store/list
ClassStoreController
Fileapp/controllers/store_controller.rb
Methodlist()
Layoutapp/views/layouts/store.rhtml

View
URLhttp://.../store/list
Fileapp/views/store/list.rhtml (or .xml)
Helpermodule StoreHelper
Fileapp/helpers/store_helper.rb

Technorati tags:

Les conventions en Ruby (la suite)

La suite du premier post sur les conventions de nommage en ruby.
Ce qui se trouve entre {} ou do ... end est un bloc de code.
Par convention on met entre {} quand le code tient sur une ligne.
exemple:
{puts "Hello"}

On utilise do ...end si ça tient sur plusieurs lignes:
do
 puts "Hello"
 puts "World!"
end

Et toujours:FrederickRos dans les commentaires me fait remarquer la page suivante: http://www.rubygarden.org/ruby?RubyStyleGuide

Technorati tags:

vendredi, novembre 18, 2005

Ruby Cheat Sheet

C'est en anglais mais c'est court (6 pages) et simple.
Technorati tags:

Scaffolding

Scaffold par ci, scaffold par là... dans Rails ce terme anglais a beaucoup d'importance! Donc autant savoir ce que cela veut dire: échafaudage. La définition dans wikipédia.

Technorati tags:

jeudi, novembre 17, 2005

Convention de nommage en Ruby

Venant du monde "Java", une des première chose que j'ai cherché à savoir, c'est "Comment nommer mes variables/methodes/classes", histoire de coller à la convention de la communauté ;)

Mais, contrairement à java, j'ai eu du mal à trouver! Ca n'a pas l'air d'être aussi clairement définit...
Heureusement Dave Thomas l'explique dans "Agile Web Development with Rails":

TypeRègleExemple
variable et méthodetout en minuscule et séparé par des underscorepage_number
classe et modulechaque début de mot en majuscule et tout attachéPersonAccount ou Test::Unit

Update: FrederickRos dans les commentaires me fait remarquer la page suivante: http://www.rubygarden.org/ruby?RubyStyleGuide

Technorati tags:

mercredi, novembre 16, 2005

[Rails] La coloration syntaxique pour les fichiers rhtml dans eclipse

Update: Je viens de m'apercevoir que radrails est en version 0.4 et que je n'ai que la version 0.2 et pourtant lorsque j'update mes plugins dans eclipse... la mise à jour ne m'est pas proposée!!

En fait il ont changé leur adresse d'update site mais l'ancienne marche toujours!!!
Donc le nouveau update site de radrails est: http://download.radrails.org/update (l'ancienne était: http://www.radrails.org/update).
Il aurait dû enlever l'ancienne pour au moins avoir une erreur!

Je laisse l'ancien post pour mémoire... mais ca ne sert plus à rien.

Pour l'instant le plugin radrails pour eclipse ne fait pas la coloration syntaxique des fichiers rhtml.
Mais comme ces fichiers ressemblent beaucoup à des jsp, on peut avantageusement utiliser l'editeur de JSP de eclipse webtools (pour cette exemple il vous faut une version de eclipse avec cet éditeur, je vous conseille par exemple la wtp-all-in-one-0.7-win32.zip)
Il y a deux étapes:
  1. File associations
  2. Content type

Ajouter le "File associations":

Ajouter le "Content type":

Et voilà! (dans la outline vous verrez jsp:expression ou scriplet quand vous fait du ruby entre <%...%> mais bon c'est mieux que rien ;)
Technorati tags:

Eclipse et Ruby (RDT, RadRails, les "update sites")

Quand j'ai commencé à apprendre Ruby, j'ai utilisé dans un premier temps FreeRIDE, c'est gentil/pas gros en mémoire et rapide mais pas très beau et limité en fonctionnalités.

Comme j'aime bien eclipse j'ai cherché une plugin pour Ruby et j'ai trouvé rubyeclipse alias RDT :)
J'aime bien (mais le choix de l'IDE est un choix très personnel), le plugin est encore un peu jeune mais la mailling list est très active en ce moment et RadRails ce base dessus.
Malheurseusement les Tests Unitaires dans eclipse avec la version 0.5 de RDT ne foncntionnaient pas, j'ai dû updater ma version avec la dernière nightly build 0.6.xxxx.
Mais j'ai vu que les petits gars de RDT ont des tests unitaires qui sont tous au vert donc je leur fait confiance sur la qualité des nightly builds :)

RadRails est une surcouche graphique pour Rails dans eclipse. Il est encore plus jeune que RDT mais il permet déjà de créer un projet de zéro et de lancer les commandes du type
ruby script/generate ...
au travers de wizards dans eclipse.

La liste des update-site pour eclipse:

Trac

L'équivalent de Bugzilla / Jira / ... en Python (mais utilisé par la communauté Ruby) s'appelle Trac.
Il est plus beau et plus lisible que Bugzilla ... à voir à l'utilisation.

Hieraki

Une application qui a l'air très bien faite pour faire des manuels utilisateurs ou developpeurs (les 2 documentations vraiment indispensables à mes yeux): Hieraki.
Pour se faire une idée, il suffit d'utiliser l'exemple live un peu fouilli à cause des tests de tout le monde (mais surtout avec un peu d'AJAX dans la search box en haut à gauche!!) ou de regarder un des sites en utilisation réel: c'est beau et clair!

lundi, novembre 07, 2005

[Rails] Introduction en français

Pour ceux qui préfère une introduction dans notre bonne vieille langue...

jeudi, novembre 03, 2005

Back to ruby (and Rails)

Allez hop, après quelques mois de pause pour cause de boulot, je me remet un peu à ruby et surtout je commence à apprendre rails pour de bon!

Evidement j'avais déjà fait le classique tutorial video de 15min (excellent pour démarrer!), mais là je dois m'y mettre plus sérieusement vu que julien m'a prété son bouquin "Agile Web Development with Rails" et que je dois lui rendre avant le 10 novembre.
Du coup j'ai plein de sujets très variés mais toujours liés à ruby à traiter dans ce blog! J'ai déjà quelques idées sur les prochains posts...(pas forcément dans cet ordre)
  • Eclipse et Ruby (RDT, RadRails, les "update sites")
  • Les Tests Unitaires en ruby
  • L'héritage
  • Les modules
  • Le mot clef: "require"
  • [Rails] Rails et les checkbox!
  • [Rails] Rails et MySQL
  • [Rails] Les outils pour MySQL
  • [Rails] Quelques critiques de Rails (notament sur le systèmes de "convention over configuration" qui implique certaines choses dont il faut être conscient avant de s'embarquer dans des développements)
  • [Rails] Les bonnes pratiques
  • [Rails] Les conventions de nommages (et les erreurs à éviter...)
Rem: c'est dommage que blogger ne fasse pas de catégories comme dotclear, ça m'aurait simplifié la vie pour mes posts concernant Rails. Je pourrais ouvrir un nouveau blog mais je trouve ça un peu "overkill" juste pour quelques articles sur rails

Les regexp et $

Quelque chose que j'oublie à chaque fois avec les regexp, c'est le nom et les valeurs contenues par les variables "$" après une regexp !!
Exemple:
C:\ruby>irb
irb(main):008:0> line = "xxxRubyzzz"
=> "xxxRubyzzz"
irb(main):009:0> line =~ /Ruby/
=> 3
irb(main):011:0> $`
=> "xxx"
irb(main):010:0> $'
=> "zzz"