From c76dbb82193fca9f19d734a014959e7905d088a2 Mon Sep 17 00:00:00 2001 From: eee-c Date: Sat, 4 Jul 2009 14:19:08 -0400 Subject: [PATCH] DRY up those RSS feeds --- eee.rb | 47 +++++------------------------------------------ helpers.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 42 deletions(-) diff --git a/eee.rb b/eee.rb index 428a7d0..0b9613f 100644 --- a/eee.rb +++ b/eee.rb @@ -39,55 +39,18 @@ get '/main.rss' do content_type "application/rss+xml" - url = "#{@@db}/_design/meals/_view/by_date?limit=10&descending=true" - data = RestClient.get url - @meal_view = JSON.parse(data)['rows'] - - rss = RSS::Maker.make("2.0") do |maker| - maker.channel.title = "EEE Cooks: Meals" - maker.channel.link = ROOT_URL - maker.channel.description = "Meals from a Family Cookbook" - @meal_view.each do |couch_rec| - data = RestClient.get "#{@@db}/#{couch_rec['key']}" - meal = JSON.parse(data) - date = Date.parse(meal['date']) - maker.items.new_item do |item| - item.link = ROOT_URL + date.strftime("/meals/%Y/%m/%d") - item.title = meal['title'] - item.pubDate = Time.parse(meal['date']) - item.description = meal['summary'] - end - end + rss_for_date_view("meals") do |rss_item, meal| + date = Date.parse(meal['date']) + rss_item.link = ROOT_URL + date.strftime("/meals/%Y/%m/%d") end - - rss.to_s end get '/recipes.rss' do content_type "application/rss+xml" - url = "#{@@db}/_design/recipes/_view/by_date?limit=10&descending=true" - data = RestClient.get url - @recipe_view = JSON.parse(data)['rows'] - - rss = RSS::Maker.make("2.0") do |maker| - maker.channel.title = "EEE Cooks: Recipes" - maker.channel.link = ROOT_URL - maker.channel.description = "Recipes from a Family Cookbook" - - @recipe_view.each do |couch_rec| - data = RestClient.get "#{@@db}/#{couch_rec['value'][0]}" - recipe = JSON.parse(data) - maker.items.new_item do |item| - item.link = ROOT_URL + "/recipes/recipe['id']" - item.title = recipe['title'] - item.pubDate = Time.parse(recipe['date']) - item.description = recipe['summary'] - end - end + rss_for_date_view("recipes") do |rss_item, recipe| + rss_item.link = ROOT_URL + "/recipes/#{recipe['id']}" end - - rss.to_s end get %r{/meals/(\d+)/(\d+)/(\d+)} do |year, month, day| diff --git a/helpers.rb b/helpers.rb index 6a9c3cd..a4f6d03 100644 --- a/helpers.rb +++ b/helpers.rb @@ -194,5 +194,31 @@ def breadcrumbs(date, context=nil) crumbs.join(" > ") end + + def rss_for_date_view(feed) + url = "#{_db}/_design/#{feed}/_view/by_date?limit=10&descending=true" + data = RestClient.get url + view = JSON.parse(data)['rows'] + + rss = RSS::Maker.make("2.0") do |maker| + maker.channel.title = "EEE Cooks: #{feed.capitalize}" + maker.channel.link = ROOT_URL + maker.channel.description = "#{feed.capitalize} from a Family Cookbook" + + view.each do |couch_rec| + data = RestClient.get "#{_db}/#{couch_rec['value'][0]}" + record = JSON.parse(data) + maker.items.new_item do |item| + item.title = record['title'] + item.pubDate = Time.parse(record['date']) + item.description = record['summary'] + + yield item, record + end + end + end + + rss.to_s + end end end