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, line 135 def freeze @deserialization_map.freeze @serialization_map.freeze @serialization_module.freeze if @serialization_module super end
serialization_module()
click to toggle source
# File lib/sequel/plugins/serialization.rb, line 123 def serialization_module Sequel::Deprecation.deprecate('Sequel::Model.serialization_module', 'There is no replacement') @serialization_module end
serialization_module=(v)
click to toggle source
# File lib/sequel/plugins/serialization.rb, line 127 def serialization_module=(v) Sequel::Deprecation.deprecate('Sequel::Model.serialization_module=', 'There is no replacement') @serialization_module = v 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, line 145 def serialize_attributes(format, *columns) if format.is_a?(Symbol) unless format = REGISTERED_FORMATS[format] raise(Error, "Unsupported serialization format: #{format} (valid formats: #{REGISTERED_FORMATS.keys.map(&:inspect).join})") end end serializer, deserializer = format raise(Error, "No columns given. The serialization plugin requires you specify which columns to serialize") if columns.empty? define_serialized_attribute_accessor(serializer, deserializer, *columns) end
serialized_columns()
click to toggle source
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 158 def serialized_columns serialization_map.keys 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, line 165 def define_serialized_attribute_accessor(serializer, deserializer, *columns) m = self include(@serialization_module ||= Module.new) unless @serialization_module @serialization_module.class_eval do columns.each do |column| m.serialization_map[column] = serializer m.deserialization_map[column] = deserializer define_method(column) do if deserialized_values.has_key?(column) deserialized_values[column] elsif frozen? deserialize_value(column, super()) else deserialized_values[column] = deserialize_value(column, super()) end end define_method("#{column}=") do |v| if !changed_columns.include?(column) && (new? || get_column_value(column) != v) changed_columns << column will_change_column(column) if respond_to?(:will_change_column) end deserialized_values[column] = v end end end end