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 117 def freeze 118 @deserialization_map.freeze 119 @serialization_map.freeze 120 @serialization_module.freeze if @serialization_module 121 122 super 123 end
Freeze serialization metadata when freezing model class.
Calls superclass method
Source
# 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
Create instance level reader that deserializes column values on request, and instance level writer that stores new deserialized values.
Private Instance Methods
Source
# 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
Add serializated attribute acessor methods to the serialization_module
Calls superclass method