Screencast: Rake alternative Thor

Thor, ein Tool das die Programmierung von Kommandozeilen-Scripts vereinfacht, kann auch als Alternative zu Rake eingesetzt werden. In dieser Woche zeigt Ryan wie es eingesetzt werden kann.

 

Download:

Download(11.2 MB, 8:54)
Alternativer Download für iPod & Apple TV(11 MB, 8:54)

 

Resourcen:

 

Quellcode:

[bash]
thor help
thor list
thor setup:config
thor setup:config –force
thor setup:config private.yml –force
thor install lib/tasks/setup.thor
thor setup:populate
thor setup:populate –count 5
[/bash]

[ruby]
class Setup < Thor
desc "config [NAME]", "copy configuration files"
method_options :force => :boolean
def config(name = "*")
Dir["config/examples/#{name}"].each do |source|
destination = "config/#{File.basename(source)}"
FileUtils.rm(destination) if options[:force] && File.exist?(destination)
if File.exist?(destination)
puts "Skipping #{destination} because it already exists"
else
puts "Generating #{destination}"
FileUtils.cp(source, destination)
end
end
end

desc "populate", "generate records"
method_options :count => 10
def populate
require File.expand_path(‚config/environment.rb‘)
options[:count].times do |num|
puts "Generating article #{num}"
Article.create!(:name => "Article #{num}")
end
end
end
[/ruby]

Screencast: Authentifizierung über OmniAuth

OmniAuth ist ein flixibles Authentifizierungs-System, welches auf Rack aufsetzt. In dieser Woche zeigt Ryan wie einfach man mit OmniAuth in Rails einsetzen kann.

 

Download:

Download(12 MB, 9:06)
Alternativer Download für iPod & Apple TV(12 MB, 9:06)

 

Resourcen:

 

Quellcode:

[bash]
rails g controller sessions
rails g model user provider:string uid:string name:string
rake db:migrate
[/bash]

[ruby]
# Gemfile
gem ‚omniauth‘

# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, ‚CONSUMER_KEY‘, ‚CONSUMER_SECRET‘
end

# routes.rb
match "/auth/:provider/callback" => "sessions#create"
match "/signout" => "sessions#destroy", :as => :signout

# sessions_controller.rb
def create
auth = request.env["omniauth.auth"]
user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth)
session[:user_id] = user.id
redirect_to root_url, :notice => "Signed in!"
end

def destroy
session[:user_id] = nil
redirect_to root_url, :notice => "Signed out!"
end

# models/user.rb
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["user_info"]["name"]
end
end

# application_controller.rb
helper_method :current_user

private

def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
[/ruby]

[html]
<% if current_user %>
Welcome <%= current_user.name %>!
<%= link_to "Sign Out", signout_path %>
<% else %>
<%= link_to "Sign in with Twitter", "/auth/twitter" %>
<% end %>
[/html]

Screencast: Suchen, Sortieren, Pagination mit AJAX

Viele Administrationsseiten bieten die Möglichkeite zu Suchen, Sortieren oder Daten seitenweise anzuzeigen. In dieser Woche zeigt Ryan wie diese Funktionen mit AJAX umgesetzt werden können.

 

Download:

Download(20.7 MB, 13:43)
Alternativer Download für iPod & Apple TV(19.9 MB, 13:43)

 

Resourcen:

 

Quellcode:

[bash]
rails g jquery:install
[/bash]

[ruby]
# Gemfile
gem ‚will_paginate‘, ‚3.0.pre2‘
gem ‚jquery-rails‘

# products_controller.rb
def index
@products = Product.search(params[:search]).order(sort_column + " " + sort_direction).paginate(:per_page => 5, :page => params[:page])
end

# models/product.rb
def self.search(search)
if search
where(’name LIKE ?‘, "%#{search}%")
else
scoped
end
end

# helpers/application_helper.rb
def sortable(column, title = nil)
title ||= column.titleize
css_class = column == sort_column ? "current #{sort_direction}" : nil
direction = column == sort_column && sort_direction == "asc" ? "desc" : "asc"
link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class}
end
[/ruby]

[html]
<!– products/index.html.erb –>
<%= form_tag products_path, :method => ‚get‘, :id => "products_search" do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<div id="products"><%= render ‚products‘ %></div>
<% end %>

