15/04/2016
Framework d'intégration des WebSockets en Ruby
Permet d'élaborer des fonctionnalités temps-réelau sein de Rails
Basé sur Redis pour ses fonctionalités de publish/subscribe
# app/controllers/comments_controller.rb class CommentsController < ApplicationController def create @comment = Comment.create(comment_params) @comment.save ActionCable.server.broadcast 'comments', comment: @comment.content head :ok end end
# app/channels/comments_channel.rb class CommentsChannel < ApplicationCable::Channel def subscribed stream_from 'comments' end end
// app/assets/javascripts/channels/comments.js App.comments = App.cable.subscriptions.create('CommentsChannel', { received: function(data) { return $('#comments').append(this.renderComment(data)) }, renderComment: function(data) { return "<p>" + data.comment + "</p>" } })
Intégration nativement de rails-api dans le framework
Permet de générer une application en tant qu'API et non application web
Supprime les couches inutiles comme l'asset pipeline et la gestion des vues
Utile pour les gros projets sous forme d'API pour bénéficier de la robustesse et des fonctionnalités du framework
Sans doute un mauvais choix pour un simple micro-service
Utilisation d'une classe principale ApplicationRecord
Partager des comportement et éviter le monkeypatching sur ActiveRecord::Base
# app/models/application_record.rb class ApplicationRecord < ActiveRecord::Base self.abstract_class = true end # app/models/post.rb class Post < ApplicationRecord end
L'appel des tâches rake est remplacé par la commande$ rails
# Avant : $ rake db:migrate $ rails db:migrate
Possibilité d'exécuter un test en particulier à partir d'une ligne de code de la méthode en question
$ rails test test/models/user.rb:27
Existe en version multiple
$ rails test test/models/user_test.rb:27 test/models/post_test.rb:42
Amélioration de la stack d'erreur $ rails t -b
Possibilité de stopper la suite de test dès le premier échec $ rails t -d
Possibilité de rendre une vue ou un partial à l'extérieur d'un contrôleur
OrdersController.render :show, assigns: { order: Order.last } OrdersController.render :_form, locals: { order: Order.last } OrdersController.render json: Order.all
Rails 5 ne nécessite plus la modification de config/environments/development.rb puis le redémarrage du serveur pour active/désactiver le cache en développement.
Il suffit désormais de lancer la commande $ rails dev:cache lorsque le serveur est lancé pour activer/désactiver le cache
Lancer une alerte dans les logs si on récupère depuis ActiveRecord une grande quantité d'enregistrements
config.active_record.warn_on_records_fetched_greater_than = 1500 >> Post.all => Query fetched 2000 Post records: SELECT "posts".* FROM "posts"
Time#next_day
Time#prev_day
Time#next_week
Time#prev_week
Time#next_weekday
Time#prev_weekday
Time#on_weekend?
Time#on_weekday?
Array#without
Array#second_to_last
Array#third_to_last
Integer#positive?
Integer#negative?