A hash with column name symbols and callable values, with the value called to deserialize the column.
A hash with column name symbols and callable values, with the value called to serialize the column.
Module to store the serialized column accessor methods, so they can call be overridden and call super to get the serialization behavior
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 118 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
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 131 def serialized_columns serialization_map.keys end
Add serializated attribute acessor methods to the #serialization_module
# File lib/sequel/plugins/serialization.rb, line 138 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| changed_columns << column unless changed_columns.include?(column) deserialized_values[column] = v end end end end