Transcode from common web based formats into plain old Ruby
Ruby
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
spec
.document
.gitignore
CHANGES
LICENSE
README.md
Rakefile
VERSION
transcoder.gemspec

README.md

transcoder

Transcode between common web formats and Ruby.

Scenario (Web->Ruby)

Say you'd pulled an API based resource using rest-client

  • All that you wanted was a ruby object.
  • You don't want to know anything about the format that the API serves.
  • You're pretty sure its something pretty common.

Example (Web->Ruby)

$ irb -rubygems

>> require 'restclient'
>> require 'transcoder'

>> rc = RestClient.get('http://vimeo.com/api/v2/benschwarz/likes.json')

>> Transcoder.for(rc.headers[:content_type]).parse(rc.to_s)

What you'll get back is a Ruby object. Lovley.

Scenario (Ruby→Web)

You have a Ruby array or a hash and you want to pack it up and post it off somewhere else

  • You have a target (content|mime)-type in mind

    or

  • You have a named format eg: "json"

Example (Ruby→Web)

$ irb -rubygems

>> require 'transcoder'

>> Transcoder.for(:xml).generate({:title => "Hamlyn's Guide to Sauces and Saucemaking"})
=> "<?xml version=\"1.0\"?>\n<items>\n  <item>\n    <title>Hamlyn's Guide to Sauces and Saucemaking</title>\n  </item>\n</items>\n"

>> Transcoder.for(:yaml).generate({:title => "Hamlyn's Guide to Sauces and Saucemaking"})
=> "--- \n:title: Hamlyn's Guide to Sauces and Saucemaking\n"

Supported formats

  • Json
  • XML
  • RSS / Atom
  • Yaml

Install

gem install transcoder

Notes about RSS / Atom parsing and generation

  • Transcoder will return a SimpleRSS object rather than a straight up Ruby hash, this shouldn't be (much) of a reason for concern.

    This simply means that you'll want to call the properties of the returned object with method calls rather than hash access.

  • There is no 'generate' method for feeds. This is simply because they require much more information than a raw feed.

Future thoughts

  • Add something to cast attributes to a native ruby object, eg - if its key is created_at, try to date parse it.
  • Generator methods to unpack and generate object trees (XML generator)

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2010 Ben Schwarz. See LICENSE for details.