diff --git a/app/models/feed.rb b/app/models/feed.rb index 8aa7f73..5178a99 100644 --- a/app/models/feed.rb +++ b/app/models/feed.rb @@ -1,43 +1,58 @@ -class Feed < ActiveRecord::Base - has_many :feed_statuses - has_many :feed_items - - validates_uniqueness_of :url - - def feed; self.body_from(self.url); end - - def parse_feed - rss = Hash.from_xml(self.feed) - feed_items = self.source == "LastFM" ? rss["recenttracks"]["track"] : rss["rss"]["channel"]["item"] - feed_items.each do |feed_item| - item = initialize_feed_item(feed_item) - item.save if item.valid? - item.save_with_validation(false) if item.is_a?(LastFM) +module Feeds + module Parsing + def self.included(base) + base.send :include, Feeds::Parsing::InstanceMethods + base.extend Feeds::Parsing::ClassMethods end - end - class << self - def sources; %w(Twitter LastFM Tumblr Flickr); end - def parse_all - Feed.find(:all).map(&:parse_feed) + module InstanceMethods + def feed + self.body_from(self.url) + end + + def parse_feed + rss = Hash.from_xml(self.feed) + feed_items = self.source == "LastFM" ? rss["recenttracks"]["track"] : rss["rss"]["channel"]["item"] + feed_items.each do |feed_item| + item = initialize_feed_item(feed_item) + item.save if item.valid? + item.save_without_validation if item.is_a?(LastFM) + end + end + + protected + + def body_from(u) + url = URI.parse(u) + req = Net::HTTP::Get.new("#{url.path}?#{url.query}") + res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) } + FeedStatus.create(:response_code => res.code.to_i, :feed => self) + res.body + end + + private + + def initialize_feed_item(feed_item) + item = Object.const_get(self.source).new(feed_item) + item.feed, item.data = self, feed_item + item + end + end + module ClassMethods + def parse_all + Feed.all.map(&:parse_feed) + end end end +end + +class Feed < ActiveRecord::Base + include Feeds::Parsing - protected + SOURCES = %w(Twitter LastFM Tumblr Flickr) - def body_from(u) - url = URI.parse(u) - req = Net::HTTP::Get.new("#{url.path}?#{url.query}") - res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) } - FeedStatus.create(:response_code => res.code.to_i, :feed => self) - res.body - end - - private + has_many :feed_statuses + has_many :feed_items - def initialize_feed_item(feed_item) - item = Object.const_get(self.source).new(feed_item) - item.feed, item.data = self, feed_item - item - end + validates_uniqueness_of :url end \ No newline at end of file diff --git a/app/models/feed_item.rb b/app/models/feed_item.rb index 6b8fc0c..e9b11bc 100644 --- a/app/models/feed_item.rb +++ b/app/models/feed_item.rb @@ -14,6 +14,6 @@ def date=(time) end def self.types - Feed.sources + Feed::SOURCES end end \ No newline at end of file diff --git a/app/models/flickr.rb b/app/models/feed_items/flickr.rb similarity index 100% rename from app/models/flickr.rb rename to app/models/feed_items/flickr.rb diff --git a/app/models/last_fm.rb b/app/models/feed_items/last_fm.rb similarity index 100% rename from app/models/last_fm.rb rename to app/models/feed_items/last_fm.rb diff --git a/app/models/tumblr.rb b/app/models/feed_items/tumblr.rb similarity index 100% rename from app/models/tumblr.rb rename to app/models/feed_items/tumblr.rb diff --git a/app/models/twitter.rb b/app/models/feed_items/twitter.rb similarity index 100% rename from app/models/twitter.rb rename to app/models/feed_items/twitter.rb diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 237a137..35ed25c 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -71,11 +71,13 @@
Ruby on Rails plugin for easy querying of ActiveRecord models by a string
<%= link_to "acts_as_archivable", "http://github.com/joshuaclayton/acts_as_archivable/" %>
Ruby on Rails plugin for easy querying of ActiveRecord models by a date
+
<%= link_to "acts_as_auditable", "http://github.com/joshuaclayton/acts_as_auditable/" %>
+
Ruby on Rails plugin for easy auditing (not versioning) of ActiveRecord models
<%= link_to "Alpha Heroes", "http://www.alphaheroes.org/" %>
Website dedicated to five Marines Alpha Co. 1/24 lost during their tour to Fallujah, Iraq
<% end %> -<% content :seven_twentyfourths, prepend_one_twentyfourth(), append_one_twentyfourth(), :last do %> +<% content :seven_twentyfourths, prepend_one_twentyfourth, append_one_twentyfourth, :last do %>

Social Networking