Séminaire Ruby on Rails (novembre 2010)

Preview:

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)

Recommended