Rails Magazine 6

Das Railsmagazine ist in der sechsten Version erschienen. Auch diese Ausgabe enthält Artikel zu unterschiedlichen Bereichen aus der Rails-Welt. Diese reichen von HAML, Scaling bis hin zu RVM.

 

Inhalt dieser Ausgabe:

  • Beautifying Your Markup With Haml and Sass by Ethan Gunderson
  • Scaling Rails by Gonçalo Silva
  • Interview with Sarah Allen by Rupak Ganguly
  • Data Extraction with Hpricot by Jonas Alves
  • Deployment with Capistrano by Omar Meeky
  • Fake Data – The Secret of Great Testing by Robert Hall
  • RubyConf India 2010 coverage by Judy Das
  • Previous and Next Buttons by James Schorr
  • RVM – The Ruby Version Manager by Markus Dreier
  • Interview with Michael Day of Prince XML by Olimpiu Metiu
 

Die PDF-Version steht unter folgendem Link zum Download bereit:

http://pdf.railsmagazine.com/rails-magazine-issue6.pdf

 

Auf der Magazinseite kann auch die Papierform bestellt werden:

http://railsmagazine.com/issues/6

Screencast: PDF Dokumente mit PDFKit generieren

PDFs mit Ruby zu erzeugen ist, trotz PDF Toolkit und Prawn, eine langwierige Angelegenheit bzw. kann aufwendig werden. Mit PDFKit können die Dokumente aus HTML-Dateien generiert werden.

 

Download:

Download(18.5 MB, 8:14)
Alternativer Download für iPod & Apple TV(16.8 MB, 8:14)

 

Resourcen:

 

Quellcode:

[bash]
bundle install
rake middleware
[/bash]

[ruby]
# config/application.rb
config.middleware.use "PDFKit::Middleware", :print_media_type => true
[/ruby]

[html]
<!– layouts/application.html.erb –>
<%= stylesheet_link_tag ‚application‘, :media => "all" %>

<!– orders/show.html.erb –>
<p id="pdf_link"><%= link_to "Download Invoice (PDF)", order_path(@order, :format => "pdf") %></p>
[/html]

[css]
/* application.css */
@media print {
body {
background-color: #FFF;
}

#container {
width: auto;
margin: 0;
padding: 0;
border: none;
}

#line_items {
page-break-before: always;
}

#pdf_link {
display: none;
}
}
[/css]

Screencast: Rails 3 Active Model

In Rails 3 wurden viele Funktionen von ActiveRecord nach ActiveModel ausgelagert. Dadurch ist es nun möglich die Validierungen und mehr auch in anderen Datenbanken oder anderen Formen der Datenhaltung zu implementieren.

 

Download:

Download(11.7 MB, 6:47)
Alternativer Download für iPod & Apple TV(10.9 MB, 6:47)

 

Resourcen:

 

Quellcode:

[ruby]
# models/message.rb
class Message
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming

attr_accessor :name, :email, :content

validates_presence_of :name
validates_format_of :email, :with => /^[-a-z0-9_+.]+@([-a-z0-9]+.)+[a-z0-9]{2,4}$/i
validates_length_of :content, :maximum => 500

def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end

def persisted?
false
end
end

# messages_controller.rb
def create
@message = Message.new(params[:message])
if @message.valid?
# TODO send message here
flash[:notice] = "Message sent! Thank you for conacting us."
redirect_to root_url
else
render :action => ’new‘
end
end
[/ruby]

Screencast: Eigene Rails 3 Generatoren erstellen

In Rails 3 wurde die Erstellung von eigenen Generatoren überarbeitet. Ryan zeigt diese Woche wie man eigene Generatoren erstellen kann und was sich an der bisherigen Syntax geändert hat.

 

Download:

Download(14 MB, 10:07)
Alternativer Downloadfür iPod & Apple TV(13.8 MB, 10:07)

 

Resourcen:

 

Quellcode:

[bash]
rails g generator –help
rails g generator layout
rails g layout –help
rails g layout admin
rails g layout foo –skip-stylesheet
[/bash]

[ruby]
# lib/generators/layout/layout_generator.rb
class LayoutGenerator < Rails::Generators::Base
source_root File.expand_path(‚../templates‘, __FILE__)
argument :layout_name, :type => :string, :default => "application"
class_option :stylesheet, :type => :boolean, :default => true, :desc => "Include stylesheet file."

def generate_layout
copy_file "stylesheet.css", "public/stylesheets/#{file_name}.css" if options.stylesheet?
template "layout.html.erb", "app/views/layouts/#{file_name}.html.erb"
end

private

def file_name
layout_name.underscore
end
end
[/ruby]

[html]
# lib/generators/layout/templates/layout.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<%- if options.stylesheet? -%>
<%%= stylesheet_link_tag "<%= file_name %>" %>
<%- end -%>
<%%= javascript_include_tag :defaults %>
<%%= csrf_meta_tag %>
<%%= yield(:head) %>
</head>
<body>
<div id="container">
<%% flash.each do |name, msg| %>
<%%= content_tag :div, msg, :id => "flash_#{name}" %>
<%% end %>
<%%= yield %>
</div>
</body>
</html>
[/html]

Rails 3 Screencastserie von Gregg Pollack (EnvyLabs)

Gregg Pollack von EnvyLabs hat pünktlich zur letzten Beta eine Serie an Screencasts zu Rails 3 vorgestellt. Die Screencasts decken die verschiedensten Bereiche von Rails 3 ab.

Rails 3 Intro

 
 

Intro and Action Dispatch

 
 

Bundler and ActionMailer

 
 

