Skip to content
DataMapper plugin for serializing Resources and Collections
Find file
Pull request Compare This branch is 138 commits behind datamapper:master.
Latest commit 61ef397 @dkubb dkubb [dm-more] Removed unnecessary :branch => 'master' from Gemfiles
* The master branch is the default branch anyway, so specifying this
  explicitly was redundant.
Failed to load latest commit information.
autotest Updated to work with latest DataMapper::Collection
benchmarks [dm-more] Bumped version to 0.10.3
spec [dm-more] Changes names of deprecated validations
tasks Adds active_support/extlib compatibility and a Gemfile
Gemfile [dm-more] Removed unnecessary :branch => 'master' from Gemfiles
LICENSE [dm-more] Converted to use Jeweler
README.rdoc [all] Changed README to .rdoc format
Rakefile [all] Bumped rspec development dependency to '~> 1.3'
VERSION [dm-more] Bumped version to 0.10.3
dm-serializer.gemspec Updated gemspecs to include the Gemfile




dm-serializer allows DataMapper models and collections to be serialized to a variety of formats (currently JSON, XML, YAML and CSV).

How it works

One method is added to each model/collection for each serialization type - to_json, to_xml, to_yaml, and to_csv. With the exception of to_csv, all of these methods share the same interface. to_json will be used for examples. Any method specific behaviour is documented in its own section below.

require 'dm-serializer'

class Cow
  include DataMapper::Resource

  property :id,   Integer, :key => true
  property :name, String

  def description
    "A Cow"

cow = Cow.create(
  :id    => 1,
  :name  => "Berta"

cow.to_json                      # => { "id": 1, "name": "Berta" }
cow.to_json(:only    => [:name]) # => { "name": "Berta" }
cow.to_json(:exclude => [:id])   # => { "name": "Berta" }
cow.to_json(:methods => [:desc]) # => { "id": 1, "name": "Berta", "desc": "A Cow" }

You can include associations by passing the association accessor the :methods option.

If you want to only load a particular serialization method, that's cool, you can do that:

require 'dm-serializer/to_json'


to_xml supports some extra options to allow you to override the element names

cow.to_xml(:element_name => 'bovine') # => <bovine><id>1</id><name>Berta</name></bovine>
cows.to_xml(:collection_element_name => 'kine')   # => <kine><bovine><id>1</id><name>Berta</name></bovine></kine>

If you would like a nice speed boost (~5x), require libxml or nokogiri before dm-serializer, and that library will be used rather than REXML.


to_csv currently doesn't support any options yet. It will in the future. It will not support serializing child associations.

Arrays, Hashes, and other core classes

dm-serializer only adds serialization methods to DataMapper objects and collections, however some libraries used (json, yaml) add methods to core classes, such as Array. Note that passing dm-serializer options (such as :only) to these methods is *not supported*.

Cow.all.to_a.to_yaml(:only => 'name') # WILL NOT WORK


If you go spelunking through the code you will find other undocumented options. Use at your own risk, I plan on removing or changing these in the near future.

Something went wrong with that request. Please try again.