acts_as_versionable 0.3.1 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc ADDED
@@ -0,0 +1,4 @@
1
+ == 0.3.3
2
+
3
+ * generator only rejects id & timestamp columns
4
+ * new_from_version returns a new record from a determined version
data/README.rdoc CHANGED
@@ -1,6 +1,6 @@
1
1
  = Acts As Versionable
2
2
 
3
- Minimalist versionable engine
3
+ Minimalist versionable engine for rails > 3
4
4
 
5
5
  === Installation
6
6
 
@@ -13,14 +13,14 @@
13
13
  rails g model Document title:string body:text
14
14
  rake db:migrate
15
15
 
16
- _generate versionable table_
16
+ _generate versionable table_
17
17
 
18
18
  rails g versionable Document
19
- create db/migrate/20120119150513_create_documents_versions.rb
19
+ create db/migrate/20120119150513_create_document_versions.rb
20
20
 
21
- class CreateDocumentsVersions < ActiveRecord::Migration
21
+ class CreateDocumentVersions < ActiveRecord::Migration
22
22
  def self.up
23
- create_table :documents_versions do |t|
23
+ create_table :document_versions do |t|
24
24
  t.column :title, :string
25
25
  t.column :body, :text
26
26
  t.column :current_version, :integer
@@ -28,12 +28,12 @@
28
28
  t.integer :versioned_as
29
29
  t.timestamps
30
30
  end
31
- add_index :documents_versions, :versioned_as
31
+ add_index :document_versions, :versioned_as
32
32
  add_column :documents, :current_version, :integer
33
33
  end
34
34
 
35
35
  def self.down
36
- drop_table :documents_versions
36
+ drop_table :document_versions
37
37
  remove_column :documents, :current_version
38
38
  end
39
39
  end
@@ -53,3 +53,4 @@
53
53
  document.versions => Array(2)
54
54
  document.revert_to(1) => #<Document ...>
55
55
 
56
+ document.new_from_version(2) => #<Document ...>
@@ -1,3 +1,3 @@
1
1
  module ActsAsVersionable
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.3"
3
3
  end
@@ -30,8 +30,9 @@ module ActsAsVersionable
30
30
  self.max_versions = options[:limit].to_i
31
31
 
32
32
  class << create_class("#{self.name}Versions", ActiveRecord::Base)
33
+ REJECT_COLUMNS = %w(id created_at updated_at versioned_as)
33
34
  def actual_columns
34
- content_columns.reject { |c| c.type == :datetime || c.name == 'versioned_as' }
35
+ columns.reject { |c| REJECT_COLUMNS.include?(c.name) }
35
36
  end
36
37
  end
37
38
 
@@ -47,29 +48,38 @@ module ActsAsVersionable
47
48
  end
48
49
 
49
50
  def revert_to(version)
50
- revision = versions.find_by_versioned_as(version)
51
-
52
- raise NoSuchVersionError, "Couldn't find #{version} version" if revision.blank?
53
-
54
- versions.actual_columns.each do |column|
55
- self[column.name] = revision[column.name]
56
- end
51
+ revision = get_version(version)
57
52
 
53
+ move_columns revision, self
54
+
58
55
  self.current_version = version
59
56
  self.local_changes = true
60
57
  self.save
61
58
  end
62
59
 
60
+ def new_from_version(version)
61
+ revision = get_version(version)
62
+ dummy = self.class.new
63
+
64
+ move_columns revision, dummy
65
+
66
+ dummy
67
+ end
68
+
63
69
  private
64
70
 
71
+ def get_version(version)
72
+ revision = versions.find_by_versioned_as(version)
73
+ raise NoSuchVersionError, "Couldn't find #{version} version" if revision.blank?
74
+ revision
75
+ end
76
+
65
77
  def apply_versioning
66
78
  unless self.local_changes
67
79
  version_content = {}
68
80
  last_version = version + 1
69
81
 
70
- versions.actual_columns.each do |column|
71
- version_content[column.name] = self[column.name]
72
- end
82
+ move_columns self, version_content
73
83
 
74
84
  version_content.merge!(:versioned_as => last_version)
75
85
 
@@ -89,6 +99,12 @@ module ActsAsVersionable
89
99
  versions.where("versioned_as <= ?",excess_baggage).destroy_all
90
100
  end
91
101
  end
102
+
103
+ def move_columns from, to
104
+ versions.actual_columns.each do |column|
105
+ to[column.name] = from[column.name]
106
+ end
107
+ end
92
108
 
93
109
  end
94
110
  end
@@ -1,6 +1,8 @@
1
1
  <%
2
- versions_table = "#{@model_name}_versions".downcase
3
- columns = @model.classify.constantize.content_columns.reject { |c| c.type == :datetime }
2
+ versions_table = "#{@model_name}_versions".downcase
3
+ rejects_columns = ["id", "created_at", "updated_at"]
4
+ columns = @model.classify.constantize.columns - rejects_columns
5
+ #columns = @model.classify.constantize.content_columns.reject { |c| c.type == :datetime }
4
6
  %>
5
7
  class <%= migration_name %> < ActiveRecord::Migration
6
8
  def self.up
@@ -102,6 +102,17 @@ class VersionableTest < Test::Unit::TestCase
102
102
  end
103
103
  end
104
104
 
105
+ def test_new_from_version
106
+ article = Article.first
107
+ assert_not_nil article
108
+
109
+ dummy = article.new_from_version 1
110
+
111
+ article.revert_to(1)
112
+ assert_equal dummy.title, article.title
113
+ assert_equal dummy.body, article.body
114
+ end
115
+
105
116
  def test_dependent_destroy
106
117
  Article.destroy_all
107
118
  assert_equal [], ArticleVersions.all
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_versionable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-19 00:00:00.000000000Z
12
+ date: 2012-01-20 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: ''
15
15
  email:
@@ -19,6 +19,7 @@ extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
21
  - .gitignore
22
+ - CHANGELOG.rdoc
22
23
  - Gemfile
23
24
  - README.rdoc
24
25
  - Rakefile