Richard Piacentini
                  Tunisia on Rails -15 Mai 2010
  © Richard Piacentini et Laurent Julliard 2010 - Nuxos...
© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Langage de Programmation




  © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Langage de Programmation                                  Framework Web




  © Richard Piacentini et Laurent Julliard 201...
Framework Web
      Langage de Programmation




  © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, M...
Framework Web ?




Thursday, May 20, 2010
Ensemble de
                              composants

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday...
Socle commun


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Structure identique


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Pourquoi utiliser un
              framework ?




Thursday, May 20, 2010
Pour ne pas
                  réinventer la roue

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, Ma...
Pour imposer des
                      normes...

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, Ma...
... Et des bonnes
                              pratiques !

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
T...
Quels sont les gains ?




Thursday, May 20, 2010
Productivité


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Réutilisation


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Économies
                                      d’échelle

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thu...
Focalisation sur la
                   valeur ajoutée

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursda...
Thursday, May 20, 2010
Les principes




Thursday, May 20, 2010
DRY


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
DRY
                           “Don’t repeat yourself !”
                           “Don’t repeat yourself !”

© Richard P...
DRY
                           “Don’t repeat yourself !”


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thu...
“Convention over
                    configuration”

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday,...
“Opinionated
                              framework”

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursda...
Les avantages




Thursday, May 20, 2010
Ruby full-stack


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
MVC


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
MVC
                          Model / View / Controller


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thur...
Tests intégrés !


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Écrivez des tests !


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Écrivez des tests !


 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Écrivez des tests !                        Écrivez des tests ! Écrivez des tests !
 Écrivez des tests !                   ...
Écrivez des tests !                        Écrivez des tests ! Écrivez des tests !
 Écrivez des tests !                   ...
© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Écrivez des tests !


  © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Les composants




Thursday, May 20, 2010
ActiveRecord


                    ActionView


          ActionController


© Richard Piacentini et Laurent Julliard 2010...
ActiveRecord                                  Model

                    ActionView


          ActionController


© Richa...
ActiveRecord                                  Model

                    ActionView                                View

 ...
ActiveRecord                                  Model

                    ActionView                                View

 ...
ActiveRecord                                  Model

                    ActionView


          ActionController


© Richa...
ActiveRecord                                  Model

                    ActionView


          ActionController
         ...
Exemple




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Exemple
                                                              http://paris.onrails.info/conferenciers




© Richar...
Exemple
                                                                   http://paris.onrails.info/conferenciers
       ...
Exemple
                                                                   http://paris.onrails.info/conferenciers
       ...
Exemple
                                                                            http://paris.onrails.info/conferencier...
Exemple
                                                                            http://paris.onrails.info/conferencier...
Exemple
                                                                            http://paris.onrails.info/conferencier...
Exemple
                                                                            http://paris.onrails.info/conferencier...
Exemple
                                                                            http://paris.onrails.info/conferencier...
ActiveRecord                                       Model




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
T...
ActiveRecord                                       Model

     • Connexion au SGBD




© Richard Piacentini et Laurent Jul...
ActiveRecord                                       Model

     • Connexion au SGBD
     • Mapping Objet-Relationnel



© R...
ActiveRecord                                       Model

     • Connexion au SGBD
     • Mapping Objet-Relationnel
     •...
ActiveRecord                                       Model

     • Connexion au SGBD
     • Mapping Objet-Relationnel
     •...
ActiveRecord                                       Model




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
T...
ActiveRecord                                       Model

    user = User.new




© Richard Piacentini et Laurent Julliard...
ActiveRecord                                       Model

    user = User.new                                            S...
ActiveRecord                                       Model

    user = User.new                                            S...
ActiveRecord                                       Model

    user = User.new                                            S...
ActiveRecord                                       Model

    user = User.new                                            S...
ActiveRecord                                       Model

    user = User.new                                            S...
ActiveRecord                                       Model

    user = User.new                                            S...
ActiveRecord                                       Model

    user = User.new                                            S...
ActiveRecord                                       Model

    user = User.new                                            S...
ActiveRecord                                       Model




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
T...
ActiveRecord                                       Model

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




© Richard Piacentini e...
ActiveRecord                                       Model

       • Classe <----> Table de la BD
       • Objet <----> Enre...
ActiveRecord                                       Model

       • Classe <----> Table de la BD
       • Objet <----> Enre...
ActiveRecord                                       Model




                                  users