ActiveRelation & ActiveModel

 
 

XSS & UJS

 
 

ActionController

 
 
Die gesamten Videos incl. der IPod-Version sind auch auf der Rails-Blog-Seite verfügbar: http://rubyonrails.org/screencasts/rails3
 
Neben diesen Videos steht auch die Präsentation von Gregg und Kollegen zu Rails 3 auf den Seiten von OReilly zur Verfügung: http://assets.en.oreilly.com/1/event/40/The%20Rails%203%20Ropes%20Course%20Presentation.pdf

Rails 3, die vierte Beta

Wie viele wissen, findet momentan die RailsConf 2010 in Baltimore statt und man hat sich entschlossen zu diesem Anlass die vierte und wahrscheinlich die letzte Beta-Version zu veröffentlichen.

David schreibt, dass man vor hat, bis zum Ende der Konferenz den ersten Release-Kandidaten fertig zu stellen.
Das Update kann wie gewohnt über gem vorgenommen werden:

[bash]
gem install rails –pre
[/bash]

Ruby Enterprise Edition 1.8.7-2010.02 veröffentlicht

REE (Ruby Enterprise Edition) ist in Version 1.8.7-2010.02 erschienen. Dieses Release konzentriert sich auch die Kompatibilität mit Rails 3. Daher sind keine großen Neuerungen in diese Version eingeflossen.

Dies sind die Anpassungen

  • Upgrade auf Ruby 1.8.7-p249
  • Upgrade auf RubyGems 1.3.7
  • Backport von verschiedenen Bug-Fixes
  • Fixes für FreeBSD
  • Geschwindigkeitsverbesserungen
  • Weitere kleinere Bugfixes
  • Zusätzliche Ubuntu Pakete

Eine detailiertere Liste mit den Änderungen ist auf der Projektseite zu finden:

 

Screencast: Mehrstufige Formulare

Je nach nach Umfang und Komplexität ist es notwendig ein Formular in mehrere Schritte aufzuteilen. Diese Woche zeigt Ryan in seinem Screencast, wie dies mit Rails gelöst werden kann.

 

Download:

Download(21.8 MB, 15:14)
Alternativer Downloadfür iPod & Apple TV(20.9 MB, 15:14)

 

Resourcen:

 

Quellcode:

[bash]
script/generate nifty_scaffold order shipping_name:string billing_name:string index show new
[/bash]

[ruby]
# models/order.rb
attr_writer :current_step

validates_presence_of :shipping_name, :if => lambda { |o| o.current_step == "shipping" }
validates_presence_of :billing_name, :if => lambda { |o| o.current_step == "billing" }

def current_step
@current_step || steps.first
end

def steps
%w[shipping billing confirmation]
end

def next_step
self.current_step = steps[steps.index(current_step)+1]
end

def previous_step
self.current_step = steps[steps.index(current_step)-1]
end

def first_step?
current_step == steps.first
end

def last_step?
current_step == steps.last
end

def all_valid?
steps.all? do |step|
self.current_step = step
valid?
end
end

# orders_controller.rb
def new
session[:order_params] ||= {}
@order = Order.new(session[:order_params])
@order.current_step = session[:order_step]
end

def create
session[:order_params].deep_merge!(params[:order]) if params[:order]
@order = Order.new(session[:order_params])
@order.current_step = session[:order_step]
if @order.valid?
if params[:back_button]
@order.previous_step
elsif @order.last_step?
@order.save if @order.all_valid?
else
@order.next_step
end
session[:order_step] = @order.current_step
end
if @order.new_record?
render "new"
else
session[:order_step] = session[:order_params] = nil
flash[:notice] = "Order saved!"
redirect_to @order
end
end
[/ruby]

[html]
<!– orders/new.html.erb –>
<% form_for @order do |f| %>
<%= f.error_messages %>
<%= render "#{@order.current_step}_step", :f => f %>
<p><%= f.submit "Continue" %></p>
<p><%= f.submit "Back", :name => "back_button" unless @order.first_step? %></p>
<% end %>
[/html]

Phusion Passenger 2.2.12 erschienen

Phusion Passenger ist in Verison 2.2.12 erschienen und steht somit zum Download bereit.

Neben kleineren Bugfixes wurde der Support für Bundler verbessert.

Das Update kann über die bekannten Mechnismen durchgeführt werden:

[bash]
gem install passenger
[/bash]

Danach kann folgenermaßen das Update installiert werden:

[bash]
passenger-install-apache2-module
[/bash]

Projekt Seite mit weiteren Details und Download: http://www.modrails.com/

Screencast: Generatoren in Rails 3

In Rails 3 wurden die Generatoren komplett überarbeitet und modularisiert. Auf diese Weise lassen sie sich an die eigenen Anforderngen anpassen. Ryan zeigt in dieser Woche wie man dies machen kann.

 

Download:

Download(43.3 MB, 11:24)
Alternativer Downloadfür iPod & Apple TV(33.7 MB, 11:24)

 

Resourcen:

 

Quellcode:

[bash]
rails g
rails g scaffold –help
rails g scaffold project name:string –no-stylesheets
bundle install
rails g scaffold task project_id:integer
rails g scaffold category name:string
[/bash]

[ruby]
# Gemfile
group :test do
gem "shoulda"
gem "factory_girl"
end

gem "rails3-generators", :group => :development

# config/application.rb
config.generators do |g|
g.stylesheets false
g.test_framework :shoulda
g.fixture_replacement :factory_girl
end
# …
require ‚rails/generators‘
Rails::Generators.fallbacks[:shoulda] = :test_unit
[/ruby]