SlideShare a Scribd company logo
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
Ad

More Related Content

What's hot (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
Povilas 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 Repository
Jeff 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 library
Claus Ibsen
 
Torquebox Asheville.rb April 2011
Torquebox Asheville.rb April 2011Torquebox Asheville.rb April 2011
Torquebox Asheville.rb April 2011
Lance 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 connectivity
Claus 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 2014
Claus 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 4
Silvio Relli
 
Microservices with Apache Camel
Microservices with Apache CamelMicroservices with Apache Camel
Microservices with Apache Camel
Claus Ibsen
 
Git: a brief introduction
Git: a brief introductionGit: a brief introduction
Git: a brief introduction
Randal 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 cloud
Robert 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 2013
Claus Ibsen
 
Git internals
Git internalsGit internals
Git internals
Haggai Philip Zagury
 
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
Claus Ibsen
 
Simple SQL Change Management with Sqitch
Simple SQL Change Management with SqitchSimple SQL Change Management with Sqitch
Simple SQL Change Management with Sqitch
David Wheeler
 
Sane SQL Change Management with Sqitch
Sane SQL Change Management with SqitchSane SQL Change Management with Sqitch
Sane SQL Change Management with Sqitch
David 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 2013
Claus Ibsen
 
Microservices with apache_camel_barcelona
Microservices with apache_camel_barcelonaMicroservices with apache_camel_barcelona
Microservices with apache_camel_barcelona
Claus Ibsen
 
Integration using Apache Camel and Groovy
Integration using Apache Camel and GroovyIntegration using Apache Camel and Groovy
Integration using Apache Camel and Groovy
Claus Ibsen
 
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
Povilas 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 Repository
Jeff 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 library
Claus Ibsen
 
Torquebox Asheville.rb April 2011
Torquebox Asheville.rb April 2011Torquebox Asheville.rb April 2011
Torquebox Asheville.rb April 2011
Lance 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 connectivity
Claus 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 2014
Claus 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 4
Silvio Relli
 
Microservices with Apache Camel
Microservices with Apache CamelMicroservices with Apache Camel
Microservices with Apache Camel
Claus Ibsen
 
Git: a brief introduction
Git: a brief introductionGit: a brief introduction
Git: a brief introduction
Randal 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 cloud
Robert 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 2013
Claus 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 2013
Claus Ibsen
 
Simple SQL Change Management with Sqitch
Simple SQL Change Management with SqitchSimple SQL Change Management with Sqitch
Simple SQL Change Management with Sqitch
David Wheeler
 
Sane SQL Change Management with Sqitch
Sane SQL Change Management with SqitchSane SQL Change Management with Sqitch
Sane SQL Change Management with Sqitch
David 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 2013
Claus Ibsen
 
Microservices with apache_camel_barcelona
Microservices with apache_camel_barcelonaMicroservices with apache_camel_barcelona
Microservices with apache_camel_barcelona
Claus Ibsen
 
Integration using Apache Camel and Groovy
Integration using Apache Camel and GroovyIntegration using Apache Camel and Groovy
Integration using Apache Camel and Groovy
Claus Ibsen
 

Viewers also liked (14)

News letter LPD n°4
News letter LPD n°4News letter LPD n°4
News letter LPD n°4
Simone Petrucci
 
Certificate 11 Hospitality
Certificate 11 HospitalityCertificate 11 Hospitality
Certificate 11 Hospitality
Margaret 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.net
Smotion.net
 
Cloud zend framework
Cloud zend frameworkCloud zend framework
Cloud zend framework
Nandkishor Dhekane
 
Transversal prototipado web daniel albornoz
Transversal prototipado web   daniel albornozTransversal prototipado web   daniel albornoz
Transversal prototipado web daniel albornoz
Daniel Albornoz
 
Scheda tecnica Maserati Ghibli
Scheda tecnica Maserati GhibliScheda tecnica Maserati Ghibli
Scheda tecnica Maserati Ghibli
Autoblog.it
 
Alfabeto de nomes t
Alfabeto de nomes   tAlfabeto de nomes   t
Alfabeto de nomes t
Dário Reis
 
Gdz angliskiy kuzovlev_2003
Gdz angliskiy kuzovlev_2003Gdz angliskiy kuzovlev_2003
Gdz angliskiy kuzovlev_2003
Lucky Alex
 
Herbalife e news app
Herbalife e news appHerbalife e news app
Herbalife e news app
Nandkishor Dhekane
 
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
Autoblog.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 2016
Autoblog.it
 
Gdz geografia dumanska
Gdz geografia dumanskaGdz geografia dumanska
Gdz geografia dumanska
Lucky 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 colectivo
Estudio de Comunicación
 
Certificate 11 Hospitality
Certificate 11 HospitalityCertificate 11 Hospitality
Certificate 11 Hospitality
Margaret 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.net
Smotion.net
 
Transversal prototipado web daniel albornoz
Transversal prototipado web   daniel albornozTransversal prototipado web   daniel albornoz
Transversal prototipado web daniel albornoz
Daniel Albornoz
 
Scheda tecnica Maserati Ghibli
Scheda tecnica Maserati GhibliScheda tecnica Maserati Ghibli
Scheda tecnica Maserati Ghibli
Autoblog.it
 
Alfabeto de nomes t
Alfabeto de nomes   tAlfabeto de nomes   t
Alfabeto de nomes t
Dário Reis
 
Gdz angliskiy kuzovlev_2003
Gdz angliskiy kuzovlev_2003Gdz angliskiy kuzovlev_2003
Gdz angliskiy kuzovlev_2003
Lucky 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 2016
Autoblog.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 2016
Autoblog.it
 
