Install

$ gem install happymapper

Examples

Given the following xml:

<statuses type="array">
  <status>
    <created_at>Sat Aug 09 05:38:12 +0000 2008</created_at>
    <id>882281424</id>
    <text>I so just thought the guy lighting the Olympic torch was falling when he began to run on the wall. Wow that would have been catastrophic.</text>
    <source>web</source>
    <truncated>false</truncated>
    <in_reply_to_status_id>1234</in_reply_to_status_id>
    <in_reply_to_user_id>12345</in_reply_to_user_id>
    <favorited></favorited>
    <user>
      <id>4243</id>
      <name>John Nunemaker</name>
      <screen_name>jnunemaker</screen_name>
      <location>Mishawaka, IN, US</location>
      <description>Loves his wife, ruby, notre dame football and iu basketball</description>
      <profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/53781608/Photo_75_normal.jpg</profile_image_url>
      <url>http://addictedtonew.com</url>
      <protected>false</protected>
      <followers_count>486</followers_count>
    </user>
  </status>
</statuses>

You could have the following objects:

class User
  include HappyMapper

  element :id, Integer
  element :name, String
  element :screen_name, String
  element :location, String
  element :description, String
  element :profile_image_url, String
  element :url, String
  element :protected, Boolean
  element :followers_count, Integer
end

class Status
  include HappyMapper

  element :id, Integer
  element :text, String
  element :created_at, Time
  element :source, String
  element :truncated, Boolean
  element :in_reply_to_status_id, Integer
  element :in_reply_to_user_id, Integer
  element :favorited, Boolean
  has_one :user, User
end

statuses = Status.parse(file_contents)
statuses.each do |status|
  puts status.user.name, status.user.screen_name, status.text, status.source, ''
end

Support

Conversations welcome in the google group and bugs/features over at Github.