Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
DataMapper plugin for serializing Resources and Collections
Ruby

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
autotest
benchmarks
lib
spec
tasks
.gitignore
Gemfile
LICENSE
README.rdoc
Rakefile
VERSION
dm-serializer.gemspec

README.rdoc

dm-serializer

Overview

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"
  end
end

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

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

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

Beware

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.