33
Yann Klis, LPCDED, 18 novembre 2010 Ruby on Rails et développement web

Séminaire Ruby on Rails (novembre 2010)

  • Upload
    novelys

  • View
    603

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, LPCDED, 18 novembre 2010

Ruby on Railset développement web

Page 2: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Présentation Yann Klis

IUP GMI option Réseaux et application (2001)

DESS d'Informatique option Réseaux et Télécom (2002)

grandes entreprises, start'up, SSII

fondateur de Novelys (Strasbourg) en 2005

spécialisée dans le développement d'applications web

Utilise Ruby et Rails depuis mars 2005

Page 3: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Introduction Retour en force de la plateforme web: Gmail, Google Maps, Delicious, Facebook, Twitter, etc

Avènements de nouveaux outils

AJAX, Web2.0, etc

Qu'apporte Ruby on Rails au développement web ?

Page 4: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

PlanLe langage Ruby (brève introduction)

Généralités sur Ruby on Rails

Principaux composants

Démo commentée

Page 5: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

PlanLe langage Ruby

Page 6: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Rubylangage de script

multiplateforme

orienté objet pur (introspection)

basé sur des messages

Page 7: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Ruby

class Klass

def hello(*args)

"Hello " + args.join(' ')

end

end

k = Klass.new

k.hello "gentle", "readers" -> "Hello gentle readers"

k.send :hello, "gentle", "readers" -> "Hello gentle readers"

Un langage basé sur des messages

Page 8: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Rubylangage de script

multiplateforme

orienté objet pur

basé sur des messages

dynamique

Page 9: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Ruby

class Printing def method_missing(m, *args) if (name = /^test_(.+)$/.match(m.id2name)) print name[1] end endend

print = Printing.newprint.test_hello → “hello”print.test_haha → “haha”

Un langage dynamique

Page 10: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Rubylangage de script

multiplateforme

orienté objet pur

basé sur des messages

dynamique

“Duck typing”

“block” (closure)

itérateurs

Page 11: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Ruby

['pim', 'pam', 'poum'].each { |perso| print perso.capitalize}

Block et itérateur

Page 12: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Rubylangage de script

multiplateforme

orienté objet pur

basé sur des messages

dynamique

typage fort

“block”

continuations

esthétisme (!)

Page 13: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Ruby

5.times { print "Odelay!" }

Exit unless "restaurant".include? "aura"

['toast', 'cheese', 'wine'].each { |food| print food.capitalize }

Un langage esthétique et expressif

Page 14: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Rubylangage de script

multiplateforme

orienté objet pur

basé sur des messages

dynamique

typage fort

“block”

continuations

esthétisme (!)

}Langage de domaine(DSL)

Page 15: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

PlanLe langage Ruby

Généralités sur Ruby on Rails

Page 16: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Petite parenthèseDesign Pattern ou Motif de Conception

MVC

ORM

REST

Page 17: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Petite parenthèseMVC

Page 18: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Petite parenthèseORM Object Relational Mapping

mapping des noms de classe avec les noms de tables

mapping des types

mapping des attributs

Page 19: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Petite parenthèseORM

Table Products avec les champs :- name, VARCHAR(255)- description, TEXT- number, INT(11)

Class Product avec les attributs- name, String- description, String- number, Integer

Page 20: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Petite parenthèseREST : Representational State Transfer

!= SOAP, XML-RPC, etc

URL identifiant une ressource unique

verbes HTTP

Champ HTTP “accept” et types MIME

Page 21: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Petite parenthèse

Voir REST.xls ...

Verbe HTTP

Url Action

GET /articles Liste des articles

POST /articles Création d'un article

GET /articles/new Formulaire de création d'un article

GET /articles/:id/edit Formulaire d'édition d'un article

GET /articles/:id Visualisation d'un article

PUT /articles/:id Mise à jour d'un article

DELETE /articles/:id Suppression d'un article

Page 22: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Qu'est-ce que Ruby on Rails ?Ruby on Rails, Rails, RoR : framework web

Design Pattern: MVC (Model View Controller), ORM (Object Relational Mapping), etc.

"Don't Repeat Yourself" (DRY)

“Convention over Configuration”

Plusieurs composants : Active Record, Action Pack, Action Mailer, Action Web Service, Prototype/Scriptaculous (spin off)

Serveur web intégré (webrick, mongrel, thin)

REST

Page 23: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Un framework “agile”generators / scaffolding (CRUD)

serveur web intégré (webrick, mongrel, thin)

débugger intégré (irb)

./script/console

tests unitaires, fonctionnels, d'intégration

déploiement avec Capistrano

génération de la documentation (rdoc)

automatisation (rake)

Page 24: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

PlanLe langage Ruby

Généralités sur Ruby on Rails

Principaux composants

Page 25: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Active RecordM de MVC

ORM

support du pluriel

support des relations

validation (présence, format, unicité, association, etc.)

callbacks (create, save, update, etc.)

Page 26: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Active Record

CREATE TABLE products ( id int(11) NOT NULL auto_increment, name varchar(255), PRIMARY KEY (id));

class Product < ActiveRecord::Baseend

my_product = Product.newmy_product.name = “Pipo”my_product.save

my_product = Product.new({ “name” => “Molo” })

my_product = Product.find(:first)

Fonctionnement de base

Page 27: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Active Record

CREATE TABLE products ( id int(11) NOT NULL auto_increment, customer_id int(11) NOT NULL, name varchar(255), PRIMARY KEY (id));

CREATE TABLE customers ( id int(11) NOT NULL auto_increment, name varchar(255), PRIMARY KEY (id));

class Product < ActiveRecord::Base belongs_to :customerend

class Customer < ActiveRecord::Base has_many :productsend

customer = Customer.newcustomer.name = “IBM”product = Product.newproduct.name = “pipo”customer.products << productcustomer.products.size

Support des relations

Page 28: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Active Recordbelongs_to

has_one

has_many

has_many :through

polymorphisme

STI (Single Table Inheritance)

Page 29: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Action Packmoteur de template

écriture de template en Ruby (erb, haml, etc)

support XML (REXML)

routage d'url

AJAX

RESTful

Page 30: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Action Pack

<form action="save_person" method="post"> Name: <%= text_field "person", "name", "size" => 20 %>

Password: <%= password_field "person", "password", "maxsize" => 20 %>

Single?: <%= check_box "person", "single" %>

Description: <%= text_area "person", "description", "cols" => 20 %>

<input type="submit" value="Save"></form>

Exemple d'une vue

Page 31: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Action PackRoutage d'url

Verbe HTTP

Url Action Helper

GET /articles index articles_path

POST /articles create articles_path

GET /articles/new new new_article_path

GET /articles/:id/edit edit edit_article_path(product)

GET /articles/:id show product_path(product)

PUT /articles/:id update product_path(product)

DELETE /articles/:id destroy product_path(product)

Page 32: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

ConclusionCourbe d'apprentissage aisée

Productivité

Valeurs de la communauté Rails

Langage Ruby fondation profonde de Rails

Autres particularités de Ruby (drb, EventMachine)

Concurrence : Seaside (Smalltalk), Django (Python), Turbogears (Python), Symfony (PHP)

Rails n'est pas la solution à tous les problèmes (!)

Page 33: Séminaire Ruby on Rails (novembre 2010)

Yann Klis, Novelys, 18 novembre 2010

Ressources

Merci de votre attention !

http://www.ruby-doc.org

http://api.rubyonrails.org

“Agile Web Development with Ruby on Rails”

“Ruby for Rails”

http://www.peepcode.com (screencasts)

http://railscasts.com (screencasts)