Tunisia on Rails 2010

Post on 13-May-2015

691 views 0 download

Tags:

description

Présentation Rails pour la conférence Tunisia on Rails 2010

Transcript of Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Richard Piacentini

Tunisia on Rails -15 Mai 2010

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos GroupThursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Langage de Programmation

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Langage de Programmation Framework Web

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Langage de ProgrammationFramework Web

Thursday, May 20, 2010

Framework Web ?

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Ensemble de composants

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Socle commun

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Structure identique

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Pour ne pas réinventer la roue

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Pour imposer des normes...

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

... Et des bonnes pratiques !

Thursday, May 20, 2010

Quels sont les gains ?

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Productivité

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Réutilisation

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Économies d’échelle

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Focalisation sur la valeur ajoutée

Thursday, May 20, 2010

Thursday, May 20, 2010

Les principes

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

DRY

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

DRY“Don’t repeat yourself !”“Don’t repeat yourself !”

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

DRY“Don’t repeat yourself !”

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

“Convention over configuration”

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

“Opinionated framework”

Thursday, May 20, 2010

Les avantages

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Ruby full-stack

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

MVC

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

MVCModel / View / Controller

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Tests intégrés !

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos GroupThursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Écrivez des tests !

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos GroupThursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Écrivez des tests !

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos GroupThursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Écrivez des tests ! Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !

Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests ! Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Écrivez des tests ! Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !

Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests ! Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !

Écrivez des tests !Écrivez des tests !

Écrivez des tests !

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos GroupThursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Écrivez des tests !

Thursday, May 20, 2010

Les composants

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Model

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Model

View

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Model

View

Controller

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Model

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Model

ViewController

ActionPack}Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Exemple

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

http://paris.onrails.info/conferenciers

Exemple

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Routage

http://paris.onrails.info/conferenciersRails

Exemple

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Routage

Contrôleur “conferenciers”

http://paris.onrails.info/conferenciers

Le système de routage trouve le contrôleur “conférenciers

Rails

Exemple

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Routage

Contrôleur “conferenciers”

ModèleActiveRecord

http://paris.onrails.info/conferenciers

Le système de routage trouve le contrôleur “conférenciersLe contrôleur interagit avec le modèle

Rails

Exemple

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Routage

Contrôleur “conferenciers”

ModèleActiveRecord

Base de données

http://paris.onrails.info/conferenciers

Le système de routage trouve le contrôleur “conférenciersLe contrôleur interagit avec le modèle

Rails

Exemple

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Routage

Contrôleur “conferenciers”

ModèleActiveRecord

Affichage de la vue

Base de données

http://paris.onrails.info/conferenciers

Le système de routage trouve le contrôleur “conférenciersLe contrôleur interagit avec le modèle

Le contrôleur invoque la vue

Rails

Exemple

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Routage

Contrôleur “conferenciers”

ModèleActiveRecord

Affichage de la vue

Base de données

http://paris.onrails.info/conferenciers

Le système de routage trouve le contrôleur “conférenciersLe contrôleur interagit avec le modèle

Le contrôleur invoque la vue

La vue assure le rendu du prochain écran du navigateur

Rails

Exemple

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Routage

Contrôleur “conferenciers”

ModèleActiveRecord

Affichage de la vue

Base de données

http://paris.onrails.info/conferenciers

Le système de routage trouve le contrôleur “conférenciersLe contrôleur interagit avec le modèle

Le contrôleur invoque la vue

La vue assure le rendu du prochain écran du navigateur

Rails

Exemple

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Connexion au SGBD

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Connexion au SGBD

• Mapping Objet-Relationnel

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Connexion au SGBD

• Mapping Objet-Relationnel

• Gestion des relations entre les tables

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Connexion au SGBD

• Mapping Objet-Relationnel

• Gestion des relations entre les tables

• Plus de SQL à écrire

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new SHOW FIELDS FROM `users`

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new SHOW FIELDS FROM `users`user.name = "Richard Piacentini"user.company = "Nuxos"

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new SHOW FIELDS FROM `users`user.name = "Richard Piacentini"user.company = "Nuxos"user.save

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new SHOW FIELDS FROM `users`user.name = "Richard Piacentini"user.company = "Nuxos"user.save INSERT INTO `users` (`name`, `company`)

