Module: Ardm::ActiveRecord::Serialization::Behavior

Extended by:
ActiveSupport::Concern
Defined in:
lib/ardm/active_record/serialization.rb

Overview

This is only added to the model when serialize is called, which ensures we do not make things slower when serialization is not used.

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#_field_changed?(attr, old, value) ⇒ Boolean

Returns:

  • (Boolean)


128
129
130
131
132
133
134
# File 'lib/ardm/active_record/serialization.rb', line 128

def _field_changed?(attr, old, value)
  if self.class.serialized_attributes.include?(attr)
    old != value
  else
    super
  end
end

#attributes_before_type_castObject



144
145
146
147
148
149
150
151
152
# File 'lib/ardm/active_record/serialization.rb', line 144

def attributes_before_type_cast
  super.dup.tap do |attributes|
    self.class.serialized_attributes.each_key do |key|
      if attributes.key?(key)
        attributes[key] = attributes[key].unserialized_value
      end
    end
  end
end

#read_attribute_before_type_cast(attr_name) ⇒ Object



136
137
138
139
140
141
142
# File 'lib/ardm/active_record/serialization.rb', line 136

def read_attribute_before_type_cast(attr_name)
  if self.class.serialized_attributes.include?(attr_name)
    super.unserialized_value
  else
    super
  end
end

#type_cast_attribute_for_write(column, value) ⇒ Object



120
121
122
123
124
125
126
# File 'lib/ardm/active_record/serialization.rb', line 120

def type_cast_attribute_for_write(column, value)
  if column && coder = self.class.serialized_attributes[column.name]
    Attribute.new(coder, value, :unserialized)
  else
    super
  end
end

#typecasted_attribute_value(name) ⇒ Object



154
155
156
157
158
159
160
# File 'lib/ardm/active_record/serialization.rb', line 154

def typecasted_attribute_value(name)
  if self.class.serialized_attributes.include?(name)
    @attributes[name].serialized_value
  else
    super
  end
end