rtiss_acts_as_versioned 0.7.7 → 0.7.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 85c1fb778a88b8b161aa9afc0d75f4fb8f382a26
4
- data.tar.gz: d874fef09609b09e01902b1a8913ad282833e961
3
+ metadata.gz: 2f630279fadaf312a0d49b69fe00dbdfadf0dde5
4
+ data.tar.gz: a464dd23cb736ad635080101e14ef751afaa8543
5
5
  SHA512:
6
- metadata.gz: b07f42376af502402330d3ed5a89a785ea057fde9bdd6f8260e3da5186cb90b1b3dee89dff6bd75029ed458de5595cc393dba9eff1f315ab8c6c3421d1c6024f
7
- data.tar.gz: 4aa282b90818ad67588f81da4fbd737267dea7e8dac0149a63c83ba767df48f85346aa44e0fe3847d94e3cb083876e388695d5c5feaf0d380777f61b9cc65a56
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.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, :record_restored_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.record_restored_flag = options[:record_restored_flag] || 'record_restored'
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.record_restored_flag.to_s
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
- 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!
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}=", false)
318
- rev.send("#{self.class.record_restored_flag}=", false)
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.record_restored_flag}=", false)
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
- return false unless version = versions.send("find_by_#{self.class.version_column}", version)
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) ? save_without_revision : false
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.find(:first, :conditions => "#{self.class.versioned_foreign_key} = #{self.id}", :order => "version DESC")
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.find(:first, :conditions => "#{self.class.versioned_foreign_key} = #{self.id} and version=#{version}") # TODO: version column
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
- # 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
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
- # 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
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 record_restored_flag, :boolean, :default => false
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.7'
16
- s.date = '2014-11-03'
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).
@@ -1,10 +1,12 @@
1
1
  welcome:
2
2
  id: 1
3
3
  title: Welcome to the weblog
4
- lock_version: 24
4
+ version: 24
5
+ lock_version: 1
5
6
  type: LockedPage
6
7
  thinking:
7
8
  id: 2
8
9
  title: So I was thinking
9
- lock_version: 24
10
+ version: 24
11
+ lock_version: 1
10
12
  type: SpecialLockedPage
@@ -2,26 +2,26 @@ welcome_1:
2
2
  id: 1
3
3
  page_id: 1
4
4
  title: Welcome to the weblg
5
- lock_version: 23
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
- lock_version: 24
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
- lock_version: 23
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
- lock_version: 24
26
+ version: 24
27
27
  version_type: SpecialLockedPage
@@ -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
@@ -1,6 +1,6 @@
1
1
  class Widget < ActiveRecord::Base
2
2
  acts_as_versioned :sequence_name => 'widgets_seq', :association_options => {
3
- :dependent => :nullify, :order => 'version desc'
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, :boolean
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 :lock_version, :integer
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, :boolean
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, :lock_version], :unique => true
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, :boolean
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, :boolean
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.boolean "record_restored", :precision => 1, :scale => 0
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.boolean "record_restored", :precision => 1, :scale => 0
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
- assert v.deleted_in_original_table
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
- assert_equal 2, r.versions.size
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 version.restore(perform_validations = false) end
250
+ #assert_nothing_raised do
251
+ version.restore(perform_validations = false) #end
211
252
  end
212
253
 
213
254
  def test_save_without_revision
@@ -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
- assert_equal 23, p.version
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
- assert_equal 23, p.version
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.lock_version), "Couldn't revert to 23"
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.lock_version), "Couldn't revert to 1"
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.lock_version
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.lock_version
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 2, p.lock_version # still increments version because of optimistic locking
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 3, p.lock_version
231
- assert_equal 1, p.versions(true).size # version 1 deleted
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 4, p.lock_version
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.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-03 00:00:00.000000000 Z
13
+ date: 2014-11-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord