Sha256: ee94691bbefa14ce1f8b85f57b55aec787ed70dec3f1a424dfaec391032c262a
Contents?: true
Size: 1.91 KB
Versions: 1
Compression:
Stored size: 1.91 KB
Contents
module AxleAttributes module Serializations class Serialization attr_accessor :owner, :reflection def initialize(owner, reflection) @owner = owner @reflection = reflection @collection = nil @loaded = false end def name reflection.name end def writer(value) raise "writer must be implemented" end def reader target end def reader_was if owner.changed_attributes.include?(name.to_s) instantiate_target_with_self owner.changed_attributes[name.to_s] else target end end def loaded? @loaded end protected def target=(value) @target = value target_with_serialization_instance(@target) loaded! owner[reflection.storage_column] = mutate_json_times!(value.as_json) end def mutate_json_times!(json) Array.wrap(json).each do |attrs| attrs.each do |k, v| if v.acts_like?(:time) || v.acts_like?(:date) attrs[k] = v.as_json end end end json end def target unless loaded? @target = load_target loaded! end @target end def loaded! @loaded = true end def load_target instantiate_target_with_self owner[reflection.storage_column] end def instantiate_target_with_self(json) target_with_serialization_instance instantiate_target(json) end def target_with_serialization_instance(target) Array.wrap(target).each { |record| record.serialization_instance = self } target end def instantiate_target(json) raise "instantiate_target must be implemented" end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
axle_attributes-1.13.2 | lib/axle_attributes/serializations/serialization.rb |