zombie_record 0.4.0 → 1.1.0
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 +4 -4
- data/.travis.yml +5 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +0 -2
- data/README.md +6 -0
- data/Rakefile +2 -1
- data/gemfiles/rails4.0.gemfile +5 -0
- data/gemfiles/rails4.0.gemfile.lock +65 -0
- data/gemfiles/rails4.1.gemfile +5 -0
- data/gemfiles/rails4.1.gemfile.lock +64 -0
- data/lib/zombie_record/restorable.rb +19 -23
- data/lib/zombie_record/version.rb +1 -1
- data/spec/restorable_spec.rb +1 -1
- data/zombie_record.gemspec +4 -2
- metadata +56 -25
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c54fbb089be314efff0a17095023ff80ac9c68fe
|
|
4
|
+
data.tar.gz: a515209fd43f48a0f360eb60382d8ad8c00fdc10
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bd0b9759920d3fda72aef62f1e0ccde2ad618209922dc3fae568bd35310832e43d510871691a9f667b82491154a5e39b25d63859b464a21ae1173319aab9a685
|
|
7
|
+
data.tar.gz: 99901a30dc8e1d48c9066d05699529dbde1869c3e1e156c6368e8f43f9eebb3330a5ef447cf6a7f51fe7c04ee93b85f6817803558e826fd09c2ae5f10be99800
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
###### Unreleased
|
|
2
|
+
|
|
3
|
+
###### v1.1.0
|
|
4
|
+
|
|
5
|
+
* Add compatibility with Rails 4.1.
|
|
6
|
+
|
|
7
|
+
###### v1.0.0
|
|
8
|
+
|
|
9
|
+
* Remove compatibility with Rails 3, instead adding compatibility with
|
|
10
|
+
Rails 4.0.
|
|
11
|
+
|
|
1
12
|
###### v0.4.0
|
|
2
13
|
|
|
3
14
|
* Allow accessing associated records on deleted objects, even if they themselves
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Allows restoring your Active Records from the dead!
|
|
4
4
|
|
|
5
|
+
[](https://travis-ci.org/zendesk/zombie_record)
|
|
6
|
+
|
|
5
7
|
## Installation
|
|
6
8
|
|
|
7
9
|
Add this line to your application's Gemfile:
|
|
@@ -42,6 +44,10 @@ book.restore!
|
|
|
42
44
|
Book.find(42) # returns the Book record.
|
|
43
45
|
```
|
|
44
46
|
|
|
47
|
+
## Compatibility
|
|
48
|
+
|
|
49
|
+
Zombie Record only works with Active Record 4. For Active Record 3 compatibility, check out the activerecord-3 branch of this gem.
|
|
50
|
+
|
|
45
51
|
## Contributing
|
|
46
52
|
|
|
47
53
|
1. Fork it
|
data/Rakefile
CHANGED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: ../
|
|
3
|
+
specs:
|
|
4
|
+
zombie_record (1.0.0)
|
|
5
|
+
activerecord (~> 4.0)
|
|
6
|
+
mysql2
|
|
7
|
+
|
|
8
|
+
GEM
|
|
9
|
+
remote: https://rubygems.org/
|
|
10
|
+
specs:
|
|
11
|
+
activemodel (4.0.12)
|
|
12
|
+
activesupport (= 4.0.12)
|
|
13
|
+
builder (~> 3.1.0)
|
|
14
|
+
activerecord (4.0.12)
|
|
15
|
+
activemodel (= 4.0.12)
|
|
16
|
+
activerecord-deprecated_finders (~> 1.0.2)
|
|
17
|
+
activesupport (= 4.0.12)
|
|
18
|
+
arel (~> 4.0.0)
|
|
19
|
+
activerecord-deprecated_finders (1.0.3)
|
|
20
|
+
activesupport (4.0.12)
|
|
21
|
+
i18n (~> 0.6, >= 0.6.9)
|
|
22
|
+
minitest (~> 4.2)
|
|
23
|
+
multi_json (~> 1.3)
|
|
24
|
+
thread_safe (~> 0.1)
|
|
25
|
+
tzinfo (~> 0.3.37)
|
|
26
|
+
arel (4.0.2)
|
|
27
|
+
builder (3.1.4)
|
|
28
|
+
byebug (3.5.1)
|
|
29
|
+
columnize (~> 0.8)
|
|
30
|
+
debugger-linecache (~> 1.2)
|
|
31
|
+
slop (~> 3.6)
|
|
32
|
+
columnize (0.8.9)
|
|
33
|
+
debugger-linecache (1.2.0)
|
|
34
|
+
diff-lcs (1.2.5)
|
|
35
|
+
i18n (0.6.11)
|
|
36
|
+
minitest (4.7.5)
|
|
37
|
+
multi_json (1.10.1)
|
|
38
|
+
mysql2 (0.3.17)
|
|
39
|
+
rake (10.3.2)
|
|
40
|
+
rspec (2.14.1)
|
|
41
|
+
rspec-core (~> 2.14.0)
|
|
42
|
+
rspec-expectations (~> 2.14.0)
|
|
43
|
+
rspec-mocks (~> 2.14.0)
|
|
44
|
+
rspec-core (2.14.8)
|
|
45
|
+
rspec-expectations (2.14.5)
|
|
46
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
|
47
|
+
rspec-mocks (2.14.6)
|
|
48
|
+
slop (3.6.0)
|
|
49
|
+
thread_safe (0.3.4)
|
|
50
|
+
timecop (0.7.1)
|
|
51
|
+
tzinfo (0.3.42)
|
|
52
|
+
wwtd (0.5.5)
|
|
53
|
+
|
|
54
|
+
PLATFORMS
|
|
55
|
+
ruby
|
|
56
|
+
|
|
57
|
+
DEPENDENCIES
|
|
58
|
+
activerecord (~> 4.0.12)
|
|
59
|
+
bundler (~> 1.3)
|
|
60
|
+
byebug
|
|
61
|
+
rake
|
|
62
|
+
rspec (~> 2.14.1)
|
|
63
|
+
timecop (~> 0.7.0)
|
|
64
|
+
wwtd (>= 0.5.3)
|
|
65
|
+
zombie_record!
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: ../
|
|
3
|
+
specs:
|
|
4
|
+
zombie_record (1.0.0)
|
|
5
|
+
activerecord (~> 4.0)
|
|
6
|
+
mysql2
|
|
7
|
+
|
|
8
|
+
GEM
|
|
9
|
+
remote: https://rubygems.org/
|
|
10
|
+
specs:
|
|
11
|
+
activemodel (4.1.8)
|
|
12
|
+
activesupport (= 4.1.8)
|
|
13
|
+
builder (~> 3.1)
|
|
14
|
+
activerecord (4.1.8)
|
|
15
|
+
activemodel (= 4.1.8)
|
|
16
|
+
activesupport (= 4.1.8)
|
|
17
|
+
arel (~> 5.0.0)
|
|
18
|
+
activesupport (4.1.8)
|
|
19
|
+
i18n (~> 0.6, >= 0.6.9)
|
|
20
|
+
json (~> 1.7, >= 1.7.7)
|
|
21
|
+
minitest (~> 5.1)
|
|
22
|
+
thread_safe (~> 0.1)
|
|
23
|
+
tzinfo (~> 1.1)
|
|
24
|
+
arel (5.0.1.20140414130214)
|
|
25
|
+
builder (3.2.2)
|
|
26
|
+
byebug (3.5.1)
|
|
27
|
+
columnize (~> 0.8)
|
|
28
|
+
debugger-linecache (~> 1.2)
|
|
29
|
+
slop (~> 3.6)
|
|
30
|
+
columnize (0.8.9)
|
|
31
|
+
debugger-linecache (1.2.0)
|
|
32
|
+
diff-lcs (1.2.5)
|
|
33
|
+
i18n (0.6.11)
|
|
34
|
+
json (1.8.1)
|
|
35
|
+
minitest (5.4.3)
|
|
36
|
+
mysql2 (0.3.17)
|
|
37
|
+
rake (10.3.2)
|
|
38
|
+
rspec (2.14.1)
|
|
39
|
+
rspec-core (~> 2.14.0)
|
|
40
|
+
rspec-expectations (~> 2.14.0)
|
|
41
|
+
rspec-mocks (~> 2.14.0)
|
|
42
|
+
rspec-core (2.14.8)
|
|
43
|
+
rspec-expectations (2.14.5)
|
|
44
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
|
45
|
+
rspec-mocks (2.14.6)
|
|
46
|
+
slop (3.6.0)
|
|
47
|
+
thread_safe (0.3.4)
|
|
48
|
+
timecop (0.7.1)
|
|
49
|
+
tzinfo (1.2.2)
|
|
50
|
+
thread_safe (~> 0.1)
|
|
51
|
+
wwtd (0.5.5)
|
|
52
|
+
|
|
53
|
+
PLATFORMS
|
|
54
|
+
ruby
|
|
55
|
+
|
|
56
|
+
DEPENDENCIES
|
|
57
|
+
activerecord (~> 4.1.8)
|
|
58
|
+
bundler (~> 1.3)
|
|
59
|
+
byebug
|
|
60
|
+
rake
|
|
61
|
+
rspec (~> 2.14.1)
|
|
62
|
+
timecop (~> 0.7.0)
|
|
63
|
+
wwtd (>= 0.5.3)
|
|
64
|
+
zombie_record!
|
|
@@ -8,26 +8,6 @@ module ZombieRecord
|
|
|
8
8
|
define_callbacks :restore
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
# Override Rails' #destroy for soft-delete functionality
|
|
12
|
-
# When changing to Rails 4, override #destroy_row with a one-liner instead.
|
|
13
|
-
def destroy
|
|
14
|
-
run_callbacks :destroy do
|
|
15
|
-
destroy_associations
|
|
16
|
-
|
|
17
|
-
if persisted?
|
|
18
|
-
time = current_time_from_proper_timezone
|
|
19
|
-
update_column(:deleted_at, time)
|
|
20
|
-
|
|
21
|
-
if self.class.column_names.include?("updated_at")
|
|
22
|
-
update_column(:updated_at, time)
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
@destroyed = true
|
|
27
|
-
freeze
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
11
|
# Restores a destroyed record.
|
|
32
12
|
#
|
|
33
13
|
# Returns nothing.
|
|
@@ -71,6 +51,16 @@ module ZombieRecord
|
|
|
71
51
|
|
|
72
52
|
private
|
|
73
53
|
|
|
54
|
+
# Override Rails' #destroy_row for soft-delete functionality
|
|
55
|
+
def destroy_row
|
|
56
|
+
time = current_time_from_proper_timezone
|
|
57
|
+
update_column(:deleted_at, time)
|
|
58
|
+
|
|
59
|
+
if self.class.column_names.include?("updated_at")
|
|
60
|
+
update_column(:updated_at, time)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
74
64
|
def restore_associated_records!
|
|
75
65
|
self.class.reflect_on_all_associations.each do |association|
|
|
76
66
|
# Only restore associations that are automatically destroyed alongside
|
|
@@ -186,9 +176,15 @@ module ZombieRecord
|
|
|
186
176
|
#
|
|
187
177
|
# Returns an ActiveRecord::Relation.
|
|
188
178
|
def with_deleted
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
179
|
+
if ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 0
|
|
180
|
+
all.
|
|
181
|
+
tap {|relation| relation.default_scoped = false }.
|
|
182
|
+
extending(WithDeletedAssociationsWrapper)
|
|
183
|
+
else
|
|
184
|
+
all.
|
|
185
|
+
unscope(where: :deleted_at).
|
|
186
|
+
extending(WithDeletedAssociationsWrapper)
|
|
187
|
+
end
|
|
192
188
|
end
|
|
193
189
|
end
|
|
194
190
|
end
|
data/spec/restorable_spec.rb
CHANGED
data/zombie_record.gemspec
CHANGED
|
@@ -18,11 +18,13 @@ Gem::Specification.new do |spec|
|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
19
|
spec.require_paths = ["lib"]
|
|
20
20
|
|
|
21
|
-
spec.add_dependency "activerecord", "~>
|
|
21
|
+
spec.add_dependency "activerecord", "~> 4.0"
|
|
22
22
|
spec.add_dependency "mysql2"
|
|
23
23
|
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
|
25
|
+
spec.add_development_dependency "byebug"
|
|
25
26
|
spec.add_development_dependency "rake"
|
|
26
|
-
spec.add_development_dependency "rspec"
|
|
27
|
+
spec.add_development_dependency "rspec", "~> 2.14.1"
|
|
27
28
|
spec.add_development_dependency "timecop", "~> 0.7.0"
|
|
29
|
+
spec.add_development_dependency "wwtd", ">= 0.5.3"
|
|
28
30
|
end
|
metadata
CHANGED
|
@@ -1,99 +1,127 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: zombie_record
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Daniel Schierbeck
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-
|
|
11
|
+
date: 2014-12-08 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
|
-
version:
|
|
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
|
-
version:
|
|
26
|
+
version: '4.0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: mysql2
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - '>='
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '0'
|
|
34
34
|
type: :runtime
|
|
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: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: bundler
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- -
|
|
45
|
+
- - ~>
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '1.3'
|
|
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: '1.3'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: byebug
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- -
|
|
59
|
+
- - '>='
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: '0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
|
-
- -
|
|
66
|
+
- - '>='
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: rake
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- -
|
|
73
|
+
- - '>='
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
75
|
version: '0'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- -
|
|
80
|
+
- - '>='
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rspec
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ~>
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: 2.14.1
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ~>
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: 2.14.1
|
|
83
97
|
- !ruby/object:Gem::Dependency
|
|
84
98
|
name: timecop
|
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
|
86
100
|
requirements:
|
|
87
|
-
- -
|
|
101
|
+
- - ~>
|
|
88
102
|
- !ruby/object:Gem::Version
|
|
89
103
|
version: 0.7.0
|
|
90
104
|
type: :development
|
|
91
105
|
prerelease: false
|
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
107
|
requirements:
|
|
94
|
-
- -
|
|
108
|
+
- - ~>
|
|
95
109
|
- !ruby/object:Gem::Version
|
|
96
110
|
version: 0.7.0
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: wwtd
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - '>='
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: 0.5.3
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - '>='
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: 0.5.3
|
|
97
125
|
description: Allows restoring your Active Records from the dead!
|
|
98
126
|
email:
|
|
99
127
|
- dasch@zendesk.com
|
|
@@ -101,14 +129,18 @@ executables: []
|
|
|
101
129
|
extensions: []
|
|
102
130
|
extra_rdoc_files: []
|
|
103
131
|
files:
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
132
|
+
- .gitignore
|
|
133
|
+
- .rspec
|
|
134
|
+
- .travis.yml
|
|
107
135
|
- CHANGELOG.md
|
|
108
136
|
- Gemfile
|
|
109
137
|
- LICENSE.txt
|
|
110
138
|
- README.md
|
|
111
139
|
- Rakefile
|
|
140
|
+
- gemfiles/rails4.0.gemfile
|
|
141
|
+
- gemfiles/rails4.0.gemfile.lock
|
|
142
|
+
- gemfiles/rails4.1.gemfile
|
|
143
|
+
- gemfiles/rails4.1.gemfile.lock
|
|
112
144
|
- lib/zombie_record.rb
|
|
113
145
|
- lib/zombie_record/restorable.rb
|
|
114
146
|
- lib/zombie_record/version.rb
|
|
@@ -125,21 +157,20 @@ require_paths:
|
|
|
125
157
|
- lib
|
|
126
158
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
127
159
|
requirements:
|
|
128
|
-
- -
|
|
160
|
+
- - '>='
|
|
129
161
|
- !ruby/object:Gem::Version
|
|
130
162
|
version: '0'
|
|
131
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
164
|
requirements:
|
|
133
|
-
- -
|
|
165
|
+
- - '>='
|
|
134
166
|
- !ruby/object:Gem::Version
|
|
135
167
|
version: '0'
|
|
136
168
|
requirements: []
|
|
137
169
|
rubyforge_project:
|
|
138
|
-
rubygems_version: 2.
|
|
170
|
+
rubygems_version: 2.1.11
|
|
139
171
|
signing_key:
|
|
140
172
|
specification_version: 4
|
|
141
173
|
summary: Allows restoring your Active Records from the dead!
|
|
142
174
|
test_files:
|
|
143
175
|
- spec/restorable_spec.rb
|
|
144
176
|
- spec/spec_helper.rb
|
|
145
|
-
has_rdoc:
|