permanent_records 1.0.6 → 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.
- data/VERSION +1 -1
- data/lib/permanent_records.rb +31 -3
- data/permanent_records.gemspec +4 -4
- data/test/permanent_records_test.rb +19 -2
- metadata +14 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0
|
1
|
+
1.1.0
|
data/lib/permanent_records.rb
CHANGED
@@ -7,9 +7,15 @@ module PermanentRecords
|
|
7
7
|
base.extend LegacyScopes
|
8
8
|
end
|
9
9
|
base.send :include, InstanceMethods
|
10
|
-
base.
|
11
|
-
|
12
|
-
|
10
|
+
base.instance_eval do
|
11
|
+
define_callbacks :before_revive, :after_revive
|
12
|
+
alias_method_chain :destroy, :permanent_record_force
|
13
|
+
alias_method_chain :destroy_without_callbacks, :permanent_record
|
14
|
+
before_revive :revive_destroyed_dependent_records
|
15
|
+
def is_permanent?
|
16
|
+
columns.detect {|c| 'deleted_at' == c.name}
|
17
|
+
end
|
18
|
+
end
|
13
19
|
end
|
14
20
|
|
15
21
|
module LegacyScopes
|
@@ -81,6 +87,28 @@ module PermanentRecords
|
|
81
87
|
end
|
82
88
|
self
|
83
89
|
end
|
90
|
+
|
91
|
+
def revive_destroyed_dependent_records
|
92
|
+
self.class.reflections.select do |name, reflection|
|
93
|
+
'destroy' == reflection.options[:dependent].to_s && reflection.klass.is_permanent?
|
94
|
+
end.each do |name, reflection|
|
95
|
+
|
96
|
+
send(name).find(:all,
|
97
|
+
:conditions => [
|
98
|
+
"#{reflection.quoted_table_name}.deleted_at > ?" +
|
99
|
+
" AND " +
|
100
|
+
"#{reflection.quoted_table_name}.deleted_at < ?",
|
101
|
+
deleted_at - 3.seconds,
|
102
|
+
deleted_at + 3.seconds
|
103
|
+
]
|
104
|
+
).each do |dependent|
|
105
|
+
dependent.revive
|
106
|
+
end
|
107
|
+
|
108
|
+
# and update the reflection cache
|
109
|
+
send(name, :reload)
|
110
|
+
end
|
111
|
+
end
|
84
112
|
end
|
85
113
|
end
|
86
114
|
ActiveRecord::Base.send :include, PermanentRecords
|
data/permanent_records.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{permanent_records}
|
8
|
-
s.version = "1.0
|
8
|
+
s.version = "1.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jack Danger Canty"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-08-30}
|
13
13
|
s.description = %q{Never Lose Data. Rather than deleting rows this sets Record#deleted_at and gives you all the scopes you need to work with your data.}
|
14
14
|
s.email = %q{gems@6brand.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -39,7 +39,7 @@ Gem::Specification.new do |s|
|
|
39
39
|
s.homepage = %q{http://github.com/JackDanger/permanent_records}
|
40
40
|
s.rdoc_options = ["--charset=UTF-8"]
|
41
41
|
s.require_paths = ["lib"]
|
42
|
-
s.rubygems_version = %q{1.3.
|
42
|
+
s.rubygems_version = %q{1.3.7}
|
43
43
|
s.summary = %q{Soft-delete your ActiveRecord records}
|
44
44
|
s.test_files = [
|
45
45
|
"test/hole.rb",
|
@@ -55,7 +55,7 @@ Gem::Specification.new do |s|
|
|
55
55
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
56
56
|
s.specification_version = 3
|
57
57
|
|
58
|
-
if Gem::Version.new(Gem::
|
58
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
59
59
|
else
|
60
60
|
end
|
61
61
|
else
|
@@ -15,7 +15,8 @@ class PermanentRecordsTest < ActiveSupport::TestCase
|
|
15
15
|
Kitty.delete_all
|
16
16
|
@kitty = Kitty.create!(:name => 'Meow Meow')
|
17
17
|
@hole = Hole.create(:number => 14)
|
18
|
-
@
|
18
|
+
@hole.muskrats.create(:name => "Active Muskrat")
|
19
|
+
@hole.muskrats.create(:name => "Deleted Muskrat", :deleted_at => 5.days.ago)
|
19
20
|
@mole = @hole.moles.create(:name => "Grabowski")
|
20
21
|
end
|
21
22
|
|
@@ -30,7 +31,7 @@ class PermanentRecordsTest < ActiveSupport::TestCase
|
|
30
31
|
|
31
32
|
def test_revive_should_return_the_record
|
32
33
|
muskrat = @deleted
|
33
|
-
assert_equal muskrat, muskrat.
|
34
|
+
assert_equal muskrat, muskrat.revive
|
34
35
|
end
|
35
36
|
|
36
37
|
def test_destroy_should_set_deleted_at_attribute
|
@@ -116,4 +117,20 @@ class PermanentRecordsTest < ActiveSupport::TestCase
|
|
116
117
|
end
|
117
118
|
assert @hole.muskrats.first.deleted?
|
118
119
|
end
|
120
|
+
|
121
|
+
def test_dependent_permanent_records_should_be_revived_when_parent_is_revived
|
122
|
+
assert @hole.is_permanent?
|
123
|
+
@hole.destroy
|
124
|
+
assert @hole.muskrats.find_by_name("Active Muskrat").deleted?
|
125
|
+
@hole.revive
|
126
|
+
assert !@hole.muskrats.find_by_name("Active Muskrat").deleted?
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_old_dependent_permanent_records_should_not_be_revived
|
130
|
+
assert @hole.is_permanent?
|
131
|
+
@hole.destroy
|
132
|
+
assert @hole.muskrats.find_by_name("Deleted Muskrat").deleted?
|
133
|
+
@hole.revive
|
134
|
+
assert @hole.muskrats.find_by_name("Deleted Muskrat").deleted?
|
135
|
+
end
|
119
136
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: permanent_records
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 1.1.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Jack Danger Canty
|
@@ -9,7 +14,7 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-08-30 00:00:00 -07:00
|
13
18
|
default_executable:
|
14
19
|
dependencies: []
|
15
20
|
|
@@ -51,21 +56,25 @@ rdoc_options:
|
|
51
56
|
require_paths:
|
52
57
|
- lib
|
53
58
|
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
54
60
|
requirements:
|
55
61
|
- - ">="
|
56
62
|
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
57
65
|
version: "0"
|
58
|
-
version:
|
59
66
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
60
68
|
requirements:
|
61
69
|
- - ">="
|
62
70
|
- !ruby/object:Gem::Version
|
71
|
+
segments:
|
72
|
+
- 0
|
63
73
|
version: "0"
|
64
|
-
version:
|
65
74
|
requirements: []
|
66
75
|
|
67
76
|
rubyforge_project:
|
68
|
-
rubygems_version: 1.3.
|
77
|
+
rubygems_version: 1.3.7
|
69
78
|
signing_key:
|
70
79
|
specification_version: 3
|
71
80
|
summary: Soft-delete your ActiveRecord records
|