class Program < ActiveRecord::Base include ActionView::Helpers::TextHelper include ActionController::UrlWriter has_many :episodes, :order => "published_at DESC" validates_presence_of :title def to_rss(media_type='mp3') rss = RSS::Rss.new( "2.0" ) channel = RSS::Rss::Channel.new channel.title = title + (media_type != 'mp3' ? " - #{media_type}" : '') channel.description = textilize_without_paragraph(description) channel.link = link channel.language = language #channel.itunes(:author => "Geoffrey Grosenbach") rss.channel = channel selected_episodes = self.episodes.find( :all, :order => "published_at DESC", :conditions => ["has_#{media_type} = ?", true]) selected_episodes.each do |episode| item = RSS::Rss::Channel::Item.new item.title = "#{episode.title} - #{self.title}" if media_type == 'transcript' if episode.transcript_url.blank? item.link = episode_url(episode.program, episode.to_param) else # HACK Find better way to generate non-rails url item.link = "http://" + ActionController::UrlWriter.default_url_options[:host] + "/transcripts/" + episode.send("#{media_type}_url") end else item.link = episode.send("#{media_type}_url") end #item.guid item.pubDate = episode.published_at item.description = textilize(episode.description) if ['mp3', 'mp4'].include?(media_type) item.enclosure = RSS::Rss::Channel::Item::Enclosure.new(item.link, episode.send("#{media_type}_length"), 'audio/mpeg') end channel.items << item end return rss.to_s end end