SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
WHAT’S NEW IN RAILS 5WHAT’S NEW IN RAILS 5
ANDREW WHITE, CTOANDREW WHITE, CTO
UNBOXED CONSULTINGUNBOXED CONSULTING
WHO AM I?WHO AM I?
GitHub: @pixeltrix
Twitter: @pixeltrix
Contributor since 2007
Committer since 2010
Core Team member since 2012
RAILS TIMELINERAILS TIMELINE
Rails 1.0: December 2005
Rails 2.0: December 2007
Rails 3.0: August 2010
Rails 4.0: June 2013
Rails 5.0: Autumn 2015
DON’T PANIC!DON’T PANIC!
… it’s not going to be like Rails 3.0
ACTION CABLEACTION CABLE
https://github.com/rails/actioncable
WHAT IS IT?WHAT IS IT?
ACTION CABLE: TECHNOLOGY STACKACTION CABLE: TECHNOLOGY STACK
Faye WebSocket for Ruby
Event Machine
Celluloid
Redis
https://github.com/faye/faye-websocket-ruby
https://github.com/eventmachine/eventmachine
https://github.com/celluloid/celluloid
http://redis.io
ACTION CABLE: TERMINOLOGYACTION CABLE: TERMINOLOGY
Channel:
- similar to a controller in MVC
Consumer:
- WebSocket client, typically a browser
Subscriber:
- a consumer that’s connected to a channel
Subscription:
- a connection between the consumer and the channel
ACTION CABLE: PRESENCE EXAMPLEACTION CABLE: PRESENCE EXAMPLE
Create a connection class
Create an application channel class
Connect in the browser
Create a channel class
Create a subscription class
ACTION CABLE: CONNECTION CLASSACTION CABLE: CONNECTION CLASS
# app/channels/application_cable/connection.rb
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
if current_user = User.find(cookies.signed[:user_id])
current_user
else
reject_unauthorized_connection
end
end
end
end
ACTION CABLE: APPLICATION CHANNEL CLASSACTION CABLE: APPLICATION CHANNEL CLASS
# app/channels/application_cable/channel.rb
module ApplicationCable
class Channel < ActionCable::Channel::Base
# shared logic between channels
end
end
ACTION CABLE: CONSUMER CREATIONACTION CABLE: CONSUMER CREATION
# app/assets/javascripts/application_cable.coffee
#= require cable
@App = {}
App.cable = Cable.createConsumer "ws://cable.example.com"
ACTION CABLE: CHANNEL CLASSACTION CABLE: CHANNEL CLASS
# app/channels/appearance_channel.rb
class AppearanceChannel < ApplicationCable::Channel
def subscribed
current_user.appear
end
def unsubscribed
current_user.disappear
end
def appear(data)
current_user.appear on: data['appearing_on']
end
def away
current_user.away
end
end
ACTION CABLE: SUBSCRIPTION CLASSACTION CABLE: SUBSCRIPTION CLASS
# app/assets/javascripts/cable/subscriptions/appearance.coffee
App.appearance = App.cable.subscriptions.create "AppearanceChannel",
connected: ->
# Called once the subscription has been successfully completed
appear: ->
@perform 'appear', appearing_on: @appearingOn()
away: ->
@perform 'away'
appearingOn: ->
$('main').data 'appearing-on'
$(document).on 'page:change', ->
App.appearance.appear()
$(document).on 'click', '[data-behavior~=appear_away]', ->
App.appearance.away()
false
ACTION CABLE: ROUGH EDGESACTION CABLE: ROUGH EDGES
Redis required for pubsub
Have to run a second server
Two concurrency models
FURTHER EXAMPLESFURTHER EXAMPLES
http://github.com/rails/actioncable-examples
TURBOLINKS 3TURBOLINKS 3
https://github.com/rails/turbolinks
TURBOLINKS 3: NEW FEATURESTURBOLINKS 3: NEW FEATURES
New data attributes:
data-turbolinks-permanent
data-turbolinks-temporary
Redirecting uses Turbolinks for XHR and non-GET requests
Progress bar enabled by default
TURBOLINKS 3: PERSISTENT ELEMENTSTURBOLINKS 3: PERSISTENT ELEMENTS
data-turbolinks-permanent
Elements transferred from page to page
Maintains state - ideal for sidebar navigation
Elements must have a unique id attribute
<div id="sidebar" data-turbolinks-permanent="">
Never changes after initial load.
</div>
TURBOLINKS 3: PARTIAL REPLACEMENTTURBOLINKS 3: PARTIAL REPLACEMENT
Replacement based on id or id and data attributes
Match on id prefixes using colon, e.g:
<div id="flash" data-turbolinks-temporary="">
You have 2 comments.
</div>
<ul id="comments">
<li id="comments:1">Hello, World!</li>
<li id="comments:2">Goodbye!</li>
</ul>
// Will change #flash, #comments, #comments:1, #comments:2
Turbolinks.visit(url, { change: ['comments'] });
// Will change #flash, #comments:1
Turbolinks.visit(url, { change: ['comments:1'] });
TURBOLINKS 3: PARTIAL REPLACEMENTTURBOLINKS 3: PARTIAL REPLACEMENT
Also available server-side with redirect_to or render
Replacement based on id or id and data attributes
Use one of change, keep or change options, e.g:
class CommentsController < ActionController::Base
def create
@comment = Comment.new(comment_params)
if @comment.save
redirect_to comments_url, change: 'comments'
else
render :new, change: :new_comment
end
end
end
TURBOLINKS 3: PARTIAL REPLACEMENTTURBOLINKS 3: PARTIAL REPLACEMENT
Behaviour of render and redirect_to options:
# Refresh any `data-turbolinks-temporary` nodes and
# nodes with `id` matching `new_comment`.
render view, change: 'new_comment'
# Refresh any `data-turbolinks-temporary` nodes and nodes
# with `id` not matching `something` and `something:*`.
render view, keep: 'something'
# Replace the entire `body` of the document,
# including `data-turbolinks-permanent` nodes.
render view, flush: true
GIVE IT A TRY…GIVE IT A TRY…
SPROCKETS 4SPROCKETS 4
https://github.com/rails/sprockets
SPROCKETS 4: CHANGESSPROCKETS 4: CHANGES
New home – now a Rails organisation project
Source maps
ES6 support via
Many thanks to
Babel
Richard Schneeman
RAILS 5RAILS 5
https://github.com/rails/rails
UNDER THE HOODUNDER THE HOOD
RAILS 5: UNDER THE HOODRAILS 5: UNDER THE HOOD
Ruby 2.2 required
Better performance
Better garbage collection
Better profiling tools
Focus on performance
Focus on memory usage
https://github.com/rails/rails/pull/21100
https://github.com/rails/rails/pull/21411
https://github.com/rails/rails/pull/21057
CLEANING HOUSECLEANING HOUSE
RAILS 5: CLEANING HOUSERAILS 5: CLEANING HOUSE
XML support extracted to gems
Action Mailer
*_path helpers
deliver and deliver!
Action Pack
DOM Assertions
:only_path option in *_path helpers
string controller and action keys
:to without controller#action
:to with a symbol
RAILS 5: CLEANING HOUSERAILS 5: CLEANING HOUSE
Active Model
reset_[attribute] and reset_changes
Action Record
Boolean semantics more aligned with Ruby
Transaction callbacks no longer swallow errors
sanitize_sql_hash_for_conditions
Default timestamps columns to null: false
serialized_attributes
Automatic counter caches on has_many :through
RAILS 5: CLEANING HOUSERAILS 5: CLEANING HOUSE
Active Support
Default test order is now random
BigDecimal is always encoded as a string
silence_stderr, silence_stream, capture and quietly
Railties
rake test:all and rake test:all:db
RAILS 5: CLEANING HOUSERAILS 5: CLEANING HOUSE
New deprecations in Active Record for 5.1
Conditions with delete_all and destroy_all
ActiveRecord::Relation#uniq
Passing a class to where
Columns of type :time will become timezone aware
EVOLUTION, NOTEVOLUTION, NOT
REVOLUTIONREVOLUTION
RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION
Active Record callbacks can now be halted explicitly
throw :abort
New apps get new behaviour
Upgraded apps get a deprecation warning
RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION
ActionController::Parameters no longer inherits from Hash
Composition over inheritance FTW!
No more accidentally calling Enumerable methods
No more accidentally returning a Hash
No more accidentally losing permitted? status
RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION
validates_acceptance_of accepts 1 or true
Reversible syntax for change_column_default
# user.rb
class User < ActiveRecord::Base
attr_accessor :terms_and_conditions
validates_acceptance_of :terms_and_conditions
end
change_column_default(:posts, :state, from: nil, to: "draft")
RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION
Accept a collection in fresh_when and stale?
expands to:
def index
@article = Article.all
fresh_when(@articles)
end
def index
@article = Article.all
fresh_when(etag: @articles, last_modified: @articles.maximum(:updated_at))
end
RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION
Add a http_cache_forever to never expire content
Remove restrictions on partial names
def hello_world
http_cache_forever do
render text: "Hello, World!"
end
end
render partial: '! '
RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION
Boot rails s in development with caching enabled
Non-request context rendering
rails s --dev-caching
ApplicationController.render template: 'foo/bar'
RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION
Built-in support for generating token attributes
Raw model validation errors
class User < ActiveRecord::Base
has_secure_token
end
class User < ActiveRecord::Base
validates :name, presence: true
end
user = User.new; user.valid?; user.errors.details
=> { name: [{ error: :blank }] }
RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION
weekend? query method for date and time
next_weekday for next working day
prev_weekday for previous working day
Date.current.weekend?
=> false
Date.current.end_of_week.next_weekday
=> Mon, 21 Sep 2015
Date.current.beginning_of_week.prev_weekday
=> Fri, 11 Sep 2015
RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION
Integer#positive? and Integer#negative?
Built-in support for method.source_code
rails is now the command hub, e.g:
>> Object.new.method(:blank?).source_code
def blank?
respond_to?(:empty?) ? !!empty? : !self
end
rails db:migrate
RAILS APIRAILS API
It’s coming home, it’s coming home …
RAILS 5: API ONLY APPLICATIONSRAILS 5: API ONLY APPLICATIONS
rails new my_api --api
Limited middleware stack
ApplicationController < ActionController::API
Still has essentials like CSRF and HTTP caching
By default uses Active Model Serializers for output
INTEGRATION TESTSINTEGRATION TESTS
Introduced in Rails 1.1
Confusion between controller and integration tests
Controller tests to become integration tests (TBC)
Performance improvements means no cost
Assertions for assigns and rendered templates removed
HOW TO PREPARE?HOW TO PREPARE?
Upgrade to Ruby 2.2.3
Upgrade to Rails 4.2.4
Remove legacy gems
Audit dependencies
SUPPORT POLICY: BUG FIXESSUPPORT POLICY: BUG FIXES
Current minor release
Previous minor release
Currently: 4.1 & 4.2
Will be: 4.2 & 5.0
SUPPORT POLICY: SECURITY UPDATESSUPPORT POLICY: SECURITY UPDATES
Bug fix releases
Last minor of the previous major
Currently: 3.2, 4.1 & 4.2
Will be: 4.2 & 5.0
Q & AQ & A

