[srijan wednesday webinar] rails 5: what's in it for me?

199
Rails 5 What’s in it for me? @_cha1tanya @BigBinary @Srijan

Upload: srijan-technologies

Post on 11-Jan-2017

509 views

Category:

Software


0 download

TRANSCRIPT

Page 1: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Rails 5What’s in it for me?

@_cha1tanya@BigBinary

@Srijan

Page 2: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 3: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Overview of Rails 5

Page 4: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Rails.5.started_on?

Nov, 2014

Page 5: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 6: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

9359+ Commits

Page 7: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Beta 3

Page 8: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

RC 1 coming soon

Page 9: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Lots of new features

Page 10: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Bug fixes

Page 11: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Improvements

Page 12: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

DHH Features

Page 13: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 14: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Major features

Page 15: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Ruby 2.2.2+Rails 5 will require that your apps runs on Ruby 2.2.2 or latest.

Page 16: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Symbol GC

Page 17: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Incremental GC

Page 18: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Chance to cleanupRails internals

Page 19: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Keyword argumentsRails code can use keyword arguments internally as now it only supports Ruby 2.2.2 +

Page 20: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Module#prepend

Page 21: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Action CableDHH talking about Action Cable https://www.youtube.com/watch?v=n0WUjGkDFS0

Page 22: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Full StackIt has both Ruby side as well as JavaScript side.

Page 23: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Pub/Sub

Page 24: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Seamless integration with

other parts

Page 25: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

module ApplicationCable class Connection < ActionCable::Connection::Base identified_by :current_user

def connect self.current_user = find_verified_user end

protected def find_verified_user id = cookies.signed[:user_id] if current_user = User.find_by(id: id) current_user else reject_unauthorized_connection end end endend

Page 26: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Ruby sideInitially it was started with hard dependency on event machine.It was later dropped in https://github.com/rails/rails/commit/74497eabd52f2f9f8c383808b11286283046c2b2.

Now Action Cable does not have hard dependency on Event machine

Page 27: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

These are the 3 dependencies of Action Cable on Ruby side:

websocket-drivernio4rconcurrent-ruby

Page 28: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Adapters

Page 29: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

InlineAsync

Good for development and test mode.

Page 30: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Evented RedisNon-Evented Redis

PostgresqlFor production mode.

Page 31: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Rendering a template

outside of controller

Page 32: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

ActionController::Renderer.render

Page 33: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Basecamp 3

Page 34: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 35: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

API only apps

Page 36: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

What is an API only app

Page 37: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Twitter APIGithub API

Supplementary APIs where apps are still traditional web apps

Page 38: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Proliferation of client side

frameworks

Page 39: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 40: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Rails as a Back EndWhich results into using Rails only as

back end app.

Page 41: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

No HTML, only JSON!

Page 42: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Slim version of Rails

Page 43: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

No view layer

Page 44: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Limited set of middlewares

Page 45: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

JBuilderActiveModel::SerializerThese can be used with API only apps to generate JSON

Page 46: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Still Rails!(But for API)

Page 47: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Create new Rails API only appwith

rails new api_app --api

Page 48: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Convert existing app to API only app

config.api_only = true

Page 49: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

development

Page 50: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

PumaPuma is default web server now

Page 51: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

config/puma.rb

Newly created Rails 5 apps will come with a config/puma.rb by default.

Page 52: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

New Welcome page

Page 53: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 54: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 55: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

`rails` CLI

Page 56: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rake db:migrate

Page 57: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails server

Page 58: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Why some rake and some rails?

Page 59: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

In Rails 5, just use `rails`

rails db:migrate

Page 60: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails server

Page 61: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails assets:precompile

Page 62: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

One `rails` command to bind

them all!

Page 63: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Rake Proxy

Page 64: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rake db:migrate #works

Page 65: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails restartAbility to restart Rails app in

development.https://github.com/rails/rails/issues/188

76

Page 66: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

tmp/restart.txt

Similar to how passenger restarts app by touching tmp/restart.txt

Page 67: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Works with Pow,Puma

Page 68: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails dev:cache

