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?