VALUES ('Richard Piacentini', 'Nuxos')

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new SHOW FIELDS FROM `users`user.name = "Richard Piacentini"user.company = "Nuxos"user.save INSERT INTO `users` (`name`, `company`)

VALUES ('Richard Piacentini', 'Nuxos')

user = User.find_by_company("Nuxos")

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new SHOW FIELDS FROM `users`user.name = "Richard Piacentini"user.company = "Nuxos"user.save INSERT INTO `users` (`name`, `company`)

VALUES ('Richard Piacentini', 'Nuxos')

user = User.find_by_company("Nuxos") SELECT * FROM `users`WHERE company = "Nuxos" LIMIT 1

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new SHOW FIELDS FROM `users`user.name = "Richard Piacentini"user.company = "Nuxos"user.save INSERT INTO `users` (`name`, `company`)

VALUES ('Richard Piacentini', 'Nuxos')

user = User.find_by_company("Nuxos") SELECT * FROM `users`WHERE company = "Nuxos" LIMIT 1

user.destroy

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new SHOW FIELDS FROM `users`user.name = "Richard Piacentini"user.company = "Nuxos"user.save INSERT INTO `users` (`name`, `company`)

VALUES ('Richard Piacentini', 'Nuxos')

user = User.find_by_company("Nuxos") SELECT * FROM `users`WHERE company = "Nuxos" LIMIT 1

user.destroy DELETE FROM `users` WHERE id = 2

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Classe <----> Table de la BD

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Classe <----> Table de la BD

• Objet <----> Enregistrement

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Classe <----> Table de la BD

• Objet <----> Enregistrement

• Attribut <----> Champ de la table

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

users

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Classe <--> Table

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

id name company

1 Paul Durand Orange

2 Richard Piacentini Nuxos

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Classe <--> Table

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

id name company

1 Paul Durand Orange

2 Richard Piacentini Nuxos

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Classe <--> Table

user = User.find_by_company("Nuxos")

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

id name company

1 Paul Durand Orange

2 Richard Piacentini Nuxos

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Classe <--> Table

user = User.find_by_company("Nuxos")

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

id name company

1 Paul Durand Orange

2 Richard Piacentini Nuxos

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Classe <--> Table

user = User.find_by_company("Nuxos")

Objet <--> Enregistrement

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

id name company

1 Paul Durand Orange

2 Richard Piacentini Nuxos

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Classe <--> Table

user.name

user = User.find_by_company("Nuxos")

Objet <--> Enregistrement

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

id name company

1 Paul Durand Orange

2 Richard Piacentini Nuxos

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Classe <--> Table

user.name

user = User.find_by_company("Nuxos")

Objet <--> Enregistrement

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

id name company

1 Paul Durand Orange

2 Richard Piacentini Nuxos

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Classe <--> Table

user.name user.company

user = User.find_by_company("Nuxos")

Objet <--> Enregistrement

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

id name company

1 Paul Durand Orange

2 Richard Piacentini Nuxos

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Classe <--> Table

user.name user.company

user = User.find_by_company("Nuxos")

Objet <--> Enregistrement

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

id name company

1 Paul Durand Orange

2 Richard Piacentini Nuxos

users

# fichier modèle app/models/user.rbclass User < ActiveRecord::Baseend

Classe <--> Table

user.name user.company

user = User.find_by_company("Nuxos")

Objet <--> Enregistrement

Attribut <--> Champ

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Nom de la clef primaire : id

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Nom de la clef primaire : id

• Nom des table de la BD en minuscules et au pluriel

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Nom de la clef primaire : id

• Nom des table de la BD en minuscules et au pluriel

• Nom des classes Ruby au singulier, casse mixte

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Nom de la clef primaire : id

• Nom des table de la BD en minuscules et au pluriel

• Nom des classes Ruby au singulier, casse mixte

• Fichiers modèles au singulier, en minuscules

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user_invoices

id

user_id

amount

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user_invoices

id

user_id

amount

• Table : user_invoices

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user_invoices

id

user_id

amount

• Table : user_invoices

• Fichier modèle : app/models/user_invoice.rb

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user_invoices

