Rails 5 – Brown Bag Lunch #1 – ActionCable



Rails 5 – Brown Bag Lunch #1 – ActionCable

0 0


bbl-1


On Github rhannequin / bbl-1

Rails 5

Brown Bag Lunch #1

15/04/2016

ActionCable

C'est quoi ?

Framework d'intégration des WebSockets en Ruby

Permet d'élaborer des fonctionnalités temps-réelau sein de Rails

Comment ?

Basé sur Redis pour ses fonctionalités de publish/subscribe

Contrôleur

              
           # 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
              
            

Channel

              
          # app/channels/comments_channel.rb

          class CommentsChannel < ApplicationCable::Channel
            def subscribed
              stream_from 'comments'
            end
          end
              
            

JavaScript

              
  // 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>"
    }
  })
              
            

Rails API

C'est quoi ?

Intégration nativement de rails-api dans le framework

Comment ?

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

Quand ?

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

Autres

ApplicationRecord

Utilisation d'une classe principale ApplicationRecord

Partager des comportement et éviter le monkeypatching sur ActiveRecord::Base

ApplicationRecord

              
            # app/models/application_record.rb

            class ApplicationRecord < ActiveRecord::Base
              self.abstract_class = true
            end



            # app/models/post.rb

            class Post < ApplicationRecord
            end
              
            

rake / rails

L'appel des tâches rake est remplacé par la commande$ rails

            
                    # Avant : $ rake db:migrate

                    $ rails db:migrate
            
          

Améliorations du Test Runner

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éliorations du Test Runner

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

Rendering

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
            
          

Caching en mode développement

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

Big set warning

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"
            
          

Améliorations dans ActiveSupport

Time#next_day

Time#prev_day

Time#next_week

Time#prev_week

Time#next_weekday

Time#prev_weekday

Time#on_weekend?

Time#on_weekday?

Améliorations dans ActiveSupport

Array#without

Array#second_to_last

Array#third_to_last

Integer#positive?

Integer#negative?

?

Rails 5 Brown Bag Lunch #1 15/04/2016