Page 69: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Caching in development modeIn previous Rails versions, caching does not work automatically in development.

Now it will work in Rails 5.

Page 70: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Toggles caching in development

Page 71: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Also restarts app

Page 72: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Filtering routeshttps://github.com/rails/rails/issues/189

02Ability to filter routes.

Page 73: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Have thousands of routes?

Page 74: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Filtering is easier now

Page 75: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails routes -c users

Page 76: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails routes -c admin/users

Page 77: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails routes -c PostsController

Page 78: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails routes -g PATCH

Page 79: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails routes -g admin

Page 80: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Evented File system monitor

Page 81: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Reloading in development

Rails reloads all code in development when something changes. For that it has to do a

complete walkthrough of all files.

Page 82: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Check something has changed or not

Page 83: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

config.file_watcher

Page 84: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

gem ‘listen’

Page 85: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

test

Page 86: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Test RunnerRails 5 has added Rspec like test runner

http://blog.bigbinary.com/2016/01/03/test-runner-in-rails-5.html

Page 87: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

bin/rails test

Page 88: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Running a single test by line number$ bin/rails test test/models/user_test.rb:27

Page 89: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

$ bin/rails test test/models test/jobs

Page 90: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Improved failure message

Page 91: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

$ bin/rails tRun options: --seed 51858

# Running:

.F

Failure:PostsControllerTest#test_should_get_new:Expected response to be a <success>, but was a <302> redirect to <http://test.host/posts>

bin/rails test test/controllers/posts_controller_test.rb:15

Page 92: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Failing fast

Page 93: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

$ bin/rails t -fRun options: -f --seed 59599

# Running:

..F

Failure:PostsControllerTest#test_should_get_new:Expected response to be a <success>, but was a <302> redirect to <http://test.host/posts>

bin/rails test test/controllers/posts_controller_test.rb:15

Interrupted. Exiting...

Finished in 0.179125s, 16.7481 runs/s, 22.3308 assertions/s.

3 runs, 4 assertions, 1 failures, 0 errors, 0 skips

Page 94: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Backtrace

Page 95: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

See complete backtrace with -b switch$ bin/rails t -b

Error:PostsControllerTest#test_should_create_post:NameError: undefined local variable or method `boom' for #<PostsController:0x007fc53c4eb868> /rails-5-test-runner-app/app/controllers/posts_controller.rb:29:in `create' /sources/rails/actionpack/lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action' /sources/rails/actionpack/lib/abstract_controller/base.rb:183:in `process_action' /sources/rails/actionpack/lib/action_controller/metal/rendering.rb:30:in `process_action' /sources/rails/actionpack/lib/abstract_controller/callbacks.rb:20:in `block in process_action' /sources/rails/activesupport/lib/active_support/callbacks.rb:126:in `call'..... /sources/rails/activesupport/lib/active_support/testing/assertions.rb:71:in `assert_difference' /rails-5-test-runner-app/test/controllers/posts_controller_test.rb:19:in `block in <class:PostsControllerTest>'

Page 96: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Colored output

Page 97: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 98: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Controller tests

Page 99: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

assignsassert_template

Page 100: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

assignsassert_template

Page 101: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Why?

Page 102: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

gem ‘action-controller_testing’

Page 103: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Controller tests are integration tests

Page 104: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

def test_index get :index assert_response :successend

Page 105: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Example of changed controller test.

def test_index get posts_url

assert_response :successend

https://github.com/rails/rails/issues/22076

Page 106: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

ActionController::TestCase

In Rails 4.x this was the superclass for all controller tests.

Page 107: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

ActionDispatch::IntegrationTest

Now it is this one. Also a lot of effort has gone into making these tests faster.

Page 108: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

More focus onintegration testing

Page 109: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

caching

Page 110: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

http_cache_forever

Page 111: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

def index http_cache_forever do render ‘index’ endend

Page 112: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Use it with caution!It will literally set the cache control headers for ‘forever’. Make sure that you are using it with static content only.

Page 113: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Collection Caching

Page 114: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

@users = User.where(city: 'Pune')

