Cannot break down script into methods

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

Why don’t you put the class definition before “def all”?

–Valentin

Thufir wrote:

I’m trying to break this script into methods, but run into an error:
[…]

Please refrain from posting the same thing several times. I answered
this the first time you asked.

Best,

Marnen Laibow-Koser
http://www.marnen.org
[email protected]