id

user_id

amount

• Table : user_invoices

• Fichier modèle : app/models/user_invoice.rb

• Classe Ruby : UserInvoice

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user_invoices

id

user_id

amount

• Table : user_invoices

• Fichier modèle : app/models/user_invoice.rb

• Classe Ruby : UserInvoice

class UserInvoice < ActiveRecord::Baseend

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•1 méthode publique = 1 action

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•1 méthode publique = 1 action

• Gestion du routage

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•1 méthode publique = 1 action

• Gestion du routage

• Gestion des caches (page, action, fragment)

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•1 action…

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•1 action… • …Plusieurs formats de réponse

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•1 action… • …Plusieurs formats de réponse # GET /users # GET /users.xml def index @users = Users.all

respond_to do |format| format.html # index.html.erb format.xml { render :xml => @users } end end

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•GET /users

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•GET /users

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•GET /users.xml

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•GET /users.xml

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

• Séparation entre format et rendu

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

• Séparation entre format et rendu• HTML, Javascript, atom, iPhone

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

• Séparation entre format et rendu• HTML, Javascript, atom, iPhone• ERB, Builder, RJS

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

• Séparation entre format et rendu• HTML, Javascript, atom, iPhone• ERB, Builder, RJS• Gestion des layouts (gabarits)

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

• Séparation entre format et rendu• HTML, Javascript, atom, iPhone• ERB, Builder, RJS• Gestion des layouts (gabarits)• Fichiers partiels

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

• Séparation entre format et rendu• HTML, Javascript, atom, iPhone• ERB, Builder, RJS• Gestion des layouts (gabarits)• Fichiers partiels• Nombreux Helpers

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

•ERB : Embedded Ruby

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

•ERB : Embedded Ruby

• Fichier avec extension .html.erb

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

•ERB : Embedded Ruby

• Fichier avec extension .html.erb

• Accès aux variables d’instance du contrôleur

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

# code Ruby non affiché dans la page <% %><% @users.each |user| do %> # … ici code HTML ou Ruby<% end %>

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

# code Ruby non affiché dans la page <% %><% @users.each |user| do %> # … ici code HTML ou Ruby<% end %>

# code Ruby *affiché* dans la page <%= %><%= link_to 'Edit', edit_user_path(user) %>

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

# code Ruby non affiché dans la page <% %><% @users.each |user| do %> # … ici code HTML ou Ruby<% end %>

# code Ruby *affiché* dans la page <%= %><%= link_to 'Edit', edit_user_path(user) %>

<a href="/users/1/edit">Edit</a>

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Rails 3

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Performance

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Modularité

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Sécurisé par défaut

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Prêt pour HTML5

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

API publique

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Nouveaux Validateurs

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Nouveaux Validateurs# Rails 2class User < ActiveRecord::Base validates_presence_of :login, :email validates_length_of :login, :in => 3..20 validates_format_of :login, :with => /^[A-Z]\w+/i validates_uniqueness_of :email validates_length_of :email, :in => 5..100 validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/iend

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Nouveaux Validateurs

# Rails 3class User < ActiveRecord::Base validates :login, :presence => true, :length => {:minimum => 3, :maximum => 20}, :format => {:with => /^[A-Z]\w+/i} validates :email, :presence => true, :length => {:minimum => 5, :maximum => 50}, :uniqueness => true, :format => {:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i} end

# Rails 2class User < ActiveRecord::Base validates_presence_of :login, :email validates_length_of :login, :in => 3..20 validates_format_of :login, :with => /^[A-Z]\w+/i validates_uniqueness_of :email validates_length_of :email, :in => 5..100 validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/iend

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Nouveaux Validateurs

# Rails 3class User < ActiveRecord::Base validates :login, :presence => true, :length => {:minimum => 3, :maximum => 20}, :format => {:with => /^[A-Z]\w+/i} validates :email, :presence => true, :length => {:minimum => 5, :maximum => 50}, :uniqueness => true, :format => {:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i} end

