I'm trying to break this script into methods, but run into an error:
thufir@ARRAKIS:~/projects/aggregator$ ruby rss2mysql.rb rss2mysql.rb:19: class definition in method body thufir@ARRAKIS:~/projects/aggregator$
The script is from:
Practical Ruby Gems http://www.apress.com/book/view/9781590598115 Chapter 5
rss2mysql.rb follows:
require 'rubygems' require 'active_record' require 'feed_tools' require 'yaml'
def all
db = YAML.load_file("database.yml") ActiveRecord::Base.establish_connection( :adapter => db["adapter"], :host => db["host"], :username => db["username"], :password => db["password"], :database => db["database"])
class Items < ActiveRecord::Base #runtime error end
# If the table doesn't exist, we'll create it. unless Items.table_exists? ActiveRecord::Schema.define do create_table :items do |t| t.column :title, :string t.column :content, :string t.column :source, :string t.column :url, :string t.column :timestamp, :timestamp t.column :keyword_id, :integer t.column :guid, :string t.column :html, :string end end end
feed_url = 'Slashdot’
feed=FeedTools::Feed.open(feed_url) feed.items.each do |feed_item| unless (Items.find_by_title(feed_item.title) \ or Items.find_by_url(feed_item.link) \ or Items.find_by_guid(feed_item.guid)) puts "processing item '#{feed_item.title}' - new"
Items.new do |newitem| newitem.title=feed_item.title.gsub(/<[^>]*>/, '') newitem.guid=feed_item.guid if feed_item.publisher.name newitem.source=feed_item.publisher.name end newitem.url=feed_item.link newitem.content=feed_item.description newitem.timestamp=feed_item.published newitem.save end else puts "processing item '#{feed_item.title}' - old" end end
end #end all
now, if I comment out the def and end for the method "all", then the script runs beautifully. However, I'd like to at least break the script down into methods, but run into a problem because that class has to be defined at that time so far as I know.
thanks,
Thufir