Module: Sequel::Plugins::Serialization::ClassMethods
- Defined in:
- lib/sequel/plugins/serialization.rb
Instance Attribute Summary collapse
-
#serialization_map ⇒ Object
readonly
A map of the serialized columns for this model.
Instance Method Summary collapse
-
#inherited(subclass) ⇒ Object
Copy the serialization format and columns to serialize into the subclass.
-
#serialization_format ⇒ Object
The first value in the serialization map.
-
#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.
-
#serialized_columns ⇒ Object
The columns that will be serialized.
Instance Attribute Details
#serialization_map ⇒ Object (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_format ⇒ Object
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
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_columns ⇒ Object
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 |