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