rails 5 – amsterdam.rb – uberous

Post on 13-Feb-2017

73 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

amsterdam.rb

Rails 5What's new?

Rails 5 by Jeroen Visser 1

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

amsterdam.rb

I like beta soHware

3

amsterdam.rb

Rails 5

4

amsterdam.rb

Current state

5

Race condiJon →

amsterdam.rb

Current state

6

amsterdam.rb

New in Rails 5

7

amsterdam.rb

Visual idenJty

8

amsterdam.rb

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

by @gsamokovarov

9

amsterdam.rb 10

amsterdam.rb 11

amsterdam.rb

AcJon Cable

12

amsterdam.rb

What is AcJon Cable?

13

amsterdam.rb

Live

14

amsterdam.rb

How does it work?

15

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

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

amsterdam.rb 18

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

amsterdam.rb 19

def subscribed stream_for current_user end

amsterdam.rb

NotificationChannel.broadcast_to( @user, @notification )

amsterdam.rb

MulJplexing

21

image from wikimedia

amsterdam.rb

Front-end setup

22

amsterdam.rb 23

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

#= require action_cable

#= require_tree ./channels

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

amsterdam.rb

ActionController::Renderer

25

amsterdam.rb 26

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

amsterdam.rb

Rails API

27

amsterdam.rb 28

rails new my-api-project --api

amsterdam.rb

AFributes API

29

amsterdam.rb 30

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

amsterdam.rb 31

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

amsterdam.rb 32

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

amsterdam.rb

ApplicaJonRecord

33

amsterdam.rb 34

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

amsterdam.rb

ActiveRecord::Relation#or

35

amsterdam.rb 36

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

amsterdam.rb

ActiveRecord::Relation#in_batches

37

amsterdam.rb 38

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

amsterdam.rb

ActiveRecord::Base#has_secure_token

39

amsterdam.rb 40

class User < ApplicationRecord has_secure_token :email_verification_token end

amsterdam.rb 41

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

amsterdam.rb 42

user.regenerate_email_verification_token

amsterdam.rb

rake db:migrate

43

amsterdam.rb

rails db:migrate

44

rake db:migrate

amsterdam.rb

Turbolinks 3

45

amsterdam.rb

Turbolinks 5

46

Turbolinks 3

amsterdam.rb

Upgrading to Rails 5

47

amsterdam.rb

> Ruby 2.2.2

48

amsterdam.rb

Write tests

49

amsterdam.rb

Write good tests

50

Write tests

amsterdam.rb

rails app:update

51

amsterdam.rb

Thanks!uberous.io / jrnv.nl

52

top related