Presentation Rails

34
Ruby, Ruby on Rails Ruby, Ruby on Rails Cyril Mougel 20 avril 2008

description

Présentation de Ruby on Rails à des développeurs JAVA par Cyril Mougel

Transcript of Presentation Rails

Page 1: Presentation Rails

Ruby, Ruby on Rails

Ruby, Ruby on Rails

Cyril Mougel

20 avril 2008

Page 2: Presentation Rails

Ruby, Ruby on RailsLe langage Ruby

1 Le langage Ruby

2 Les concepts de Ruby on Rails

3 Composant Model de Ruby on Rails

4 Composant Controller de Ruby on Rails

5 Composant View de Ruby on Rails

6 Les tests

7 Outils de développement

8 Java, JRuby et Ruby On Rails

Page 3: Presentation Rails

Ruby, Ruby on RailsLe langage Ruby

L’historique

Créé en 1993 par Yukihiro Matsumoto dit « Matz »Langage de scripting de haut niveauPlus qu’orienté objet : tout est objetApplique le principe de moindre surprise (POLS, principle ofleast surprise)Fonctionne sur les plateformes les plus populaires du marché(Linux, Windows, Mac)

Page 4: Presentation Rails

Ruby, Ruby on RailsLes concepts de Ruby on Rails

1 Le langage Ruby

2 Les concepts de Ruby on Rails

3 Composant Model de Ruby on Rails

4 Composant Controller de Ruby on Rails

5 Composant View de Ruby on Rails

6 Les tests

7 Outils de développement

8 Java, JRuby et Ruby On Rails

Page 5: Presentation Rails

Ruby, Ruby on RailsLes concepts de Ruby on Rails

Le framework Ruby on Rails

Créé par David Heinemeier Hansson dit « DHH »Extrait de l’application BaseCamp de 37signalsPremière public release en 2004

Page 6: Presentation Rails

Ruby, Ruby on RailsLes concepts de Ruby on Rails

Pourquoi Rails en Ruby ?

Multi-plateformesFortes facilités d’introspection et de réflexion

User.find_by_firstname_and_lastname ’David’, ’Hanson’has_many :galleries

Page 7: Presentation Rails

Ruby, Ruby on RailsLes concepts de Ruby on Rails

Le concept de Ruby on Rails

Ruby on Rails est conçu par des développeurs, pour desdéveloppeursUn cadre de travail minimal et complet pour le développementWebConvention over ConfigurationDon’t Repeat Yourself (DRY)Say what you do, Do what you sayUn seul et unique langage pour tout faire

Page 8: Presentation Rails

Ruby, Ruby on RailsLes concepts de Ruby on Rails

Rails est MVC

Model : ActiveRecordView : ActionViewController : ActionController

Page 9: Presentation Rails

Ruby, Ruby on RailsLes concepts de Ruby on Rails

Chaque chose à sa place

Chaque dossier correspond à quelque chose et a son utilité propre

Page 10: Presentation Rails

Ruby, Ruby on RailsComposant Model de Ruby on Rails

1 Le langage Ruby

2 Les concepts de Ruby on Rails

3 Composant Model de Ruby on Rails

4 Composant Controller de Ruby on Rails

5 Composant View de Ruby on Rails

6 Les tests

7 Outils de développement

8 Java, JRuby et Ruby On Rails

Page 11: Presentation Rails

Ruby, Ruby on RailsComposant Model de Ruby on Rails

Gestion de la Base de données

Système de gestion de migration(ActiveRecord : :Migration)Utilisation du pattern ActiveRecordGénération de nombreuses méthodes utilitaires à la volée

Page 12: Presentation Rails

Ruby, Ruby on RailsComposant Model de Ruby on Rails

Migration de Base de donnée

Gestion incrémentale des fichiers de migrationsRetour avant/arrière au sein des migrationsUtilisation de méthodes Ruby au lieu des requêtes SQL pur

Page 13: Presentation Rails

Ruby, Ruby on RailsComposant Model de Ruby on Rails

Exemple de Migration

Un exemple de fichier de migration :

1 c l a s s F i x P r o f i l e s < Act i v eReco rd : : M ig r a t i on2 def s e l f . up3 c r e a t e_tab l e : p r oduc t s do | p |4 p . s t r i n g : t i t r e , : l i m i t => 1005 end67 remove_column : u s e r s , : p r o f i l e _ i d8 add_column : u s e r s , : p r o f i l e_ i d , : i n t e g e r9 admin_id = P r o f i l e . f i nd_by_labe l ( ’ admin ’ ) . i d

