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

Version Path
tenon-1.1.8 lib/tenon/has_history/attr_serializer.rb
tenon-1.1.7 lib/tenon/has_history/attr_serializer.rb
tenon-1.1.6 lib/tenon/has_history/attr_serializer.rb
tenon-1.1.5 lib/tenon/has_history/attr_serializer.rb
tenon-1.1.4 lib/tenon/has_history/attr_serializer.rb
tenon-1.1.3 lib/tenon/has_history/attr_serializer.rb
tenon-1.1.2 lib/tenon/has_history/attr_serializer.rb
tenon-1.1.1 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.76 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.75 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.74 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.73 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.72 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.71 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.70 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.69 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.68 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.67 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.66 lib/tenon/has_history/attr_serializer.rb
tenon-1.0.65 lib/tenon/has_history/attr_serializer.rb