rtiss_acts_as_versioned 0.7.7 → 0.7.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -8
- data/lib/rtiss_acts_as_versioned.rb +51 -31
- data/rtiss_acts_as_versioned.gemspec +2 -2
- data/test/fixtures/locked_pages.yml +4 -2
- data/test/fixtures/locked_pages_revisions.yml +4 -4
- data/test/fixtures/page.rb +0 -1
- data/test/fixtures/widget.rb +1 -1
- data/test/schema.rb +10 -8
- data/test/tiss_test.rb +48 -7
- data/test/versioned_test.rb +17 -11
- 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: 2f630279fadaf312a0d49b69fe00dbdfadf0dde5
|
4
|
+
data.tar.gz: a464dd23cb736ad635080101e14ef751afaa8543
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73332935aafa174653421081523e244544595e740b6003a8b6be1907168f2645f467bafe4e55c63decebba4ac1c344f5d1dbe22b62b00e9709e9ed3c1fa49ef5
|
7
|
+
data.tar.gz: 0699711f61e6b4cda088686fab69a7533da97ae31e69132a434455451da2f1925fbc727e190119f39fda0553069a5a11d65d40943516de1ba3324d6ada50682a
|
data/Rakefile
CHANGED
@@ -73,14 +73,6 @@ 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
|
-
|
84
76
|
#############################################################################
|
85
77
|
#
|
86
78
|
# Packaging tasks
|
@@ -90,6 +82,7 @@ end
|
|
90
82
|
task :release => :build do
|
91
83
|
sh "git commit --allow-empty -a -m 'Release #{version}'"
|
92
84
|
sh "git tag #{version}"
|
85
|
+
sh "git push origin master"
|
93
86
|
sh "git push origin master --tags"
|
94
87
|
sh "gem push pkg/#{name}-#{version}.gem"
|
95
88
|
end
|
@@ -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.7.
|
23
|
+
VERSION = '0.7.8'
|
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_column
|
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,11 +182,14 @@ 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_column = options[:record_restored_column] || '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
|
190
193
|
self.version_association_options = {
|
191
194
|
:class_name => "#{self.to_s}::#{versioned_class_name}",
|
192
195
|
:foreign_key => versioned_foreign_key
|
@@ -231,6 +234,7 @@ module ActiveRecord #:nodoc:
|
|
231
234
|
const_set(versioned_class_name, Class.new(ActiveRecord::Base)).class_eval do
|
232
235
|
def self.reloadable? ; false ; end
|
233
236
|
# find first version before the given version
|
237
|
+
# TODO: replace "version" in selects with version_column, use select-method instead of find
|
234
238
|
def self.before(version)
|
235
239
|
find :first, :order => 'version desc',
|
236
240
|
:conditions => ["#{original_class.versioned_foreign_key} = ? and version < ?", version.send(original_class.versioned_foreign_key), version.version]
|
@@ -263,7 +267,7 @@ module ActiveRecord #:nodoc:
|
|
263
267
|
version_hash = self.attributes
|
264
268
|
version_hash.delete "id"
|
265
269
|
version_hash.delete self.original_class.deleted_in_original_table_flag.to_s
|
266
|
-
version_hash.delete self.original_class.
|
270
|
+
version_hash.delete self.original_class.record_restored_column.to_s
|
267
271
|
version_hash.delete self.original_class.versioned_foreign_key.to_s
|
268
272
|
|
269
273
|
restored_record = self.original_class.new(version_hash)
|
@@ -271,18 +275,26 @@ module ActiveRecord #:nodoc:
|
|
271
275
|
if restored_record.respond_to? :updated_at=
|
272
276
|
restored_record.updated_at = Time.now
|
273
277
|
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)
|
274
285
|
unless restored_record.save_without_revision(perform_validation)
|
275
286
|
raise RuntimeError.new("Couldn't restore the record, id = #{id} class = #{self.class.name}")
|
276
287
|
end
|
288
|
+
restored_record.save_version(true, false, self.send(self.original_class.version_column))
|
289
|
+
end
|
277
290
|
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
new_version.save!
|
291
|
+
def record_restored?
|
292
|
+
self.read_attribute(self.original_class.record_restored_column) != nil
|
293
|
+
end
|
294
|
+
alias :record_restored :record_restored?
|
295
|
+
|
296
|
+
def record_restored_from_version
|
297
|
+
self.read_attribute(self.original_class.record_restored_column)
|
286
298
|
end
|
287
299
|
|
288
300
|
def original_record_exists?
|
@@ -307,15 +319,15 @@ module ActiveRecord #:nodoc:
|
|
307
319
|
end
|
308
320
|
|
309
321
|
# Saves a version of the model in the versioned table. This is called in the after_save callback by default
|
310
|
-
def save_version
|
311
|
-
if @saving_version
|
322
|
+
def save_version(save_this=false, deleted_flag=false, restored_from_version=nil)
|
323
|
+
if @saving_version || save_this
|
312
324
|
@saving_version = nil
|
313
325
|
rev = self.class.versioned_class.new
|
314
326
|
clone_versioned_model(self, rev)
|
315
327
|
rev.send("#{self.class.version_column}=", send(self.class.version_column))
|
316
328
|
rev.send("#{self.class.versioned_foreign_key}=", id)
|
317
|
-
rev.send("#{self.class.deleted_in_original_table_flag}=",
|
318
|
-
rev.send("#{self.class.
|
329
|
+
rev.send("#{self.class.deleted_in_original_table_flag}=", deleted_flag)
|
330
|
+
rev.send("#{self.class.record_restored_column}=", restored_from_version)
|
319
331
|
if rev.respond_to? :updated_at=
|
320
332
|
rev.updated_at = Time.now
|
321
333
|
end
|
@@ -331,7 +343,7 @@ module ActiveRecord #:nodoc:
|
|
331
343
|
rev.send("#{self.class.version_column}=", highest_version+1)
|
332
344
|
rev.send("#{self.class.versioned_foreign_key}=", id)
|
333
345
|
rev.send("#{self.class.deleted_in_original_table_flag}=", true)
|
334
|
-
rev.send("#{self.class.
|
346
|
+
rev.send("#{self.class.record_restored_column}=", nil)
|
335
347
|
if rev.respond_to? :updated_at=
|
336
348
|
rev.updated_at = Time.now
|
337
349
|
end
|
@@ -351,9 +363,11 @@ module ActiveRecord #:nodoc:
|
|
351
363
|
# Reverts a model to a given version. Takes either a version number or an instance of the versioned model
|
352
364
|
def revert_to(version)
|
353
365
|
if version.is_a?(self.class.versioned_class)
|
366
|
+
@reverted_from = version.send(self.class.version_column)
|
354
367
|
return false unless version.send(self.class.versioned_foreign_key) == id and !version.new_record?
|
355
368
|
else
|
356
|
-
|
369
|
+
@reverted_from = version
|
370
|
+
return false unless version = versions.where(self.class.version_column => version).first
|
357
371
|
end
|
358
372
|
self.clone_versioned_model(version, self)
|
359
373
|
send("#{self.class.version_column}=", version.send(self.class.version_column))
|
@@ -363,7 +377,13 @@ module ActiveRecord #:nodoc:
|
|
363
377
|
# Reverts a model to a given version and saves the model.
|
364
378
|
# Takes either a version number or an instance of the versioned model
|
365
379
|
def revert_to!(version)
|
366
|
-
revert_to(version)
|
380
|
+
if revert_to(version)
|
381
|
+
set_new_version
|
382
|
+
save_without_revision
|
383
|
+
save_version(true, false, @reverted_from)
|
384
|
+
else
|
385
|
+
false
|
386
|
+
end
|
367
387
|
end
|
368
388
|
|
369
389
|
# Temporarily turns off Optimistic Locking while saving. Used when reverting so that a new version is not created.
|
@@ -466,7 +486,7 @@ module ActiveRecord #:nodoc:
|
|
466
486
|
def find_newest_version
|
467
487
|
return nil if self.id.nil?
|
468
488
|
|
469
|
-
self.class.versioned_class.
|
489
|
+
self.class.versioned_class.where("#{self.class.versioned_foreign_key} = #{self.id}").order("version DESC").first
|
470
490
|
end
|
471
491
|
|
472
492
|
def highest_version
|
@@ -481,22 +501,22 @@ module ActiveRecord #:nodoc:
|
|
481
501
|
def find_version(version)
|
482
502
|
return nil if self.id.nil?
|
483
503
|
|
484
|
-
ret = self.class.versioned_class.
|
504
|
+
ret = self.class.versioned_class.where("#{self.class.versioned_foreign_key} = #{self.id} and #{self.class.version_column}=#{version}").first
|
485
505
|
raise "find_version: version #{version} not found in database" unless ret
|
486
506
|
ret
|
487
507
|
end
|
488
508
|
|
489
509
|
protected
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
510
|
+
# sets the new version before saving
|
511
|
+
def set_new_version
|
512
|
+
@saving_version = new_record? || save_version?
|
513
|
+
self.send("#{self.class.version_column}=", next_version) if new_record? || save_version?
|
514
|
+
end
|
495
515
|
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
516
|
+
# Gets the next available version for the current record, or 1 for a new record
|
517
|
+
def next_version
|
518
|
+
(new_record? ? 0 : versions.calculate(:maximum, version_column).to_i) + 1
|
519
|
+
end
|
500
520
|
|
501
521
|
module ClassMethods
|
502
522
|
# Returns an array of columns that are versioned. See non_versioned_columns
|
@@ -523,7 +543,7 @@ module ActiveRecord #:nodoc:
|
|
523
543
|
t.column versioned_foreign_key, :integer
|
524
544
|
t.column version_column, :integer
|
525
545
|
t.column deleted_in_original_table_flag, :boolean, :default => false
|
526
|
-
t.column
|
546
|
+
t.column record_restored_column, :integer, :default => nil
|
527
547
|
end
|
528
548
|
|
529
549
|
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.7.
|
16
|
-
s.date = '2014-11-
|
15
|
+
s.version = '0.7.8'
|
16
|
+
s.date = '2014-11-18'
|
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
|
+
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
|
+
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
|
+
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
|
+
version: 24
|
27
27
|
version_type: SpecialLockedPage
|
data/test/fixtures/page.rb
CHANGED
@@ -29,7 +29,6 @@ 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,
|
33
32
|
:limit => 2,
|
34
33
|
:if_changed => :title,
|
35
34
|
: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
|
+
:order => 'version desc' # Don't nullify the foreign key column when deleting the original record! :dependent => :nullify option removed
|
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, :integer, :precision => 38, :scale => 0, :default => nil
|
23
23
|
end
|
24
24
|
|
25
25
|
add_index :pages_h, [:page_id, :version], :unique => true
|
@@ -31,6 +31,7 @@ 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
|
34
35
|
t.column :title, :string, :limit => 255
|
35
36
|
t.column :body, :text
|
36
37
|
t.column :type, :string, :limit => 255
|
@@ -38,16 +39,17 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
38
39
|
|
39
40
|
create_table :locked_pages_revisions, :force => true do |t|
|
40
41
|
t.column :page_id, :integer
|
41
|
-
t.column :
|
42
|
+
t.column :version, :integer
|
43
|
+
#t.column :lock_version, :integer
|
42
44
|
t.column :title, :string, :limit => 255
|
43
45
|
t.column :body, :text
|
44
46
|
t.column :version_type, :string, :limit => 255
|
45
47
|
t.column :updated_at, :datetime
|
46
48
|
t.column :deleted_in_original_table, :boolean
|
47
|
-
t.column :record_restored, :
|
49
|
+
t.column :record_restored, :integer, :precision => 38, :scale => 0, :default => nil
|
48
50
|
end
|
49
51
|
|
50
|
-
add_index :locked_pages_revisions, [:page_id, :
|
52
|
+
add_index :locked_pages_revisions, [:page_id, :version], :unique => true
|
51
53
|
|
52
54
|
create_table :widgets, :force => true do |t|
|
53
55
|
t.column :name, :string, :limit => 50
|
@@ -62,7 +64,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
62
64
|
t.column :version, :integer
|
63
65
|
t.column :updated_at, :datetime
|
64
66
|
t.column :deleted_in_original_table, :boolean
|
65
|
-
t.column :record_restored, :
|
67
|
+
t.column :record_restored, :integer, :precision => 38, :scale => 0, :default => nil
|
66
68
|
end
|
67
69
|
|
68
70
|
add_index :widgets_h, [:widget_id, :version], :unique => true
|
@@ -83,7 +85,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
83
85
|
t.column :doesnt_trigger_version,:string
|
84
86
|
t.column :version, :integer
|
85
87
|
t.column :deleted_in_original_table, :boolean
|
86
|
-
t.column :record_restored, :
|
88
|
+
t.column :record_restored, :integer, :precision => 38, :scale => 0, :default => nil
|
87
89
|
end
|
88
90
|
|
89
91
|
add_index :landmark_h, [:landmark_id, :version], :unique => true
|
@@ -111,7 +113,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
111
113
|
t.string "name", :limit => 50
|
112
114
|
t.string "beschreibung", :limit => 250
|
113
115
|
t.boolean "deleted_in_original_table", :precision => 1, :scale => 0
|
114
|
-
t.
|
116
|
+
t.integer "record_restored", :precision => 38, :scale => 0, :default => nil
|
115
117
|
t.integer "parent_id", :precision => 38, :scale => 0
|
116
118
|
t.string "beschreibung_intern", :limit => 4000
|
117
119
|
t.string "geltungsbereich", :limit => 1000
|
@@ -144,7 +146,7 @@ ActiveRecord::Schema.define(:version => 0) do
|
|
144
146
|
t.string "name", :limit => 50
|
145
147
|
t.string "beschreibung", :limit => 250
|
146
148
|
t.boolean "deleted_in_original_table", :precision => 1, :scale => 0
|
147
|
-
t.
|
149
|
+
t.integer "record_restored", :precision => 38, :scale => 0, :default => nil
|
148
150
|
t.integer "parent_id", :precision => 38, :scale => 0
|
149
151
|
t.string "beschreibung_intern", :limit => 4000
|
150
152
|
t.string "geltungsbereich", :limit => 1000
|
data/test/tiss_test.rb
CHANGED
@@ -106,23 +106,63 @@ 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
|
114
115
|
o.destroy
|
115
116
|
v = o.find_newest_version
|
116
|
-
|
117
|
+
first_delete_version = v.version
|
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"
|
117
120
|
|
118
121
|
v.restore
|
122
|
+
restored_version = v.version
|
119
123
|
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)"
|
120
124
|
o = Rolle.find oid
|
121
|
-
assert v.version == o.version, "Version field not restored correctly"
|
122
|
-
|
123
125
|
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"
|
124
129
|
assert !v.deleted_in_original_table, "Deleted_in_original_table doesn't show that the record was undeleted (should be false)"
|
125
130
|
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
|
126
166
|
end
|
127
167
|
|
128
168
|
def test_original_record_exists
|
@@ -193,7 +233,8 @@ class TissTest < ActiveSupport::TestCase
|
|
193
233
|
assert r.save
|
194
234
|
r.name = 'zak'
|
195
235
|
assert r.save
|
196
|
-
|
236
|
+
r.reload
|
237
|
+
assert_equal 2, r.versions.size
|
197
238
|
assert_equal 2, r.versions.count
|
198
239
|
end
|
199
240
|
|
@@ -205,9 +246,9 @@ class TissTest < ActiveSupport::TestCase
|
|
205
246
|
|
206
247
|
r = Rolle.new(:name => 'karin')
|
207
248
|
assert r.save
|
208
|
-
|
209
249
|
assert_raises RuntimeError do version.restore end
|
210
|
-
assert_nothing_raised do
|
250
|
+
#assert_nothing_raised do
|
251
|
+
version.restore(perform_validations = false) #end
|
211
252
|
end
|
212
253
|
|
213
254
|
def test_save_without_revision
|
data/test/versioned_test.rb
CHANGED
@@ -29,11 +29,14 @@ class VersionedTest < ActiveSupport::TestCase
|
|
29
29
|
|
30
30
|
def test_rollback_with_version_number
|
31
31
|
p = pages(:welcome)
|
32
|
+
versioncount = p.versions.count
|
32
33
|
assert_equal 24, p.version
|
33
34
|
assert_equal 'Welcome to the weblog', p.title
|
34
35
|
|
35
36
|
assert p.revert_to!(23), "Couldn't revert to 23"
|
36
|
-
|
37
|
+
assert p.reload
|
38
|
+
assert_equal versioncount + 1, p.versions.count
|
39
|
+
assert_equal 25, p.version
|
37
40
|
assert_equal 'Welcome to the weblg', p.title
|
38
41
|
end
|
39
42
|
|
@@ -56,11 +59,14 @@ class VersionedTest < ActiveSupport::TestCase
|
|
56
59
|
|
57
60
|
def test_rollback_with_version_class
|
58
61
|
p = pages(:welcome)
|
62
|
+
versioncount = p.versions.count
|
59
63
|
assert_equal 24, p.version
|
60
64
|
assert_equal 'Welcome to the weblog', p.title
|
61
65
|
|
62
66
|
assert p.revert_to!(p.versions.find_by_version(23)), "Couldn't revert to 23"
|
63
|
-
|
67
|
+
assert p.reload
|
68
|
+
assert_equal versioncount + 1, p.versions.count
|
69
|
+
assert_equal 25, p.version
|
64
70
|
assert_equal 'Welcome to the weblg', p.title
|
65
71
|
end
|
66
72
|
|
@@ -81,7 +87,7 @@ class VersionedTest < ActiveSupport::TestCase
|
|
81
87
|
assert_equal 'Welcome to the weblog', p.title
|
82
88
|
assert_equal 'LockedPage', p.versions.first.version_type
|
83
89
|
|
84
|
-
assert p.revert_to!(p.versions.first.
|
90
|
+
assert p.revert_to!(p.versions.first.version), "Couldn't revert to 23"
|
85
91
|
assert_equal 'Welcome to the weblg', p.title
|
86
92
|
assert_equal 'LockedPage', p.versions.first.version_type
|
87
93
|
end
|
@@ -108,7 +114,7 @@ class VersionedTest < ActiveSupport::TestCase
|
|
108
114
|
p = locked_pages(:thinking)
|
109
115
|
assert_equal 'So I was thinking', p.title
|
110
116
|
|
111
|
-
assert p.revert_to!(p.versions.first.
|
117
|
+
assert p.revert_to!(p.versions.first.version), "Couldn't revert to 1"
|
112
118
|
assert_equal 'So I was thinking!!!', p.title
|
113
119
|
assert_equal 'SpecialLockedPage', p.versions.first.version_type
|
114
120
|
end
|
@@ -202,7 +208,7 @@ class VersionedTest < ActiveSupport::TestCase
|
|
202
208
|
p.title = "title#{i}"
|
203
209
|
p.save
|
204
210
|
assert_equal "title#{i}", p.title
|
205
|
-
assert_equal (i+4), p.
|
211
|
+
assert_equal (i+4), p.version
|
206
212
|
assert p.versions(true).size <= 2, "locked version can only store 2 versions"
|
207
213
|
end
|
208
214
|
end
|
@@ -215,25 +221,25 @@ class VersionedTest < ActiveSupport::TestCase
|
|
215
221
|
|
216
222
|
def test_track_altered_attributes
|
217
223
|
p = LockedPage.create! :title => "title"
|
218
|
-
assert_equal 1, p.
|
224
|
+
assert_equal 1, p.version
|
219
225
|
assert_equal 1, p.versions(true).size
|
220
226
|
|
221
227
|
p.body = 'whoa'
|
222
228
|
assert !p.save_version?
|
223
229
|
p.save
|
224
|
-
assert_equal
|
230
|
+
assert_equal 1, p.version # no increment, because we're not using lock_version column
|
225
231
|
assert_equal 1, p.versions(true).size
|
226
232
|
|
227
233
|
p.title = 'updated title'
|
228
234
|
assert p.save_version?
|
229
235
|
p.save
|
230
|
-
assert_equal
|
231
|
-
assert_equal
|
236
|
+
assert_equal 2, p.version
|
237
|
+
assert_equal 2, p.versions(true).size
|
232
238
|
|
233
239
|
p.title = 'updated title!'
|
234
240
|
assert p.save_version?
|
235
241
|
p.save
|
236
|
-
assert_equal
|
242
|
+
assert_equal 3, p.version
|
237
243
|
assert_equal 2, p.versions(true).size # version 1 deleted
|
238
244
|
end
|
239
245
|
|
@@ -273,7 +279,7 @@ class VersionedTest < ActiveSupport::TestCase
|
|
273
279
|
|
274
280
|
association = Widget.reflect_on_association(:versions)
|
275
281
|
options = association.options
|
276
|
-
assert_equal :nullify, options[:dependent]
|
282
|
+
#assert_equal :nullify, options[:dependent] #Removed! we do not nullify the foreign key, because on restore we want to set the correct original ID
|
277
283
|
assert_equal 'version desc', options[:order]
|
278
284
|
assert_equal 'widget_id', options[:foreign_key]
|
279
285
|
|
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.7.
|
4
|
+
version: 0.7.8
|
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-11-
|
13
|
+
date: 2014-11-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|