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 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