freerange_acts_as_versioned 0.8.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  group :development do
4
- gem 'rails', '3.0.0.beta4'
5
- gem 'sqlite3-ruby', '1.3.1'
4
+ gem 'rails', '~> 3.2'
5
+ gem 'pg', '~> 0.16'
6
6
  gem 'mysql', '2.8.1'
7
- end
7
+ end
@@ -7,20 +7,19 @@
7
7
  Gem::Specification.new do |s|
8
8
  s.specification_version = 2 if s.respond_to? :specification_version=
9
9
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
- s.rubygems_version = '1.3.5'
11
10
 
12
11
  ## Leave these as is they will be modified for you by the rake gemspec task.
13
12
  ## If your rubyforge_project name is different, then edit it and comment out
14
13
  ## the sub! line in the Rakefile
15
14
  s.name = 'freerange_acts_as_versioned'
16
- s.version = '0.8.2'
17
- s.date = '2012-04-24'
15
+ s.version = '1.0.0'
16
+ s.date = '2013-08-15'
18
17
  s.rubyforge_project = 'freerange_acts_as_versioned'
19
18
 
20
19
  ## Make sure your summary is short. The description may be as long
21
20
  ## as you like.
22
- s.summary = "Add simple versioning to ActiveRecord models. This version supports rails 3.1.1. Also it have support for autosave. It introduces new method auto_save_version which keeps 1 autosave version for an object."
23
- s.description = "Add simple versioning to ActiveRecord models. rails 3.1.1"
21
+ s.summary = "Add simple versioning to ActiveRecord models. This version supports rails 3.2. Also it have support for autosave. It introduces new method auto_save_version which keeps 1 autosave version for an object."
22
+ s.description = "Add simple versioning to ActiveRecord models. rails 3.2"
24
23
 
25
24
  ## List the primary authors. If there are a bunch of authors, it's probably
26
25
  ## better to set the email to an email list or something. If you don't have
@@ -40,7 +39,7 @@ Gem::Specification.new do |s|
40
39
 
41
40
  ## List your runtime dependencies here. Runtime dependencies are those
42
41
  ## that are needed for an end user to actually USE your code.
43
- s.add_dependency('activerecord', ["~> 3.1.1"])
42
+ s.add_dependency('activerecord', ["~> 3.2"])
44
43
 
45
44
  ## List your development dependencies here. Development dependencies are
46
45
  ## those that are only needed during development
@@ -82,4 +81,4 @@ Gem::Specification.new do |s|
82
81
  ## Test files will be grabbed from the file list. Make sure the path glob
83
82
  ## matches what you actually use.
84
83
  s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
85
- end
84
+ end
@@ -67,7 +67,7 @@ module ActiveRecord #:nodoc:
67
67
  #
68
68
  # See ActiveRecord::Acts::Versioned::ClassMethods#acts_as_versioned for configuration options
69
69
  module Versioned
70
- VERSION = "0.8.2"
70
+ VERSION = "1.0.0"
71
71
  CALLBACKS = [:set_new_version, :save_version, :save_version?]
72
72
 
73
73
  # == Configuration options
@@ -249,12 +249,12 @@ module ActiveRecord #:nodoc:
249
249
 
250
250
  versioned_class.cattr_accessor :original_class
251
251
  versioned_class.original_class = self
252
- versioned_class.set_table_name versioned_table_name
252
+ versioned_class.table_name = versioned_table_name
253
253
  versioned_class.belongs_to self.to_s.demodulize.underscore.to_sym,
254
254
  :class_name => "::#{self.to_s}",
255
255
  :foreign_key => versioned_foreign_key
256
256
  versioned_class.send :include, options[:extend] if options[:extend].is_a?(Module)
257
- versioned_class.set_sequence_name version_sequence_name if version_sequence_name
257
+ versioned_class.sequence_name = version_sequence_name if version_sequence_name
258
258
  end
259
259
 
260
260
  module Behaviors
@@ -268,158 +268,136 @@ module ActiveRecord #:nodoc:
268
268
  after_save :clear_old_versions
269
269
  end
270
270
 
