module Sequel::Plugins::Serialization::ClassMethods
Attributes
deserialization_map[R]
A hash with column name symbols and callable values, with the value called to deserialize the column.
serialization_map[R]
A hash with column name symbols and callable values, with the value called to serialize the column.
serialization_module[RW]
Module to store the serialized column accessor methods, so they can call be overridden and call super to get the serialization behavior
Public Instance Methods
serialize_attributes(format, *columns)
click to toggle source
Create instance level reader that deserializes column values on request, and instance level writer that stores new deserialized values.
# File lib/sequel/plugins/serialization.rb, line 129 def serialize_attributes(format, *columns) if format.is_a?(Symbol) unless format = REGISTERED_FORMATS[format] raise(Error, "Unsupported serialization format: #{format} (valid formats: #{REGISTERED_FORMATS.keys.map{|k| k.inspect}.join})") end end serializer, deserializer = format raise(Error, "No columns given. The serialization plugin requires you specify which columns to serialize") if columns.empty? define_serialized_attribute_accessor(serializer, deserializer, *columns) end
serialized_columns()
click to toggle source
The columns that will be serialized. This is only for backwards compatibility, use #serialization_map in new code.
# File lib/sequel/plugins/serialization.rb, line 142 def serialized_columns serialization_map.keys end
Private Instance Methods
define_serialized_attribute_accessor(serializer, deserializer, *columns)
click to toggle source
Add serializated attribute acessor methods to the #serialization_module
Calls superclass method
# File lib/sequel/plugins/serialization.rb, line 149 def define_serialized_attribute_accessor(serializer, deserializer, *columns) m = self include(self.serialization_module ||= Module.new) unless serialization_module serialization_module.class_eval do columns.each do |column| m.serialization_map[column] = serializer m.deserialization_map[column] = deserializer define_method(column) do if deserialized_values.has_key?(column) deserialized_values[column] elsif frozen? deserialize_value(column, super()) else deserialized_values[column] = deserialize_value(column, super()) end end define_method("#{column}=") do |v| if !changed_columns.include?(column) && (new? || get_column_value(column) != v) changed_columns << column end deserialized_values[column] = v end end end end