Sha256: fff258b32f0d3bd364afd761c945e85e5ae3b1093d9c8f8c36aa1c8ea5b92268
Contents?: true
Size: 1.41 KB
Versions: 83
Compression:
Stored size: 1.41 KB
Contents
module Tenon module HasHistory class AttrSerializer def self.serialize(attrs, item_version) new(attrs, item_version).serialize end def initialize(attrs, item_version) @attrs = attrs @item_version = item_version @item_class = item_version.item_type.constantize @item = @item_version.item end def serialize Marshal.dump(filtered_attrs) end private def filtered_attrs @attrs.deep_reject_key!(:id) @attrs.deep_reject_key!('id') require_only_attrs! unless only.empty? remove_except_attrs! unless except.empty? remove_children! @attrs end def require_only_attrs! @attrs = @attrs.select { |k, v| only.include?(k) } end def remove_except_attrs! @attrs = @attrs.reject { |k, v| except.include?(k.to_sym) } end def remove_children! @attrs = @attrs.reject do |k, v| key = k.to_s relation = key.gsub(/_attributes$/, '') key.match(/_attributes$/) && !includes.include?(relation) end end def only @item_class.instance_variable_get('@has_history_only') end def except @item_class.instance_variable_get('@has_history_except') end def includes @item_class.instance_variable_get('@has_history_includes').map(&:to_s) end end end end
Version data entries
83 entries across 83 versions & 1 rubygems