# Rails 2class User < ActiveRecord::Base validates_presence_of :login, :email validates_length_of :login, :in => 3..20 validates_format_of :login, :with => /^[A-Z]\w+/i validates_uniqueness_of :email validates_length_of :email, :in => 5..100 validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/iend

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Nouveaux Validateurs# Rails 3class User < ActiveRecord::Base validates :login, :presence => true, :length => {:minimum => 3, :maximum => 20}, :format => {:with => /^[A-Z]\w+/i} validates :email, :presence => true, :length => {:minimum => 5, :maximum => 50}, :uniqueness => true, :format => {:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i}end

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Nouveaux Validateurs

:acceptance => Boolean:confirmation => Boolean:exclusion => { :in => Enumerable }:inclusion => { :in => Enumerable }:format => { :with => Regexp }:length => { :minimum => Fixnum, :maximum => Fixnum }:numericality => Boolean:presence => Boolean:uniqueness => Boolean

# Rails 3class User < ActiveRecord::Base validates :login, :presence => true, :length => {:minimum => 3, :maximum => 20}, :format => {:with => /^[A-Z]\w+/i} validates :email, :presence => true, :length => {:minimum => 5, :maximum => 50}, :uniqueness => true, :format => {:with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i}end

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

class Person attr_accessor :name

end

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

class Person attr_accessor :name

end

include ActiveModel::Validations

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

class Person attr_accessor :name

endvalidates :name, :presence => trueinclude ActiveModel::Validations

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

class Person attr_accessor :name

endvalidates :name, :presence => true

p = Person.new

include ActiveModel::Validations

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

class Person attr_accessor :name

endvalidates :name, :presence => true

p = Person.new

include ActiveModel::Validations

p.valid? # false

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

class Person attr_accessor :name

endvalidates :name, :presence => true

p = Person.new

include ActiveModel::Validations

p.valid? # falsep.name = "Richard Piacentini"

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

class Person attr_accessor :name

endvalidates :name, :presence => true

p = Person.new

include ActiveModel::Validations

p.valid? # falsep.name = "Richard Piacentini"p.valid? # true

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

• where• having• select• group• order• limit

• offset• joins• includes• lock• readonly• from

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

# Rails 2@users = User.find(:all, :conditions => { :active => true }

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

# Rails 2@users = User.find(:all, :conditions => { :active => true }

La requête est exécutée immédiatement dans la base de données

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

# Rails 2@users = User.find(:all, :conditions => { :active => true }

La requête est exécutée immédiatement dans la base de données

Array

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

# Rails 2@users = User.find(:all, :conditions => { :active => true }

# Rails 3@users = User.where(:active => true)

La requête est exécutée immédiatement dans la base de données

Array

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

# Rails 2@users = User.find(:all, :conditions => { :active => true }

# Rails 3@users = User.where(:active => true)

La requête est exécutée immédiatement dans la base de données

Array

Pas d’appel à la base de données

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

# Rails 2@users = User.find(:all, :conditions => { :active => true }

# Rails 3@users = User.where(:active => true)

La requête est exécutée immédiatement dans la base de données

Array

Pas d’appel à la base de donnéesActiveRecord::Relation

(lazy loading)

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

@users = User.order(:created_at).where(company: "Nuxos", active: true)# Rails 3

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

@users = User.order(:created_at).where(company: "Nuxos", active: true)

@users.class # => ActiveRecord::Relation

# Rails 3

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

@users = User.order(:created_at).where(company: "Nuxos", active: true)

@users.class # => ActiveRecord::Relation

@users.to_sql# => ‘SELECT "users".* FROM "users" WHERE ("users"."company" = 'Nuxos') AND ("users"."active" = 't') ORDER BY created_at’

# Rails 3

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

@users = User.order(:created_at).where(company: "Nuxos", active: true)# Rails 3

@users = User.all(:conditions => ["company = ? AND active = ?", "Nuxos", true], :order => :created_at)

# Rails 2

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scopes ++

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scopes ++

# Rails 2class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ≤ ?", Time.now] } }end

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scopes ++

# Rails 2class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ≤ ?", Time.now] } }end

# Rails 3class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) }end

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scopes ++

# Rails 2class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ≤ ?", Time.now] } }end

# Rails 3class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) }end

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scopes ++

# Rails 2class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ≤ ?", Time.now] } }end

# Rails 3class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) }end

