Post on 18-May-2015
description
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