© Richard Piacent...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model
         # fichier modèle app/models/user.rb
         class User ...
ActiveRecord                                       Model




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
T...
ActiveRecord                                       Model

     • Nom de la clef primaire : id




© Richard Piacentini et ...
ActiveRecord                                       Model

     • Nom de la clef primaire : id
     • Nom des table de la B...
ActiveRecord                                       Model

     • Nom de la clef primaire : id
     • Nom des table de la B...
ActiveRecord                                       Model

     • Nom de la clef primaire : id
     • Nom des table de la B...
ActiveRecord                                       Model

            user_invoices
         id
         user_id
         ...
ActiveRecord                                       Model

            user_invoices
         id
         user_id
         ...
ActiveRecord                                       Model

            user_invoices
         id
         user_id
         ...
ActiveRecord                                       Model

            user_invoices
         id
         user_id
         ...
ActiveRecord                                       Model

            user_invoices                             class User...
ActionController                                         Controller




© Richard Piacentini et Laurent Julliard 2010 - Nu...
ActionController                                         Controller


       •1 méthode publique = 1 action




© Richard ...
ActionController                                         Controller


       •1 méthode publique = 1 action
       • Gesti...
ActionController                                         Controller


       •1 méthode publique = 1 action
       • Gesti...
ActionController                                         Controller




© Richard Piacentini et Laurent Julliard 2010 - Nu...
ActionController                                         Controller

       •1 action…




© Richard Piacentini et Laurent...
ActionController                                         Controller

       •1 action…
       • …Plusieurs formats de répo...
ActionController                                         Controller

       •1 action…
       • …Plusieurs formats de répo...
ActionController                                         Controller

       •GET /users




© Richard Piacentini et Lauren...
ActionController                                         Controller

       •GET /users




© Richard Piacentini et Lauren...
ActionController                                         Controller

       •GET /users.xml




© Richard Piacentini et La...
ActionController                                         Controller

       •GET /users.xml




© Richard Piacentini et La...
ActionView                                     View




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursd...
ActionView                                     View

       • Séparation entre format et rendu




© Richard Piacentini et...
ActionView                                     View

       • Séparation entre format et rendu
          • HTML, Javascrip...
ActionView                                     View

       • Séparation entre format et rendu
          • HTML, Javascrip...
ActionView                                     View

       • Séparation entre format et rendu
          • HTML, Javascrip...
ActionView                                     View

       • Séparation entre format et rendu
          • HTML, Javascrip...
ActionView                                     View

       • Séparation entre format et rendu
          • HTML, Javascrip...
ActionView                                     View




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursd...
ActionView                                     View

         •ERB : Embedded Ruby




© Richard Piacentini et Laurent Jul...
ActionView                                     View

        •ERB : Embedded Ruby
        • Fichier avec extension .html.e...
ActionView                                     View

        •ERB : Embedded Ruby
        • Fichier avec extension .html.e...
ActionView                                     View

     # code Ruby non affiché dans la page <% %>
     <% @users.each |...
ActionView                                     View

     # code Ruby non affiché dans la page <% %>
     <% @users.each |...
ActionView                                     View

     # code Ruby non affiché dans la page <% %>
     <% @users.each |...
Rails 3




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Performance


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Modularité


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Sécurisé par défaut


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Prêt pour HTML5


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
API publique


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Nouveaux
                                    Validateurs

© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thur...
Nouveaux Validateurs
          # Rails 2
          class User < ActiveRecord::Base
            validates_presence_of :logi...
Nouveaux Validateurs
          # Rails 2
          class User < ActiveRecord::Base
            validates_presence_of :logi...
Nouveaux Validateurs
          # Rails 2
          class User < ActiveRecord::Base
            validates_presence_of :logi...
Nouveaux Validateurs
        # Rails 3
        class User < ActiveRecord::Base
          validates :login, :presence => tr...
Nouveaux Validateurs
        # Rails 3
        class User < ActiveRecord::Base
          validates :login, :presence => tr...
ActiveModel


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveModel
       class Person
           attr_accessor :name


       end




© Richard Piacentini et Laurent Julliard 2...
ActiveModel
       class Person
           attr_accessor :name
          include ActiveModel::Validations

       end




...
ActiveModel
       class Person
            attr_accessor :name
           include ActiveModel::Validations
           val...
ActiveModel
       class Person
            attr_accessor :name
           include ActiveModel::Validations
           val...
