Saturday, March 08, 2008

rAtom 0.2.1 Gem released

rAtom is a Ruby Gem for working with the Atom Syndication Format and the Atom Publishing Protocol (APP).

rAtom was originally built to support the communication between a number of applications built by Peerworks[http://peerworks.org], via the Atom Publishing protocol. However, it supports, or aims to support, all the Atom Syndication Format and Publication Protocol and can be used to access Atom feeds or to script publishing entries to a blog supporting APP.

Features:
  • Uses libxml-ruby so it is _much_ faster than a REXML based library.
  • Uses the libxml pull parser so it has much lighter memory usage.
  • Supports RFC 5005 (http://www.ietf.org/rfc/rfc5005.txt) for feed pagination.

You can install via gem using:
# sudo gem install ratom

Usage

To fetch and parse an Atom Feed you can simply:
feed = Atom::Feed.load_feed(URI.parse("http://example.com/feed.atom"))

And then iterate over the entries in the feed using:

feed.each_entry do |entry|
# do cool stuff
end

To construct a Feed

feed = Atom::Feed.new do |feed|
feed.title = "My Cool Feed"
feed.id = "http://example.com/my_feed.atom"
feed.updated = Time.now
end

To output a Feed as XML use to_xml

> puts feed.to_xml
<feed xmlns="http://www.w3.org/2005/Atom">
<title>My Cool Feed</title>
<id>http://example.com/my_feed.atom</id>
<updated>2008-03-03T23:19:44+10:30</updated>
</feed>

Publishing

To publish to a remote feed using the Atom Publishing Protocol, first you need to create a collection to publish to:
collection = Atom::Pub::Collection.new(:href => 'http://example.org/myblog')

Then create a new entry:
entry = Atom::Entry.new do |entry|
entry.title = "I have discovered rAtom"
entry.authors << name =""> 'A happy developer')
entry.updated = Time.now
entry.id = "http://example.org/myblog/newpost"
entry.content = Atom::Content::Html.new("<p>rAtom lets me post to my blog using Ruby, how cool!</p>")
end

And publish it to the Collection:
published_entry = collection.publish(entry)

More Information

See http://ratom.rubyforge.org for more information.

7 comments:

Unknown said...

Any chance you'd consider removing ActiveSupport as a dependency for this gem? (or accept a patch that does this). I'd like to use this with a merb app, but I'd prefer not to bloat the app by pulling in all of ActiveSupport.

Sean Geoghegan said...

I haven't got a problem removing ActiveSupport. I'm only using cattr_accessor so ActiveSupport is definitely overkill.

I can probably do this in the next couple of days, or you want to submit a patch I can get it done sooner.

Thanks.

Sean Geoghegan said...

Release 0.2.2 removes Active Support. Should be available in the gem index soon. Let me know if you have any problems.

Anonymous said...

Thanks for this. I'm looking to rock out with AtomPub and this looks to be a good solution. For anyone interested, there's also atom-tools. I look forward to trying both of these out.

Anonymous said...

I config'd the gem (in my Rails 2.1.0-based project) with this in environment.rb:

config.gem 'ratom', :version => '~>0.5.1'

and I see "no such file to load -- ratom" when I start my server. Do I need a :library option on that config.gem line? If so, what's the :library name?

Sean Geoghegan said...

@bill: :lib => 'atom' should fix it. Thanks

Flerkin McBlerkin said...

Man that looks so much simpler than the hoops you have to jump through with PHP!
Sunroom