Module: Sequel::Plugins::Serialization::ClassMethods

Defined in:
lib/sequel/plugins/serialization.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#serialization_mapObject (readonly)

A map of the serialized columns for this model. Keys are column symbols, values are serialization formats (:marshal or :yaml).



35
36
37
# File 'lib/sequel/plugins/serialization.rb', line 35

def serialization_map
  @serialization_map
end

Instance Method Details

#inherited(subclass) ⇒ Object

Copy the serialization format and columns to serialize into the subclass.



38
39
40
41
42
# File 'lib/sequel/plugins/serialization.rb', line 38

def inherited(subclass)
  super
  sm = serialization_map.dup
  subclass.instance_eval{@serialization_map = sm}
end

#serialization_formatObject

The first value in the serialization map. This is only for backwards compatibility, use serialization_map in new code.



46
47
48
# File 'lib/sequel/plugins/serialization.rb', line 46

def serialization_format
  serialization_map.values.first
end

#serialize_attributes(format, *columns) ⇒ Object

Create instance level reader that deserializes column values on request, and instance level writer that stores new deserialized value in deserialized columns

Raises:



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/sequel/plugins/serialization.rb', line 53

def serialize_attributes(format, *columns)
  raise(Error, "Unsupported serialization format (#{format}), should be :marshal or :yaml") unless [:marshal, :yaml].include?(format)
  raise(Error, "No columns given.  The serialization plugin requires you specify which columns to serialize") if columns.empty?
  columns.each do |column|
    serialization_map[column] = format
    define_method(column) do 
      if deserialized_values.has_key?(column)
        deserialized_values[column]
      else
        deserialized_values[column] = deserialize_value(column, @values[column])
      end
    end
    define_method("#{column}=") do |v| 
      changed_columns << column unless changed_columns.include?(column)
      deserialized_values[column] = v
    end
  end
end

#serialized_columnsObject

The columns that will be serialized. This is only for backwards compatibility, use serialization_map in new code.



74
75
76
# File 'lib/sequel/plugins/serialization.rb', line 74

def serialized_columns
  serialization_map.keys
end