rtiss_acts_as_versioned 0.7.9 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README +1 -13
- data/Rakefile +15 -4
- data/lib/rtiss_acts_as_versioned.rb +32 -52
- data/rtiss_acts_as_versioned.gemspec +2 -2
- data/test/fixtures/locked_pages.yml +2 -4
- data/test/fixtures/locked_pages_revisions.yml +4 -4
- data/test/fixtures/page.rb +1 -0
- data/test/fixtures/widget.rb +1 -1
- data/test/schema.rb +8 -10
- data/test/tiss_test.rb +7 -48
- data/test/versioned_test.rb +11 -17
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a47925d46be533c4270653aa1c6ecd3bdec9a8d5
|
4
|
+
data.tar.gz: 2d1c25a86d66ab51f3c747f26abc34818e8a4b53
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a117151d322b33a6a87eec2931bb4f6d3290c84d9ffcc18b3e248188e745fcd7a81557893c585e2d061b861a4893b57af23979120a9e6637b3b5512a1528e400
|
7
|
+
data.tar.gz: 7bdca076be71230b7e08e4daf4527177829efce40f884265e4fbfeed4f17f2111f30fe1ed326d61e9457f3891ba798f4d22f6f7973b35d44963b403cdd197ee4
|
data/README
CHANGED
@@ -2,12 +2,6 @@
|
|
2
2
|
|
3
3
|
This library adds simple versioning to an ActiveRecord module. ActiveRecord is required.
|
4
4
|
|
5
|
-
This is the patched version for rtiss.
|
6
|
-
|
7
|
-
Versions 0.6.x (rails2 branch) are for rails 2.x
|
8
|
-
Versions 0.7.x (rails3 branch) are for rails 3.x
|
9
|
-
Versions 0.8.x (master branch) are for rails 4.x
|
10
|
-
|
11
5
|
== Resources
|
12
6
|
|
13
7
|
Install
|
@@ -27,10 +21,4 @@ Subversion
|
|
27
21
|
* http://svn.github.com/technoweenie/acts_as_versioned.git
|
28
22
|
|
29
23
|
Special thanks to Dreamer on ##rubyonrails for help in early testing. His ServerSideWiki (http://serversidewiki.com)
|
30
|
-
was the first project to use acts_as_versioned <em>in the wild</em>.
|
31
|
-
|
32
|
-
== Publishing a new release
|
33
|
-
|
34
|
-
* increase the VERSION in rtiss_acts_as_versioned.rb
|
35
|
-
* run: bundle exec rake test
|
36
|
-
* run: bundle exec rake release
|
24
|
+
was the first project to use acts_as_versioned <em>in the wild</em>.
|
data/Rakefile
CHANGED
@@ -73,6 +73,14 @@ task :console do
|
|
73
73
|
sh "irb -rubygems -r ./lib//#{name}.rb"
|
74
74
|
end
|
75
75
|
|
76
|
+
#############################################################################
|
77
|
+
#
|
78
|
+
# Custom tasks (add your own tasks here)
|
79
|
+
#
|
80
|
+
#############################################################################
|
81
|
+
|
82
|
+
|
83
|
+
|
76
84
|
#############################################################################
|
77
85
|
#
|
78
86
|
# Packaging tasks
|
@@ -80,11 +88,14 @@ end
|
|
80
88
|
#############################################################################
|
81
89
|
|
82
90
|
task :release => :build do
|
91
|
+
unless `git branch` =~ /^\* master$/
|
92
|
+
puts "You must be on the master branch to release!"
|
93
|
+
exit!
|
94
|
+
end
|
83
95
|
sh "git commit --allow-empty -a -m 'Release #{version}'"
|
84
|
-
sh "git tag #{version}"
|
85
|
-
sh "git push origin
|
86
|
-
sh "
|
87
|
-
sh "gem push pkg/#{name}-#{version}.gem" # push the gem to RubyGems.org
|
96
|
+
sh "git tag #{version}"
|
97
|
+
sh "git push origin master --tags"
|
98
|
+
sh "gem push pkg/#{name}-#{version}.gem"
|
88
99
|
end
|
89
100
|
|
90
101
|
task :build => :gemspec do
|
@@ -20,7 +20,7 @@
|
|
20
20
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
22
|
|
23
|
-
VERSION = '0.
|
23
|
+
VERSION = '0.8.0'
|
24
24
|
|
25
25
|
module ActiveRecord #:nodoc:
|
26
26
|
module Acts #:nodoc:
|
@@ -173,7 +173,7 @@ module ActiveRecord #:nodoc:
|
|
173
173
|
|
174
174
|
cattr_accessor :versioned_class_name, :versioned_foreign_key, :versioned_table_name, :versioned_inheritance_column,
|
175
175
|
:version_column, :max_version_limit, :track_altered_attributes, :version_condition, :version_sequence_name, :non_versioned_columns,
|
176
|
-
:version_association_options, :version_if_changed, :deleted_in_original_table_flag, :
|
176
|
+
:version_association_options, :version_if_changed, :deleted_in_original_table_flag, :record_restored_flag
|
177
177
|
|
178
178
|
self.versioned_class_name = options[:class_name] || "Version"
|
179
179
|
self.versioned_foreign_key = options[:foreign_key] || self.to_s.foreign_key
|
@@ -182,14 +182,11 @@ module ActiveRecord #:nodoc:
|
|
182
182
|
self.versioned_inheritance_column = options[:inheritance_column] || "versioned_#{inheritance_column}"
|
183
183
|
self.version_column = options[:version_column] || 'version'
|
184
184
|
self.deleted_in_original_table_flag = options[:deleted_in_original_table_flag] || 'deleted_in_original_table'
|
185
|
-
self.
|
185
|
+
self.record_restored_flag = options[:record_restored_flag] || 'record_restored'
|
186
186
|
self.version_sequence_name = options[:sequence_name]
|
187
187
|
self.max_version_limit = options[:limit].to_i
|
188
188
|
self.version_condition = options[:if] || true
|
189
189
|
self.non_versioned_columns = [self.primary_key, inheritance_column, self.version_column, 'lock_version', versioned_inheritance_column] + options[:non_versioned_columns].to_a.map(&:to_s)
|
190
|
-
if options[:association_options].is_a?(Hash) && options[:association_options][:dependent] == :nullify
|
191
|
-
raise "Illegal option :dependent => :nullify - this would produce orphans in version model"
|
192
|
-
end
|
193
190
|
self.version_association_options = {
|
194
191
|
:class_name => "#{self.to_s}::#{versioned_class_name}",
|
195
192
|
:foreign_key => versioned_foreign_key
|
@@ -204,7 +201,7 @@ module ActiveRecord #:nodoc:
|
|
204
201
|
options[:extend] = self.const_get(extension_module_name)
|
205
202
|
end
|
206
203
|
|
207
|
-
class_eval <<-CLASS_METHODS
|
204
|
+
class_eval <<-CLASS_METHODS, __FILE__, __LINE__ + 1
|
208
205
|
has_many :versions, version_association_options do
|
209
206
|
# finds earliest version of this record
|
210
207
|
def earliest
|
@@ -234,7 +231,6 @@ module ActiveRecord #:nodoc:
|
|
234
231
|
const_set(versioned_class_name, Class.new(ActiveRecord::Base)).class_eval do
|
235
232
|
def self.reloadable? ; false ; end
|
236
233
|
# find first version before the given version
|
237
|
-
# TODO: replace "version" in selects with version_column, use select-method instead of find
|
238
234
|
def self.before(version)
|
239
235
|
find :first, :order => 'version desc',
|
240
236
|
:conditions => ["#{original_class.versioned_foreign_key} = ? and version < ?", version.send(original_class.versioned_foreign_key), version.version]
|
@@ -267,7 +263,7 @@ module ActiveRecord #:nodoc:
|
|
267
263
|
version_hash = self.attributes
|
268
264
|
version_hash.delete "id"
|
269
265
|
version_hash.delete self.original_class.deleted_in_original_table_flag.to_s
|
270
|
-
version_hash.delete self.original_class.
|
266
|
+
version_hash.delete self.original_class.record_restored_flag.to_s
|
271
267
|
version_hash.delete self.original_class.versioned_foreign_key.to_s
|
272
268
|
|
273
269
|
restored_record = self.original_class.new(version_hash)
|
@@ -275,26 +271,18 @@ module ActiveRecord #:nodoc:
|
|
275
271
|
if restored_record.respond_to? :updated_at=
|
276
272
|
restored_record.updated_at = Time.now
|
277
273
|
end
|
278
|
-
# DON'T EVEN THINK ABOUT CALCULATING THE VERSION NUMBER USING THE VERSIONS ASSOCIATION HERE:
|
279
|
-
# There is a problem in ActiveRecord. An association Relation will be converted to an Array internally, when the SQL-select is
|
280
|
-
# executed.
|
281
|
-
# Some ActiveRecord-Methods (for example #ActiveRecord::Base::AutosaveAssociation#save_collection_association) try to use ActiveRecord methods
|
282
|
-
# with these Relations, and if these Relations have been converted to Arrays, these calls fail with an Exception
|
283
|
-
new_version_number = self.class.where(self.original_class.versioned_foreign_key => id).order('id desc').first.send(restored_record.version_column).to_i + 1
|
284
|
-
restored_record.send("#{restored_record.version_column}=", new_version_number)
|
285
274
|
unless restored_record.save_without_revision(perform_validation)
|
286
275
|
raise RuntimeError.new("Couldn't restore the record, id = #{id} class = #{self.class.name}")
|
287
276
|
end
|
288
|
-
restored_record.save_version(true, false, self.send(self.original_class.version_column))
|
289
|
-
end
|
290
|
-
|
291
|
-
def record_restored?
|
292
|
-
self.read_attribute(self.original_class.record_restored_column) != nil
|
293
|
-
end
|
294
|
-
alias :record_restored :record_restored?
|
295
277
|
|
296
|
-
|
297
|
-
|
278
|
+
new_version = clone
|
279
|
+
new_version.version += 1
|
280
|
+
new_version.send("#{self.original_class.deleted_in_original_table_flag}=", false)
|
281
|
+
new_version.send("#{self.original_class.record_restored_flag}=", true)
|
282
|
+
if new_version.respond_to? :updated_at=
|
283
|
+
new_version.updated_at = Time.now
|
284
|
+
end
|
285
|
+
new_version.save!
|
298
286
|
end
|
299
287
|
|
300
288
|
def original_record_exists?
|
@@ -319,15 +307,15 @@ module ActiveRecord #:nodoc:
|
|
319
307
|
end
|
320
308
|
|
321
309
|
# Saves a version of the model in the versioned table. This is called in the after_save callback by default
|
322
|
-
def save_version
|
323
|
-
if @saving_version
|
310
|
+
def save_version
|
311
|
+
if @saving_version
|
324
312
|
@saving_version = nil
|
325
313
|
rev = self.class.versioned_class.new
|
326
314
|
clone_versioned_model(self, rev)
|
327
315
|
rev.send("#{self.class.version_column}=", send(self.class.version_column))
|
328
316
|
rev.send("#{self.class.versioned_foreign_key}=", id)
|
329
|
-
rev.send("#{self.class.deleted_in_original_table_flag}=",
|
330
|
-
rev.send("#{self.class.
|
317
|
+
rev.send("#{self.class.deleted_in_original_table_flag}=", false)
|
318
|
+
rev.send("#{self.class.record_restored_flag}=", false)
|
331
319
|
if rev.respond_to? :updated_at=
|
332
320
|
rev.updated_at = Time.now
|
333
321
|
end
|
@@ -343,7 +331,7 @@ module ActiveRecord #:nodoc:
|
|
343
331
|
rev.send("#{self.class.version_column}=", highest_version+1)
|
344
332
|
rev.send("#{self.class.versioned_foreign_key}=", id)
|
345
333
|
rev.send("#{self.class.deleted_in_original_table_flag}=", true)
|
346
|
-
rev.send("#{self.class.
|
334
|
+
rev.send("#{self.class.record_restored_flag}=", false)
|
347
335
|
if rev.respond_to? :updated_at=
|
348
336
|
rev.updated_at = Time.now
|
349
337
|
end
|
@@ -363,11 +351,9 @@ module ActiveRecord #:nodoc:
|
|
363
351
|
# Reverts a model to a given version. Takes either a version number or an instance of the versioned model
|
364
352
|
def revert_to(version)
|
365
353
|
if version.is_a?(self.class.versioned_class)
|
366
|
-
@reverted_from = version.send(self.class.version_column)
|
367
354
|
return false unless version.send(self.class.versioned_foreign_key) == id and !version.new_record?
|
368
355
|
else
|
369
|
-
|
370
|
-
return false unless version = versions.where(self.class.version_column => version).first
|
356
|
+
return false unless version = versions.send("find_by_#{self.class.version_column}", version)
|
371
357
|
end
|
372
358
|
self.clone_versioned_model(version, self)
|
373
359
|
send("#{self.class.version_column}=", version.send(self.class.version_column))
|
@@ -377,13 +363,7 @@ module ActiveRecord #:nodoc:
|
|
377
363
|
# Reverts a model to a given version and saves the model.
|
378
364
|
# Takes either a version number or an instance of the versioned model
|
379
365
|
def revert_to!(version)
|
380
|
-
|
381
|
-
set_new_version
|
382
|
-
save_without_revision
|
383
|
-
save_version(true, false, @reverted_from)
|
384
|
-
else
|
385
|
-
false
|
386
|
-
end
|
366
|
+
revert_to(version) ? save_without_revision : false
|
387
367
|
end
|
388
368
|
|
389
369
|
# Temporarily turns off Optimistic Locking while saving. Used when reverting so that a new version is not created.
|
@@ -486,7 +466,7 @@ module ActiveRecord #:nodoc:
|
|
486
466
|
def find_newest_version
|
487
467
|
return nil if self.id.nil?
|
488
468
|
|
489
|
-
self.class.versioned_class.
|
469
|
+
self.class.versioned_class.find(:first, :conditions => "#{self.class.versioned_foreign_key} = #{self.id}", :order => "version DESC")
|
490
470
|
end
|
491
471
|
|
492
472
|
def highest_version
|
@@ -501,22 +481,22 @@ module ActiveRecord #:nodoc:
|
|
501
481
|
def find_version(version)
|
502
482
|
return nil if self.id.nil?
|
503
483
|
|
504
|
-
ret = self.class.versioned_class.
|
484
|
+
ret = self.class.versioned_class.find(:first, :conditions => "#{self.class.versioned_foreign_key} = #{self.id} and version=#{version}") # TODO: version column
|
505
485
|
raise "find_version: version #{version} not found in database" unless ret
|
506
486
|
ret
|
507
487
|
end
|
508
488
|
|
509
489
|
protected
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
490
|
+
# sets the new version before saving, unless you're using optimistic locking. In that case, let it take care of the version.
|
491
|
+
def set_new_version
|
492
|
+
@saving_version = new_record? || save_version?
|
493
|
+
self.send("#{self.class.version_column}=", next_version) if new_record? || (!locking_enabled? && save_version?)
|
494
|
+
end
|
515
495
|
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
496
|
+
# Gets the next available version for the current record, or 1 for a new record
|
497
|
+
def next_version
|
498
|
+
(new_record? ? 0 : versions.calculate(:maximum, version_column).to_i) + 1
|
499
|
+
end
|
520
500
|
|
521
501
|
module ClassMethods
|
522
502
|
# Returns an array of columns that are versioned. See non_versioned_columns
|
@@ -543,7 +523,7 @@ module ActiveRecord #:nodoc:
|
|
543
523
|
t.column versioned_foreign_key, :integer
|
544
524
|
t.column version_column, :integer
|
545
525
|
t.column deleted_in_original_table_flag, :boolean, :default => false
|
546
|
-
t.column
|
526
|
+
t.column record_restored_flag, :boolean, :default => false
|
547
527
|
end
|
548
528
|
|
549
529
|
self.versioned_columns.each do |col|
|
@@ -12,8 +12,8 @@ Gem::Specification.new do |s|
|
|
12
12
|
## If your rubyforge_project name is different, then edit it and comment out
|
13
13
|
## the sub! line in the Rakefile
|
14
14
|
s.name = 'rtiss_acts_as_versioned'
|
15
|
-
s.version = '0.
|
16
|
-
s.date = '2014-
|
15
|
+
s.version = '0.8.0'
|
16
|
+
s.date = '2014-10-30'
|
17
17
|
s.rubyforge_project = 'rtiss_acts_as_versioned'
|
18
18
|
s.summary = "Add simple versioning to ActiveRecord models (TISS version)."
|
19
19
|
s.description = "Add simple versioning to ActiveRecord models (TISS version).
|
@@ -2,26 +2,26 @@ welcome_1:
|
|
2
2
|
id: 1
|
3
3
|
page_id: 1
|
4
4
|
title: Welcome to the weblg
|
5
|
-
|
5
|
+
lock_version: 23
|
6
6
|
version_type: LockedPage
|
7
7
|
|
8
8
|
welcome_2:
|
9
9
|
id: 2
|
10
10
|
page_id: 1
|
11
11
|
title: Welcome to the weblog
|
12
|
-
|
12
|
+
lock_version: 24
|
13
13
|
version_type: LockedPage
|
14
14
|
|
15
15
|
thinking_1:
|
16
16
|
id: 3
|
17
17
|
page_id: 2
|
18
18
|
title: So I was thinking!!!
|
19
|
-
|
19
|
+
lock_version: 23
|
20
20
|
version_type: SpecialLockedPage
|
21
21
|
|
22
22
|
thinking_2:
|
23
23
|
id: 4
|
24
24
|
page_id: 2
|
25
25
|
title: So I was thinking
|
26
|
-
|
26
|
+
lock_version: 24
|
27
27
|
version_type: SpecialLockedPage
|
data/test/fixtures/page.rb
CHANGED
@@ -29,6 +29,7 @@ class LockedPage < ActiveRecord::Base
|
|
29
29
|
:foreign_key => :page_id,
|
30
30
|
:table_name => :locked_pages_revisions,
|
31
31
|
:class_name => 'LockedPageRevision',
|
32
|
+
:version_column => :lock_version,
|
32
33
|
:limit => 2,
|
33
34
|
:if_changed => :title,
|
34
35
|
:extend => LockedPageExtension
|
data/test/fixtures/widget.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class Widget < ActiveRecord::Base
|
2
2
|
acts_as_versioned :sequence_name => 'widgets_seq', :association_options => {
|
3
|
-
:
|
3
|
+
:dependent => :nullify, :order => 'version desc'
|
4
4
|
}
|
5
5
|
non_versioned_columns << 'foo'
|
6
6
|
end
|
data/test/schema.rb
CHANGED
@@ -19,7 +19,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
19
19
|
t.column :author_id, :integer
|
20
20
|
t.column :revisor_id, :integer
|
21
21
|
t.column :deleted_in_original_table, :boolean
|
22
|
-
t.column :record_restored, :
|
22
|
+
t.column :record_restored, :boolean
|
23
23
|
end
|
24
24
|
|
25
25
|
add_index :pages_h, [:page_id, :version], :unique => true
|
@@ -31,7 +31,6 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
31
31
|
|
32
32
|
create_table :locked_pages, :force => true do |t|
|
33
33
|
t.column :lock_version, :integer
|
34
|
-
t.column :version, :integer
|
35
34
|
t.column :title, :string, :limit => 255
|
36
35
|
t.column :body, :text
|
37
36
|
t.column :type, :string, :limit => 255
|
@@ -39,17 +38,16 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
39
38
|
|
40
39
|
create_table :locked_pages_revisions, :force => true do |t|
|
41
40
|
t.column :page_id, :integer
|
42
|
-
t.column :
|
43
|
-
#t.column :lock_version, :integer
|
41
|
+
t.column :lock_version, :integer
|
44
42
|
t.column :title, :string, :limit => 255
|
45
43
|
t.column :body, :text
|
46
44
|
t.column :version_type, :string, :limit => 255
|
47
45
|
t.column :updated_at, :datetime
|
48
46
|
t.column :deleted_in_original_table, :boolean
|
49
|
-
t.column :record_restored, :
|
47
|
+
t.column :record_restored, :boolean
|
50
48
|
end
|
51
49
|
|
52
|
-
add_index :locked_pages_revisions, [:page_id, :
|
50
|
+
add_index :locked_pages_revisions, [:page_id, :lock_version], :unique => true
|
53
51
|
|
54
52
|
create_table :widgets, :force => true do |t|
|
55
53
|
t.column :name, :string, :limit => 50
|
@@ -64,7 +62,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
64
62
|
t.column :version, :integer
|
65
63
|
t.column :updated_at, :datetime
|
66
64
|
t.column :deleted_in_original_table, :boolean
|
67
|
-
t.column :record_restored, :
|
65
|
+
t.column :record_restored, :boolean
|
68
66
|
end
|
69
67
|
|
70
68
|
add_index :widgets_h, [:widget_id, :version], :unique => true
|
@@ -85,7 +83,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
85
83
|
t.column :doesnt_trigger_version,:string
|
86
84
|
t.column :version, :integer
|
87
85
|
t.column :deleted_in_original_table, :boolean
|
88
|
-
t.column :record_restored, :
|
86
|
+
t.column :record_restored, :boolean
|
89
87
|
end
|
90
88
|
|
91
89
|
add_index :landmark_h, [:landmark_id, :version], :unique => true
|
@@ -113,7 +111,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
113
111
|
t.string "name", :limit => 50
|
114
112
|
t.string "beschreibung", :limit => 250
|
115
113
|
t.boolean "deleted_in_original_table", :precision => 1, :scale => 0
|
116
|
-
t.
|
114
|
+
t.boolean "record_restored", :precision => 1, :scale => 0
|
117
115
|
t.integer "parent_id", :precision => 38, :scale => 0
|
118
116
|
t.string "beschreibung_intern", :limit => 4000
|
119
117
|
t.string "geltungsbereich", :limit => 1000
|
@@ -146,7 +144,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
146
144
|
t.string "name", :limit => 50
|
147
145
|
t.string "beschreibung", :limit => 250
|
148
146
|
t.boolean "deleted_in_original_table", :precision => 1, :scale => 0
|
149
|
-
t.
|
147
|
+
t.boolean "record_restored", :precision => 1, :scale => 0
|
150
148
|
t.integer "parent_id", :precision => 38, :scale => 0
|
151
149
|
t.string "beschreibung_intern", :limit => 4000
|
152
150
|
t.string "geltungsbereich", :limit => 1000
|
data/test/tiss_test.rb
CHANGED
@@ -106,63 +106,23 @@ class TissTest < ActiveSupport::TestCase
|
|
106
106
|
oid = o.id
|
107
107
|
v = o.find_version(1)
|
108
108
|
assert v!=nil
|
109
|
-
|
109
|
+
|
110
110
|
assert_raises(RuntimeError) { v.restore }
|
111
111
|
assert !v.deleted_in_original_table
|
112
112
|
assert !v.record_restored, "Record_restored shows that the record was undeleted (should be false) for a newly created record"
|
113
113
|
|
114
|
-
old_version = o.version
|
115
114
|
o.destroy
|
116
115
|
v = o.find_newest_version
|
117
|
-
|
118
|
-
assert v.deleted_in_original_table, "Deleted-Flag in versioned record is not set"
|
119
|
-
assert_equal old_version + 1, v.version, "Destroy did not increment version number in history record"
|
116
|
+
assert v.deleted_in_original_table
|
120
117
|
|
121
118
|
v.restore
|
122
|
-
restored_version = v.version
|
123
119
|
assert !v.record_restored, "Record_restored shows that the record was undeleted (should be false) for the restored version record (but should be in the newly created record)"
|
124
120
|
o = Rolle.find oid
|
121
|
+
assert v.version == o.version, "Version field not restored correctly"
|
122
|
+
|
125
123
|
v = o.find_newest_version
|
126
|
-
v_old = v
|
127
|
-
assert_equal v.version, o.version
|
128
|
-
assert_equal old_version + 2, v.version, "Version field not restored correctly"
|
129
124
|
assert !v.deleted_in_original_table, "Deleted_in_original_table doesn't show that the record was undeleted (should be false)"
|
130
125
|
assert v.record_restored, "Record_restored doesn't show that the record was undeleted (should be true) for the version record created upon restore"
|
131
|
-
assert_equal restored_version, v.record_restored_from_version
|
132
|
-
|
133
|
-
o.name = 'kaputt'
|
134
|
-
assert o.save
|
135
|
-
o.destroy
|
136
|
-
v = o.find_newest_version
|
137
|
-
v.restore
|
138
|
-
o = Rolle.find oid
|
139
|
-
assert_equal v.version + 1, o.version
|
140
|
-
assert_equal 'kaputt', o.name
|
141
|
-
assert_equal v.version, o.find_newest_version.record_restored_from_version
|
142
|
-
o.destroy
|
143
|
-
v_old.restore
|
144
|
-
o = Rolle.find oid
|
145
|
-
assert_equal 'lebt', o.name
|
146
|
-
assert_equal v_old.version, o.find_newest_version.record_restored_from_version
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_restore_and_destroy_with_revision_on_every_change
|
150
|
-
r = Rolle.new(:name => 'karin')
|
151
|
-
assert r.save
|
152
|
-
r.name = 'zak'
|
153
|
-
assert r.save
|
154
|
-
assert_equal 2, Rolle::Version.count
|
155
|
-
r.destroy
|
156
|
-
assert_equal 0, Rolle.count
|
157
|
-
assert_equal 3, Rolle::Version.count
|
158
|
-
assert version = r.find_version(3)
|
159
|
-
assert version.deleted_in_original_table?
|
160
|
-
assert version = r.find_version(2)
|
161
|
-
version.restore
|
162
|
-
assert r = Rolle.first
|
163
|
-
assert r.find_newest_version.record_restored?
|
164
|
-
assert_equal 4, Rolle::Version.count
|
165
|
-
assert_equal 4, r.version
|
166
126
|
end
|
167
127
|
|
168
128
|
def test_original_record_exists
|
@@ -233,8 +193,7 @@ class TissTest < ActiveSupport::TestCase
|
|
233
193
|
assert r.save
|
234
194
|
r.name = 'zak'
|
235
195
|
assert r.save
|
236
|
-
r.
|
237
|
-
assert_equal 2, r.versions.size
|
196
|
+
assert_equal 2, r.versions.size
|
238
197
|
assert_equal 2, r.versions.count
|
239
198
|
end
|
240
199
|
|
@@ -246,9 +205,9 @@ class TissTest < ActiveSupport::TestCase
|
|
246
205
|
|
247
206
|
r = Rolle.new(:name => 'karin')
|
248
207
|
assert r.save
|
208
|
+
|
249
209
|
assert_raises RuntimeError do version.restore end
|
250
|
-
|
251
|
-
version.restore(perform_validations = false) #end
|
210
|
+
assert_nothing_raised do version.restore(perform_validations = false) end
|
252
211
|
end
|
253
212
|
|
254
213
|
def test_save_without_revision
|
data/test/versioned_test.rb
CHANGED
@@ -29,14 +29,11 @@ class VersionedTest < ActiveSupport::TestCase
|
|
29
29
|
|
30
30
|
def test_rollback_with_version_number
|
31
31
|
p = pages(:welcome)
|
32
|
-
versioncount = p.versions.count
|
33
32
|
assert_equal 24, p.version
|
34
33
|
assert_equal 'Welcome to the weblog', p.title
|
35
34
|
|
36
35
|
assert p.revert_to!(23), "Couldn't revert to 23"
|
37
|
-
|
38
|
-
assert_equal versioncount + 1, p.versions.count
|
39
|
-
assert_equal 25, p.version
|
36
|
+
assert_equal 23, p.version
|
40
37
|
assert_equal 'Welcome to the weblg', p.title
|
41
38
|
end
|
42
39
|
|
@@ -59,14 +56,11 @@ class VersionedTest < ActiveSupport::TestCase
|
|
59
56
|
|
60
57
|
def test_rollback_with_version_class
|
61
58
|
p = pages(:welcome)
|
62
|
-
versioncount = p.versions.count
|
63
59
|
assert_equal 24, p.version
|
64
60
|
assert_equal 'Welcome to the weblog', p.title
|
65
61
|
|
66
62
|
assert p.revert_to!(p.versions.find_by_version(23)), "Couldn't revert to 23"
|
67
|
-
|
68
|
-
assert_equal versioncount + 1, p.versions.count
|
69
|
-
assert_equal 25, p.version
|
63
|
+
assert_equal 23, p.version
|
70
64
|
assert_equal 'Welcome to the weblg', p.title
|
71
65
|
end
|
72
66
|
|
@@ -87,7 +81,7 @@ class VersionedTest < ActiveSupport::TestCase
|
|
87
81
|
assert_equal 'Welcome to the weblog', p.title
|
88
82
|
assert_equal 'LockedPage', p.versions.first.version_type
|
89
83
|
|
90
|
-
assert p.revert_to!(p.versions.first.
|
84
|
+
assert p.revert_to!(p.versions.first.lock_version), "Couldn't revert to 23"
|
91
85
|
assert_equal 'Welcome to the weblg', p.title
|
92
86
|
assert_equal 'LockedPage', p.versions.first.version_type
|
93
87
|
end
|
@@ -114,7 +108,7 @@ class VersionedTest < ActiveSupport::TestCase
|
|
114
108
|
p = locked_pages(:thinking)
|
115
109
|
assert_equal 'So I was thinking', p.title
|
116
110
|
|
117
|
-
assert p.revert_to!(p.versions.first.
|
111
|
+
assert p.revert_to!(p.versions.first.lock_version), "Couldn't revert to 1"
|
118
112
|
assert_equal 'So I was thinking!!!', p.title
|
119
113
|
assert_equal 'SpecialLockedPage', p.versions.first.version_type
|
120
114
|
end
|
@@ -208,7 +202,7 @@ class VersionedTest < ActiveSupport::TestCase
|
|
208
202
|
p.title = "title#{i}"
|
209
203
|
p.save
|
210
204
|
assert_equal "title#{i}", p.title
|
211
|
-
assert_equal (i+4), p.
|
205
|
+
assert_equal (i+4), p.lock_version
|
212
206
|
assert p.versions(true).size <= 2, "locked version can only store 2 versions"
|
213
207
|
end
|
214
208
|
end
|
@@ -221,25 +215,25 @@ class VersionedTest < ActiveSupport::TestCase
|
|
221
215
|
|
222
216
|
def test_track_altered_attributes
|
223
217
|
p = LockedPage.create! :title => "title"
|
224
|
-
assert_equal 1, p.
|
218
|
+
assert_equal 1, p.lock_version
|
225
219
|
assert_equal 1, p.versions(true).size
|
226
220
|
|
227
221
|
p.body = 'whoa'
|
228
222
|
assert !p.save_version?
|
229
223
|
p.save
|
230
|
-
assert_equal
|
224
|
+
assert_equal 2, p.lock_version # still increments version because of optimistic locking
|
231
225
|
assert_equal 1, p.versions(true).size
|
232
226
|
|
233
227
|
p.title = 'updated title'
|
234
228
|
assert p.save_version?
|
235
229
|
p.save
|
236
|
-
assert_equal
|
237
|
-
assert_equal
|
230
|
+
assert_equal 3, p.lock_version
|
231
|
+
assert_equal 1, p.versions(true).size # version 1 deleted
|
238
232
|
|
239
233
|
p.title = 'updated title!'
|
240
234
|
assert p.save_version?
|
241
235
|
p.save
|
242
|
-
assert_equal
|
236
|
+
assert_equal 4, p.lock_version
|
243
237
|
assert_equal 2, p.versions(true).size # version 1 deleted
|
244
238
|
end
|
245
239
|
|
@@ -279,7 +273,7 @@ class VersionedTest < ActiveSupport::TestCase
|
|
279
273
|
|
280
274
|
association = Widget.reflect_on_association(:versions)
|
281
275
|
options = association.options
|
282
|
-
|
276
|
+
assert_equal :nullify, options[:dependent]
|
283
277
|
assert_equal 'version desc', options[:order]
|
284
278
|
assert_equal 'widget_id', options[:foreign_key]
|
285
279
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rtiss_acts_as_versioned
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Olson
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-10-30 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|