Page 115: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

No record is deleted. No record is added.

Page 116: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Caching of collections

Page 117: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

ActiveRecord::Relation#cache_key

Page 118: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

@users.cache_key=> "users/query-67ed32b36805123"

Page 119: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

cache(@users) do ………end

Page 120: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

LimitationsDoesn’t work well with limits and groups.

Page 121: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Partials caching

Page 122: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

# index.html.erb<%= render partial: 'todo', collection: @todos %>

# _todo.html.erb<% cache todo do %> <%= todo.name %><% end %>

Page 123: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

multi_fetch_fragments gem

Page 124: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Folded in Rails 5

Page 125: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Just pass `cached: true` and Rails will fetch all caches at once.

# index.html.erb<%= render partial: 'todo', collection: @todos, cached: true %>

# _todo.html.erb<% cache todo do %> <%= todo.name %><% end %>

Page 126: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Caching Action Mailer views

Page 127: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Active Record

Page 128: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

ApplicationRecordApplicationRecord is a new superclass for all app models, analogous to app controllers subclassing ApplicationController instead of ActionController::Base. This gives apps a single spot to configure app-wide model behavior

Page 129: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

class Post < ActiveRecord::Baseend

Page 130: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

class Post < ApplicationRecordend

Page 131: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

#orAdded the #or method on ActiveRecord::Relation, allowing use of the OR operator to combine WHERE or HAVING clauses

Page 132: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Post.where('id = 1').or(Post.where('id = 2'))

# => SELECT * FROM posts WHERE (id = 1) OR (id = 2)

Page 133: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

has_secure_token Added ActiveRecord::SecureToken in order to encapsulate generation of unique tokens for attributes in a model using SecureRandomhttps://github.com/rails/rails/pull/18217

Page 134: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

class User < ApplicationRecord has_secure_tokenend

Page 135: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

>> user = User.new>> user.save=> true

>> user.token=> 'qjCbex522DfVEVd5ysUWppWQ'

Page 136: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

URL safe

Page 137: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Fixed length strings

Page 138: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Base 58 encoding

Page 139: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Regenerating also possible

Page 140: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

>> user = User.first=> <User id: 11, name: 'John', email: '[email protected]', token: "jRMcN645BQyDr67yHR3qjsJF", token: "qjCbex522DfVEVd5ysUWppWQ">

>> user.token=> "qjCbex522DfVEVd5ysUWppWQ"

>> user.regenerate_token=> true

>> user.token=> "tYYVjnCEd1LAXvmLCyyQFzbm"

Page 141: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Versioned migrations

Page 142: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Backward compatibility

Page 143: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

But API must change

Page 144: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

For eg. in Rails 4.x

t.timestamps null: false

Page 145: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

But in Rails 5, there is no `null: false` still it adds `NULL` constraint when the migration is run in

Rails 5.

t.timestamps # Rails 5

Page 146: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Compatibility Layer

Page 147: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

ActiveRecord::Migration[5.0]

Superclass of migrations in Rails 5. Tells Rails for which version this migration was generated.

Page 148: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Active Support

Page 149: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Improvements to Date/Time

Page 150: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

next_day/prev_day

Page 151: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Time.current=> Fri, 12 Feb 2016 08:53:31 UTC +00:00

Time.current.next_day=> Sat, 13 Feb 2016 08:53:31 UTC +00:00

Time.current.prev_day=> Thu, 11 Feb 2016 08:53:31 UTC +00:00

Page 152: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

next week with same time

Page 153: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Time.current=> Fri, 12 Feb 2016 09:15:10 UTC +00:00

Time.current.next_week=> Mon, 15 Feb 2016 00:00:00 UTC +00:00

Time.current.next_week(same_time: true)=> Mon, 15 Feb 2016 09:15:20 UTC +00:00

Page 154: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

on_weekend?

Page 155: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Time.current=> Fri, 12 Feb 2016 09:47:40 UTC +00:00

Time.current.on_weekend?=> false

Time.current.tomorrow=> Sat, 13 Feb 2016 09:48:47 UTC +00:00