<!– products/_products.html.erb –>
<%= hidden_field_tag :direction, params[:direction] %>
<%= hidden_field_tag :sort, params[:sort] %>
<%= will_paginate @products %>

<!– products/index.js.erb –>
$("#products").html("<%= escape_javascript(render("products")) %>");
[/html]

Screencast: ActiveRecord::Relation Grundlagen

Das neue ActiveRecord bringt einige Erleichterungen für Entwickler mit. Ryan beschreibt diese Woche wie es im Hintergrund funktioniert und gibt somit einen Einblick in die richtigen Stellen von ActiveRecord.

 

Download:

Download(35.4 MB, 11:45)
Alternativer Download für iPod & Apple TV(29.7 MB, 11:45)

 

Resourcen:

 

Quellcode:

[bash]
git clone git://github.com/rails/rails.git
cd rails
git checkout v3.0.1
mate activerecord/lib/active_record
[/bash]

Freies Rails Magazin: Ausgabe 7

Das frei erhältliche Rails-Magazine ist in der siebten Ausgabe erschienen. Diese Ausgabe umfasst 28 Seiten und behandelt die Themen: Refinery CMS, Hobo, Rails auf Windows und mehr.

Das Inhaltverzeichnis der aktuellen Ausgabe:

  • Editorial by Rupak Ganguly
  • An Overview of Refinery – a Rails CMS by David Jones
  • Converting A Rails Site to Refinery CMS by Christopher W. Lehman
  • Auditing plugin by Mihai Târnovan and Gabriel Târnovan
  • Hobo – Making Application Development on Rails Even Faster by Dave Reynolds
  • Installing Ruby on Rails on Windows by Victor Thiago
  • Simple Unobtrusive Ruby/Rails Debugging by Stephen Rycyk
  • A Well Kept Secret, Ruby and Cryptography by Richard Penwell

Die digitale Version als PDF ist unter folgendem Link verfügbar: Download

Die gedruckte Version ist nicht kostenlos und kann unter http://railsmagazine.com/issues/7 bestellt werden.

Screencast: Mongoid

Mongoid ist ein gem, das eingesetzt werden kann, um mit Ruby auf eine Mongo-Datenbank zuzugreifen. In diesem Screencast stellt Ryan vor wir es installiert, konfiguriert und eingesetzt wird, incl. Validierung, Associations und Schlüsseln.

 

Download:

Download(16.7 MB, 11:08)
Alternativer Download für iPod & Apple TV(15.7 MB, 11:08)

 

Resourcen:

 

Quellcode:

[bash]
bundle
rails g mongoid:config
rails g scaffold article name:string content:text
rails g model comment name:string content:text
rails g controller comments
rails g scaffold author name:string
[/bash]

[ruby]
# Gemfile
gem ‚mongoid‘, ‚2.0.0.beta.19‘
gem ‚bson_ext‘

# models/article.rb
class Article
include Mongoid::Document
field :name
field :content
field :published_on, :type => Date
validates_presence_of :name
embeds_many :comments
referenced_in :author
end

# models/comment.rb
class Comment
include Mongoid::Document
field :name
field :content
embedded_in :article, :inverse_of => :comments
end

# models/author.rb
class Author
include Mongoid::Document
field :name
key :name
references_many :articles
end

# comments_controller.rb
def create
@article = Article.find(params[:article_id])
@comment = @article.comments.create!(params[:comment])
redirect_to @article, :notice => "Comment created!"
end
[/ruby]

[html]
<!– articles/_form.html.erb –>
<div class="field">
<%= f.label :published_on %><br />
<%= f.date_select :published_on %>
</div>
<div class="field">
<%= f.label :author_id %><br />
<%= f.collection_select :author_id, Author.all, :id, :name %>
</div>

<!– articles/show.html.erb –>
<% if @article.comments.size > 0 %>
<h2>Comments</h2>
<% for comment in @article.comments %>
<h3><%= comment.name %></h3>
<p><%= comment.content %></p>
<% end %>
<% end %>

<h2>New Comment</h2>
<%= form_for [@article, Comment.new] do |f| %>
<p><%= f.label :name %> <%= f.text_field :name %></p>
<p><%= f.text_area :content, :rows => 10 %></p>
<p><%= f.submit %></p>
<% end %>
[/html]