# Decompose ActiveRecord script into methods

**URL:** <https://www.ruby-forum.com/t/decompose-activerecord-script-into-methods/175911>\
**Category:** Rails\
**Created:** [September 22, 2009, 6:54pm UTC](https://www.ruby-forum.com/t/decompose-activerecord-script-into-methods/175911 "2009-09-22T18:54:23Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Thufir](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee7513/32.png) [@Thufir](https://www.ruby-forum.com/u/Thufir)\
**Post date:** [September 22, 2009, 6:54pm UTC](https://www.ruby-forum.com/t/decompose-activerecord-script-into-methods/175911/1 "2009-09-22T18:54:23Z")

</div>

If I commend out the def and end lines for the “all” method, the script  
runs  
fine. However, the goal is to decompose the script into several  
methods, which  
fails with:

thufir@ARRAKIS:~/projects/aggregator$  
thufir@ARRAKIS:~/projects/aggregator$ ruby rss2mysql.rb  
rss2mysql.rb:19: class definition in method body  
thufir@ARRAKIS:~/projects/aggregator$

The script is adapted from:

Practical Ruby Gems  
[http://www.apress.com/book/view/9781590598115](http://www.apress.com/book/view/9781590598115)  
Chapter 5

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  
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](http://www.slashdot.org/index.rss)’

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

thanks,

Thufir

---

<div class="post-metadata">

**Author:** ![Thufir](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ee7513/32.png) [@Thufir](https://www.ruby-forum.com/u/Thufir)\
**Post date:** [September 22, 2009, 7:37pm UTC](https://www.ruby-forum.com/t/decompose-activerecord-script-into-methods/175911/2 "2009-09-22T19:37:42Z")

</div>

Thufir wrote:

> If I commend out the def and end lines for the “all” method, the script  
> runs  
> fine. However, the goal is to decompose the script into several  
> methods, which  
> fails with:
> 
> thufir@ARRAKIS:~/projects/aggregator$  
> thufir@ARRAKIS:~/projects/aggregator$ ruby rss2mysql.rb  
> rss2mysql.rb:19: class definition in method body

The error message is accurate. You seem to be missing an “end”.

## Best,

Marnen Laibow-Koser  
[http://www.marnen.org](http://www.marnen.org)  
removed\_email\_address@domain.invalid
