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.

Public Instance Methods

freeze() click to toggle source

Freeze serialization metadata when freezing model class.

Calls superclass method
    # File lib/sequel/plugins/serialization.rb
117 def freeze
118   @deserialization_map.freeze
119   @serialization_map.freeze
120   @serialization_module.freeze if @serialization_module
121 
122   super
123 end
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
127 def serialize_attributes(format, *columns)
128   if format.is_a?(Symbol)
129     unless format = Sequel.synchronize{REGISTERED_FORMATS[format]}
130       raise(Error, "Unsupported serialization format: #{format} (valid formats: #{Sequel.synchronize{REGISTERED_FORMATS.keys}.inspect})")
131     end
132   end
133   serializer, deserializer = format
134   raise(Error, "No columns given.  The serialization plugin requires you specify which columns to serialize") if columns.empty?
135   define_serialized_attribute_accessor(serializer, deserializer, *columns)
136 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
141 def define_serialized_attribute_accessor(serializer, deserializer, *columns)
142   m = self
143   include(@serialization_module ||= Module.new) unless @serialization_module
144   @serialization_module.class_eval do
145     columns.each do |column|
146       m.serialization_map[column] = serializer
147       m.deserialization_map[column] = deserializer
148       define_method(column) do 
149         if deserialized_values.has_key?(column)
150           deserialized_values[column]
151         elsif frozen?
152           deserialize_value(column, super())
153         else
154           deserialized_values[column] = deserialize_value(column, super())
155         end
156       end
157       alias_method(column, column)
158 
159       setter = :"#{column}="
160       define_method(setter) do |v| 
161         cc = changed_columns
162         if !cc.include?(column) && (new? || get_column_value(column) != v)
163           cc << column
164 
165           will_change_column(column) if respond_to?(:will_change_column)
166         end
167 
168         deserialized_values[column] = v
169       end
170       alias_method(setter, setter)
171     end
172   end
173 end