module Sequel::Plugins::Serialization::ClassMethods
Attributes
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.
Public Instance Methods
Source
# File lib/sequel/plugins/serialization.rb 129 def freeze 130 @deserialization_map.freeze 131 @serialization_map.freeze 132 @serialization_module.freeze if @serialization_module 133 134 super 135 end
Freeze serialization metadata when freezing model class.
Source
# File lib/sequel/plugins/serialization.rb 144 def serialize_attributes(format, *columns) 145 if format.is_a?(Symbol) 146 unless format = Sequel.synchronize{REGISTERED_FORMATS[format]} 147 raise(Error, "Unsupported serialization format: #{format} (valid formats: #{Sequel.synchronize{REGISTERED_FORMATS.keys}.inspect})") 148 end 149 end 150 serializer, deserializer = format 151 raise(Error, "No columns given. The serialization plugin requires you specify which columns to serialize") if columns.empty? 152 define_serialized_attribute_accessor(serializer, deserializer, *columns) 153 end
Create instance level reader that deserializes column values on request, and instance level writer that stores new deserialized values. If format is a symbol, it should correspond to a previously-registered format using register_format. Otherwise, format is expected to be a 2-element array of callables, with the first element being the serializer, used to convert the value used by the application to the value that will be stored in the database, and the second element being the deserializer, used to convert the value stored the database to the value used by the application.
Private Instance Methods
Source
# File lib/sequel/plugins/serialization.rb 158 def define_serialized_attribute_accessor(serializer, deserializer, *columns) 159 m = self 160 include(@serialization_module ||= Sequel.set_temp_name(Module.new){"#{name}::@serialization_module"}) unless @serialization_module 161 @serialization_module.class_eval do 162 columns.each do |column| 163 m.serialization_map[column] = serializer 164 m.deserialization_map[column] = deserializer 165 define_method(column) do 166 if deserialized_values.has_key?(column) 167 deserialized_values[column] 168 elsif frozen? 169 deserialize_value(column, super()) 170 else 171 deserialized_values[column] = deserialize_value(column, super()) 172 end 173 end 174 alias_method(column, column) 175 176 setter = :"#{column}=" 177 define_method(setter) do |v| 178 cc = changed_columns 179 if !cc.include?(column) && (new? || get_column_value(column) != v) 180 cc << column 181 182 will_change_column(column) if respond_to?(:will_change_column) 183 end 184 185 deserialized_values[column] = v 186 end 187 alias_method(setter, setter) 188 end 189 end 190 end
Add serializated attribute acessor methods to the serialization_module