Contenu connexe

Tendances

10 less-known Laravel Packages: May 2016
10 less-known Laravel Packages: May 201610 less-known Laravel Packages: May 2016
10 less-known Laravel Packages: May 2016Povilas Korop
 
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010 Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010 Matt Gauger
 
Moving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryMoving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryJeff Potts
 
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...Matt Gauger
 
Apache Camel - The integration library
Apache Camel - The integration libraryApache Camel - The integration library
Apache Camel - The integration libraryClaus Ibsen
 
Torquebox Asheville.rb April 2011
Torquebox Asheville.rb April 2011Torquebox Asheville.rb April 2011
Torquebox Asheville.rb April 2011Lance Ball
 
Using Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivityUsing Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivityClaus Ibsen
 
Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014Claus Ibsen
 
What's new in ruby on rails 4
What's new in ruby on rails 4What's new in ruby on rails 4
What's new in ruby on rails 4Silvio Relli
 
Microservices with Apache Camel
Microservices with Apache CamelMicroservices with Apache Camel
Microservices with Apache CamelClaus Ibsen
 
Git: a brief introduction
Git: a brief introductionGit: a brief introduction
Git: a brief introductionRandal Schwartz
 
Apache Jackrabbit Oak - Scale your content repository to the cloud
Apache Jackrabbit Oak - Scale your content repository to the cloudApache Jackrabbit Oak - Scale your content repository to the cloud
Apache Jackrabbit Oak - Scale your content repository to the cloudRobert Munteanu
 
