2. Merb and Rails merge announced on December 23
2008
The hell freezed
High Expectations
Two and a half years later the merge is complete
A lot of new committers
Significant efforts by the Merb creator Yehuda Katz
Lots of rewrites
A new beast
New tricks to learn
More power to developers
Less opinionated thus derailed but still using strong
conventions
Less monkey patching (oh yes)
The story after Rails 3
5. Less monkey patching.
The code is well organized and
modular.
You can reuse the components
you want, add yours and create
the Rails you want, ala carte
* you can always monkey patch, do
not worry!
6. Rails 3 is a top Rack citizen. You can mount any Rack or
even Sinatra in your app.
It is as simple as that:
Store::Application.routes.draw do |map|
root :to => proc { |env| [200, {}, ["Welcome"]] }
end
Or if you want a custom controller:
In your routes.rb
match "/processes" => ProcessesApp
In lib/process_app.rb
class ProcessesApp < ActionController::Metal
include ActionController::Rendering
Pure Rack Goodness
7. New Responders, less verbose
def new
@product = Product.new
respond_with @product
end
Redirect shortcuts
redirect_to @product, :
notice => "Successfully created
Permanent Cookies
Custom responeders
No more Metal, you can create your own controllers
Controllers in Rails 3
8. No more gem.config in environment.rb
Anyway all this code is moved to application.rb
But your gem dependencies now live in Gemfile
Bundler is the new way to solve the dependency hell
problem.
Bundler locks all used gems so when you clone the
project you get the same exactly gems and
dependencies
# Edit this Gemfile to bundle your application's dependencies.
source 'http://gemcutter.org'
gem "rails", "3.0.0.beta"
# ActiveRecord requires a database adapter. By default,
# Rails has selected sqlite3.
gem "sqlite3-ruby", :require => "sqlite3"
Gem dependecies. Bundler.
9. Forget script, say hello to rails
New Generators and Commands
Generators help you create *YOUR* convetions
10. The new ActionMailer is descentant of ActionController so
you no longer have to mixin your models and mailers.
class UserMailer < ActionMailer::Base
default :from => "eifion@asciicasts.com"
def registration_confirmation(user)
mail(:to => user.email, :subject => "Registered")
end
end
A new ActionMailer! At last!
11. Everything is escaped by default. Use <%=raw %> if
you want markup in your views.
First of all Rails 3 is not tight to Prototype. It is still the
default but you can use easily any major Javascript
library.
All helpers produce UJS code
In your views:
<%= link_to "Destroy", @product, :confirm => "Are you sure?", :method => :delete %>
Produces the following html code:
<a href="/products/8" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>
Unobtrusive JS using HTML5, XSS Security
12. ActiveRecord inherits from ActiveModel
You can use ActiveModel to build your own ORM
compatible with Rails
Query language is now AReL
Chain everything!
More details by Savvas
ActiveRecord
13. An awesome way to extend Rails apps!
Build plugins in no time!
Source: http://www.igvita.com/2010/08/04/rails-3-internals-railtie-creating-plugins/
Railties
14. Rails 3 bring
more options to
developers and
a better API to
build upon.
You still have
the Golden Path
or the Rails
defaults but you
face less
restrictions on
how to build
stuff
Huge performance gains
You better start off with
Ruby 1.9 using RVM
so that you migrate to
the new Ruby stack
Be careful with your gem and plugins selections, things are a
bit... edgy
Tested against other major
VMs such as Ruby 1.8, 1.9,
JRuby, Rubinious
Thank You!
@panosjee