permanent_records 1.0.6 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.6
1
+ 1.1.0
@@ -7,9 +7,15 @@ module PermanentRecords
7
7
  base.extend LegacyScopes
8
8
  end
9
9
  base.send :include, InstanceMethods
10
- base.define_callbacks :before_revive, :after_revive
11
- base.alias_method_chain :destroy, :permanent_record_force
12
- base.alias_method_chain :destroy_without_callbacks, :permanent_record
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
@@ -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.6"
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{2009-12-28}
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.5}
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::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
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
- @mole = @hole.muskrats.create(:name => "Steady Rat")
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.destroy
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
- version: 1.0.6
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: 2009-12-28 00:00:00 -08:00
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.5
77
+ rubygems_version: 1.3.7
69
78
  signing_key:
70
79
  specification_version: 3
71
80
  summary: Soft-delete your ActiveRecord records