Présentation générale de Ruby
Présentation et historique du langage Ruby
Qu’est-ce que Ruby on Rails ?
Quelles sont les avantages du langage Ruby et du framework Ruby on Rails ?
Retour d’expérience sur un projet développé avec Ruby on Rails

Installer un environnement de développement Ruby sur sa machine
Installation de Git, SQLite, RBenv / RVM, Ruby, Bundler et Rails selon son système (Mac OS, Windows, Linux)
Comment faire cohabiter plusieurs interpréteurs Ruby avec RBenv et RVM ?
Présentation des IDE et éditeurs (RubyMine, SublimeText, TextMate, Vim, etc.)

Comprendre et écrire du code Ruby
Introduction au langage Ruby : syntaxe, convention, Duck Typing, etc.
Les principaux types de données : chaines de caractères, entiers, tableaux, dictionnaires, symboles, expressions booléennes
Structure de contrôle : conditions, boucles, ect.
Définition de méthodes
La notion de bloc
Les Lambdas et les Procs
Définition de classes : constructeurs, variables d’instance, accesseurs, méthodes d’instance, variables de classe, méthodes de classe, contrôle des accès.
Manipulation des objets
Présentation de method_missing
Héritage de classes : visibilité, super-classes et sous-classes, redéfinition de méthodes, appel de constructeurs de super-classes
Les modules : packages, mixins
Gestion des exceptions
TP avec l'interpréteur en ligne de commande «irb»
 
Construire une application Ruby on Rails
Présentation et historique de Ruby on Rails
Création d’une application
Présentation de la structure d’un projet Rails
L'architecture MVC (Modèle-Vue-Contrôleur)
Les environnements : test, development, production
Configuration d’une application : initialisation, connexion à la base de données
Installation et gestion des gems
La ligne de commande et Rails
Exécution du serveur web
Cheminement d’une requête HTTP
Savoir lire et configurer les logs
TP : Génération d’un CRUD (create, read, update, delete) sur une ressource de notes, Versionner son code avec Git

Le modèle
Comprendre la correspondance entre modèle objet et base de données relationnelle
Interagir avec la base de données à l'aide d'Active Record : création, mise à jour, lecture et suppression d'enregistrements
Générer, écrire et exécuter des migrations
TP avec «rails console»

La vue
Présentation des langages de templating ERB et HAML
Utilisation des helpers de vue : link_to, image_tag, etc.
Création de helpers de vue personnalisés
Construction de formulaires
Explication du système de Layout
TP : Installation et utilisation de la gem simple_form

Le contrôleur
Présentation de l’architecture REST
Le rôle du contrôleur
Génération de contrôleurs
Le déroulement d’une action dans un contrôleur : récupérer les paramètres HTTP, gestion du rendu, passage de paramètres à la vue, etc.

Le routage
Les règles de routage
Correspondance entre URL et actions de contrôleur
Correspondance entre URL et helpers d’URL
Les règles de routage des ressources
Les règles personnalisées
Vérifier ces règles de routage avec «rake routes»

TP : mettre en place une recherche sur les notes (partie modèle)
Trouver la bonne requête à l’aide de «rails console»
Implémenter la recherche dans son modèle

Tester son application Ruby on Rails
Qu'est-ce qu'un test ?
A quoi cela sert-il de tester son code ?
Que peut-on tester ? (modèles, vues, contrôleurs, etc.)
Les fixtures
Les différents types de tests : unitaires, fonctionnels, d’intégration, de performance
TP : tester l’implémentation de sa recherche de notes

TP : mettre en place une recherche sur les notes (partie contrôleur / vue)
Ajouter une action au contrôleur
Ajouter une règle de routage
Modifier la vue pour ajouter un formulaire de recherche de notes
 
Déployer son application sur Heroku
Création d’un compte Heroku
Création d’une application Cedar
Configuration de son application pour le déploiement
Procédure de déploiement et environnement de production
Les différentes commandes pour interagir avec son application en production
Les add-ons Heroku
TP : déploiement de son application sur Heroku

Cycle de vie et intégrité des modèles
Cycle de vie d’un objet Active Record
Méthodes de «call-back»
Mécanisme de validation d’un objet Active Record
Utilisation de règles de validation
Création de règles de validation personnalisées
TP : Ajouter des règles de validation sur le modèle Note

Optimiser et gérer vos ressources statiques avec l'Asset Pipeline
Qu’est-ce que l’Asset Pipeline ?
Comment utiliser l’Asset Pipeline (en développement, en production)?
Présentation de SASS et CoffeeScript

Travaux pratiques 
Mise en place du framework CSS : Bootstrap Twitter
Mise en place d’une pagination
Installation et configuration de la gem will_paginate
Utilisation de la gem pour paginer les notes sans AJAX
Pagination des notes avec AJAX

Créer une API REST
Contrôleur et architecture REST
Sérialisation JSON et XML
Création d’une API REST simple
Présentation de RABL pour définir le format de sérialisation de la réponse
Solution pour protéger une API REST

Associations entre modèles
Association «one to many»
Association «many to many»
Association « many to many» avec table de jointure valuée
Mise à jour de la structure de la base de données
Manipulation de grappes d’objets
TP : création d’un modèle User et de l’association «one to many» entre les modèles User et Note

Le modèle avancé de Ruby on Rails
Création d’un scope
Gestion du cache au niveau d’Active Record
Les méthodes «find» dynamiques
Les différentes utilisations de la méthode «where»
Active Record et la génération de requêtes avancées : jointure externe, sous-requête, etc.
Les pièges à éviter

Envoi d'emails
Envoi d'emails basiques avec Active Mailer
Configuration de Active Mailer
Mails HTML

Session, cookies et authentification
Où stocker la session ? (cookies, base de données, etc.)
Manipulation de la session
Manipulation des cookies
Affichage de messages Flash
Exemple d'utilisation de la session avec un système authentification
TP : mise en place d’un système authentification avec la gem Devise et d’une interface d'administration avec la gem Active Admin