Time.current.tomorrow.on_weekend?=> tru

Page 156: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

on_weekday?

Page 157: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Time.current=> Fri, 12 Feb 2016 09:47:40 UTC +00:00

Time.current.on_weekday?=> true

Time.current.tomorrow=> Sat, 13 Feb 2016 09:48:47 UTC +00:00

Time.current.tomorrow.on_weekday?=> false

Page 158: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Time.current=> Fri, 12 Feb 2016 09:47:40 UTC +00:00

Time.current.next_weekday=> Mon, 15 Feb 2016 09:55:14 UTC +00:00

Time.current.prev_weekday=> Thu, 11 Feb 2016 09:55:33 UTC +00:00

Page 159: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Enumerable#pluck

Page 160: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

users = [{id: 1, name: 'Max'},

{id: 2, name: 'Mark'}, {id: 3, name: 'Jen'}]

users.pluck(:name)=> ["Max", "Mark", "Jen"]

Page 161: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

users = [{id: 1, name: 'Max'},

{id: 2, name: 'Mark'}, {id: 3, name: 'Jen'}]

users.pluck(:id, :name)=> [[1, "Max"], [2, "Mark"], [3, "Jen"]]

Page 162: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Improvement to Active Record’s pluck

Page 163: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

# In Rails 4.xusers = User.allSELECT `users`.* FROM `users`

users.pluck(:id, :name)# SELECT "users"."id", "users"."name" FROM “users"=> [[1, "Max"], [2, "Mark"], [3, "George"]]

Page 164: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

# In Rails 5users = User.allSELECT `users`.* FROM `users`

users.pluck(:id, :name)=> [[1, "Max"], [2, "Mark"], [3, "George"]]

Page 165: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Enumerable#without

Page 166: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

vehicles = ['Car', 'Bike', 'Truck', 'Bus']

vehicles.without("Car", "Bike")=> ["Truck", "Bus"]

Page 167: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

vehicles = {car: 'Hyundai', bike: 'Honda', bus: 'Mercedes', truck: 'Tata'}

vehicles.without(:bike, :bus)=> {:car=>"Hyundai", :truck=>"Tata"}

Page 168: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Halting callback chainChanged the way in which callback chains can be halted. The preferred method to halt a callback chain from now on is to explicitly throw(:abort).https://github.com/rails/rails/pull/17227

Page 169: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

return false from one of the `before` callbacks

Page 170: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Stop entire callback chain

Page 171: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Rails 5 no longer has this side effect!

Page 172: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

throw(:abort)

Explicitly throw(:abort) to stop it.

Page 173: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

While upgrading, it will still haltFor older apps getting upgraded to Rails 5, the callback will still halt with returning false, as this is a breaking change.

Page 174: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

ActiveSupport.halt_callback_chains_on_return_false

Once you are ready, toggle this flag and it will use new behaviour of throw.

Page 175: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Performance

Page 176: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 177: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 178: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 179: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 180: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?
Page 181: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

https://github.com/rails/rails/pull/21057https://github.com/rails/rails/pull/18643https://github.com/rails/rails/pull/21411https://github.com/rails/rails/pull/21155https://github.com/rails/rails/pull/20946

Page 182: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

And more…

Page 183: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Attributes API

Page 184: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Sprockets 3/4

Page 185: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Turbolinks 5

Page 186: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

What’s next?

Page 187: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

If you are new to Rails, check out the Rails Doctrine to understand the philosophy behind Rails.

rubyonrails.org/doctrine/

Page 188: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

5.0.0.RC1

Page 189: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

weblog.rubyonrails.org

Page 190: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

@rails

Page 191: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

github.com/rails/rails

Page 192: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

This week in Rails

Page 193: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

rails-weekly.goodbits.io

Page 194: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

blog.bigbinary.com/categories/Rails%205

Page 195: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Try RC

Page 196: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Report bugs

Page 197: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Fix bugs!

Page 198: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Let’s make Rails better

Page 199: [Srijan Wednesday Webinar] Rails 5: What's in It for Me?

Thank you!@_cha1tanya@BigBinary

@Srijan