Module: ActiveRecord::AttributeMethods::Serialization::Behavior
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/active_record/attribute_methods/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
- #_field_changed?(attr, old, value) ⇒ Boolean
- #attributes_before_type_cast ⇒ Object
- #attributes_for_coder ⇒ Object
- #keys_for_partial_write ⇒ Object
- #raw_type_cast_attribute_for_write(column, value) ⇒ Object
- #read_attribute_before_type_cast(attr_name) ⇒ Object
- #should_record_timestamps? ⇒ Boolean
- #type_cast_attribute_for_write(column, value) ⇒ Object
- #typecasted_attribute_value(name) ⇒ Object
Instance Method Details
#_field_changed?(attr, old, value) ⇒ Boolean
153 154 155 156 157 158 159 |
# File 'lib/active_record/attribute_methods/serialization.rb', line 153 def _field_changed?(attr, old, value) if self.class.serialized_attributes.include?(attr) old != value else super end end |
#attributes_before_type_cast ⇒ Object
169 170 171 172 173 174 175 176 177 |
# File 'lib/active_record/attribute_methods/serialization.rb', line 169 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 |
#attributes_for_coder ⇒ Object
187 188 189 190 191 192 193 194 195 |
# File 'lib/active_record/attribute_methods/serialization.rb', line 187 def attributes_for_coder attribute_names.each_with_object({}) do |name, attrs| attrs[name] = if self.class.serialized_attributes.include?(name) @attributes[name].serialized_value else read_attribute(name) end end end |
#keys_for_partial_write ⇒ Object
133 134 135 |
# File 'lib/active_record/attribute_methods/serialization.rb', line 133 def keys_for_partial_write super | (attributes.keys & self.class.serialized_attributes.keys) end |
#raw_type_cast_attribute_for_write(column, value) ⇒ Object
145 146 147 148 149 150 151 |
# File 'lib/active_record/attribute_methods/serialization.rb', line 145 def raw_type_cast_attribute_for_write(column, value) if column && coder = self.class.serialized_attributes[column.name] Attribute.new(coder, value, :serialized) else super end end |
#read_attribute_before_type_cast(attr_name) ⇒ Object
161 162 163 164 165 166 167 |
# File 'lib/active_record/attribute_methods/serialization.rb', line 161 def read_attribute_before_type_cast(attr_name) if self.class.serialized_attributes.include?(attr_name) super.unserialized_value else super end end |
#should_record_timestamps? ⇒ Boolean
129 130 131 |
# File 'lib/active_record/attribute_methods/serialization.rb', line 129 def super || (self. && (attributes.keys & self.class.serialized_attributes.keys).present?) end |
#type_cast_attribute_for_write(column, value) ⇒ Object
137 138 139 140 141 142 143 |
# File 'lib/active_record/attribute_methods/serialization.rb', line 137 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
179 180 181 182 183 184 185 |
# File 'lib/active_record/attribute_methods/serialization.rb', line 179 def typecasted_attribute_value(name) if self.class.serialized_attributes.include?(name) @attributes[name].serialized_value else super end end |