acts_as_archival 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +13 -0
- data/README.md +5 -3
- data/acts_as_archival.gemspec +3 -1
- data/lib/acts_as_archival/version.rb +1 -1
- data/lib/expected_behavior/acts_as_archival.rb +20 -13
- data/test/readonly_when_archived_test.rb +1 -1
- data/test/script/db_setup +1 -1
- metadata +54 -23
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Changes!
|
2
2
|
|
3
|
+
## 0.5.0
|
4
|
+
* Rails 4.0.0b1 support. Thanks, James Hill!
|
5
|
+
|
6
|
+
## 0.4.5
|
7
|
+
* possibly allow rails 2&3 to work when dealing with associations
|
8
|
+
* add some logging when archive/unarchive doesn't work
|
9
|
+
|
10
|
+
## 0.4.4
|
11
|
+
* **BUGFIX** Callbacks were being called twice because of how we were defining them
|
12
|
+
|
13
|
+
## 0.4.3
|
14
|
+
* Fix spelling error
|
15
|
+
|
3
16
|
## 0.4.2
|
4
17
|
* Change homepage to the github repo
|
5
18
|
|
data/README.md
CHANGED
@@ -97,9 +97,9 @@ postgres and if not, submit a patch / let us know about it!
|
|
97
97
|
|
98
98
|
## Thanks
|
99
99
|
|
100
|
-
ActsAsParanoid and PermanentRecords were both inspirations for this
|
100
|
+
ActsAsParanoid and PermanentRecords were both inspirations for this:
|
101
101
|
http://github.com/technoweenie/acts_as_paranoid
|
102
|
-
http://github.com/fastestforward/permanent_records
|
102
|
+
http://github.com/fastestforward/permanent_records
|
103
103
|
|
104
104
|
## Contributors
|
105
105
|
|
@@ -109,7 +109,9 @@ http://github.com/fastestforward/permanent_records
|
|
109
109
|
* Vojtech Salbaba
|
110
110
|
* David Jones
|
111
111
|
* Dave Woodward
|
112
|
+
* Miles Sterrett
|
113
|
+
* James Hill
|
112
114
|
|
113
115
|
Thanks!
|
114
116
|
|
115
|
-
*Copyright (c) 2009-
|
117
|
+
*Copyright (c) 2009-2013 Expected Behavior, LLC, released under the MIT license*
|
data/acts_as_archival.gemspec
CHANGED
@@ -11,7 +11,9 @@ Gem::Specification.new do |gem|
|
|
11
11
|
"Matthew Gordon",
|
12
12
|
"Vojtech Salbaba",
|
13
13
|
"David Jones",
|
14
|
-
"Dave Woodward"
|
14
|
+
"Dave Woodward",
|
15
|
+
"Miles Sterrett",
|
16
|
+
"James Hill"]
|
15
17
|
gem.email = ["joel@expectedbehavior.com",
|
16
18
|
"michael@expectedbehavior.com",
|
17
19
|
"matt@expectedbehavior.com"]
|
@@ -46,7 +46,7 @@ module ExpectedBehavior
|
|
46
46
|
|
47
47
|
def readonly_when_archived
|
48
48
|
if self.archived? && self.changed? && !self.archived_at_changed? && !self.archive_number_changed?
|
49
|
-
self.errors.add(:base, "Cannot
|
49
|
+
self.errors.add(:base, "Cannot modify an archived record.")
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -64,17 +64,19 @@ module ExpectedBehavior
|
|
64
64
|
def archive(head_archive_number=nil)
|
65
65
|
self.class.transaction do
|
66
66
|
begin
|
67
|
-
run_callbacks :archive
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
67
|
+
run_callbacks :archive do
|
68
|
+
unless self.archived?
|
69
|
+
head_archive_number ||= Digest::MD5.hexdigest("#{self.class.name}#{self.id}")
|
70
|
+
self.archive_associations(head_archive_number)
|
71
|
+
self.archived_at = DateTime.now
|
72
|
+
self.archive_number = head_archive_number
|
73
|
+
self.save!
|
74
|
+
end
|
74
75
|
end
|
75
|
-
run_callbacks :archive, :after
|
76
76
|
return true
|
77
|
-
rescue
|
77
|
+
rescue => e
|
78
|
+
ActiveRecord::Base.logger.try(:debug, e.message)
|
79
|
+
ActiveRecord::Base.logger.try(:debug, e.backtrace)
|
78
80
|
raise ActiveRecord::Rollback
|
79
81
|
end
|
80
82
|
end
|
@@ -94,7 +96,9 @@ module ExpectedBehavior
|
|
94
96
|
end
|
95
97
|
run_callbacks :unarchive, :after
|
96
98
|
return true
|
97
|
-
rescue
|
99
|
+
rescue => e
|
100
|
+
ActiveRecord::Base.logger.try(:debug, e.message)
|
101
|
+
ActiveRecord::Base.logger.try(:debug, e.backtrace)
|
98
102
|
raise ActiveRecord::Rollback
|
99
103
|
end
|
100
104
|
end
|
@@ -114,8 +118,11 @@ module ExpectedBehavior
|
|
114
118
|
return if options.length == 0
|
115
119
|
options[:association_options] ||= Proc.new { true }
|
116
120
|
self.class.reflect_on_all_associations.each do |association|
|
117
|
-
if association.macro.to_s =~ /^has/ && association.klass.is_archival? &&
|
118
|
-
|
121
|
+
if (association.macro.to_s =~ /^has/ && association.klass.is_archival? &&
|
122
|
+
options[:association_options].call(association) &&
|
123
|
+
association.options[:through].nil?)
|
124
|
+
association_key = association.respond_to?(:foreign_key) ? association.foreign_key : association.primary_key_name
|
125
|
+
act_on_a_related_archival(association.klass, association_key, id, head_archive_number, options)
|
119
126
|
end
|
120
127
|
end
|
121
128
|
end
|
@@ -16,7 +16,7 @@ class ReadonlyWhenArchivedTest < ActiveSupport::TestCase
|
|
16
16
|
archival.name = "updated"
|
17
17
|
|
18
18
|
assert_not archival.save
|
19
|
-
assert_equal "Cannot
|
19
|
+
assert_equal "Cannot modify an archived record.",
|
20
20
|
archival.errors.full_messages.first
|
21
21
|
end
|
22
22
|
end
|
data/test/script/db_setup
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_archival
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,14 +11,16 @@ authors:
|
|
11
11
|
- Vojtech Salbaba
|
12
12
|
- David Jones
|
13
13
|
- Dave Woodward
|
14
|
+
- Miles Sterrett
|
15
|
+
- James Hill
|
14
16
|
autorequire:
|
15
17
|
bindir: bin
|
16
18
|
cert_chain: []
|
17
|
-
date:
|
19
|
+
date: 2013-03-16 00:00:00.000000000 Z
|
18
20
|
dependencies:
|
19
21
|
- !ruby/object:Gem::Dependency
|
20
22
|
name: activerecord
|
21
|
-
requirement:
|
23
|
+
requirement: !ruby/object:Gem::Requirement
|
22
24
|
none: false
|
23
25
|
requirements:
|
24
26
|
- - ! '>='
|
@@ -26,10 +28,15 @@ dependencies:
|
|
26
28
|
version: '0'
|
27
29
|
type: :runtime
|
28
30
|
prerelease: false
|
29
|
-
version_requirements:
|
31
|
+
version_requirements: !ruby/object:Gem::Requirement
|
32
|
+
none: false
|
33
|
+
requirements:
|
34
|
+
- - ! '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
30
37
|
- !ruby/object:Gem::Dependency
|
31
38
|
name: assertions-eb
|
32
|
-
requirement:
|
39
|
+
requirement: !ruby/object:Gem::Requirement
|
33
40
|
none: false
|
34
41
|
requirements:
|
35
42
|
- - ! '>='
|
@@ -37,10 +44,15 @@ dependencies:
|
|
37
44
|
version: '0'
|
38
45
|
type: :development
|
39
46
|
prerelease: false
|
40
|
-
version_requirements:
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: rake
|
43
|
-
requirement:
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
44
56
|
none: false
|
45
57
|
requirements:
|
46
58
|
- - ! '>='
|
@@ -48,10 +60,15 @@ dependencies:
|
|
48
60
|
version: '0'
|
49
61
|
type: :development
|
50
62
|
prerelease: false
|
51
|
-
version_requirements:
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
52
69
|
- !ruby/object:Gem::Dependency
|
53
70
|
name: mysql2
|
54
|
-
requirement:
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
55
72
|
none: false
|
56
73
|
requirements:
|
57
74
|
- - ! '>='
|
@@ -59,10 +76,15 @@ dependencies:
|
|
59
76
|
version: '0'
|
60
77
|
type: :development
|
61
78
|
prerelease: false
|
62
|
-
version_requirements:
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
63
85
|
- !ruby/object:Gem::Dependency
|
64
86
|
name: highline
|
65
|
-
requirement:
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
66
88
|
none: false
|
67
89
|
requirements:
|
68
90
|
- - ! '>='
|
@@ -70,10 +92,15 @@ dependencies:
|
|
70
92
|
version: '0'
|
71
93
|
type: :development
|
72
94
|
prerelease: false
|
73
|
-
version_requirements:
|
95
|
+
version_requirements: !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
74
101
|
- !ruby/object:Gem::Dependency
|
75
102
|
name: rr
|
76
|
-
requirement:
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
77
104
|
none: false
|
78
105
|
requirements:
|
79
106
|
- - ! '>='
|
@@ -81,10 +108,15 @@ dependencies:
|
|
81
108
|
version: '0'
|
82
109
|
type: :development
|
83
110
|
prerelease: false
|
84
|
-
version_requirements:
|
111
|
+
version_requirements: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
85
117
|
- !ruby/object:Gem::Dependency
|
86
118
|
name: database_cleaner
|
87
|
-
requirement:
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
88
120
|
none: false
|
89
121
|
requirements:
|
90
122
|
- - ! '>='
|
@@ -92,7 +124,12 @@ dependencies:
|
|
92
124
|
version: '0'
|
93
125
|
type: :development
|
94
126
|
prerelease: false
|
95
|
-
version_requirements:
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
96
133
|
description: ! '*Atomic archiving/unarchiving for ActiveRecord-based apps*
|
97
134
|
|
98
135
|
|
@@ -178,21 +215,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
178
215
|
- - ! '>='
|
179
216
|
- !ruby/object:Gem::Version
|
180
217
|
version: '0'
|
181
|
-
segments:
|
182
|
-
- 0
|
183
|
-
hash: -3492758248112477933
|
184
218
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
219
|
none: false
|
186
220
|
requirements:
|
187
221
|
- - ! '>='
|
188
222
|
- !ruby/object:Gem::Version
|
189
223
|
version: '0'
|
190
|
-
segments:
|
191
|
-
- 0
|
192
|
-
hash: -3492758248112477933
|
193
224
|
requirements: []
|
194
225
|
rubyforge_project:
|
195
|
-
rubygems_version: 1.8.
|
226
|
+
rubygems_version: 1.8.23
|
196
227
|
signing_key:
|
197
228
|
specification_version: 3
|
198
229
|
summary: Atomic archiving/unarchiving for ActiveRecord-based apps
|