timothy n. tsvetkov, rails 3.1

53

Upload: evil-martians

Post on 08-May-2015

1.158 views

Category:

Documents


0 download

DESCRIPTION

Timothy N. Tsvetkov & Gregory Mann's keynote on Rails 3.1 new features.

TRANSCRIPT

Page 1: Timothy N. Tsvetkov, Rails 3.1
Page 2: Timothy N. Tsvetkov, Rails 3.1
Page 3: Timothy N. Tsvetkov, Rails 3.1
Page 4: Timothy N. Tsvetkov, Rails 3.1

Ruby NoName PodcastPropaganda sponsorship

Page 5: Timothy N. Tsvetkov, Rails 3.1

Rails 3.1

Page 6: Timothy N. Tsvetkov, Rails 3.1

Rails 3.12 years of development

1234 commits321 Contributors

243244 coffee caps1 dhh

Page 7: Timothy N. Tsvetkov, Rails 3.1

Delivering DevelopersHappiness

Page 8: Timothy N. Tsvetkov, Rails 3.1

HTTP Streaming

Page 9: Timothy N. Tsvetkov, Rails 3.1

HTTP StreamingMake your’s applications even faster

Page 10: Timothy N. Tsvetkov, Rails 3.1

Browser start processing CSS and JSbefore you request DB

Page 11: Timothy N. Tsvetkov, Rails 3.1

Yes, all DB requests actually in view

Page 12: Timothy N. Tsvetkov, Rails 3.1

Yes, all DB requests actually in view

But, who care?

Page 13: Timothy N. Tsvetkov, Rails 3.1

Unicorn

Page 14: Timothy N. Tsvetkov, Rails 3.1

listen 3000, :tcp_nopush => false

Page 15: Timothy N. Tsvetkov, Rails 3.1

class PostsController

Page 16: Timothy N. Tsvetkov, Rails 3.1

class PostsController stream

Page 17: Timothy N. Tsvetkov, Rails 3.1

class PostsController stream :only => :index

Page 18: Timothy N. Tsvetkov, Rails 3.1

class PostsController def index @posts = Post.cool_posts.all end

Page 19: Timothy N. Tsvetkov, Rails 3.1

class PostsController def index @posts = Post.cool_posts.all end render :stream => true

Page 20: Timothy N. Tsvetkov, Rails 3.1

<!DOCTYPE html><html><head> <title><%= yield :title %></title> ... ...</head><body>

<% content_for :title, "Projects" %>

Page 21: Timothy N. Tsvetkov, Rails 3.1

<%= yield :title %>

<% content_for :title, "Projects" %>

Page 22: Timothy N. Tsvetkov, Rails 3.1

<%= yield :title %>

<% content_for :title, "Projects" %>

@posts = Post.cool_posts

Page 23: Timothy N. Tsvetkov, Rails 3.1

<%= yield :title %>

<% provide :title, "Projects" %>

@posts = Post.cool_posts

Page 24: Timothy N. Tsvetkov, Rails 3.1

D’oh

Page 25: Timothy N. Tsvetkov, Rails 3.1

Rack::Cache

Page 26: Timothy N. Tsvetkov, Rails 3.1

Rack::Cache

Page 27: Timothy N. Tsvetkov, Rails 3.1

Middlewares that need to manipulate the body

Page 28: Timothy N. Tsvetkov, Rails 3.1

Middlewares that need to manipulate the body

Page 29: Timothy N. Tsvetkov, Rails 3.1

1.9.2 Onlyfibers

Page 30: Timothy N. Tsvetkov, Rails 3.1

ActiveRecord Identity Map

by Emilio Tagua

Page 31: Timothy N. Tsvetkov, Rails 3.1

user1 = User.find(1) user2 = User.find(1)

user1 == user2 # => trueuser1.object_id == user2.object_id # => true

Page 32: Timothy N. Tsvetkov, Rails 3.1

config.active_record.identity_map = true

Page 33: Timothy N. Tsvetkov, Rails 3.1

Does not track associations :(

Page 34: Timothy N. Tsvetkov, Rails 3.1

Post.has_many :comments, :dependent => :destroy

comment = @post.comments.firstcomment.post = nilcomment.save

Post.destroy(@post.id)

Page 35: Timothy N. Tsvetkov, Rails 3.1

Post.has_many :comments, :dependent => :destroy

comment = @post.comments.firstcomment.post = nilcomment.save

Post.destroy(@post.id)

comment will be destroyed

Page 36: Timothy N. Tsvetkov, Rails 3.1

Prepared Statements

Page 37: Timothy N. Tsvetkov, Rails 3.1
Page 38: Timothy N. Tsvetkov, Rails 3.1

SELECT * FROM users WHERE id = 42;

Page 39: Timothy N. Tsvetkov, Rails 3.1

SELECT * FROM users WHERE id = ?;

Page 40: Timothy N. Tsvetkov, Rails 3.1

Works Prefect• SQLite

• Postgres

Complicated

• MySQL

Page 41: Timothy N. Tsvetkov, Rails 3.1

Role-based mass-assignment

protection

Page 42: Timothy N. Tsvetkov, Rails 3.1

class Post < ActiveRecord::Base attr_accessible :title attr_accessible :title, :user_id, :as => :adminend

Page 43: Timothy N. Tsvetkov, Rails 3.1

class Post < ActiveRecord::Base attr_accessible :title attr_accessible :title, :user_id, :as => :adminend

Post.update_attributes(params[:post], :as => :admin)

Page 44: Timothy N. Tsvetkov, Rails 3.1

Callable in Scope

Page 45: Timothy N. Tsvetkov, Rails 3.1

class Filter < Struct.new(:klass) def call(*args); endend

module CategoryFilter def call(category, *args) klass.where(:category => args.shift) super(*args) endend

class User < ActiveRecord::Base scope :combined, Filter.new(self).extend(NameFilter)end

Page 46: Timothy N. Tsvetkov, Rails 3.1

jQuery by default

Page 47: Timothy N. Tsvetkov, Rails 3.1

RJS has been extracted out to a gem

Page 48: Timothy N. Tsvetkov, Rails 3.1

force_ssl

Page 49: Timothy N. Tsvetkov, Rails 3.1

authenticity_tokencustom handling or to omit the token

Page 50: Timothy N. Tsvetkov, Rails 3.1

Deprecated

Page 51: Timothy N. Tsvetkov, Rails 3.1

AR options hash

:conditions, :include, :joins, :limit, :offset, :order, :select, :readonly, :group, :having, :from, :lock

Page 52: Timothy N. Tsvetkov, Rails 3.1

green_items = Item.scoped_by_colour('orange')

Page 53: Timothy N. Tsvetkov, Rails 3.1

Questions?