A hash with column name symbols and callable values, with the value called to deserialize the column.
Copy the serialization_map and deserialization map into the subclass.
# File lib/sequel/plugins/serialization.rb, line 103 103: def inherited(subclass) 104: super 105: sm = serialization_map.dup 106: dsm = deserialization_map.dup 107: subclass.instance_eval do 108: @deserialization_map = dsm 109: @serialization_map = sm 110: end 111: end
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 115 115: def serialize_attributes(format, *columns) 116: if format.is_a?(Symbol) 117: unless format = REGISTERED_FORMATS[format] 118: raise(Error, "Unsupported serialization format: #{format} (valid formats: #{REGISTERED_FORMATS.keys.map{|k| k.inspect}.join})") 119: end 120: end 121: serializer, deserializer = format 122: raise(Error, "No columns given. The serialization plugin requires you specify which columns to serialize") if columns.empty? 123: define_serialized_attribute_accessor(serializer, deserializer, *columns) 124: 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 128 128: def serialized_columns 129: serialization_map.keys 130: end
Add serializated attribute acessor methods to the serialization_module
# File lib/sequel/plugins/serialization.rb, line 135 135: def define_serialized_attribute_accessor(serializer, deserializer, *columns) 136: m = self 137: include(self.serialization_module ||= Module.new) unless serialization_module 138: serialization_module.class_eval do 139: columns.each do |column| 140: m.serialization_map[column] = serializer 141: m.deserialization_map[column] = deserializer 142: define_method(column) do 143: if deserialized_values.has_key?(column) 144: deserialized_values[column] 145: else 146: deserialized_values[column] = deserialize_value(column, super()) 147: end 148: end 149: define_method("#{column}=") do |v| 150: changed_columns << column unless changed_columns.include?(column) 151: deserialized_values[column] = v 152: end 153: end 154: end 155: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.