Getting Started with Apache Camel - Malmo JUG - March 2013
Getting Started with Apache Camel - Malmo JUG - March 2013Getting Started with Apache Camel - Malmo JUG - March 2013
Getting Started with Apache Camel - Malmo JUG - March 2013Claus Ibsen
 
Getting started with Apache Camel - jDays 2013
Getting started with Apache Camel - jDays 2013Getting started with Apache Camel - jDays 2013
Getting started with Apache Camel - jDays 2013Claus Ibsen
 
Simple SQL Change Management with Sqitch
Simple SQL Change Management with SqitchSimple SQL Change Management with Sqitch
Simple SQL Change Management with SqitchDavid Wheeler
 
Sane SQL Change Management with Sqitch
Sane SQL Change Management with SqitchSane SQL Change Management with Sqitch
Sane SQL Change Management with SqitchDavid Wheeler
 
Getting started with Apache Camel - May 2013
Getting started with Apache Camel - May 2013Getting started with Apache Camel - May 2013
Getting started with Apache Camel - May 2013Claus Ibsen
 
Microservices with apache_camel_barcelona
Microservices with apache_camel_barcelonaMicroservices with apache_camel_barcelona
Microservices with apache_camel_barcelonaClaus Ibsen
 
Integration using Apache Camel and Groovy
Integration using Apache Camel and GroovyIntegration using Apache Camel and Groovy
Integration using Apache Camel and GroovyClaus Ibsen
 

Tendances (20)

10 less-known Laravel Packages: May 2016
10 less-known Laravel Packages: May 201610 less-known Laravel Packages: May 2016
10 less-known Laravel Packages: May 2016
 
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010 Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
 
Moving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryMoving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco Repository
 
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
What's new and great in Rails 3 - Matt Gauger - Milwaukee Ruby Users Group De...
 
Apache Camel - The integration library
Apache Camel - The integration libraryApache Camel - The integration library
Apache Camel - The integration library
 
Torquebox Asheville.rb April 2011
Torquebox Asheville.rb April 2011Torquebox Asheville.rb April 2011
Torquebox Asheville.rb April 2011
 
Using Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivityUsing Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivity
 
Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014
 
What's new in ruby on rails 4
What's new in ruby on rails 4What's new in ruby on rails 4
What's new in ruby on rails 4
 
Microservices with Apache Camel
Microservices with Apache CamelMicroservices with Apache Camel
Microservices with Apache Camel
 
Git: a brief introduction
Git: a brief introductionGit: a brief introduction
Git: a brief introduction
 
Apache Jackrabbit Oak - Scale your content repository to the cloud
Apache Jackrabbit Oak - Scale your content repository to the cloudApache Jackrabbit Oak - Scale your content repository to the cloud
Apache Jackrabbit Oak - Scale your content repository to the cloud
 
Getting Started with Apache Camel - Malmo JUG - March 2013
Getting Started with Apache Camel - Malmo JUG - March 2013Getting Started with Apache Camel - Malmo JUG - March 2013
Getting Started with Apache Camel - Malmo JUG - March 2013
 
Git internals
Git internalsGit internals
Git internals
 
Getting started with Apache Camel - jDays 2013
Getting started with Apache Camel - jDays 2013Getting started with Apache Camel - jDays 2013
Getting started with Apache Camel - jDays 2013
 
Simple SQL Change Management with Sqitch
Simple SQL Change Management with SqitchSimple SQL Change Management with Sqitch
Simple SQL Change Management with Sqitch
 
Sane SQL Change Management with Sqitch
Sane SQL Change Management with SqitchSane SQL Change Management with Sqitch
Sane SQL Change Management with Sqitch
 
Getting started with Apache Camel - May 2013
Getting started with Apache Camel - May 2013Getting started with Apache Camel - May 2013
Getting started with Apache Camel - May 2013
 