Gdz geografia dumanska
Gdz geografia dumanskaGdz geografia dumanska
Gdz geografia dumanska
Lucky 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 colectivo
Estudio de Comunicación
 
Ad

Similar to What’s New in Rails 5.0? (20)

Supa fast Ruby + Rails
Supa fast Ruby + RailsSupa fast Ruby + Rails
Supa fast Ruby + Rails
Jean-Baptiste Feldis
 
[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
 
Create a new project in ROR
Create a new project in RORCreate a new project in ROR
Create a new project in ROR
akankshita satapathy
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
DelphiCon
 
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
arman o
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp Atlanta
Jason 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 26
Ruby Meditation
 
20120121 rbc rails_routing
20120121 rbc rails_routing20120121 rbc rails_routing
20120121 rbc rails_routing
Takeshi AKIMA
 
Rail3 intro 29th_sep_surendran
Rail3 intro 29th_sep_surendranRail3 intro 29th_sep_surendran
Rail3 intro 29th_sep_surendran
SPRITLE SOFTWARE PRIVATE LIMIT ED
 
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 - Milan
Alex 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 ecosystem
Sidu 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 Domain
Ken 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 Rails
Jose de Leon
 
Introduction to Rails
Introduction to RailsIntroduction to Rails
Introduction to Rails
Blazing 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 Rails
Alessandro DS
 
TorqueBox
TorqueBoxTorqueBox
TorqueBox
bobmcwhirter
 
Jasig Rubyon Rails
Jasig Rubyon RailsJasig Rubyon Rails
Jasig Rubyon Rails
Paul Pajo
 
GenAI-powered assistants compared in a real case - 2025-03-18
GenAI-powered assistants compared in a real case - 2025-03-18GenAI-powered assistants compared in a real case - 2025-03-18
GenAI-powered assistants compared in a real case - 2025-03-18
Alessandra Bilardi
 
[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 Rails
DelphiCon
 
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
arman o
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp Atlanta
Jason 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 26
Ruby Meditation
 
20120121 rbc rails_routing
20120121 rbc rails_routing20120121 rbc rails_routing
20120121 rbc rails_routing
Takeshi 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 - Milan
Alex 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 ecosystem
Sidu 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 Domain
Ken 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 Rails
Jose de Leon
 
Introduction to Rails
Introduction to RailsIntroduction to Rails
Introduction to Rails
Blazing 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 Rails
Alessandro DS
 
Jasig Rubyon Rails
Jasig Rubyon RailsJasig Rubyon Rails
Jasig Rubyon Rails
Paul Pajo
 
GenAI-powered assistants compared in a real case - 2025-03-18
GenAI-powered assistants compared in a real case - 2025-03-18GenAI-powered assistants compared in a real case - 2025-03-18
GenAI-powered assistants compared in a real case - 2025-03-18
Alessandra Bilardi
 
Ad

More from Unboxed (18)

SHARP Impact Assessment
SHARP Impact AssessmentSHARP Impact Assessment
SHARP Impact Assessment
Unboxed
 
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
Unboxed
 
TeaCamp #5: Automated software testing
TeaCamp #5: Automated software testingTeaCamp #5: Automated software testing
TeaCamp #5: Automated software testing
Unboxed
 
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
Unboxed
 
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
Unboxed
 
Agile Pilot - Martyn Evans
Agile Pilot - Martyn EvansAgile Pilot - Martyn Evans
Agile Pilot - Martyn Evans
Unboxed
 
Andrew White's Technical Breakfast Club
Andrew White's Technical Breakfast ClubAndrew White's Technical Breakfast Club
Andrew White's Technical Breakfast Club
Unboxed
 
The £50k Springboard - SH:24
The £50k Springboard - SH:24The £50k Springboard - SH:24
The £50k Springboard - SH:24
Unboxed
 
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
Unboxed
 
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
Unboxed
 
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
Unboxed
 
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
Unboxed
 
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
Unboxed
 
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
Unboxed
 
Brain funding - Melissa Sabella
Brain funding - Melissa SabellaBrain funding - Melissa Sabella
Brain funding - Melissa Sabella
Unboxed
 
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
Unboxed
 
Unstick your digital products by @ubxd
Unstick your digital products by @ubxdUnstick your digital products by @ubxd
Unstick your digital products by @ubxd
Unboxed
 
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
Unboxed
 
SHARP Impact Assessment
SHARP Impact AssessmentSHARP Impact Assessment
SHARP Impact Assessment
Unboxed
 
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
Unboxed
 
TeaCamp #5: Automated software testing
TeaCamp #5: Automated software testingTeaCamp #5: Automated software testing
TeaCamp #5: Automated software testing
Unboxed
 
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
Unboxed
 
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
Unboxed
 
Agile Pilot - Martyn Evans
Agile Pilot - Martyn EvansAgile Pilot - Martyn Evans
Agile Pilot - Martyn Evans
Unboxed
 
Andrew White's Technical Breakfast Club
Andrew White's Technical Breakfast ClubAndrew White's Technical Breakfast Club
Andrew White's Technical Breakfast Club
Unboxed
 
The £50k Springboard - SH:24
The £50k Springboard - SH:24The £50k Springboard - SH:24
The £50k Springboard - SH:24
Unboxed
 
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
Unboxed
 
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
Unboxed
 
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
Unboxed
 
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
Unboxed
 
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
Unboxed
 
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
Unboxed
 
Brain funding - Melissa Sabella
Brain funding - Melissa SabellaBrain funding - Melissa Sabella
Brain funding - Melissa Sabella
Unboxed
 
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
Unboxed
 
Unstick your digital products by @ubxd
Unstick your digital products by @ubxdUnstick your digital products by @ubxd
Unstick your digital products by @ubxd
Unboxed
 
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
Unboxed
 

Recently uploaded (20)

Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 

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