SerialBox
¶ ↑
Provides a simple, well-defined way to specify how your objects are serialized and deserialized into primitive types (say, for JSON serialization). Here’s an example object:
““ ruby class Car attr_accessor :seats, :color
include SerialBox
serialize_with :JSON serialize_fields do |s| s.serialize :seats s.serialize :color end end ““
By calling serialize_with :JSON
, your class now gets #to_json
, #as_json
, and .json_create
methods making it work seamlessly with the json
gem. If you have more complicated data structures or accessors, this gem works with that too:
““ ruby class Color attr_accessor :r, :g, :b
include SerialBox
serialize_with :JSON serialize_fields do |s| s.serialize :r, :g, :b end end
class Car attr_accessor :color # string
include SerialBox
serialize_with :JSON serialize_fields do |s| s.serializer ‘color’, :get_color s.deserializer ‘color’, :set_color end
def get_color if color.r == 255 && color.g == 0 && color.b == 0 ‘red’ elsif color.r == 0 && color.g == 255 && color.b == 0 ‘green’ elsif color.r == 0 && color.g == 0 && color.b == 255 ‘blue’ end end
def set_color(name) case name when ‘red’ then Color.new(255, 0, 0) when ‘green’ then Color.new(0, 255, 0) when ‘blue’ then Color.new(0, 0, 255) end end end ““
The .serialize_fields
method lets you define serializers and deserializers using simple to complex syntax, depending on your needs. Here are the supported syntaxes:
““ ruby serialize_fields do |s| s.serialize :foo # uses foo and foo=, JSON field named “foo” s.serialize :foo, :into => ‘bar’ # uses foo and foo=, JSON field named “bar” s.serialize :@foo # reads and writes directly using @foo
s.serializer ‘foo’, :bar # the JSON field “foo” will have the value returned by bar s.deserializer ‘foo’, :bar= # the value in JSON field “foo” will be sent to bar=
s.serializer(‘foo’) { bar.to_s } # the JSON field “foo” will have the value returned by the block s.deserializer(‘foo’) { |value| self.bar = value.to_sym } # the block will be passed the value stored in JSON field “foo”; you must write it to your object end ““
Important Note: Right now the only serializer implemented is :JSON
. Other serializers should be easy to write by following its example.
Installation¶ ↑
To use, add this gem to your Gemfile:
ruby gem 'serialbox'
then include the SerialBox
module in your class, following one of the examples above.
Documentation¶ ↑
Comprehensive documentation is available by running rake doc
.