Tunisia on Rails 2010

201
© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Richard Piacentini Tunisia on Rails -15 Mai 2010 Thursday, May 20, 2010

description

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

Transcript of Tunisia on Rails 2010

Page 1: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Richard Piacentini

Tunisia on Rails -15 Mai 2010

Thursday, May 20, 2010

Page 2: Tunisia on Rails 2010

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

Page 3: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Langage de Programmation

Thursday, May 20, 2010

Page 4: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Langage de Programmation Framework Web

Thursday, May 20, 2010

Page 5: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Langage de ProgrammationFramework Web

Thursday, May 20, 2010

Page 6: Tunisia on Rails 2010

Framework Web ?

Thursday, May 20, 2010

Page 7: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Ensemble de composants

Thursday, May 20, 2010

Page 8: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Socle commun

Thursday, May 20, 2010

Page 9: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Structure identique

Thursday, May 20, 2010

Page 11: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Pour ne pas réinventer la roue

Thursday, May 20, 2010

Page 12: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Pour imposer des normes...

Thursday, May 20, 2010

Page 13: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

... Et des bonnes pratiques !

Thursday, May 20, 2010

Page 14: Tunisia on Rails 2010

Quels sont les gains ?

Thursday, May 20, 2010

Page 15: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Productivité

Thursday, May 20, 2010

Page 16: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Réutilisation

Thursday, May 20, 2010

Page 17: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Économies d’échelle

Thursday, May 20, 2010

Page 18: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Focalisation sur la valeur ajoutée

Thursday, May 20, 2010

Page 19: Tunisia on Rails 2010

Thursday, May 20, 2010

Page 20: Tunisia on Rails 2010

Les principes

Thursday, May 20, 2010

Page 21: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

DRY

Thursday, May 20, 2010

Page 22: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

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

Thursday, May 20, 2010

Page 23: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

DRY“Don’t repeat yourself !”

Thursday, May 20, 2010

Page 24: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

“Convention over configuration”

Thursday, May 20, 2010

Page 25: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

“Opinionated framework”

Thursday, May 20, 2010

Page 26: Tunisia on Rails 2010

Les avantages

Thursday, May 20, 2010

Page 27: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Ruby full-stack

Thursday, May 20, 2010

Page 28: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

MVC

Thursday, May 20, 2010

Page 29: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

MVCModel / View / Controller

Thursday, May 20, 2010

Page 30: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Tests intégrés !

Thursday, May 20, 2010

Page 31: Tunisia on Rails 2010

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

Page 32: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Écrivez des tests !

Thursday, May 20, 2010

Page 33: Tunisia on Rails 2010

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

Page 34: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Écrivez des tests !

Thursday, May 20, 2010

Page 35: Tunisia on Rails 2010

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

Page 36: Tunisia on Rails 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

Page 37: Tunisia on Rails 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

Page 38: Tunisia on Rails 2010

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

Page 39: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Écrivez des tests !

Thursday, May 20, 2010

Page 40: Tunisia on Rails 2010

Les composants

Thursday, May 20, 2010

Page 41: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Thursday, May 20, 2010

Page 42: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Model

Thursday, May 20, 2010

Page 43: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Model

View

Thursday, May 20, 2010

Page 44: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Model

View

Controller

Thursday, May 20, 2010

Page 45: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Model

Thursday, May 20, 2010

Page 46: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord

ActionView

ActionController

Model

ViewController

ActionPack}Thursday, May 20, 2010

Page 47: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Exemple

Thursday, May 20, 2010

Page 48: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

http://paris.onrails.info/conferenciers

Exemple

Thursday, May 20, 2010

Page 49: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Routage

http://paris.onrails.info/conferenciersRails

Exemple

Thursday, May 20, 2010

Page 50: Tunisia on Rails 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

Page 51: Tunisia on Rails 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

Page 52: Tunisia on Rails 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

Page 53: Tunisia on Rails 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

Page 54: Tunisia on Rails 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

Page 55: Tunisia on Rails 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

Page 56: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

Thursday, May 20, 2010

Page 57: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Connexion au SGBD

Thursday, May 20, 2010