Microservices with apache_camel_barcelona
Microservices with apache_camel_barcelonaMicroservices with apache_camel_barcelona
Microservices with apache_camel_barcelona
 
Integration using Apache Camel and Groovy
Integration using Apache Camel and GroovyIntegration using Apache Camel and Groovy
Integration using Apache Camel and Groovy
 

En vedette

Certificate 11 Hospitality
Certificate 11 HospitalityCertificate 11 Hospitality
Certificate 11 HospitalityMargaret Dolan
 
Học tiếng anh hiệu quả với Smotion.net
Học tiếng anh hiệu quả với Smotion.netHọc tiếng anh hiệu quả với Smotion.net
Học tiếng anh hiệu quả với Smotion.netSmotion.net
 
Transversal prototipado web daniel albornoz
Transversal prototipado web   daniel albornozTransversal prototipado web   daniel albornoz
Transversal prototipado web daniel albornozDaniel Albornoz
 
Scheda tecnica Maserati Ghibli
Scheda tecnica Maserati GhibliScheda tecnica Maserati Ghibli
Scheda tecnica Maserati GhibliAutoblog.it
 
Alfabeto de nomes t
Alfabeto de nomes   tAlfabeto de nomes   t
Alfabeto de nomes tDário Reis
 
Gdz angliskiy kuzovlev_2003
Gdz angliskiy kuzovlev_2003Gdz angliskiy kuzovlev_2003
Gdz angliskiy kuzovlev_2003Lucky Alex
 
Scheda tecnica Mercedes E 220 d 2016
Scheda tecnica Mercedes E 220 d 2016Scheda tecnica Mercedes E 220 d 2016
Scheda tecnica Mercedes E 220 d 2016Autoblog.it
 
Scheda Tecnica BMW 320d Gran Turismo 2016
Scheda Tecnica BMW 320d Gran Turismo 2016Scheda Tecnica BMW 320d Gran Turismo 2016
Scheda Tecnica BMW 320d Gran Turismo 2016Autoblog.it
 
Gdz geografia dumanska
Gdz geografia dumanskaGdz geografia dumanska
Gdz geografia dumanskaLucky Alex
 
Plan anticorrupción y de atención al ciudadano (1)
Plan anticorrupción y de atención al ciudadano (1)Plan anticorrupción y de atención al ciudadano (1)
Plan anticorrupción y de atención al ciudadano (1)Juntos Por Hispania
 
Las empresas suspenden en comunicación interna en casos de despido colectivo
Las empresas suspenden en comunicación interna en casos de despido colectivoLas empresas suspenden en comunicación interna en casos de despido colectivo
Las empresas suspenden en comunicación interna en casos de despido colectivoEstudio de Comunicación
 

En vedette (14)

News letter LPD n°4
News letter LPD n°4News letter LPD n°4
News letter LPD n°4
 
Certificate 11 Hospitality
Certificate 11 HospitalityCertificate 11 Hospitality
Certificate 11 Hospitality
 
Học tiếng anh hiệu quả với Smotion.net
Học tiếng anh hiệu quả với Smotion.netHọc tiếng anh hiệu quả với Smotion.net
Học tiếng anh hiệu quả với Smotion.net
 
Cloud zend framework
Cloud zend frameworkCloud zend framework
Cloud zend framework
 
Transversal prototipado web daniel albornoz
Transversal prototipado web   daniel albornozTransversal prototipado web   daniel albornoz
Transversal prototipado web daniel albornoz
 
Scheda tecnica Maserati Ghibli
Scheda tecnica Maserati GhibliScheda tecnica Maserati Ghibli
Scheda tecnica Maserati Ghibli
 
Alfabeto de nomes t
Alfabeto de nomes   tAlfabeto de nomes   t
Alfabeto de nomes t
 
Gdz angliskiy kuzovlev_2003
Gdz angliskiy kuzovlev_2003Gdz angliskiy kuzovlev_2003
Gdz angliskiy kuzovlev_2003
 
Herbalife e news app
Herbalife e news appHerbalife e news app
Herbalife e news app
 
Scheda tecnica Mercedes E 220 d 2016
Scheda tecnica Mercedes E 220 d 2016Scheda tecnica Mercedes E 220 d 2016
Scheda tecnica Mercedes E 220 d 2016
 
Scheda Tecnica BMW 320d Gran Turismo 2016
Scheda Tecnica BMW 320d Gran Turismo 2016Scheda Tecnica BMW 320d Gran Turismo 2016
Scheda Tecnica BMW 320d Gran Turismo 2016
 
Gdz geografia dumanska
Gdz geografia dumanskaGdz geografia dumanska
Gdz geografia dumanska
 
Plan anticorrupción y de atención al ciudadano (1)
Plan anticorrupción y de atención al ciudadano (1)Plan anticorrupción y de atención al ciudadano (1)
Plan anticorrupción y de atención al ciudadano (1)
 
Las empresas suspenden en comunicación interna en casos de despido colectivo
Las empresas suspenden en comunicación interna en casos de despido colectivoLas empresas suspenden en comunicación interna en casos de despido colectivo
Las empresas suspenden en comunicación interna en casos de despido colectivo
 

Similaire à What’s New in Rails 5.0?

