acts_as_archival 0.4.2 → 0.5.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/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
|