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 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