mm_soft_deleted 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 640b65e619333082f0a8ee8269629970993c6494
4
+ data.tar.gz: 7bfc8ac93f9a58f8f0c74a6b809ab8b1e39f0ac9
5
+ SHA512:
6
+ metadata.gz: bd598388a77484e128b7a0acd346abf921d0aec9e24bb9653ac9d790cd5d8bbd7b9bcfce2d64343135627bbb017eaf0dafb536623f47a50b0096dabd870efb7e
7
+ data.tar.gz: 8abbbc902b475bb897b22d8445092c7eb02b0b82b7dee2ba87456c3d723f8727673d8aeb9695170779a00a186405a6f337e15c7e2113d2f8fc6ac225a0d5c193
@@ -0,0 +1,72 @@
1
+ require 'mongo_mapper'
2
+
3
+ class SoftDeletedRecord
4
+ include MongoMapper::Document
5
+
6
+ key :_type, String
7
+ key :_original_type, String
8
+ key :_deleted_at, Time
9
+ end
10
+
11
+ module MongoMapper::SoftDeleted
12
+ def self.included(mod)
13
+ mod.extend(MongoMapper::SoftDeleted::ClassMethods)
14
+ mod.send(:include, MongoMapper::SoftDeleted::InstanceMethods)
15
+
16
+ mod.after_destroy do
17
+ soft_delete_destroy(self)
18
+ end
19
+ end
20
+
21
+ module InstanceMethods
22
+ def soft_delete_destroy(obj)
23
+ db = MongoMapper.database
24
+
25
+ row = obj.attributes.dup
26
+ row[:_type] = obj.class.name
27
+ row[:_deleted_at] = Time.now
28
+ row[:_original_type] = obj.attributes[:_type]
29
+
30
+ db['soft_deleted_records'].insert(row)
31
+ end
32
+
33
+ def soft_delete_restore!
34
+ db = MongoMapper.database
35
+ source_class = _type.constantize
36
+ collection_name = source_class.collection_name
37
+
38
+ attrs_for_insertion = attributes.except(:_type, :_deleted_at, :_original_type)
39
+ if !attributes[:_original_type].blank?
40
+ attrs_for_insertion[:_type] = attributes[:_original_type]
41
+ end
42
+
43
+ db[collection_name].insert(attrs_for_insertion)
44
+ db['soft_deleted_records'].remove({
45
+ _id: id
46
+ })
47
+
48
+ source_class.find(id).on_soft_delete_restore
49
+ end
50
+
51
+ def soft_deleted?
52
+ respond_to?(:_deleted_at) && _deleted_at ? true : false
53
+ end
54
+
55
+ # override this on classes
56
+ def on_soft_delete_restore
57
+ end
58
+ end
59
+
60
+ module ClassMethods
61
+ def soft_deleted
62
+ soft_deleted_classes = [self, descendants].flatten
63
+ soft_deleted_class_names = soft_deleted_classes.map(&:name)
64
+
65
+ SoftDeletedRecord.where({
66
+ _type: {
67
+ '$in': soft_deleted_class_names
68
+ }
69
+ })
70
+ end
71
+ end
72
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mm_soft_deleted
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Scott Taylor
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-21 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Soft delete records with mongo mapper
14
+ email: scott@railsnewbie.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/mongo_mapper/soft_deleted.rb
20
+ homepage: http://github.com/GoLearnUp/mm_soft_deleted
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.4.8
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Soft delete records with mongo mapper
44
+ test_files: []