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