rtiss_acts_as_versioned 0.7.9 → 0.8.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.
- 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
|