10 User . upda te_a l l ( " p r o f i l e_ i d ␣=␣#{admin_id}" )11 end1213 def s e l f . down14 drop_tab le : p r oduc t s1516 remove_column : u s e r s , : p r o f i l e _ i d17 add_column : u s e r s , : p r o f i l e_ i d , : i n t e g e r , : d e f a u l t => 118 end19 end

Page 14: Presentation Rails

Ruby, Ruby on RailsComposant Model de Ruby on Rails

Utilisation d’ActiveRecord

Exemple de fichier qui mappe la table Projects qui possèdent 6champs :

Code de la classe de mapping

1 c l a s s P r o j e c t < Act i v eReco rd : : Base2 end

Exemple d’utilisation de la classe de mapping

1 p r o j e c t 1 = P r o j e c t . new2 p r o j e c t 1 . t i t l e = ’EDF␣ E n t r e p r i s e ’3 p r o j e c t 1 . save45 p r o j e c t 2 = P r o j e c t . c r e a t e ( : t i t l e => ’GARI ’ )6 p r o j e c t 2 . d e s t r o y78 a l l_P r o j e c t s = P r o j e c t . f i n d : a l l

Page 15: Presentation Rails

Ruby, Ruby on RailsComposant Model de Ruby on Rails

les méthodes de classe (correspondant au static de Java)accessibles pour la classe Project

Et bien-sûr toutes les méthodes accessibles en directement par laClasse :

Project.find :all

Project.find_by_title ’EDF Entreprise’

Project.find_by_description ’un site’

Project.find_by_title_and_description’EDF’, ’site’

Project.count :all

Project.count_by_title ’EDF Entreprise’

Project.count_by_description ’un site’

Project.count_by_title_and_description ’EDF’,’site’

etc. . .

Page 16: Presentation Rails

Ruby, Ruby on RailsComposant Model de Ruby on Rails

le système de validation du modèle

Multiples systèmes de gestion directement dans le cycle de Vie del’objet modéle pour empêcher l’enregistrement en base de donnéesd’informations erronées

1 c l a s s P r o j e c t < Act i v eReco rd : : Base2 va l i d a t e s_p r e s en c e_o f : t i t l e3 v a l i d a t e s_p r e s en c e_o f : d e s c r i p t i o n4 va l i d a t e s_un i qu ene s s_o f : t i t l e5 end

Page 17: Presentation Rails

Ruby, Ruby on RailsComposant Model de Ruby on Rails

Les associations

1 c l a s s P r o j e c t < Act i v eReco rd : : Base2 has_many : t a s k s3 end45 c l a s s Task < Act i v eReco rd : : Base6 be longs_to : p r o j e c t7 end89 mon_project . t a s k s

10 mon_project . t a s k s . count1112 mon_project . t a s k s . f i n d ( : a l l , : o r d e r => ’ t i t l e ’ )13 mon_project . t a s k s << Task . new ( : t i t l e => ’ foo ’ )1415 mon_task . p r o j e c t

Page 18: Presentation Rails

Ruby, Ruby on RailsComposant Controller de Ruby on Rails

1 Le langage Ruby

2 Les concepts de Ruby on Rails

3 Composant Model de Ruby on Rails

4 Composant Controller de Ruby on Rails

5 Composant View de Ruby on Rails

6 Les tests

7 Outils de développement

8 Java, JRuby et Ruby On Rails

Page 19: Presentation Rails

Ruby, Ruby on RailsComposant Controller de Ruby on Rails

1 méthode, 1 URL

Url implicite à partir du nom de contrôleur et du nom de laméthodeUtilisation de routes nomméesDéfinition implicite du fichier de Vue

Page 20: Presentation Rails

Ruby, Ruby on RailsComposant Controller de Ruby on Rails

RESTFULL

REST (Representational State Transfer)Basé sur les 4 verbes HTTP :

POST (create)GET (show)PUT (update)DELETE (delete)

Utilisation des verbes simples avec URL correspondanteFacilité de création d’une API

Page 21: Presentation Rails

Ruby, Ruby on RailsComposant Controller de Ruby on Rails

Exemple de controller

1 c l a s s P r o j e c t s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r23 # http :// l o c a l h o s t :3000/ p r o j e c t s4 def i n d e x5 @p r o j e c t s = P r o j e c t . f i n d : a l l6 end78 # http :// l o c a l h o s t :3000/ p r o j e c t s /19 def show

10 @p ro j e c t = P r o j e c t . f i n d params [ : i d ]11 end1213 end

