rails 5 – amsterdam.rb – uberous
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