rails 5 – amsterdam.rb – uberous

52
amsterdam.rb Rails 5 What's new? Rails 5 by Jeroen Visser 1

Upload: jeroen-visser

Post on 13-Feb-2017

72 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Rails 5What's new?

Rails 5 by Jeroen Visser 1

Page 2: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

I'm Jeroen Visser

• CTO @ Uberous

• github.com/jeroenvisser101

• twiFer.com/jeroenvisser101

• I blog at jrnv.nl

2

That's me

Photo by Tim Gouw

Page 3: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

I like beta soHware

3

Page 4: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Rails 5

4

Page 5: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Current state

5

Race condiJon →

Page 6: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Current state

6

Page 7: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

New in Rails 5

7

Page 8: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Visual idenJty

8

Page 9: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

New home pagehFps://github.com/rails/rails/pull/23237

by @gsamokovarov

9

Page 10: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 10

Page 11: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 11

Page 12: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

AcJon Cable

12

Page 13: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

What is AcJon Cable?

13

Page 14: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Live

14

Page 15: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

How does it work?

15

Page 16: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

How does it work?

Channel Imagine this as an IRC channel

Users can subscribe to it

16

Broadcast Imagine this as a message sent

on a channel

Page 17: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 17

class NotificationChannel < ApplicationCable::Channel

end

def subscribed stream_from "some_channel" end

def unsubscribed # Any cleanup needed when channel is unsubscribed end

Page 18: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 18

ActionCable.server.broadcast( "some_channel", some_data: "some string")

Page 19: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 19

def subscribed stream_for current_user end

Page 20: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

NotificationChannel.broadcast_to( @user, @notification )

Page 21: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

MulJplexing

21

image from wikimedia

Page 22: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Front-end setup

22

Page 23: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 23

# app/assets/javascripts/cable.coffee #= require_self@App ||= {}App.cable = ActionCable.createConsumer()

#= require action_cable

#= require_tree ./channels

Page 24: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 24

# .../javascripts/channels/notification_channel.coffee App.cable.subscriptions.create { channel: 'some_channel' any_other_parameters: 'some value' }, received: (data) -> console.log data

Page 25: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

ActionController::Renderer

25

Page 26: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 26

MessagesController.render( partial: 'messages/message', locals: { message: params[:message][:body] } )

Page 27: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Rails API

27

Page 28: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 28

rails new my-api-project --api

Page 29: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

AFributes API

29

Page 30: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 30

# app/models/product.rbclass Product < ApplicationRecord attribute :price_in_cents, MoneyType.new end

Page 31: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 31

class MoneyType < ActiveRecord::Type::Integer def type_cast(value) # convert values like '$10.00' to 1000 endend

Page 32: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 32

product = Product.new(price_in_cents: '$10.00') product.price_in_cents #=> 1000

Page 33: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

ApplicaJonRecord

33

Page 34: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 34

class ApplicationRecord < ActiveRecord::Baseend self.abstract_class = true

Page 35: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

ActiveRecord::Relation#or

35

Page 36: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 36

Project.flagged.or(Project.open) # orProject.where(name: "My Project"). or(Project.where(name: "Other Project"))

Page 37: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

ActiveRecord::Relation#in_batches

37

Page 38: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 38

Person.where("age >= 18").in_batches(of: 10) do |people| people.update_all(can_drink: true)end

Page 39: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

ActiveRecord::Base#has_secure_token

39

Page 40: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 40

class User < ApplicationRecord has_secure_token :email_verification_token end

Page 41: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 41

user = User.createuser.email_verification_token #=> 'e2426a93718d1817a43abbaa'

Page 42: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb 42

user.regenerate_email_verification_token

Page 43: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

rake db:migrate

43

Page 44: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

rails db:migrate

44

rake db:migrate

Page 45: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Turbolinks 3

45

Page 46: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Turbolinks 5

46

Turbolinks 3

Page 47: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Upgrading to Rails 5

47

Page 48: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

> Ruby 2.2.2

48

Page 49: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Write tests

49

Page 50: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Write good tests

50

Write tests

Page 51: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

rails app:update

51

Page 52: Rails 5 – Amsterdam.rb – Uberous

amsterdam.rb

Thanks!uberous.io / jrnv.nl

52