Page 22: Presentation Rails

Ruby, Ruby on RailsComposant View de Ruby on Rails

1 Le langage Ruby

2 Les concepts de Ruby on Rails

3 Composant Model de Ruby on Rails

4 Composant Controller de Ruby on Rails

5 Composant View de Ruby on Rails

6 Les tests

7 Outils de développement

8 Java, JRuby et Ruby On Rails

Page 23: Presentation Rails

Ruby, Ruby on RailsComposant View de Ruby on Rails

Les helpers

les taglibs de Ruby on Rails1 helper par controller par défautréutilisation des manipulations de vuesde nombreuses méthodes existantes dans l’API

Page 24: Presentation Rails

Ruby, Ruby on RailsComposant View de Ruby on Rails

ActionView

app/views/project/list.html.erb

1 <% @pro j e c t . each do | p r o j e c t | do %>2 <h1><%= p r o j e c t . t i t l e %></h1>3 <p><%= t r un c a t e ( p r o j e c t . d e s c r i p t i o n , 80) %></p>4 <p><%= l i nk_to " s u i t e . . . " , : a c t i o n => "show" , : i d => p r o j e c t . i d %></p>5 <% end %>

app/views/project/show.html.erb

1 <h1><%= h @p ro j e c t . t i t l e %></h1>23 <p><%= @pro j e c t . d e s c r i p t i o n %></p>4 <%= rende r : p a r t i a l => @p ro j e c t . t a s k s %>

app/views/task/_task.html.erb

1 <p><%= ta sk . d e s c r i p t i o n %></p>2 <p><%= ta sk . updated_at %></p>

Page 25: Presentation Rails

Ruby, Ruby on RailsLes tests

1 Le langage Ruby

2 Les concepts de Ruby on Rails

3 Composant Model de Ruby on Rails

4 Composant Controller de Ruby on Rails

5 Composant View de Ruby on Rails

6 Les tests

7 Outils de développement

8 Java, JRuby et Ruby On Rails

Page 26: Presentation Rails

Ruby, Ruby on RailsLes tests

Les tests unitaires

Dans le dossier /test/unitsTest sur les modélesFacilité de créer des jeux de testsBase de données indépendanteChaque test dans une transaction et ROLLBACK à la fin dechaque test.

Page 27: Presentation Rails

Ruby, Ruby on RailsLes tests

Les tests fonctionnels

Dans le dossier /test/functionalsTest sur les contrôleursMême système d’injection des jeux de donnéesAssertions spécifiques avec vérification du DOM

Page 28: Presentation Rails

Ruby, Ruby on RailsOutils de développement

1 Le langage Ruby

2 Les concepts de Ruby on Rails

3 Composant Model de Ruby on Rails

4 Composant Controller de Ruby on Rails

5 Composant View de Ruby on Rails

6 Les tests

7 Outils de développement

8 Java, JRuby et Ruby On Rails

Page 29: Presentation Rails

Ruby, Ruby on RailsOutils de développement

Les environnements de développement

Netbeans depuis la version 6.0RadRails, plugin d’eclipseRuby In Steel, add-on de Microsoft Visual StudioTextMateVim/Emacs

Page 30: Presentation Rails

Ruby, Ruby on RailsOutils de développement

Outils d’aide au développement

Shell Interactif, irbDebuggerProfilerCouverture de code

Page 31: Presentation Rails

Ruby, Ruby on RailsJava, JRuby et Ruby On Rails

1 Le langage Ruby

2 Les concepts de Ruby on Rails

3 Composant Model de Ruby on Rails

4 Composant Controller de Ruby on Rails

5 Composant View de Ruby on Rails

6 Les tests

7 Outils de développement

8 Java, JRuby et Ruby On Rails

Page 32: Presentation Rails

Ruby, Ruby on RailsJava, JRuby et Ruby On Rails

JRuby implémentation Java de Ruby

JRuby 1.0 sortie en Juin 2007, 1.1 en Avril 2008Entièrement compatible avec Ruby 1.8.6Intégration avec toute bibliothèque Java existante

Page 33: Presentation Rails

Ruby, Ruby on RailsJava, JRuby et Ruby On Rails

JRuby on Rails

Depuis JRuby 1.0.2, possibilité de faire tourner Ruby On RailsPossibilité de générer un WAR avec le plugin GoldspikeWar généré utilisable dans un serveur d’application

Page 34: Presentation Rails

Ruby, Ruby on RailsJava, JRuby et Ruby On Rails

demo