persistent_record 0.1.4 → 0.2.2
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 +6 -14
- data/README.md +7 -2
- data/lib/persistent_record/version.rb +1 -1
- data/lib/persistent_record.rb +30 -40
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
M2NhOWVkMGNmNzJjMTJjMDVlMTFlMGIwMzUyNGEzMWUwZDZjMzlmNjg2OGQx
|
10
|
-
NzA3ZjY2ZjI1MGZkMmMxYTlhYTc1NDA3ZDA2YzU5NDg0NTEzMzdiYzBiZTY0
|
11
|
-
YmM1ODc4ZDhmNDIxODYzNWE0MjJjYWRiMDk4MjRmMDkwMDQzN2Q=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YjUyYzVkMmNjNDc5M2RlNmZjMDkxZGIwY2I4Y2YyZjAyMzZlYmQ3Mjg1OThm
|
14
|
-
NmFhOGQ3Yjc2NTQwZjgyMjY1MDM2OWEwNTI5MDkwZWQ3ZjhiZjE4ZDk4NTZm
|
15
|
-
MWI5NWQ4ZjVhMzI2MTUwNTY3ODBhMzVjYWNhNDRkNmYwYThkZTE=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 03c628082ab95e937cbd6c019a4aea9d955fd691
|
4
|
+
data.tar.gz: d90074909b0ecc7ae829b412399a62e33c656ef5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9e072f141558dc266742681781377612fcc555b3b3f259a057976ad5554b2ff3a5ad33eb4a4e87f82a638751bc71148d7a16ee20e6651193993d474ee131b6bf
|
7
|
+
data.tar.gz: 80e662d88496637c335616f8a4749d62f1192fbcc51bc166c617446dfd1bafbf789516937028b2d8b3f7767785a24e9d43cc6c45fa7c8463460a1cb5e8f891d4
|
data/README.md
CHANGED
@@ -13,5 +13,10 @@ Migrate your models by adding a "deleted_at" timestamp, `rails generate migratio
|
|
13
13
|
class YourModel < ActiveRecord::Base
|
14
14
|
|
15
15
|
acts_as_persistent
|
16
|
-
|
17
|
-
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
## Deprecation Warning
|
21
|
+
|
22
|
+
* `zap!` is now an alias for `force_destroy!`, will be removed in 1.0.
|
data/lib/persistent_record.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require "persistent_record/version"
|
2
2
|
require 'active_record' unless defined? ActiveRecord
|
3
3
|
|
4
|
-
|
5
|
-
|
6
4
|
module PersistentRecord
|
7
5
|
|
8
6
|
def self.included(source)
|
@@ -28,9 +26,6 @@ module PersistentRecord
|
|
28
26
|
with_discarded.where.not(record_deleted_at_column => nil)
|
29
27
|
end
|
30
28
|
|
31
|
-
alias :discarded :with_discarded
|
32
|
-
alias :discarded! :only_discarded
|
33
|
-
|
34
29
|
def restore(id, options = {})
|
35
30
|
if id.is_a?(Array)
|
36
31
|
id.map { |one_id| restore(one_id, options) }
|
@@ -42,25 +37,20 @@ module PersistentRecord
|
|
42
37
|
end
|
43
38
|
|
44
39
|
module Callbacks
|
45
|
-
|
46
40
|
def self.extended(source)
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
source.define_singleton_method("after_restore") do |*args, &block|
|
59
|
-
set_callback(:restore, :after, *args, &block)
|
41
|
+
[:restore, :force_destroy].each do |callback_name|
|
42
|
+
source.define_callbacks callback_name
|
43
|
+
source.define_singleton_method("before_#{callback_name}") do |*args, &block|
|
44
|
+
set_callback(callback_name, :before, *args, &block)
|
45
|
+
end
|
46
|
+
source.define_singleton_method("around_#{callback_name}") do |*args, &block|
|
47
|
+
set_callback(callback_name, :around, *args, &block)
|
48
|
+
end
|
49
|
+
source.define_singleton_method("after_#{callback_name}") do |*args, &block|
|
50
|
+
set_callback(callback_name, :after, *args, &block)
|
51
|
+
end
|
60
52
|
end
|
61
|
-
|
62
53
|
end
|
63
|
-
|
64
54
|
end
|
65
55
|
|
66
56
|
def destroy
|
@@ -94,6 +84,24 @@ module PersistentRecord
|
|
94
84
|
!!send(record_deleted_at_column)
|
95
85
|
end
|
96
86
|
|
87
|
+
def force_destroy!
|
88
|
+
transaction do
|
89
|
+
run_callbacks(:force_destroy) do
|
90
|
+
dependent_reflections = self.class.reflections.select do |name, reflection|
|
91
|
+
reflection.options[:dependent] == :destroy
|
92
|
+
end
|
93
|
+
if dependent_reflections.any?
|
94
|
+
dependent_reflections.each do |name|
|
95
|
+
associated_records = self.send(name)
|
96
|
+
associated_records = associated_records.with_discarded if associated_records.respond_to?(:with_discarded)
|
97
|
+
associated_records.each(&:force_destroy!)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
default_destroy
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
97
105
|
private
|
98
106
|
|
99
107
|
def touch_record_deleted_at_column(with_transaction = false)
|
@@ -107,11 +115,9 @@ module PersistentRecord
|
|
107
115
|
end
|
108
116
|
|
109
117
|
def restore_associated_records
|
110
|
-
|
111
118
|
destroyed_associations = self.class.reflect_on_all_associations.select do |association|
|
112
119
|
association.options[:dependent] == :destroy
|
113
120
|
end
|
114
|
-
|
115
121
|
destroyed_associations.each do |association|
|
116
122
|
association_data = send(association.name)
|
117
123
|
unless association_data.nil?
|
@@ -124,7 +130,6 @@ module PersistentRecord
|
|
124
130
|
end
|
125
131
|
end
|
126
132
|
end
|
127
|
-
|
128
133
|
end
|
129
134
|
|
130
135
|
end
|
@@ -133,22 +138,7 @@ class ActiveRecord::Base
|
|
133
138
|
|
134
139
|
def self.acts_as_persistent(options = {})
|
135
140
|
|
136
|
-
|
137
|
-
alias :delete! :delete
|
138
|
-
|
139
|
-
def zap!
|
140
|
-
dependent_reflections = self.reflections.select do |name, reflection|
|
141
|
-
reflection.options[:dependent] == :destroy
|
142
|
-
end
|
143
|
-
if dependent_reflections.any?
|
144
|
-
dependent_reflections.each do |name|
|
145
|
-
associated_records = self.send(name)
|
146
|
-
associated_records = associated_records.with_discarded if associated_records.respond_to?(:with_discarded)
|
147
|
-
associated_records.each(&:zap!)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
destroy!
|
151
|
-
end
|
141
|
+
alias_method :default_destroy, :destroy
|
152
142
|
|
153
143
|
include PersistentRecord
|
154
144
|
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: persistent_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robin Grass
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: Introduces soft deletions for ActiveRecord.
|
@@ -59,7 +59,7 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
- .gitignore
|
62
|
+
- ".gitignore"
|
63
63
|
- DOCUMENTATION.md
|
64
64
|
- Gemfile
|
65
65
|
- LICENSE.txt
|
@@ -78,17 +78,17 @@ require_paths:
|
|
78
78
|
- lib
|
79
79
|
required_ruby_version: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
|
-
- -
|
86
|
+
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: '0'
|
89
89
|
requirements: []
|
90
90
|
rubyforge_project:
|
91
|
-
rubygems_version: 2.
|
91
|
+
rubygems_version: 2.5.1
|
92
92
|
signing_key:
|
93
93
|
specification_version: 4
|
94
94
|
summary: Introduces soft deletions for ActiveRecord.
|