271
- module InstanceMethods
272
- # Saves a version of the model in the versioned table. This is called in the after_save callback by default
273
- def save_version
274
- if @saving_version
275
- @saving_version = nil
276
- rev = self.class.versioned_class.new
277
- clone_versioned_model(self, rev)
278
- rev.send("#{self.class.version_column}=", send(self.class.version_column))
279
- rev.send("#{self.class.versioned_foreign_key}=", id)
280
- rev.save
281
- end
282
- end
283
-
284
- # Saves a version of the model in the versioned table. This is called in the after_save callback by default
285
- def auto_save_version
286
- if @saving_version
287
- @saving_version = nil
288
- rev = self.class.versioned_class.new
289
- clone_versioned_model(self, rev)
290
- rev.send("#{self.class.version_column}=", send(self.class.version_column))
291
- rev.send("#{self.class.versioned_foreign_key}=", id)
292
- rev.send("autosave=", true)
293
- saving_status = rev.save
294
- clear_old_auto_save_versions
295
- saving_status
296
- end
271
+ # Saves a version of the model in the versioned table. This is called in the after_save callback by default
272
+ def save_version
273
+ if @saving_version
274
+ @saving_version = nil
275
+ rev = self.class.versioned_class.new
276
+ clone_versioned_model(self, rev)
277
+ rev.send("#{self.class.version_column}=", send(self.class.version_column))
278
+ rev.send("#{self.class.versioned_foreign_key}=", id)
279
+ rev.save
297
280
  end
281
+ end
298
282
 
299
- # Clears old revisions if a limit is set with the :limit option in <tt>acts_as_versioned</tt>.
300
- # Override this method to set your own criteria for clearing old versions.
301
- def clear_old_versions
302
- return if self.class.max_version_limit == 0
303
- excess_baggage = send(self.class.version_column).to_i - self.class.max_version_limit
304
- if excess_baggage > 0
305
- self.class.versioned_class.delete_all ["#{self.class.version_column} <= ? and #{self.class.versioned_foreign_key} = ?", excess_baggage, id]
306
- end
307
- end
308
-
309
- # Clears old revisions if a limit is set with the :limit option in <tt>acts_as_versioned</tt>.
310
- # Override this method to set your own criteria for clearing old versions.
311
- def clear_old_auto_save_versions
312
- excess_baggage = self.class.versioned_class.where(["autosave = ? and #{self.class.versioned_foreign_key} = ?", true,id]).order("updated_at desc").all
313
- if excess_baggage.length > 2
314
- excess_baggage.last.destroy
315
- end
283
+ # Clears old revisions if a limit is set with the :limit option in <tt>acts_as_versioned</tt>.
284
+ # Override this method to set your own criteria for clearing old versions.
285
+ def clear_old_versions
286
+ return if self.class.max_version_limit == 0
287
+ excess_baggage = send(self.class.version_column).to_i - self.class.max_version_limit
288
+ if excess_baggage > 0
289
+ self.class.versioned_class.delete_all ["#{self.class.version_column} <= ? and #{self.class.versioned_foreign_key} = ?", excess_baggage, id]
316
290
  end
291
+ end
317
292
 
318
- # Reverts a model to a given version. Takes either a version number or an instance of the versioned model
319
- def revert_to(version)
320
- if version.is_a?(self.class.versioned_class)
321
- return false unless version.send(self.class.versioned_foreign_key) == id and !version.new_record?
322
- else
323
- return false unless version = versions.where(self.class.version_column => version).first
324
- end
325
- self.clone_versioned_model(version, self)
326
- send("#{self.class.version_column}=", version.send(self.class.version_column))
327
- true
293
+ # Reverts a model to a given version. Takes either a version number or an instance of the versioned model
294
+ def revert_to(version)
295
+ if version.is_a?(self.class.versioned_class)
296
+ return false unless version.send(self.class.versioned_foreign_key) == id and !version.new_record?
297
+ else
298
+ return false unless version = versions.where(self.class.version_column => version).first
328
299
  end
300
+ self.clone_versioned_model(version, self)
301
+ send("#{self.class.version_column}=", version.send(self.class.version_column))
302
+ true
303
+ end
329
304
 
330
- # Reverts a model to a given version and saves the model.
331
- # Takes either a version number or an instance of the versioned model
332
- def revert_to!(version)
333
- revert_to(version) ? save_without_revision : false
334
- end
305
+ # Reverts a model to a given version and saves the model.
306
+ # Takes either a version number or an instance of the versioned model
307
+ def revert_to!(version)
308
+ revert_to(version) ? save_without_revision : false
309
+ end
335
310
 
336
- # Temporarily turns off Optimistic Locking while saving. Used when reverting so that a new version is not created.
337
- def save_without_revision
338
- save_without_revision!
339
- true
340
- rescue
341
- false
342
- end
311
+ # Temporarily turns off Optimistic Locking while saving. Used when reverting so that a new version is not created.
312
+ def save_without_revision
313
+ save_without_revision!
314
+ true
315
+ rescue
316
+ false
317
+ end
343
318
 
344
- def save_without_revision!
345
- without_locking do
346
- without_revision do
347
- save!
348
- end
319
+ def save_without_revision!
320
+ without_locking do
321
+ without_revision do
322
+ save!
349
323
  end
