Derailing rails

Preview:

DESCRIPTION

My presenation at Athens Ruby Meetup #4

Citation preview

Athens Ruby Meetup #4

Rails 3:Derailing

Rails

Panagiotis Papadopoulos@panosjeehttp://6pna.com

Merb and Rails merge announced on December 23 2008The hell freezedHigh ExpectationsTwo and a half years later the merge is completeA lot of new committersSignificant efforts by the Merb creator Yehuda KatzLots of rewritesA new beastNew tricks to learnMore power to developersLess opinionated thus derailed but still using strong conventionsLess monkey patching (oh yes)

The story after Rails 3

Many people accused Rails of being spaghetti code

Not any more...

Django infuelnces...

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!

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 append_view_path "#{Rails.root}/app/views" def index @processes = `ps -axcr -o "pid,pcpu, pmem, time, comm"` render end end

Pure Rack Goodness

New Responders, less verbosedef new @product = Product.new respond_with @product end

Redirect shortcuts redirect_to @product, :notice => "Successfully created

Permanent CookiesCustom responedersNo more Metal, you can create your own controllers

Controllers in Rails 3

No more gem.config in environment.rbAnyway all this code is moved to application.rbBut your gem dependencies now live in GemfileBundler 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.

Forget script, say hello to rails

New Generators and Commands

Generators help you create *YOUR* convetions

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!

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 codeIn 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

ActiveRecord inherits from ActiveModelYou can use ActiveModel to build your own ORM compatible with RailsQuery language is now AReLChain everything!More details by Savvas

ActiveRecord

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

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

Recommended