Active Model Serialization
Provides a basic serialization to a #serializable_hash for your object.
A minimal implementation could be:
class Person include ActiveModel::Serialization attr_accessor :name def attributes {'name' => nil} end end
Which would provide you with:
person = Person.new person.serializable_hash # => {"name"=>nil} person.name = "Bob" person.serializable_hash # => {"name"=>"Bob"}
You need to declare an attributes hash which contains the attributes you
want to serialize. Attributes must be strings, not symbols. When called,
serializable hash will use instance methods that match the name of the
attributes hash's keys. In order to override this behavior, take a look
at the private method read_attribute_for_serialization
.
Most of the time though, you will want to include the JSON or XML
serializations. Both of these modules automatically include the
ActiveModel::Serialization
module, so there is no need to
explicitly include it.
A minimal implementation including XML and JSON would be:
class Person include ActiveModel::Serializers::JSON include ActiveModel::Serializers::Xml attr_accessor :name def attributes {'name' => nil} end end
Which would provide you with:
person = Person.new person.serializable_hash # => {"name"=>nil} person.as_json # => {"name"=>nil} person.to_json # => "{\"name\":null}" person.to_xml # => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<serial-person... person.name = "Bob" person.serializable_hash # => {"name"=>"Bob"} person.as_json # => {"name"=>"Bob"} person.to_json # => "{\"name\":\"Bob\"}" person.to_xml # => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<serial-person...
Valid options are :only
, :except
,
:methods
and :include
. The following are all
valid examples:
person.serializable_hash(only: 'name') person.serializable_hash(include: :address) person.serializable_hash(include: { address: { only: 'city' }})