Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)

Preview:

Citation preview

Je code mon blog

avec Ruby et Ruby on Rails

WIFI

SSID : OFAC_BUREAU1Pwd : oFaC-wireless

Ruby on Rails developer depuis 2008Freelance depuis 2010● Pepper & Koffee (2008 - 2012)● 2houses.com (fév. 2012 - mars 2014)● Apptweak.com (depuis mars 2014)

Cédric Bousmanne (@akyrho)

Sondage d’opinion

Qui a déjà utilisé un langage de programmation ?

Si oui, le(s)quel(s) ?

Installation de Ruby

https://bitnami.com/stack/ruby/installer

Ruby vs. Ruby on Rails (RoR)

Langage de programmation interpreté, orienté objet

Framework construit sur Ruby

MVC

Modèle : traitement des données, interaction BDDVue : Présente les résultats, recevoir les actions de l’utilisateurContrôleur : Réception des événements, enclenche les actions à effectuer

MVC par l’exemple

Je souhaite envoyer un commentaire● La vue me présente un formulaire que je

rempli● Le contrôleur réceptionne la requête

lorsque j’ai envoyé mon commentaire● Le modèle valide les informations reçues

avant de les enregistrer

DRY (Don’t Repeat Yourself)Facilité par MVC et la métaprogrammation

Convention over configurationSuivre les conventions plutôt que de les préciser

Philosophie de Ruby on Rails

Exemple de convention

Singulier vs. plurielModèle : UserController : UsersController

Vérifier l’installation

cd C:/Bitnami/rubystack-2.0.0-20use_ruby.bat

ruby -v-> ruby 2.0.0p481

Editeur de texte

http://www.sublimetext.com/2

Créer un projet Rails

gem install rails # gem install <gem>

rails new blog # rails new <project>

cd blog

Architecture d’un projet rails

app- assets- controllers- helpers- mailers- models- views

invoke active_record create db/migrate/20141009165133_create_articles.rb create app/models/article.rb invoke test_unit create test/models/article_test.rb create test/fixtures/articles.yml invoke resource_route route resources :articles invoke scaffold_controller create app/controllers/articles_controller.rb (...)

Création du premier scafold

rails generate scaffold article title:string content:text

Ce qu’il s’est passé

● Création d’une migration● Création du modèle● Création des routes● Création du controlleur● Création des vues● Création des assets (js/css)● Création des tests

Migration de la base de donnée

rake db:migrate

-- create_table(:articles)

Publier un article

http://localhost:3000/articles/new

Liste des articles

http://localhost:3000/articles

resources :articles

Les routesfichier config/routes.rb

Prefix Verb URI Pattern Controller#Action

articles GET /articles articles#index

POST /articles articles#create

new_article GET /articles/new articles#new

edit_article GET /articles/:id/edit articles#edit

article GET /articles/:id articles#show

PUT /articles/:id articles#update

DELETE /articles/:id articles#destroy

Ajouter la route par défautconfig/routes.rb

resources :articles

root ‘articles#index’

Modifier l’index des articles

<% @articles.each do |article| %>

<%= render article %>

<% end %>

<%= link_to 'New Article', new_article_path %>

puis rafraîchir la page

app/views/articles/index.html.erb

<section><h2><%= link_to article.title, article %></h2><%= article.content %>

</section>

<hr>

Création du partielapp/views/articles/_articles.html.erb

Articles#showapp/views/articles/show.html.erb

<%= render @article %>

puis rafraîchir la page

Le layoutapp/views/layouts/application.html.erb

<h1><%= link_to “My awesome blog”, root_path %></h1>

<%= yield %>

puis rafraîchir la page

Un peu d’ordreapp/models/article.rb

class Article < ActiveRecord::Base

default_scope { order(“created_at DESC”) }

end

puis rafraîchir la page

Valider la présence d’attributs

class Article < ActiveRecord::Base

default_scope { order(“created_at DESC”) }

validates_presence_of :title

validates_presence_of :content

end

puis tenter d’ajouter un article sans titre et/ou sans contenu

app/models/article.rb

Et après ?● Déporter les actions create, destroy, update dans une

interface d’administration sécurisée● Ajouter un système de commentaire● Gérer la mise en page des articles● Gérer l’ajout d’image/vidéo● Implémenter un système de pagination● Gestion multi-utilisateur● Gestion d’état (en ligne/hors ligne)● ...

Les gems

Rubygems est gestionnaire de paquets pour ruby (~= plugins)

+/- 90,000 gems disponibles

Installation d’une gem

- En ligne de commande$ gem install devise

- Via le Gemfile (recommandé)Ajout d’une ligne dans le Gemfile$ bundle install

Gems populairesDevise Authentification / Gestion des

utilisateurs

Cancan Gestion des permissions

Kaminari Pagination

Capistrano Automatisation du déploiement

Carrierwave Dragonfly

Upload / gestion d’image / fichier

Des questions?

twitter : @akyrhomail : cedric@studio-sept.be

Merci de votre participation !