Upload
novelys
View
603
Download
2
Embed Size (px)
Citation preview
Yann Klis, LPCDED, 18 novembre 2010
Ruby on Railset développement web
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
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 ?
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
Yann Klis, Novelys, 18 novembre 2010
PlanLe langage Ruby
Yann Klis, Novelys, 18 novembre 2010
Rubylangage de script
multiplateforme
orienté objet pur (introspection)
basé sur des messages
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
Yann Klis, Novelys, 18 novembre 2010
Rubylangage de script
multiplateforme
orienté objet pur
basé sur des messages
dynamique
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
Yann Klis, Novelys, 18 novembre 2010
Rubylangage de script
multiplateforme
orienté objet pur
basé sur des messages
dynamique
“Duck typing”
“block” (closure)
itérateurs
Yann Klis, Novelys, 18 novembre 2010
Ruby
['pim', 'pam', 'poum'].each { |perso| print perso.capitalize}
Block et itérateur
Yann Klis, Novelys, 18 novembre 2010
Rubylangage de script
multiplateforme
orienté objet pur
basé sur des messages
dynamique
typage fort
“block”
continuations
esthétisme (!)
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
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)
Yann Klis, Novelys, 18 novembre 2010
PlanLe langage Ruby
Généralités sur Ruby on Rails
Yann Klis, Novelys, 18 novembre 2010
Petite parenthèseDesign Pattern ou Motif de Conception
MVC
ORM
REST
Yann Klis, Novelys, 18 novembre 2010
Petite parenthèseMVC
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
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
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
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
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
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)
Yann Klis, Novelys, 18 novembre 2010
PlanLe langage Ruby
Généralités sur Ruby on Rails
Principaux composants
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.)
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
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
Yann Klis, Novelys, 18 novembre 2010
Active Recordbelongs_to
has_one
has_many
has_many :through
polymorphisme
STI (Single Table Inheritance)
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
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
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)
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 (!)
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)