Screencast: Das Rails API Gem

Applikationen die eine reine API zur Verfügung erstellen kommen immer häufiger vor und haben einen anderen Anspruch als konventionelle Web-Applikationen. Sie benötigen in der Regel keine/andere Views um Daten zur Verfügung zu stellen. In Rails kann für Applikationen die hauptsächlich APIs anbieten das Rails API Gem eingesetzt werden. Ryan zeigt in dieser Woche wie es verwendet werden kann.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

terminal

[bash]
gem install rails-api
rbenv rehash
rails-api new todo
rails g scaffold task name
rake middleware
diff api_middleware.txt full_middleware.txt
[/bash]

tasks_controller.rb

[ruby]
include ActionController::MimeResponds
include ActionController::Helpers
include ActionController::Cookies
include ActionController::ImplicitRender

# GET /tasks
# GET /tasks.json
def index
@tasks = Task.all

# respond_to do |format|
# format.json { render }
# format.xml { render xml: @tasks }
# end
end
[/ruby]

views/tasks/index.json.rabl

[javascript]
collection @tasks
attributes :id, :name
[/javascript]

config/application.rb

[ruby]
config.middleware.insert_after ActiveRecord::QueryCache, ActionDispatch::Cookies
[/ruby]

Rails 3 Cheatsheet

Gregg Pollack von EnvyLabs hat ein Cheatsheet für Rails 3 Entwickler veröffentlicht. Es sollte ursprünglich früher erscheinen, aber die Arbeiten an seinen letzten Screencasts haben unerwartet mehr Zeit beansprucht. Auch wenn Rails 3 nun bereits seit einiger Zeit verfügbar ist, ist das Cheatsheet eine gute Quelle um das eine oder andere nachzuschlagen.

Es ist ein umfangreiches Cheatsheet geworden, dass sehr viele Bereiche abdeckt und somit auch für erfahrene Entwickler wertvoll/hilfreich sein wird.

Das PDF ist in sechs Haupt-Bereiche aufgeteilt und jeder Bereich ist in sich nochmal gegliedert:

  1. Routing:
    • Basic Routing
    • Optionale Parameter
    • Redirection
    • Named Routes
    • Rack Routing
    • Constraints
    • Legacy Route
    • Scope
  2. Bundler
    • Bundler Commands
    • Gemfile Syntax
    • Workflow
  3. ActiveRelation
    • Lazy Loading
    • CRUD Methods
    • Chain Methods
    • Chaining
    • (Named) Scopes
    • Deprecated
  4. XSS Protection & UJS
    • XSS Protection
    • Unobtrusive JavaScript
    • HTML5 Custom Data Attributes
    • Deprecated
    • Using JQuery
  5. ActionMailer & ActionController
    • Rails Mail Generator
    • Basic Mailer Syntax
    • Delivering Messages
    • Defaults and Attachements
    • Respond_To and Respond_With
  6. ActiveModel
    • Dirty
    • Validations
    • Serialization
    • Callbacks

Neben dem Umfang hat Gregg auch viel Wert auf das Layout gelegt.

Das Rails 3 Cheatsheet kann unter folgender URL runtergeladen werden: http://blog.envylabs.com/Rails_3_Cheat_Sheets.pdf

Der entsprechende Blogpost mit weiteren Details ist unter folgender Adresse erreichbar: http://blog.envylabs.com/2010/12/rails-3-cheat-sheets/

Dann bleibt uns nur noch übrig euch viel Spaß beim cheaten zu wünschen 🙂

Screencast: Resourcen vererben

Vererbte Resourcen können RESTful Controller erheblich vereinfachen, indem Standard-Actions eingesetzt werden. Ryan zeigt diese Woche wie das funktioniert.

 

Download:

Download(15.1 MB, 9:15)
Alternativer Download für iPod & Apple TV(14.4 MB, 9:15)

 

Resourcen:

 

Quellcode:

[ruby]
# Gemfile
gem ‚inherited_resources‘
gem ‚has_scope‘

# products_controller.rb
class ProductsController < InheritedResources::Base
respond_to :html, :xml
has_scope :limit, :default => 8

def create
create! { products_path }
end
end

# reviews_controller.rb
class ReviewsController < InheritedResources::Base
belongs_to :product
actions :index, :new, :create
has_scope :rating

def create
create! { collection_url }
end
end

# models/review.rb
scope :rating, proc { |rating| where(:rating => rating) }
[/ruby]

