- Ein Array mit Objekten, zu denen jeweils ein Item im Feed erzeugt werden soll (in unserem Fall ein Eintrag pro Event).
- Optional: Ein Hash mit Optionen, der unter anderem das Mapping der Objektattribute auf die Feeditem-Elemente angibt.
options[:feed][:title] # Titel des Feeds options[:feed][:link] # Link zum Feed options[:feed][:description] # Beschreibung des Feeds options[:feed][:language] # Sprache, default: "en-us" options[:feed][:ttl] # Time to live, Minuten die das Feed gecacht werden kann, default: 40 options[:item][:title] # Methode, die den Titel des Items zurückgibt options[:item][:description] # Methode, die den Inhalt des Items in plain text zurückgibt options[:item][:content_encoded] # Optional, encodierter Inhalt (mit HTML o.ä.) options[:item][:pub_date] # Methode, die das Datum des Eintrags zurückgibt, default: created_at options[:url_writer] # Optional, eigener UrlWriter, nützlich bei verschachtelten Resourcen
Listing 4
Die auf die Items bezogenen Optionen geben jeweils den Namen der Objektmethode an, die das Veröffentlichungsdatum, den Titel oder die Beschreibung zurückgeben. Im Idealfall können die Angaben entfallen. Vorraussetzung dafür ist, dass das Modell schon über die richtigen Attribute (z. B. „created_at“, „title“, „description“) verfügt – ansonsten muss, wie im folgenden Listing zu sehen, noch etwas nachkonfiguriert werden. Da die meisten Optionen durch die Anwendung hindurch gleich bleiben (bspw. „Language“ und „Time to live“), werden die Methoden zum Rendern der Formate gewrapped, um Wiederholungen in den einzelnen Aufrufen zu vermeiden [3]. Das Listing enthält auch schon das Rendern des Formats iCalendar, dessen Export dann im nächsten Abschnitt implementiert wird:
class ApplicationController < ActionController::Base
protected
def render_xml_for(objects, options = {})
render :xml => objects.to_xml(options)
end
def render_json_for(objects)
render :json => objects.to_json
end
def render_atom_for(objects, options = {})
render_atom_feed_for objects, {
:feed => { :title => options[:title] },
:item => {
# Die Methode summary des Eventobjekts gibt den Titel zurück,
# description_for_feed die Beschreibung, welche im Feed auftauchen soll
:title => :summary,
:description => :description_for_feed } }
end
def render_rss_for(objects,options = {})
render_atom_feed_for objects, {
:feed => { :title => options[:title], :language => "de-DE", :ttl => 60 },
:item => {
:title => :summary,
:description => :description_for_feed,
:content_encoded => :content_encoded } }
end
def render_ical_for(objects, options = {})
ical = Icalendar::Calendar.new # Erstellen eines neuen Kalenderobjekts
# Einstellungen für den Kalender
ical.product_id = "-//wevent.org//iCal 1.0//DE"
ical.custom_property("X-WR-CALNAME;VALUE=TEXT", "wevent.org: #{options[:title]}")
ical.custom_property("X-WR-TIMEZONE;VALUE=TEXT", "Europe/Berlin")
# Eventobjekte als iCalendar-Daten rendern und dem Kalender hinzufügen
ical.add(objects.to_ical)
render_without_layout :text => ical.to_ical # Ausgabe der fertigen iCalendar-Datei
end
end
end
Listing 5
Export von Daten als iCalendar
iCalendar ist ein Standardformat zum Austausch von Kalenderdaten, das von allen verbreiteten Kalenderapplikationen unterstützt wird. Der Export des Formats mit der Dateiendung „.ics“ gehört zwar nicht zu den Rails-Bordmitteln, die Library „iCalender“, die sich als Ruby Gem installieren lässt, schafft aber Abhilfe.





![Diese Tools nutzen Entwickler für unterschiedliche Aufgaben [Infografik]](http://t3n.de/uploads/t3n-news-post-351639_symbolbild-werkzeug-tool_medium.jpg)
