what's new in rails 4.1 (as of 752f9fed00221ad97073e13b12be9c849199b4b8)
TRANSCRIPT
Hello #VANRUBY!
Godfrey Chan @chancancode
PUBLIC SERVICEANNOUNCEMENT
RAILS 3.2.16 + 4.0.2http://groups.google.com/group/rubyonrails-security
What’s NEW INRails 4.1 *
* As OF 752f9fed00221ad97073e13b12be9c849199b4b8
VARIANTS
Variants
Variantsclass ApplicationController < ActionController::Base before_action :detect_variant private def detect_variant request.variant = \ case request.user_agent when /iPhone/ then :phone when /iPad/ then :tablet end endend
respond_to do |format| format.html do |html| html.phone # index.html+phone.erb html.tablet do # index.html+tablet.erb # ... render end endend
VariantsOTHER USES...A/B TESTING?
API VERSIONING?OLD BROWSERS?NO JS FALLBACK?
ENUMS
ENUMSclass Conversation < ActiveRecord::Base enum status: [ :active, :archived ]end conversation.archive!conversation.active? # => falseconversation.status # => "archived" Conversation.archived # => Relation for all archived Conversations
MESSAGE VERIFIER
MESSAGE VERIFIERmessage = Rails.application .message_verifier('salt') .generate('my sensible data') Rails.application .message_verifier('salt') .verify(message) # => 'my sensible data'
MESSAGE VERIFIERUSES...
PASSWORD RESET?INVITE TOKEN?
OTHER LINKS IN EMAILS?
TIME TRAVEL
TIME TRAVEL
TIME TRAVELtest "Fast forward to Christmas" do refute is_it_christmas_yet? travel_to Time.new(2013, 12, 25, 00, 00, 00) assert is_it_christmas_yet?end test "How I met your mother" do @mother = User.find(...) travel -30.years do assert @mother.single? end refute @mother.single?end
SPRING
Rails application preloader
Totally AutomatICGIc
spring$ time ./bin/rails runner 'puts "Hello"'Hello0.05s user 0.02s system 1% cpu 3.860 total
$ time ./bin/rails runner 'puts "Hello"'Hello0.05s user 0.01s system 27% cpu 0.229 total
$ time ./bin/rake spec......................................................................................................................................... Finished in 15.04 seconds322 examples, 0 failures 0.06s user 0.02s system 0% cpu 25.446 total $ time ./bin/rake spec......................................................................................................................................... Finished in 14.79 seconds322 examples, 0 failures 0.05s user 0.01s system 0% cpu 20.543 total
spring
NO TOUCHING
NO TOUCHINGActiveRecord::Base.no_touching do Post.first.touch # does nothingend Comment.no_touching do Comment.first.touch # does nothing Post.first.touch # updates, but won't update related comments if there are anyend
TO_PARAM
TO_PARAMclass User < ActiveRecord::Base to_param :nameend user = User.find_by(name: 'Fancy Pants')user.id # => 123user.to_param # => "123-fancy-pants"
_
String#Remove
String#Remove>> ' a lot of whitespace '.remove(/[:space:]/)=> "alotofwhitespace"
>> 'username=godfrey&password=123456'.remove(/&?password=[^&]*/)=> "username=godfrey"
JSON
r.i.p. multijson
all-New JSON encoder
Action view
SURPRISES?
TRY IT TODAYhttps://gist.github.com/chancancode/7781341
TRY IT TODAY# Gemfilegem 'rails', github: 'rails/rails'gem 'arel', github: 'rails/arel'
#VANRUBY + OSS= <3 <3 <3 <3
Hack night TUE dec 17
IRC #VANRUBY (freenode)
Godfrey Chan @chancancode