@admins = User.admin.activated # => retourne tous les admin activés

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scope ++

# Rails3class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) }

end

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scope ++

# Rails3class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) }

end scope :recent_admins, admin.activated.order("created_at DESC").limit(5)

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scope ++

# Rails3class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) }

end scope :recent_admins, admin.activated.order("created_at DESC").limit(5)

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scope ++

# Rails3class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) }

end scope :recent_admins, admin.activated.order("created_at DESC").limit(5)

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scope ++

# Rails3class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) }

end scope :recent_admins, admin.activated.order("created_at DESC").limit(5)

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scope ++

# Rails3class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) }

end scope :recent_admins, admin.activated.order("created_at DESC").limit(5)

@recent_admins = User.recent_admins

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Les scripts

Rails 2

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Les scriptsRails 3

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Les scripts

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Les scripts

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Les scripts

alias r=‘rails’

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Et aussi...

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

• Nouvelle API de routage

Et aussi...

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

• Nouvelle API de routage

• Nouvelle architecture d’ActionController

Et aussi...

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

• Nouvelle API de routage

• Nouvelle architecture d’ActionController

• ActionMailer 3

Et aussi...

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

• Nouvelle API de routage

• Nouvelle architecture d’ActionController

• ActionMailer 3

• Bundler

Et aussi...

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

• Nouvelle API de routage

• Nouvelle architecture d’ActionController

• ActionMailer 3

• Bundler

• ...

Et aussi...

Thursday, May 20, 2010

Bientôt…

Thursday, May 20, 2010

Pourquoi Rails ?

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Efficace

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Tests intégrés !

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Bonnes pratiques

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Tests intégrés !

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Nombreux plugins

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Tests intégrés !

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Ruby

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Et surtout...

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Statistiques d’utilisation des version de RailsJanvier 2010

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

v2.3.432.6%

v2.3.221%

v2.3.514% v2.2.2

11%v2.3.3

7%4%

3%Others

9%

v2.3.4 v2.3.2v2.3.5 v2.2.2v2.3.3 v2.1.0v2.1.2 Others

Statistiques d’utilisation des version de RailsJanvier 2010

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Statistiques d’utilisation des version de RubyJanvier 2010

v1.8.6 v1.9.1v1.8.7 v1.8.5

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

v1.8.663.5%

v1.9.11%

v1.8.732%

v1.8.53%

Statistiques d’utilisation des version de RubyJanvier 2010

v1.8.6 v1.9.1v1.8.7 v1.8.5

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

v1.8.663.5%

v1.9.11%

v1.8.732%

v1.8.53%

Statistiques d’utilisation des version de RubyJanvier 2010

v1.8.6 v1.9.1v1.8.7 v1.8.5

http://railslab.newrelic.com/2010/01/07/state-of-the-stack-a-ruby-on-rails-benchmarking-report-7-january-2010

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Programming Ruby 1.9 The Ruby WayThe Well

Grounded RubyistRuby on Rails

4th editionDesign patterns en Ruby

Littérature

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

De Ruby ... Á Rails

Programming Ruby 1.9 The Ruby WayThe Well

Grounded RubyistRuby on Rails

4th editionDesign patterns en Ruby

Littérature

Thursday, May 20, 2010

Thursday, May 20, 2010

Merci :-)

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Des questions ?

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

RessourcesRails Guides : http://guides.rubyonrails.org

Railscasts : http://railscasts.com

Scaling Rails : http://railslab.newrelic.com/scaling-rails

Peepcode : http://peepcode.com ($)

Railsfrance : http://www.railsfrance.org

Thursday, May 20, 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Crédit images Flicker

http://www.flickr.com/photos/projekta8/2736962559/sizes/l/

http://www.flickr.com/photos/onkel_wart/4038437003/sizes/o/

http://www.flickr.com/photos/tiemposdelruido/4051814934/sizes/l/

http://www.flickr.com/photos/27889738@N07/3289774573/sizes/l/

http://www.flickr.com/photos/mworrell/266180687/sizes/o/in/photostream/

http://www.flickr.com/photos/teddybare/133488169/

http://www.flickr.com/photos/nomadiclass/4395155397/sizes/l/

Thursday, May 20, 2010