Module: ActiveModel::Serialization
- Included in:
- ActiveModel::Serializers::JSON, ActiveModel::Serializers::Xml
- Defined in:
- activemodel/lib/active_model/serialization.rb
Overview
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' => name}
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 some sort of attributes hash which contains the attributes you want to serialize and their current value.
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.
So 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' => name}
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
and :methods
.
Instance Method Summary collapse
Instance Method Details
#serializable_hash(options = nil) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'activemodel/lib/active_model/serialization.rb', line 71 def serializable_hash( = nil) ||= {} only = Array.wrap([:only]).map(&:to_s) except = Array.wrap([:except]).map(&:to_s) attribute_names = attributes.keys.sort if only.any? attribute_names &= only elsif except.any? attribute_names -= except end method_names = Array.wrap([:methods]).map { |n| n if respond_to?(n.to_s) }.compact Hash[(attribute_names + method_names).map { |n| [n, send(n)] }] end |