acts_as_versionable 0.3.1 → 0.3.3

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