[text]
# config/locales/en.yml
en:
flash:
actions:
create:
notice: "Your {{resource_name}} has been created!"
[/text]

Screencast: Controller in Rails 3

In dieser Woche zeigt Ryan in seinem Screencast einige Details zu respond_with und wie eingebettete Flash Nachrichten und permanente Cookies in Rails 3 eingesetzt werden.

 

Download:

Download(20.3 MB, 10:49)
Alternativer Download für iPod & Apple TV(18.5 MB, 10:49)

 

Resourcen:

 

Quellcode:

[ruby]
# config/application.rb
config.filter_parameters += [:password]

# products_controller
redirect_to @product, :notice => "Successfully created product."
redirect_to [:edit, @product]
redirect_to [@category, :edit, @product]

cookies.permanent[:last_product_id] = @product.id

# in class
respond_to :html, :xml

# in action
respond_with(@products)
respond_with(@product, :location => products_url)
respond_with(@product, :responder => MyResponder)
respond_with(@product) do |format|
format.xml { render :text => "I’m XML!" }
end
[/ruby]

Screencast: Rails für mobile Geräte

Der mobile Markt wächst stetig weiter und hat andere Anforderungen an Webapplikationen auf dem mobilen Gerät als für Desktop-Geräte. Ryan zeigt in seinem Screencast wie Rails angepasst werden kann um mobile Geräte zu unterstützen. Dabei kommt mitunter jQTouch zum Einsatz.

 

Download:

Download (55.4 MB, 13:26)
alternative download for iPod & Apple TV (22.4 MB, 13:26)

 

Resourcen:

Quellcode:

[ruby]
# config/initializers/mime_types.rb
Mime::Type.register_alias "text/html", :mobile

# application_controller.rb
before_filter :prepare_for_mobile

private

def mobile_device?
if session[:mobile_param]
session[:mobile_param] == "1"
else
request.user_agent =~ /Mobile|webOS/
end
end
helper_method :mobile_device?

def prepare_for_mobile
session[:mobile_param] = params[:mobile] if params[:mobile]
request.format = :mobile if mobile_device?
end
[/ruby]

[html]
<!– views/layouts/application.html.erb –>
<%= stylesheet_link_tag ‚mobile‘ if mobile_device? %>

<p>
<% if mobile_device? %>
<%= link_to "Full Site", :mobile => 0 %>
<% else %>
<%= link_to "Mobile Site", :mobile => 1 %>
<% end %>
</p>

<!– views/layouts/application.mobile.erb –>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title><%= h(yield(:title) || "Untitled") %></title>
<%= stylesheet_link_tag "/jqtouch/jqtouch.min.css", "/jqtouch/themes/apple/theme.min.css" %>
<%= javascript_include_tag "/jqtouch/jquery.1.3.2.min.js", "/jqtouch/jqtouch.min.js", "mobile" %>
<%= yield(:head) %>
</head>
<body>
<div class="current">
<%- if show_title? -%>
<div class="toolbar">
<%= link_to "Back", nil, :class => "back" unless current_page? root_path %>
<h1><%=h yield(:title) %></h1>
<%= link_to "Full Site", root_url(:mobile => 0), :class => "button", :rel => "external" %>
<%= yield(:toolbar) %>
</div>
<%- end -%>

<% unless flash.empty? %>
<div class="info">
<%- flash.each do |name, msg| -%>
<%= content_tag :div, msg, :id => "flash_#{name}" %>
<%- end -%>
</div>
<% end %>

<%= yield %>
</div>
</body>
</html>

<!– views/projects/index.mobile.erb –>
<% title "Projects" %>

<ul>
<% for project in @projects %>
<li class="arrow">
<%= link_to h(project.name), project %>
<small class="counter"><%= project.tasks.size %></small>
</li>
<% end %>
</ul>

<ul><li class="arrow"><%= link_to "New Project", new_project_path %></li></ul>
[/html]

Artikel zu Rails 3

Rails 3 steht vor der Tür und wird jede Menge Neuerungen mitbringen. Maxim C. hat eine Liste mit Links von interessanten Artikeln und Anleitungen zusammengestellt um sich mit dem kommenden Release anzufreunden. Weitere Vorschläge und Empfehlungen sind willkommen.

Die Liste ist in die verschiedenen Bereiche des Frameworks aufgeteilt und chronologisch sortiert.

Router

ActiveRecord

Controller

Generatoren

Rails 3 Applikationen laufen lassen

Auf Rails 3 aktualisieren

Plugin/Gem Kompatiblität

Architektur