Page 58: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Connexion au SGBD

• Mapping Objet-Relationnel

Thursday, May 20, 2010

Page 59: Tunisia on Rails 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

Page 60: Tunisia on Rails 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

Page 61: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

Thursday, May 20, 2010

Page 62: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new

Thursday, May 20, 2010

Page 63: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user = User.new SHOW FIELDS FROM `users`

Thursday, May 20, 2010

Page 64: Tunisia on Rails 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

Page 65: Tunisia on Rails 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

Page 66: Tunisia on Rails 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

Page 67: Tunisia on Rails 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

Page 68: Tunisia on Rails 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

Page 69: Tunisia on Rails 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

Page 70: Tunisia on Rails 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

Page 71: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

Thursday, May 20, 2010

Page 72: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

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

Thursday, May 20, 2010

Page 73: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

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

• Objet <----> Enregistrement

Thursday, May 20, 2010

Page 74: Tunisia on Rails 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

Page 75: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

users

Thursday, May 20, 2010

Page 76: Tunisia on Rails 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

Page 77: Tunisia on Rails 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

Page 78: Tunisia on Rails 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

Page 79: Tunisia on Rails 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

Page 80: Tunisia on Rails 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

Page 81: Tunisia on Rails 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

Page 82: Tunisia on Rails 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

Page 83: Tunisia on Rails 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

Page 84: Tunisia on Rails 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

Page 85: Tunisia on Rails 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

Page 86: Tunisia on Rails 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

Page 87: Tunisia on Rails 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

Page 88: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

Thursday, May 20, 2010

Page 89: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

• Nom de la clef primaire : id

Thursday, May 20, 2010

Page 90: Tunisia on Rails 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

Page 91: Tunisia on Rails 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

Page 92: Tunisia on Rails 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

Page 93: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user_invoices

id

user_id

amount

Thursday, May 20, 2010

Page 94: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRecord Model

user_invoices

id

user_id

amount

• Table : user_invoices

Thursday, May 20, 2010

Page 95: Tunisia on Rails 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

Page 96: Tunisia on Rails 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

Page 97: Tunisia on Rails 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

Page 98: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

Thursday, May 20, 2010

Page 99: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•1 méthode publique = 1 action

Thursday, May 20, 2010

Page 100: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•1 méthode publique = 1 action

• Gestion du routage

Thursday, May 20, 2010

Page 101: Tunisia on Rails 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

Page 102: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

Thursday, May 20, 2010

Page 103: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•1 action…

Thursday, May 20, 2010

Page 104: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

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

Thursday, May 20, 2010

Page 105: Tunisia on Rails 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

Page 106: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•GET /users

Thursday, May 20, 2010

Page 107: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•GET /users

Thursday, May 20, 2010

Page 108: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•GET /users.xml

Thursday, May 20, 2010

Page 109: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionController Controller

•GET /users.xml

Thursday, May 20, 2010

Page 110: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

Thursday, May 20, 2010

Page 111: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

• Séparation entre format et rendu

Thursday, May 20, 2010

Page 112: Tunisia on Rails 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

Page 113: Tunisia on Rails 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

Page 114: Tunisia on Rails 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

Page 115: Tunisia on Rails 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

Page 116: Tunisia on Rails 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

Page 117: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

Thursday, May 20, 2010

Page 118: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

•ERB : Embedded Ruby

Thursday, May 20, 2010

Page 119: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActionView View

•ERB : Embedded Ruby

• Fichier avec extension .html.erb

Thursday, May 20, 2010

Page 120: Tunisia on Rails 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

Page 121: Tunisia on Rails 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

Page 122: Tunisia on Rails 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

Page 123: Tunisia on Rails 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

Page 124: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Rails 3

Thursday, May 20, 2010

Page 125: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Performance

Thursday, May 20, 2010

Page 126: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Modularité

Thursday, May 20, 2010

Page 127: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Sécurisé par défaut

Thursday, May 20, 2010

Page 128: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Prêt pour HTML5

Thursday, May 20, 2010

Page 129: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

API publique

Thursday, May 20, 2010

Page 130: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Nouveaux Validateurs