350
324
  end
325
+ end
351
326
 
352
- def altered?
353
- track_altered_attributes ? (version_if_changed - changed).length < version_if_changed.length : changed?
354
- end
355
-
356
- # Clones a model. Used when saving a new version or reverting a model's version.
357
- def clone_versioned_model(orig_model, new_model)
358
- self.class.versioned_columns.each do |col|
359
- new_model[col.name] = orig_model.send(col.name) if orig_model.has_attribute?(col.name)
360
- end
327
+ def altered?
328
+ track_altered_attributes ? (version_if_changed - changed).length < version_if_changed.length : changed?
329
+ end
361
330
 
362
- if orig_model.is_a?(self.class.versioned_class)
363
- new_model[new_model.class.inheritance_column] = orig_model[self.class.versioned_inheritance_column]
364
- elsif new_model.is_a?(self.class.versioned_class)
365
- new_model[self.class.versioned_inheritance_column] = orig_model[orig_model.class.inheritance_column]
366
- end
331
+ # Clones a model. Used when saving a new version or reverting a model's version.
332
+ def clone_versioned_model(orig_model, new_model)
333
+ self.class.versioned_columns.each do |col|
334
+ new_model[col.name] = orig_model.send(col.name) if orig_model.has_attribute?(col.name)
367
335
  end
368
336
 
369
- # Checks whether a new version shall be saved or not. Calls <tt>version_condition_met?</tt> and <tt>changed?</tt>.
370
- def save_version?
371
- version_condition_met? && altered?
337
+ clone_inheritance_column(orig_model, new_model)
338
+ end
339
+
340
+ def clone_inheritance_column(orig_model, new_model)
341
+ if orig_model.is_a?(self.class.versioned_class) && new_model.class.column_names.include?(new_model.class.inheritance_column.to_s)
342
+ new_model[new_model.class.inheritance_column] = orig_model[self.class.versioned_inheritance_column]
343
+ elsif new_model.is_a?(self.class.versioned_class) && new_model.class.column_names.include?(self.class.versioned_inheritance_column.to_s)
344
+ new_model[self.class.versioned_inheritance_column] = orig_model[orig_model.class.inheritance_column]
372
345
  end
346
+ end
373
347
 
374
- # Checks condition set in the :if option to check whether a revision should be created or not. Override this for
375
- # custom version condition checking.
376
- def version_condition_met?
377
- case
378
- when version_condition.is_a?(Symbol)
379
- send(version_condition)
380
- when version_condition.respond_to?(:call) && (version_condition.arity == 1 || version_condition.arity == -1)
381
- version_condition.call(self)
382
- else
383
- version_condition
384
- end
385
- end
348
+ # Checks whether a new version shall be saved or not. Calls <tt>version_condition_met?</tt> and <tt>changed?</tt>.
349
+ def save_version?
350
+ version_condition_met? && altered?
351
+ end
386
352
 
387
- # Executes the block with the versioning callbacks disabled.
388
- #
389
- # @foo.without_revision do
390
- # @foo.save
391
- # end
392
- #
393
- def without_revision(&block)
394
- self.class.without_revision(&block)
353
+ # Checks condition set in the :if option to check whether a revision should be created or not. Override this for
354
+ # custom version condition checking.
355
+ def version_condition_met?
356
+ case
357
+ when version_condition.is_a?(Symbol)
358
+ send(version_condition)
359
+ when version_condition.respond_to?(:call) && (version_condition.arity == 1 || version_condition.arity == -1)
360
+ version_condition.call(self)
361
+ else
362
+ version_condition
395
363
  end
364
+ end
396
365
 
397
- # Turns off optimistic locking for the duration of the block
398
- #
399
- # @foo.without_locking do
400
- # @foo.save
401
- # end
402
- #
403
- def without_locking(&block)
404
- self.class.without_locking(&block)
405
- end
366
+ # Executes the block with the versioning callbacks disabled.
367
+ #
368
+ # @foo.without_revision do
369
+ # @foo.save
370
+ # end
371
+ #
372
+ def without_revision(&block)
373
+ self.class.without_revision(&block)
374
+ end
406
375
 
407
- def empty_callback()
408
- end
376
+ # Turns off optimistic locking for the duration of the block
377
+ #
378
+ # @foo.without_locking do
379
+ # @foo.save
380
+ # end
381
+ #
382
+ def without_locking(&block)
383
+ self.class.without_locking(&block)
384
+ end
409
385
 
410
- #:nodoc:
386
+ def empty_callback()
387
+ end
411
388
 
