Pr©sentation de Ruby on Rails - 2008.rmll. Pr©sentation de Ruby on Rails Rencontres Mondiales

  • View
    213

  • Download
    0

Embed Size (px)

Text of Pr©sentation de Ruby on Rails - 2008.rmll. Pr©sentation de Ruby on Rails Rencontres...

  • Prsentation de Ruby on Rails

    Rencontres Mondiales du Logiciel Libre,Mont-de-Marsan, vendredi 4 juillet 2008

    RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Guillaume Zifro DESRAT && http://zlab.fr/

    Rubyiste depuis 2002 Railer depuis 2005

    Prsident de lassociation (http://www.rubyfrance.org/) participe aux discussions sur les listes RubyFR et RailsFrance rpond vos questions sur #rubyfr @ irc.freenode.net

    consultant informatique au Luxembourg en mission chez une banque dinvestisseurs

    Avant-propos :: prsentation de lorateur

    mailto:guillaume.desrat@rubyfrance.orgmailto:guillaume.desrat@rubyfrance.orghttp://www.rubyfrance.orghttp://www.rubyfrance.org

  • Prsentation de Ruby on Rails

    RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    un tour dhorizon de Ruby on Rails les concepts, les principes mis en oeuvre un aperu du code

    Rencontres Mondiales du Logiciel Libre,Mont-de-Marsan, vendredi 4 juillet 2008

    Avant-propos :: objet de la confrence

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails, cest :

    un framework pour dvelopper des applications Web crit en Ruby bas sur le concept MVC orient conventions plutt que configuration

    libre ! disponible sous licence MIT

    Quest-ce que Ruby on Rails ?

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails, cest :

    le travail (entre autres !) de David Heinemeier Hansson la version 1.0 en dcembre 2005 la version 2.0 en dcembre 2007

    un noyau allg plus de fonctionnalits sous forme de plugins REST

    une version 2.1 le 1er juin 2008 des efforts sur la gestion des TimeZone les Dirty Objects (gestion des modifications)

    Quest-ce que Ruby on Rails ?

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    MVC

    Ruby on Rails : bas sur MVC

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Modle - Vue - Contrleur

    un modle pour la persistance des donnes une vue pour linterface utilisateur un contrleur pour coordonner le tout

    une ide de Trygve Reenskaug, en... 1979

    initialement pens pour les applications de bureau adapt au Web par la suite

    Ruby on Rails : bas sur MVC

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Architecture MVC pour le Web :

    Navigateur

    Base de donnes

    Vue

    Contrleur6

    5

    4

    3

    2

    1

    Modle

    Ruby on Rails : bas sur MVC

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : bas sur MVC

    Des URL diffrentes :

    http://zlab.fr/books/show/1

    site Web : zlab.fr contrleur : Books action : show un paramtre, id, qui vaut 1

    une convention ( ), paramtrable

    http://zlab.fr/books/show/1http://zlab.fr/books/show/1

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : des conventions ( )

    Conventionsvs.

    Configuration

  • development:

    adapter: oci

    username: zifro

    password: rubycl

    eschlop

    host: SERVER

    # Warning: The dat

    abase defined as '

    test' will be eras

    ed and

    # re-generated fro

    m your development

    database when you

    run 'rake'.

    # Do not set this

    db to the same as

    development or pro

    duction.

    test: adapter

    : oci

    username: zifro

    password: ecrive

    z-des-tests

    RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : des conventions ( )

    Ruby on Rails privilgie lutilisation de conventions plutt que lemploi de fichiers de configuration :

    des comportements par dfaut qui se posent en standard moins de code, donc moins derreurs possibles des conventions que lon peut ignorer, au besoin

    Un fichier de configuration tout de mme, pour la connexion aux bases de donnes (format YAML)

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : des conventions ( )

    Architecture sur le disque :

    une structure de fichiers complte

    MVC : sparation des modles, vues et contrleurs

    zlab.fr:~/rmll zifro$ ls demoREADME config lib script vendorRakefile db log test app doc public tmp

    zlab.fr:~/rmll zifro$ ls demo/appcontrollers helpers models views

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : bas sur MVC

    ActiveRecord

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : ActiveRecord

    ActiveRecord, cest :

    le M dans MVC

    un Object Relational Mapper les tables sont reprsentes par des classes les enregistrements par des objets les champs par des attributs

    id title author

    1 The Ruby Way Hal Fulton

    2 Ruby for Rails David A. Black

    Table Books

    id = 1title = The Ruby Wayauthor = Hal Fulton

    id = 2title = Ruby for Railsauthor = David A. Black

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : ActiveRecord

    Dfinition du modle Book, pour reprsenter les livres enregistrs dans la base de donnes :

    class Book < ActiveRecord::Baseend

    convention : une classe correspond une table portant le mme nom au pluriel inutile de dfinir les attributs, ActiveRecord les lit directement dans la base de donnes

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : ActiveRecord

    On ne manipule que des objets Ruby : cration dun objet :

    initialisation de ses attributs :

    lecture des attributs :

    sauvegarde de lobjet :

    cration et sauvegarde :

    suppression :

    b = Book.new

    b.title = 'Agile Web Development with Rails'b.author = 'Dave Thomas & David Heinemeier Hansson'

    b.title # renvoie 'Agile Web Development with Rails'

    b.save # renvoie true ou falseb.save! # lve une exception en cas derreur

    b.create :title => 'Ruby in a Nutshell', :author => 'Matz'

    b.delete

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : ActiveRecord

    ActiveRecord, cest aussi :

    des mthodes pour interroger les modles (des finders)

    id title author

    1 The Ruby Way Hal Fulton

    2 Ruby for Rails David A. Black

    Table Books class Book < ActiveRecord::Baseend

    b = Book.find 1b = Book.find :first, :conditions => ['title LIKE ?', '%Ruby%']b = Book.find :all, :conditions => ['title LIKE ?', '%Ruby%']b = Book.find_by_author 'Hal Fulton'b = Book.find_by_title 'Ruby for Rails'

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : ActiveRecord

    ActiveRecord, cest aussi :

    la description des relations entre les modles

    id title author category_id

    1 The Ruby Way Hal Fulton 1

    2 Ruby for Rails David A. Black 1

    Table Books

    id label

    1 Computing

    2 Fiction

    Table Categories

    class Book < ActiveRecord::Base belongs_to :categoryend

    class Category < ActiveRecord::Baseend

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : ActiveRecord

    Ce qui permet dcrire :

    b = Book.find_by_title 'Ruby for Rails'b.category.label

    c = Category.find_by_label 'Fiction'

    b = Book.create :title => 'Winter Hauntering', :author => 'Dan Simmons', :category_id => c.id

    b = Book.newb.title = 'The man who disappears'b.author = 'Jeffery Deavers'b.category = cb.save

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : ActiveRecord

    id title author category_id

    1 The Ruby Way Hal Fulton 1

    2 Ruby for Rails David A. Black 1

    Table Books

    id label

    1 Computing

    2 Fiction

    Table Categories

    class Book < ActiveRecord::Base belongs_to :categoryend

    Pour traverser la relation depuis lautre modle :

    class Category < ActiveRecord::Base has_many :booksend

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : ActiveRecord

    Ce qui permet dcrire :

    c = Category.find_by_label 'Computing'c.books

    b = Book.create :title => 'Hyperion', :author => 'Dan Simmons'

    fiction = Category.find_by_label 'Fiction'fiction.books ['author = ?', 'Dan Simmons']

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : ActiveRecord

    ActiveRecord, cest aussi :

    des mthodes pour valider les donnes du modleclass Book < ActiveRecord::Base

    belongs_to :category

    validates_presence_of :title, :author validates_length_of :title, :minimum => 2

    def validate self.errors.add :author, Not actually an authorif self.author == 'Why the luck stiff' end

    end

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : bas sur MVC

    ActionView

  • RMLL 2008 - Prsentation de Ruby on Rails - Guillaume Zifro DESRAT

    Ruby on Rails : ActionView

    ActionView, cest