[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?Srijan Technologies
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on RailsDelphiCon
 
Introduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman OrtegaIntroduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman Ortegaarman o
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaJason Noble
 
New features in Rails 6 - Nihad Abbasov (RUS) | Ruby Meditation 26
New features in Rails 6 -  Nihad Abbasov (RUS) | Ruby Meditation 26New features in Rails 6 -  Nihad Abbasov (RUS) | Ruby Meditation 26
New features in Rails 6 - Nihad Abbasov (RUS) | Ruby Meditation 26Ruby Meditation
 
20120121 rbc rails_routing
20120121 rbc rails_routing20120121 rbc rails_routing
20120121 rbc rails_routingTakeshi AKIMA
 
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...Philip Stehlik
 
OpenFaaS JeffConf 2017 - Milan
OpenFaaS JeffConf 2017 - MilanOpenFaaS JeffConf 2017 - Milan
OpenFaaS JeffConf 2017 - MilanAlex Ellis
 
I can haz HTTP - Consuming and producing HTTP APIs in the Ruby ecosystem
I can haz HTTP - Consuming and producing HTTP APIs in the Ruby ecosystemI can haz HTTP - Consuming and producing HTTP APIs in the Ruby ecosystem
I can haz HTTP - Consuming and producing HTTP APIs in the Ruby ecosystemSidu Ponnappa
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainKen Collins
 
iPhone Web Development and Ruby On Rails
iPhone Web Development and Ruby On RailsiPhone Web Development and Ruby On Rails
iPhone Web Development and Ruby On RailsJose de Leon
 
Introduction to Rails
Introduction to RailsIntroduction to Rails
Introduction to RailsBlazing Cloud
 
Ruby on Rails introduction
Ruby on Rails introduction Ruby on Rails introduction
Ruby on Rails introduction Tran Hung
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on RailsAlessandro DS
 
Jasig Rubyon Rails
Jasig Rubyon RailsJasig Rubyon Rails
Jasig Rubyon RailsPaul Pajo
 
Building Application with Ruby On Rails Framework
Building Application with Ruby On Rails FrameworkBuilding Application with Ruby On Rails Framework
Building Application with Ruby On Rails FrameworkEdureka!
 

Similaire à What’s New in Rails 5.0? (20)

Supa fast Ruby + Rails
Supa fast Ruby + RailsSupa fast Ruby + Rails
Supa fast Ruby + Rails
 
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
[Srijan Wednesday Webinar] Rails 5: What's in It for Me?
 
Create a new project in ROR
Create a new project in RORCreate a new project in ROR
Create a new project in ROR
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Introduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman OrtegaIntroduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman Ortega
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp Atlanta
 
New features in Rails 6 - Nihad Abbasov (RUS) | Ruby Meditation 26
New features in Rails 6 -  Nihad Abbasov (RUS) | Ruby Meditation 26New features in Rails 6 -  Nihad Abbasov (RUS) | Ruby Meditation 26
New features in Rails 6 - Nihad Abbasov (RUS) | Ruby Meditation 26
 
20120121 rbc rails_routing
20120121 rbc rails_routing20120121 rbc rails_routing
20120121 rbc rails_routing
 
Rail3 intro 29th_sep_surendran
Rail3 intro 29th_sep_surendranRail3 intro 29th_sep_surendran
Rail3 intro 29th_sep_surendran
 
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...
Agile Database Modeling with Grails - Preview of GORM 1.4 - SF Grails Meetup ...
 
OpenFaaS JeffConf 2017 - Milan
OpenFaaS JeffConf 2017 - MilanOpenFaaS JeffConf 2017 - Milan
OpenFaaS JeffConf 2017 - Milan
 
I can haz HTTP - Consuming and producing HTTP APIs in the Ruby ecosystem
I can haz HTTP - Consuming and producing HTTP APIs in the Ruby ecosystemI can haz HTTP - Consuming and producing HTTP APIs in the Ruby ecosystem
I can haz HTTP - Consuming and producing HTTP APIs in the Ruby ecosystem
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own Domain
 
iPhone Web Development and Ruby On Rails
iPhone Web Development and Ruby On RailsiPhone Web Development and Ruby On Rails
iPhone Web Development and Ruby On Rails
 
Introduction to Rails
Introduction to RailsIntroduction to Rails
Introduction to Rails
 
Ruby on Rails introduction
Ruby on Rails introduction Ruby on Rails introduction
Ruby on Rails introduction
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
TorqueBox
TorqueBoxTorqueBox
TorqueBox
 
Jasig Rubyon Rails
Jasig Rubyon RailsJasig Rubyon Rails
Jasig Rubyon Rails
 
Building Application with Ruby On Rails Framework
Building Application with Ruby On Rails FrameworkBuilding Application with Ruby On Rails Framework
Building Application with Ruby On Rails Framework
 

Plus de Unboxed

SHARP Impact Assessment
SHARP Impact AssessmentSHARP Impact Assessment
SHARP Impact AssessmentUnboxed
 
Working toward better patient referrals with Guy’s & St Thomas’ hospital
Working toward better patient referrals with Guy’s & St Thomas’ hospitalWorking toward better patient referrals with Guy’s & St Thomas’ hospital
Working toward better patient referrals with Guy’s & St Thomas’ hospitalUnboxed
 
TeaCamp #5: Automated software testing
TeaCamp #5: Automated software testingTeaCamp #5: Automated software testing
TeaCamp #5: Automated software testingUnboxed
 
GLA Testing Presentation by Test Partners Ltd v1
GLA Testing Presentation by Test Partners Ltd v1GLA Testing Presentation by Test Partners Ltd v1
GLA Testing Presentation by Test Partners Ltd v1Unboxed
 
Agile Tour Brussels: Think people, not resources
Agile Tour Brussels: Think people, not resourcesAgile Tour Brussels: Think people, not resources
Agile Tour Brussels: Think people, not resourcesUnboxed
 
Agile Pilot - Martyn Evans
Agile Pilot - Martyn EvansAgile Pilot - Martyn Evans
Agile Pilot - Martyn EvansUnboxed
 
Andrew White's Technical Breakfast Club
Andrew White's Technical Breakfast ClubAndrew White's Technical Breakfast Club
Andrew White's Technical Breakfast ClubUnboxed
 
The £50k Springboard - SH:24
The £50k Springboard - SH:24The £50k Springboard - SH:24
The £50k Springboard - SH:24Unboxed
 
How to demonstrate value quickly and get buy-in early
How to demonstrate value quickly and get buy-in earlyHow to demonstrate value quickly and get buy-in early
How to demonstrate value quickly and get buy-in earlyUnboxed
 
Planting the seeds for successful KPI trees
Planting the seeds for successful KPI treesPlanting the seeds for successful KPI trees
Planting the seeds for successful KPI treesUnboxed
 
Masterclass: Deliver 50% growth with Lean UX
Masterclass: Deliver 50% growth with Lean UXMasterclass: Deliver 50% growth with Lean UX
Masterclass: Deliver 50% growth with Lean UXUnboxed
 
Webinar: Speed up problem and customer validation
Webinar: Speed up problem and customer validationWebinar: Speed up problem and customer validation
Webinar: Speed up problem and customer validationUnboxed
 
Speed up stakeholder communication and sign off
Speed up stakeholder communication and sign offSpeed up stakeholder communication and sign off
Speed up stakeholder communication and sign offUnboxed
 
Redesigning the UX of employment @ UBXD 0215
Redesigning the UX of employment @ UBXD 0215Redesigning the UX of employment @ UBXD 0215
Redesigning the UX of employment @ UBXD 0215Unboxed
 
Brain funding - Melissa Sabella
Brain funding - Melissa SabellaBrain funding - Melissa Sabella
Brain funding - Melissa SabellaUnboxed
 
A warm hug at the door that opens many more
A warm hug at the door that opens many moreA warm hug at the door that opens many more
A warm hug at the door that opens many moreUnboxed
 
Unstick your digital products by @ubxd
Unstick your digital products by @ubxdUnstick your digital products by @ubxd
Unstick your digital products by @ubxdUnboxed
 
Unstick your digital products - 25th March 2015
Unstick your digital products - 25th March 2015Unstick your digital products - 25th March 2015
Unstick your digital products - 25th March 2015Unboxed
 

Plus de Unboxed (18)

SHARP Impact Assessment
SHARP Impact AssessmentSHARP Impact Assessment
SHARP Impact Assessment
 
Working toward better patient referrals with Guy’s & St Thomas’ hospital
Working toward better patient referrals with Guy’s & St Thomas’ hospitalWorking toward better patient referrals with Guy’s & St Thomas’ hospital
Working toward better patient referrals with Guy’s & St Thomas’ hospital
 
TeaCamp #5: Automated software testing
TeaCamp #5: Automated software testingTeaCamp #5: Automated software testing
TeaCamp #5: Automated software testing
 
GLA Testing Presentation by Test Partners Ltd v1
GLA Testing Presentation by Test Partners Ltd v1GLA Testing Presentation by Test Partners Ltd v1
GLA Testing Presentation by Test Partners Ltd v1
 
Agile Tour Brussels: Think people, not resources
Agile Tour Brussels: Think people, not resourcesAgile Tour Brussels: Think people, not resources
Agile Tour Brussels: Think people, not resources
 
Agile Pilot - Martyn Evans
Agile Pilot - Martyn EvansAgile Pilot - Martyn Evans
Agile Pilot - Martyn Evans
 
Andrew White's Technical Breakfast Club
Andrew White's Technical Breakfast ClubAndrew White's Technical Breakfast Club
Andrew White's Technical Breakfast Club
 
The £50k Springboard - SH:24
The £50k Springboard - SH:24The £50k Springboard - SH:24
The £50k Springboard - SH:24
 
How to demonstrate value quickly and get buy-in early
How to demonstrate value quickly and get buy-in earlyHow to demonstrate value quickly and get buy-in early
How to demonstrate value quickly and get buy-in early
 
Planting the seeds for successful KPI trees
Planting the seeds for successful KPI treesPlanting the seeds for successful KPI trees
Planting the seeds for successful KPI trees
 
Masterclass: Deliver 50% growth with Lean UX
Masterclass: Deliver 50% growth with Lean UXMasterclass: Deliver 50% growth with Lean UX
Masterclass: Deliver 50% growth with Lean UX
 
Webinar: Speed up problem and customer validation
Webinar: Speed up problem and customer validationWebinar: Speed up problem and customer validation
Webinar: Speed up problem and customer validation
 
Speed up stakeholder communication and sign off
Speed up stakeholder communication and sign offSpeed up stakeholder communication and sign off
Speed up stakeholder communication and sign off
 
Redesigning the UX of employment @ UBXD 0215
Redesigning the UX of employment @ UBXD 0215Redesigning the UX of employment @ UBXD 0215
Redesigning the UX of employment @ UBXD 0215
 
Brain funding - Melissa Sabella
Brain funding - Melissa SabellaBrain funding - Melissa Sabella
Brain funding - Melissa Sabella
 
A warm hug at the door that opens many more
A warm hug at the door that opens many moreA warm hug at the door that opens many more
A warm hug at the door that opens many more
 
Unstick your digital products by @ubxd
Unstick your digital products by @ubxdUnstick your digital products by @ubxd
Unstick your digital products by @ubxd
 
Unstick your digital products - 25th March 2015
Unstick your digital products - 25th March 2015Unstick your digital products - 25th March 2015
Unstick your digital products - 25th March 2015
 

Dernier

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 

Dernier (20)

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 

What’s New in Rails 5.0?

  • 1. WHAT’S NEW IN RAILS 5WHAT’S NEW IN RAILS 5 ANDREW WHITE, CTOANDREW WHITE, CTO UNBOXED CONSULTINGUNBOXED CONSULTING
  • 2. WHO AM I?WHO AM I? GitHub: @pixeltrix Twitter: @pixeltrix Contributor since 2007 Committer since 2010 Core Team member since 2012
  • 3. RAILS TIMELINERAILS TIMELINE Rails 1.0: December 2005 Rails 2.0: December 2007 Rails 3.0: August 2010 Rails 4.0: June 2013 Rails 5.0: Autumn 2015
  • 4. DON’T PANIC!DON’T PANIC! … it’s not going to be like Rails 3.0
  • 7. ACTION CABLE: TECHNOLOGY STACKACTION CABLE: TECHNOLOGY STACK Faye WebSocket for Ruby Event Machine Celluloid Redis https://github.com/faye/faye-websocket-ruby https://github.com/eventmachine/eventmachine https://github.com/celluloid/celluloid http://redis.io
  • 8. ACTION CABLE: TERMINOLOGYACTION CABLE: TERMINOLOGY Channel: - similar to a controller in MVC Consumer: - WebSocket client, typically a browser Subscriber: - a consumer that’s connected to a channel Subscription: - a connection between the consumer and the channel
  • 9. ACTION CABLE: PRESENCE EXAMPLEACTION CABLE: PRESENCE EXAMPLE Create a connection class Create an application channel class Connect in the browser Create a channel class Create a subscription class
  • 10. ACTION CABLE: CONNECTION CLASSACTION CABLE: CONNECTION CLASS # app/channels/application_cable/connection.rb 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 if current_user = User.find(cookies.signed[:user_id]) current_user else reject_unauthorized_connection end end end end
  • 11. ACTION CABLE: APPLICATION CHANNEL CLASSACTION CABLE: APPLICATION CHANNEL CLASS # app/channels/application_cable/channel.rb module ApplicationCable class Channel < ActionCable::Channel::Base # shared logic between channels end end
  • 12. ACTION CABLE: CONSUMER CREATIONACTION CABLE: CONSUMER CREATION # app/assets/javascripts/application_cable.coffee #= require cable @App = {} App.cable = Cable.createConsumer "ws://cable.example.com"
  • 13. ACTION CABLE: CHANNEL CLASSACTION CABLE: CHANNEL CLASS # app/channels/appearance_channel.rb class AppearanceChannel < ApplicationCable::Channel def subscribed current_user.appear end def unsubscribed current_user.disappear end def appear(data) current_user.appear on: data['appearing_on'] end def away current_user.away end end
  • 14. ACTION CABLE: SUBSCRIPTION CLASSACTION CABLE: SUBSCRIPTION CLASS # app/assets/javascripts/cable/subscriptions/appearance.coffee App.appearance = App.cable.subscriptions.create "AppearanceChannel", connected: -> # Called once the subscription has been successfully completed appear: -> @perform 'appear', appearing_on: @appearingOn() away: -> @perform 'away' appearingOn: -> $('main').data 'appearing-on' $(document).on 'page:change', -> App.appearance.appear() $(document).on 'click', '[data-behavior~=appear_away]', -> App.appearance.away() false
  • 15. ACTION CABLE: ROUGH EDGESACTION CABLE: ROUGH EDGES Redis required for pubsub Have to run a second server Two concurrency models
  • 18. TURBOLINKS 3: NEW FEATURESTURBOLINKS 3: NEW FEATURES New data attributes: data-turbolinks-permanent data-turbolinks-temporary Redirecting uses Turbolinks for XHR and non-GET requests Progress bar enabled by default
  • 19. TURBOLINKS 3: PERSISTENT ELEMENTSTURBOLINKS 3: PERSISTENT ELEMENTS data-turbolinks-permanent Elements transferred from page to page Maintains state - ideal for sidebar navigation Elements must have a unique id attribute <div id="sidebar" data-turbolinks-permanent=""> Never changes after initial load. </div>
  • 20. TURBOLINKS 3: PARTIAL REPLACEMENTTURBOLINKS 3: PARTIAL REPLACEMENT Replacement based on id or id and data attributes Match on id prefixes using colon, e.g: <div id="flash" data-turbolinks-temporary=""> You have 2 comments. </div> <ul id="comments"> <li id="comments:1">Hello, World!</li> <li id="comments:2">Goodbye!</li> </ul> // Will change #flash, #comments, #comments:1, #comments:2 Turbolinks.visit(url, { change: ['comments'] }); // Will change #flash, #comments:1 Turbolinks.visit(url, { change: ['comments:1'] });
  • 21. TURBOLINKS 3: PARTIAL REPLACEMENTTURBOLINKS 3: PARTIAL REPLACEMENT Also available server-side with redirect_to or render Replacement based on id or id and data attributes Use one of change, keep or change options, e.g: class CommentsController < ActionController::Base def create @comment = Comment.new(comment_params) if @comment.save redirect_to comments_url, change: 'comments' else render :new, change: :new_comment end end end
  • 22. TURBOLINKS 3: PARTIAL REPLACEMENTTURBOLINKS 3: PARTIAL REPLACEMENT Behaviour of render and redirect_to options: # Refresh any `data-turbolinks-temporary` nodes and # nodes with `id` matching `new_comment`. render view, change: 'new_comment' # Refresh any `data-turbolinks-temporary` nodes and nodes # with `id` not matching `something` and `something:*`. render view, keep: 'something' # Replace the entire `body` of the document, # including `data-turbolinks-permanent` nodes. render view, flush: true
  • 23. GIVE IT A TRY…GIVE IT A TRY…
  • 25. SPROCKETS 4: CHANGESSPROCKETS 4: CHANGES New home – now a Rails organisation project Source maps ES6 support via Many thanks to Babel Richard Schneeman
  • 28. RAILS 5: UNDER THE HOODRAILS 5: UNDER THE HOOD Ruby 2.2 required Better performance Better garbage collection Better profiling tools Focus on performance Focus on memory usage https://github.com/rails/rails/pull/21100 https://github.com/rails/rails/pull/21411 https://github.com/rails/rails/pull/21057
  • 30. RAILS 5: CLEANING HOUSERAILS 5: CLEANING HOUSE XML support extracted to gems Action Mailer *_path helpers deliver and deliver! Action Pack DOM Assertions :only_path option in *_path helpers string controller and action keys :to without controller#action :to with a symbol
  • 31. RAILS 5: CLEANING HOUSERAILS 5: CLEANING HOUSE Active Model reset_[attribute] and reset_changes Action Record Boolean semantics more aligned with Ruby Transaction callbacks no longer swallow errors sanitize_sql_hash_for_conditions Default timestamps columns to null: false serialized_attributes Automatic counter caches on has_many :through
  • 32. RAILS 5: CLEANING HOUSERAILS 5: CLEANING HOUSE Active Support Default test order is now random BigDecimal is always encoded as a string silence_stderr, silence_stream, capture and quietly Railties rake test:all and rake test:all:db
  • 33. RAILS 5: CLEANING HOUSERAILS 5: CLEANING HOUSE New deprecations in Active Record for 5.1 Conditions with delete_all and destroy_all ActiveRecord::Relation#uniq Passing a class to where Columns of type :time will become timezone aware
  • 35. RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION Active Record callbacks can now be halted explicitly throw :abort New apps get new behaviour Upgraded apps get a deprecation warning
  • 36. RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION ActionController::Parameters no longer inherits from Hash Composition over inheritance FTW! No more accidentally calling Enumerable methods No more accidentally returning a Hash No more accidentally losing permitted? status
  • 37. RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION validates_acceptance_of accepts 1 or true Reversible syntax for change_column_default # user.rb class User < ActiveRecord::Base attr_accessor :terms_and_conditions validates_acceptance_of :terms_and_conditions end change_column_default(:posts, :state, from: nil, to: "draft")
  • 38. RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION Accept a collection in fresh_when and stale? expands to: def index @article = Article.all fresh_when(@articles) end def index @article = Article.all fresh_when(etag: @articles, last_modified: @articles.maximum(:updated_at)) end
  • 39. RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION Add a http_cache_forever to never expire content Remove restrictions on partial names def hello_world http_cache_forever do render text: "Hello, World!" end end render partial: '! '
  • 40. RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION Boot rails s in development with caching enabled Non-request context rendering rails s --dev-caching ApplicationController.render template: 'foo/bar'
  • 41. RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION Built-in support for generating token attributes Raw model validation errors class User < ActiveRecord::Base has_secure_token end class User < ActiveRecord::Base validates :name, presence: true end user = User.new; user.valid?; user.errors.details => { name: [{ error: :blank }] }
  • 42. RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION weekend? query method for date and time next_weekday for next working day prev_weekday for previous working day Date.current.weekend? => false Date.current.end_of_week.next_weekday => Mon, 21 Sep 2015 Date.current.beginning_of_week.prev_weekday => Fri, 11 Sep 2015
  • 43. RAILS 5: EVOLUTION, NOT REVOLUTIONRAILS 5: EVOLUTION, NOT REVOLUTION Integer#positive? and Integer#negative? Built-in support for method.source_code rails is now the command hub, e.g: >> Object.new.method(:blank?).source_code def blank? respond_to?(:empty?) ? !!empty? : !self end rails db:migrate
  • 44. RAILS APIRAILS API It’s coming home, it’s coming home …
  • 45. RAILS 5: API ONLY APPLICATIONSRAILS 5: API ONLY APPLICATIONS rails new my_api --api Limited middleware stack ApplicationController < ActionController::API Still has essentials like CSRF and HTTP caching By default uses Active Model Serializers for output
  • 46. INTEGRATION TESTSINTEGRATION TESTS Introduced in Rails 1.1 Confusion between controller and integration tests Controller tests to become integration tests (TBC) Performance improvements means no cost Assertions for assigns and rendered templates removed
  • 47. HOW TO PREPARE?HOW TO PREPARE? Upgrade to Ruby 2.2.3 Upgrade to Rails 4.2.4 Remove legacy gems Audit dependencies
  • 48. SUPPORT POLICY: BUG FIXESSUPPORT POLICY: BUG FIXES Current minor release Previous minor release Currently: 4.1 & 4.2 Will be: 4.2 & 5.0
  • 49. SUPPORT POLICY: SECURITY UPDATESSUPPORT POLICY: SECURITY UPDATES Bug fix releases Last minor of the previous major Currently: 3.2, 4.1 & 4.2 Will be: 4.2 & 5.0
  • 50. Q & AQ & A