412
- protected
413
- # sets the new version before saving, unless you're using optimistic locking. In that case, let it take care of the version.
414
- def set_new_version
415
- @saving_version = new_record? || save_version?
416
- self.send("#{self.class.version_column}=", next_version) if new_record? || (!locking_enabled? && save_version?)
417
- end
389
+ #:nodoc:
418
390
 
419
- # Gets the next available version for the current record, or 1 for a new record
420
- def next_version
421
- (new_record? ? 0 : versions.calculate(:maximum, version_column).to_i) + 1
422
- end
391
+ protected
392
+ # sets the new version before saving, unless you're using optimistic locking. In that case, let it take care of the version.
393
+ def set_new_version
394
+ @saving_version = new_record? || save_version?
395
+ self.send("#{self.class.version_column}=", next_version) if new_record? || (!locking_enabled? && save_version?)
396
+ end
397
+
398
+ # Gets the next available version for the current record, or 1 for a new record
399
+ def next_version
400
+ (new_record? ? 0 : versions.calculate(:maximum, version_column).to_i) + 1
423
401
  end
424
402
 
425
403
  module ClassMethods
@@ -446,7 +424,6 @@ module ActiveRecord #:nodoc:
446
424
  self.connection.create_table(versioned_table_name, create_table_options) do |t|
447
425
  t.column versioned_foreign_key, :integer
448
426
  t.column version_column, :integer
449
- t.column :autosave, :boolean , :default => false
450
427
  end
451
428
 
452
429
  self.versioned_columns.each do |col|
metadata CHANGED
@@ -1,66 +1,57 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: freerange_acts_as_versioned
3
- version: !ruby/object:Gem::Version
4
- hash: 59
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 8
9
- - 2
10
- version: 0.8.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Abdul Rauf
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-04-24 00:00:00 +09:30
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2013-08-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: activerecord
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
18
+ requirements:
27
19
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 1
30
- segments:
31
- - 3
32
- - 1
33
- - 1
34
- version: 3.1.1
20
+ - !ruby/object:Gem::Version
21
+ version: '3.2'
35
22
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: sqlite3-ruby
39
23
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.2'
30
+ - !ruby/object:Gem::Dependency
31
+ name: sqlite3-ruby
32
+ requirement: !ruby/object:Gem::Requirement
41
33
  none: false
42
- requirements:
34
+ requirements:
43
35
  - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 25
46
- segments:
47
- - 1
48
- - 3
49
- - 1
36
+ - !ruby/object:Gem::Version
50
37
  version: 1.3.1
51
38
  type: :development
52
- version_requirements: *id002
53
- description: Add simple versioning to ActiveRecord models. rails 3.1.1
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.3.1
46
+ description: Add simple versioning to ActiveRecord models. rails 3.2
54
47
  email: abdul.rauf.au@gmail.com
55
48
  executables: []
56
-
57
49
  extensions: []
58
-
59
- extra_rdoc_files:
50
+ extra_rdoc_files:
60
51
  - README
61
52
  - MIT-LICENSE
62
53
  - CHANGELOG
63
- files:
54
+ files:
64
55
  - CHANGELOG
65
56
  - Gemfile
66
57
  - MIT-LICENSE
@@ -86,39 +77,31 @@ files:
86
77
  - test/migration_test.rb
87
78
  - test/schema.rb
88
79
  - test/versioned_test.rb
89
- has_rdoc: true
90
80
  homepage: http://github.com/abdulrauf/acts_as_versioned
91
81
  licenses: []
92
-
93
82
  post_install_message:
94
- rdoc_options:
83
+ rdoc_options:
95
84
  - --charset=UTF-8
96
- require_paths:
85
+ require_paths:
97
86
  - lib
98
- required_ruby_version: !ruby/object:Gem::Requirement
87
+ required_ruby_version: !ruby/object:Gem::Requirement
99
88
  none: false
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- hash: 3
104
- segments:
105
- - 0
106
- version: "0"
107
- required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
94
  none: false
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- hash: 3
113
- segments:
114
- - 0
115
- version: "0"
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
116
99
  requirements: []
117
-
118
100
  rubyforge_project: freerange_acts_as_versioned
119
- rubygems_version: 1.3.7
101
+ rubygems_version: 1.8.25
120
102
  signing_key:
121
103
  specification_version: 2
122
- summary: Add simple versioning to ActiveRecord models. This version supports rails 3.1.1. Also it have support for autosave. It introduces new method auto_save_version which keeps 1 autosave version for an object.
104
+ summary: Add simple versioning to ActiveRecord models. This version supports rails
105
+ 3.2. Also it have support for autosave. It introduces new method auto_save_version
106
+ which keeps 1 autosave version for an object.
123
107
  test_files: []
124
-