ActiveModel
       class Person
            attr_accessor :name
           include ActiveModel::Validations
           val...
ActiveModel
       class Person
            attr_accessor :name
           include ActiveModel::Validations
           val...
ActiveModel
       class Person
            attr_accessor :name
           include ActiveModel::Validations
           val...
ActiveRelation


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
ActiveRelation

                             • where                          • offset
                             • havi...
ActiveRelation
    # Rails 2
    @users = User.find(:all, :conditions => { :active => true }




© Richard Piacentini et L...
ActiveRelation
    # Rails 2
    @users = User.find(:all, :conditions => { :active => true }



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


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


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


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


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




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



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



     @users.c...
ActiveRelation

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



      # R...
Named Scopes ++


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Named Scopes ++
      # Rails 2
     class User < ActiveRecord::Base
       named_scope :admin, :conditions => ["is_admin ...
Named Scopes ++
      # Rails 2
     class User < ActiveRecord::Base
       named_scope :admin, :conditions => ["is_admin ...
Named Scopes ++
      # Rails 2
     class User < ActiveRecord::Base
       named_scope :admin, :conditions => ["is_admin ...
Named Scopes ++
      # Rails 2
     class User < ActiveRecord::Base
       named_scope :admin, :conditions => ["is_admin ...
Named Scope ++
     # Rails3
    class User < ActiveRecord::Base
      scope :admin, where("is_admin = ?", true)
         ...
Named Scope ++
     # Rails3
    class User < ActiveRecord::Base
      scope :admin, where("is_admin = ?", true)
         ...
Named Scope ++
     # Rails3
    class User < ActiveRecord::Base
      scope :admin, where("is_admin = ?", true)
         ...
Named Scope ++
     # Rails3
    class User < ActiveRecord::Base
      scope :admin, where("is_admin = ?", true)
         ...
Named Scope ++
     # Rails3
    class User < ActiveRecord::Base
      scope :admin, where("is_admin = ?", true)
         ...
Named Scope ++
     # Rails3
    class User < ActiveRecord::Base
      scope :admin, where("is_admin = ?", true)
         ...
Les scripts
                                                              Rails 2




© Richard Piacentini et Laurent Jull...
Les scripts
                                                              Rails 3




© Richard Piacentini et Laurent Jull...
Les scripts




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Les scripts




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Les scripts




                                             alias r=‘rails’
© Richard Piacentini et Laurent Julliard 2010...
Et aussi...




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Et aussi...
       • Nouvelle API de routage




© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May...
Et aussi...
       • Nouvelle API de routage
       • Nouvelle architecture d’ActionController




© Richard Piacentini et...
Et aussi...
       • Nouvelle API de routage
       • Nouvelle architecture d’ActionController
       • ActionMailer 3



...
Et aussi...
       • Nouvelle API de routage
       • Nouvelle architecture d’ActionController
       • ActionMailer 3
   ...
Et aussi...
       • Nouvelle API de routage
       • Nouvelle architecture d’ActionController
       • ActionMailer 3
   ...
Bientôt…




Thursday, May 20, 2010
Pourquoi Rails ?




Thursday, May 20, 2010
Efficace


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Tests intégrés !


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Bonnes pratiques


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Tests intégrés !


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Nombreux plugins


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Tests intégrés !


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Ruby


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Et surtout...


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Thursday, May 20, 2010
Statistiques d’utilisation des version de Rails
                                                       Janvier 2010




© ...
Statistiques d’utilisation des version de Rails
                                                       Janvier 2010

     ...
Statistiques d’utilisation des version de Ruby
                                                       Janvier 2010
       ...
Statistiques d’utilisation des version de Ruby
                                                       Janvier 2010
       ...
Statistiques d’utilisation des version de Ruby
                                                       Janvier 2010
       ...
Littérature
                                                                                    The Well        Ruby on Ra...
Littérature
                                                                                    The Well          Ruby on ...
Thursday, May 20, 2010
Merci :-)




Thursday, May 20, 2010
Des questions ?


© Richard Piacentini et Laurent Julliard 2010 - Nuxos Group
Thursday, May 20, 2010
Ressources
    Rails Guides : http://guides.rubyonrails.org
    Railscasts :                           http://railscasts.c...
Crédit images Flicker
                         http://www.flickr.com/photos/projekta8/2736962559/sizes/l/

               ...
Prochain SlideShare
Chargement dans…5
×

Tunisia on Rails 2010

907 vues

Publié le

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

Publié dans : Technologie
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
907
Sur SlideShare
0
Issues des intégrations
0
Intégrations
6
Actions
Partages
0
Téléchargements
18
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Tunisia on Rails 2010

  1. 1. Richard Piacentini Tunisia on Rails -15 Mai 2010 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  2. 2. © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  3. 3. Langage de Programmation © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  4. 4. Langage de Programmation Framework Web © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  5. 5. Framework Web Langage de Programmation © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  6. 6. Framework Web ? Thursday, May 20, 2010
  7. 7. Ensemble de composants © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  8. 8. Socle commun © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  9. 9. Structure identique © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  10. 10. Pourquoi utiliser un framework ? Thursday, May 20, 2010
  11. 11. Pour ne pas réinventer la roue © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  12. 12. Pour imposer des normes... © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  13. 13. ... Et des bonnes pratiques ! © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  14. 14. Quels sont les gains ? Thursday, May 20, 2010
  15. 15. Productivité © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  16. 16. Réutilisation © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  17. 17. Économies d’échelle © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  18. 18. Focalisation sur la valeur ajoutée © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  19. 19. Thursday, May 20, 2010
  20. 20. Les principes Thursday, May 20, 2010
  21. 21. DRY © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  22. 22. DRY “Don’t repeat yourself !” “Don’t repeat yourself !” © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  23. 23. DRY “Don’t repeat yourself !” © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  24. 24. “Convention over configuration” © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  25. 25. “Opinionated framework” © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  26. 26. Les avantages Thursday, May 20, 2010
  27. 27. Ruby full-stack © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  28. 28. MVC © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  29. 29. MVC Model / View / Controller © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  30. 30. Tests intégrés ! © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  31. 31. © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  32. 32. Écrivez des tests ! © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  33. 33. © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  34. 34. Écrivez des tests ! © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  35. 35. © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  36. 36. É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 ! © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  37. 37. É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 ! © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  38. 38. © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  39. 39. Écrivez des tests ! © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  40. 40. Les composants Thursday, May 20, 2010
  41. 41. ActiveRecord ActionView ActionController © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  42. 42. ActiveRecord Model ActionView ActionController © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  43. 43. ActiveRecord Model ActionView View ActionController © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  44. 44. ActiveRecord Model ActionView View ActionController Controller © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  45. 45. ActiveRecord Model ActionView ActionController © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  46. 46. ActiveRecord Model ActionView ActionController } ActionPack View Controller © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  47. 47. Exemple © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  48. 48. Exemple http://paris.onrails.info/conferenciers © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  49. 49. Exemple http://paris.onrails.info/conferenciers Rails Routage © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  50. 50. Exemple http://paris.onrails.info/conferenciers Rails Le système de routage trouve le contrôleur “conférenciers Routage Contrôleur “conferenciers” © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  51. 51. Exemple http://paris.onrails.info/conferenciers Rails Le système de routage trouve le contrôleur “conférenciers Routage Le contrôleur interagit avec le modèle Contrôleur “conferenciers” Modèle Active Record © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  52. 52. Exemple http://paris.onrails.info/conferenciers Rails Le système de routage trouve le contrôleur “conférenciers Routage Le contrôleur interagit avec le modèle Contrôleur “conferenciers” Modèle Base de Active données Record © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  53. 53. Exemple http://paris.onrails.info/conferenciers Rails Le système de routage trouve le contrôleur “conférenciers Routage Le contrôleur interagit avec le modèle Le contrôleur invoque la vue Contrôleur “conferenciers” Modèle Base de Affichage de la vue Active données Record © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  54. 54. Exemple http://paris.onrails.info/conferenciers Rails Le système de routage trouve le contrôleur “conférenciers Routage Le contrôleur interagit avec le modèle Le contrôleur invoque la vue La vue assure le rendu du prochain écran du navigateur Contrôleur “conferenciers” Modèle Base de Affichage de la vue Active données Record © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  55. 55. Exemple http://paris.onrails.info/conferenciers Rails Le système de routage trouve le contrôleur “conférenciers Routage Le contrôleur interagit avec le modèle Le contrôleur invoque la vue La vue assure le rendu du prochain écran du navigateur Contrôleur “conferenciers” Modèle Base de Affichage de la vue Active données Record © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  56. 56. ActiveRecord Model © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  57. 57. ActiveRecord Model • Connexion au SGBD © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  58. 58. ActiveRecord Model • Connexion au SGBD • Mapping Objet-Relationnel © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  59. 59. ActiveRecord Model • Connexion au SGBD • Mapping Objet-Relationnel • Gestion des relations entre les tables © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  60. 60. ActiveRecord Model • Connexion au SGBD • Mapping Objet-Relationnel • Gestion des relations entre les tables • Plus de SQL à écrire © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  61. 61. ActiveRecord Model © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  62. 62. ActiveRecord Model user = User.new © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  63. 63. ActiveRecord Model user = User.new SHOW FIELDS FROM `users` © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  64. 64. ActiveRecord Model user = User.new SHOW FIELDS FROM `users` user.name = "Richard Piacentini" user.company = "Nuxos" © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  65. 65. ActiveRecord Model user = User.new SHOW FIELDS FROM `users` user.name = "Richard Piacentini" user.company = "Nuxos" user.save © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  66. 66. ActiveRecord Model user = User.new SHOW FIELDS FROM `users` user.name = "Richard Piacentini" user.company = "Nuxos" INSERT INTO `users` (`name`, `company`) user.save VALUES ('Richard Piacentini', 'Nuxos') © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  67. 67. ActiveRecord Model user = User.new SHOW FIELDS FROM `users` user.name = "Richard Piacentini" user.company = "Nuxos" INSERT INTO `users` (`name`, `company`) user.save VALUES ('Richard Piacentini', 'Nuxos') user = User.find_by_company("Nuxos") © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  68. 68. ActiveRecord Model user = User.new SHOW FIELDS FROM `users` user.name = "Richard Piacentini" user.company = "Nuxos" INSERT INTO `users` (`name`, `company`) user.save VALUES ('Richard Piacentini', 'Nuxos') SELECT * FROM `users` user = User.find_by_company("Nuxos") WHERE company = "Nuxos" LIMIT 1 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  69. 69. ActiveRecord Model user = User.new SHOW FIELDS FROM `users` user.name = "Richard Piacentini" user.company = "Nuxos" INSERT INTO `users` (`name`, `company`) user.save VALUES ('Richard Piacentini', 'Nuxos') SELECT * FROM `users` user = User.find_by_company("Nuxos") WHERE company = "Nuxos" LIMIT 1 user.destroy © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  70. 70. ActiveRecord Model user = User.new SHOW FIELDS FROM `users` user.name = "Richard Piacentini" user.company = "Nuxos" INSERT INTO `users` (`name`, `company`) user.save VALUES ('Richard Piacentini', 'Nuxos') SELECT * FROM `users` user = User.find_by_company("Nuxos") WHERE company = "Nuxos" LIMIT 1 user.destroy DELETE FROM `users` WHERE id = 2 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  71. 71. ActiveRecord Model © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  72. 72. ActiveRecord Model • Classe <----> Table de la BD © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  73. 73. ActiveRecord Model • Classe <----> Table de la BD • Objet <----> Enregistrement © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  74. 74. ActiveRecord Model • Classe <----> Table de la BD • Objet <----> Enregistrement • Attribut <----> Champ de la table © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  75. 75. ActiveRecord Model users © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  76. 76. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end users © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  77. 77. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end users © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  78. 78. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end Classe <--> Table users © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  79. 79. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end Classe <--> Table users id name company 1 Paul Durand Orange 2 Richard Piacentini Nuxos © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  80. 80. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end Classe <--> Table users id name company 1 Paul Durand Orange 2 Richard Piacentini Nuxos user = User.find_by_company("Nuxos") © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  81. 81. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end Classe <--> Table users id name company 1 Paul Durand Orange 2 Richard Piacentini Nuxos user = User.find_by_company("Nuxos") © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  82. 82. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end Classe <--> Table users id name company 1 Paul Durand Orange 2 Richard Piacentini Nuxos Objet <--> Enregistrement user = User.find_by_company("Nuxos") © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  83. 83. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end user.name Classe <--> Table users id name company 1 Paul Durand Orange 2 Richard Piacentini Nuxos Objet <--> Enregistrement user = User.find_by_company("Nuxos") © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  84. 84. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end user.name Classe <--> Table users id name company 1 Paul Durand Orange 2 Richard Piacentini Nuxos Objet <--> Enregistrement user = User.find_by_company("Nuxos") © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  85. 85. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end user.company user.name Classe <--> Table users id name company 1 Paul Durand Orange 2 Richard Piacentini Nuxos Objet <--> Enregistrement user = User.find_by_company("Nuxos") © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  86. 86. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end user.company user.name Classe <--> Table users id name company 1 Paul Durand Orange 2 Richard Piacentini Nuxos Objet <--> Enregistrement user = User.find_by_company("Nuxos") © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  87. 87. ActiveRecord Model # fichier modèle app/models/user.rb class User < ActiveRecord::Base end user.company user.name Classe <--> Table Attribut <--> Champ users id name company 1 Paul Durand Orange 2 Richard Piacentini Nuxos Objet <--> Enregistrement user = User.find_by_company("Nuxos") © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  88. 88. ActiveRecord Model © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  89. 89. ActiveRecord Model • Nom de la clef primaire : id © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  90. 90. ActiveRecord Model • Nom de la clef primaire : id • Nom des table de la BD en minuscules et au pluriel © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  91. 91. 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 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  92. 92. 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 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  93. 93. ActiveRecord Model user_invoices id user_id amount © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  94. 94. ActiveRecord Model user_invoices id user_id amount • Table : user_invoices © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  95. 95. ActiveRecord Model user_invoices id user_id amount • Table : user_invoices • Fichier modèle : app/models/user_invoice.rb © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  96. 96. ActiveRecord Model user_invoices id user_id amount • Table : user_invoices • Fichier modèle : app/models/user_invoice.rb • Classe Ruby : UserInvoice © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  97. 97. ActiveRecord Model user_invoices class UserInvoice < ActiveRecord::Base id end user_id amount • Table : user_invoices • Fichier modèle : app/models/user_invoice.rb • Classe Ruby : UserInvoice © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  98. 98. ActionController Controller © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  99. 99. ActionController Controller •1 méthode publique = 1 action © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  100. 100. ActionController Controller •1 méthode publique = 1 action • Gestion du routage © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  101. 101. ActionController Controller •1 méthode publique = 1 action • Gestion du routage • Gestion des caches (page, action, fragment) © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  102. 102. ActionController Controller © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  103. 103. ActionController Controller •1 action… © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  104. 104. ActionController Controller •1 action… • …Plusieurs formats de réponse © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  105. 105. 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 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  106. 106. ActionController Controller •GET /users © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  107. 107. ActionController Controller •GET /users © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  108. 108. ActionController Controller •GET /users.xml © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  109. 109. ActionController Controller •GET /users.xml © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  110. 110. ActionView View © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  111. 111. ActionView View • Séparation entre format et rendu © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  112. 112. ActionView View • Séparation entre format et rendu • HTML, Javascript, atom, iPhone © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  113. 113. ActionView View • Séparation entre format et rendu • HTML, Javascript, atom, iPhone • ERB, Builder, RJS © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  114. 114. ActionView View • Séparation entre format et rendu • HTML, Javascript, atom, iPhone • ERB, Builder, RJS • Gestion des layouts (gabarits) © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  115. 115. ActionView View • Séparation entre format et rendu • HTML, Javascript, atom, iPhone • ERB, Builder, RJS • Gestion des layouts (gabarits) • Fichiers partiels © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  116. 116. ActionView View • Séparation entre format et rendu • HTML, Javascript, atom, iPhone • ERB, Builder, RJS • Gestion des layouts (gabarits) • Fichiers partiels • Nombreux Helpers © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  117. 117. ActionView View © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  118. 118. ActionView View •ERB : Embedded Ruby © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  119. 119. ActionView View •ERB : Embedded Ruby • Fichier avec extension .html.erb © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  120. 120. ActionView View •ERB : Embedded Ruby • Fichier avec extension .html.erb • Accès aux variables d’instance du contrôleur © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  121. 121. ActionView View # code Ruby non affiché dans la page <% %> <% @users.each |user| do %> # … ici code HTML ou Ruby <% end %> © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  122. 122. 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) %> © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  123. 123. 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> © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  124. 124. Rails 3 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  125. 125. Performance © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  126. 126. Modularité © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  127. 127. Sécurisé par défaut © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  128. 128. Prêt pour HTML5 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  129. 129. API publique © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  130. 130. Nouveaux Validateurs © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  131. 131. Nouveaux Validateurs # Rails 2 class 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,})$/i end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  132. 132. Nouveaux Validateurs # Rails 2 class 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,})$/i end # Rails 3 class 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 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  133. 133. Nouveaux Validateurs # Rails 2 class 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,})$/i end # Rails 3 class 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 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  134. 134. Nouveaux Validateurs # Rails 3 class 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 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  135. 135. Nouveaux Validateurs # Rails 3 class 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 :acceptance => Boolean :confirmation => Boolean :exclusion => { :in => Enumerable } :inclusion => { :in => Enumerable } :format => { :with => Regexp } :length => { :minimum => Fixnum, :maximum => Fixnum } :numericality => Boolean :presence => Boolean :uniqueness => Boolean © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  136. 136. ActiveModel © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  137. 137. ActiveModel class Person attr_accessor :name end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  138. 138. ActiveModel class Person attr_accessor :name include ActiveModel::Validations end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  139. 139. ActiveModel class Person attr_accessor :name include ActiveModel::Validations validates :name, :presence => true end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  140. 140. ActiveModel class Person attr_accessor :name include ActiveModel::Validations validates :name, :presence => true end p = Person.new © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  141. 141. ActiveModel class Person attr_accessor :name include ActiveModel::Validations validates :name, :presence => true end p = Person.new p.valid? # false © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  142. 142. ActiveModel class Person attr_accessor :name include ActiveModel::Validations validates :name, :presence => true end p = Person.new p.valid? # false p.name = "Richard Piacentini" © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  143. 143. ActiveModel class Person attr_accessor :name include ActiveModel::Validations validates :name, :presence => true end p = Person.new p.valid? # false p.name = "Richard Piacentini" p.valid? # true © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  144. 144. ActiveRelation © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  145. 145. ActiveRelation © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  146. 146. ActiveRelation • where • offset • having • joins • select • includes • group • lock • order • readonly • limit • from © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  147. 147. ActiveRelation # Rails 2 @users = User.find(:all, :conditions => { :active => true } © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  148. 148. 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 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  149. 149. ActiveRelation # Rails 2 @users = User.find(:all, :conditions => { :active => true } Array La requête est exécutée immédiatement dans la base de données © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  150. 150. ActiveRelation # Rails 2 @users = User.find(:all, :conditions => { :active => true } Array La requête est exécutée immédiatement dans la base de données # Rails 3 @users = User.where(:active => true) © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  151. 151. ActiveRelation # Rails 2 @users = User.find(:all, :conditions => { :active => true } Array La requête est exécutée immédiatement dans la base de données # Rails 3 @users = User.where(:active => true) Pas d’appel à la base de données © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  152. 152. ActiveRelation # Rails 2 @users = User.find(:all, :conditions => { :active => true } Array La requête est exécutée immédiatement dans la base de données # Rails 3 @users = User.where(:active => true) ActiveRecord::Relation (lazy loading) Pas d’appel à la base de données © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  153. 153. ActiveRelation # Rails 3 @users = User.order(:created_at).where(company: "Nuxos", active: true) © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  154. 154. ActiveRelation # Rails 3 @users = User.order(:created_at).where(company: "Nuxos", active: true) @users.class # => ActiveRecord::Relation © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  155. 155. ActiveRelation # Rails 3 @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’ © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  156. 156. ActiveRelation # Rails 3 @users = User.order(:created_at).where(company: "Nuxos", active: true) # Rails 2 @users = User.all(:conditions => ["company = ? AND active = ?", "Nuxos", true], :order => :created_at) © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  157. 157. Named Scopes ++ © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  158. 158. Named Scopes ++ # Rails 2 class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ≤ ?", Time.now] } } end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  159. 159. Named Scopes ++ # Rails 2 class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ≤ ?", Time.now] } } end # Rails 3 class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) } end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  160. 160. Named Scopes ++ # Rails 2 class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ≤ ?", Time.now] } } end # Rails 3 class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) } end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  161. 161. Named Scopes ++ # Rails 2 class User < ActiveRecord::Base named_scope :admin, :conditions => ["is_admin = ?", true] named_scope :activated, lambda { { :conditions => ["activated_at ≤ ?", Time.now] } } end # Rails 3 class 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 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  162. 162. Named Scope ++ # Rails3 class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) } end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  163. 163. Named Scope ++ # Rails3 class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) } scope :recent_admins, admin.activated.order("created_at DESC").limit(5) end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  164. 164. Named Scope ++ # Rails3 class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) } scope :recent_admins, admin.activated.order("created_at DESC").limit(5) end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  165. 165. Named Scope ++ # Rails3 class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) } scope :recent_admins, admin.activated.order("created_at DESC").limit(5) end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  166. 166. Named Scope ++ # Rails3 class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) } scope :recent_admins, admin.activated.order("created_at DESC").limit(5) end © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  167. 167. Named Scope ++ # Rails3 class User < ActiveRecord::Base scope :admin, where("is_admin = ?", true) scope :activated, lambda { where("activated_at ≤ ?", Time.now) } scope :recent_admins, admin.activated.order("created_at DESC").limit(5) end @recent_admins = User.recent_admins © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  168. 168. Les scripts Rails 2 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  169. 169. Les scripts Rails 3 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  170. 170. Les scripts © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  171. 171. Les scripts © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  172. 172. Les scripts alias r=‘rails’ © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  173. 173. Et aussi... © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  174. 174. Et aussi... • Nouvelle API de routage © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  175. 175. Et aussi... • Nouvelle API de routage • Nouvelle architecture d’ActionController © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  176. 176. Et aussi... • Nouvelle API de routage • Nouvelle architecture d’ActionController • ActionMailer 3 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  177. 177. Et aussi... • Nouvelle API de routage • Nouvelle architecture d’ActionController • ActionMailer 3 • Bundler © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  178. 178. Et aussi... • Nouvelle API de routage • Nouvelle architecture d’ActionController • ActionMailer 3 • Bundler • ... © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  179. 179. Bientôt… Thursday, May 20, 2010
  180. 180. Pourquoi Rails ? Thursday, May 20, 2010
  181. 181. Efficace © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  182. 182. Tests intégrés ! © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  183. 183. Bonnes pratiques © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  184. 184. Tests intégrés ! © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  185. 185. Nombreux plugins © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  186. 186. Tests intégrés ! © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  187. 187. Ruby © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  188. 188. Et surtout... © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  189. 189. Thursday, May 20, 2010
  190. 190. Statistiques d’utilisation des version de Rails Janvier 2010 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  191. 191. Statistiques d’utilisation des version de Rails Janvier 2010 v2.3.4 v2.3.2 v2.3.5 v2.2.2 v2.3.3 v2.1.0 v2.1.2 Others v2.3.5 v2.3.2 14% v2.2.2 21% 11% v2.3.3 7% 4% 3% v2.3.4 Others 32.6% 9% © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  192. 192. Statistiques d’utilisation des version de Ruby Janvier 2010 v1.8.6 v1.9.1 v1.8.7 v1.8.5 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  193. 193. Statistiques d’utilisation des version de Ruby Janvier 2010 v1.8.6 v1.9.1 v1.8.7 v1.8.5 v1.9.1 v1.8.7 1% 32% v1.8.5 3% v1.8.6 63.5% © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  194. 194. Statistiques d’utilisation des version de Ruby Janvier 2010 v1.8.6 v1.9.1 v1.8.7 v1.8.5 v1.9.1 v1.8.7 1% 32% v1.8.5 3% v1.8.6 63.5% http://railslab.newrelic.com/2010/01/07/state-of-the-stack-a-ruby-on-rails-benchmarking-report-7-january-2010 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  195. 195. Littérature The Well Ruby on Rails Programming Ruby 1.9 The Ruby Way Design patterns en Ruby Grounded Rubyist 4th edition © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  196. 196. Littérature The Well Ruby on Rails Programming Ruby 1.9 The Ruby Way Design patterns en Ruby Grounded Rubyist 4th edition De Ruby ... Á Rails © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  197. 197. Thursday, May 20, 2010
  198. 198. Merci :-) Thursday, May 20, 2010
  199. 199. Des questions ? © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  200. 200. Ressources Rails 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 © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010
  201. 201. 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/nomadiclass/4395155397/sizes/l/ http://www.flickr.com/photos/teddybare/133488169/ http://www.flickr.com/photos/mworrell/266180687/sizes/o/in/photostream/ © Richard Piacentini et Laurent Julliard 2010 - Nuxos Group Thursday, May 20, 2010

×