Thursday, May 20, 2010

Page 131: Tunisia on Rails 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

Page 132: Tunisia on Rails 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

Page 133: Tunisia on Rails 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

Page 134: Tunisia on Rails 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

Page 135: Tunisia on Rails 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

Page 136: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

Thursday, May 20, 2010

Page 137: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

class Person attr_accessor :name

end

Thursday, May 20, 2010

Page 138: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveModel

class Person attr_accessor :name

end

include ActiveModel::Validations

Thursday, May 20, 2010

Page 139: Tunisia on Rails 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

Page 140: Tunisia on Rails 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

Page 141: Tunisia on Rails 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

Page 142: Tunisia on Rails 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

Page 143: Tunisia on Rails 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

Page 144: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

Thursday, May 20, 2010

Page 145: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

Thursday, May 20, 2010

Page 146: Tunisia on Rails 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

Page 147: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

ActiveRelation

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

Thursday, May 20, 2010

Page 148: Tunisia on Rails 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

Page 149: Tunisia on Rails 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

Page 150: Tunisia on Rails 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

Page 151: Tunisia on Rails 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

Page 152: Tunisia on Rails 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

Page 153: Tunisia on Rails 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

Page 154: Tunisia on Rails 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

Page 155: Tunisia on Rails 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

Page 156: Tunisia on Rails 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

Page 157: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Named Scopes ++

Thursday, May 20, 2010

Page 158: Tunisia on Rails 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

Page 159: Tunisia on Rails 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

Page 160: Tunisia on Rails 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

Page 161: Tunisia on Rails 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

Page 162: Tunisia on Rails 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

Page 163: Tunisia on Rails 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

Page 164: Tunisia on Rails 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

Page 165: Tunisia on Rails 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

Page 166: Tunisia on Rails 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

Page 167: Tunisia on Rails 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

Page 168: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Les scripts

Rails 2

Thursday, May 20, 2010

Page 169: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Les scriptsRails 3

Thursday, May 20, 2010

Page 170: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Les scripts

Thursday, May 20, 2010

Page 171: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Les scripts

Thursday, May 20, 2010

Page 172: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Les scripts

alias r=‘rails’

Thursday, May 20, 2010

Page 173: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Et aussi...

Thursday, May 20, 2010

Page 174: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

• Nouvelle API de routage

Et aussi...

Thursday, May 20, 2010

Page 175: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

• Nouvelle API de routage

• Nouvelle architecture d’ActionController

Et aussi...

Thursday, May 20, 2010

Page 176: Tunisia on Rails 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

Page 177: Tunisia on Rails 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

Page 178: Tunisia on Rails 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

Page 179: Tunisia on Rails 2010

Bientôt…

Thursday, May 20, 2010

Page 180: Tunisia on Rails 2010

Pourquoi Rails ?

Thursday, May 20, 2010

Page 181: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Efficace

Thursday, May 20, 2010

Page 182: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Tests intégrés !

Thursday, May 20, 2010

Page 183: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Bonnes pratiques

Thursday, May 20, 2010

Page 184: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Tests intégrés !

Thursday, May 20, 2010

Page 185: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Nombreux plugins

Thursday, May 20, 2010

Page 186: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Tests intégrés !

Thursday, May 20, 2010

Page 187: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Ruby

Thursday, May 20, 2010

Page 188: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Et surtout...

Thursday, May 20, 2010

Page 190: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Statistiques d’utilisation des version de RailsJanvier 2010

Thursday, May 20, 2010

Page 191: Tunisia on Rails 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

Page 192: Tunisia on Rails 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

Page 193: Tunisia on Rails 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

Page 194: Tunisia on Rails 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

Page 195: Tunisia on Rails 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

Page 196: Tunisia on Rails 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

Page 197: Tunisia on Rails 2010

Thursday, May 20, 2010

Page 198: Tunisia on Rails 2010

Merci :-)

Thursday, May 20, 2010

Page 199: Tunisia on Rails 2010

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group

Des questions ?

Thursday, May 20, 2010

Page 200: Tunisia on Rails 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

Page 201: Tunisia on Rails 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