acts_as_versionable 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +55 -0
- data/lib/acts_as_versionable/version.rb +1 -1
- data/lib/acts_as_versionable.rb +2 -38
- data/lib/generators/versionable/templates/migration.rb.erb +1 -1
- data/lib/generators/versionable/versionable_generator.rb +2 -17
- data/test/acts_as_versionable_test.rb +1 -1
- metadata +2 -2
- data/init.rb +0 -2
data/README.rdoc
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
= Acts As Versionable
|
2
|
+
|
3
|
+
Minimalist versionable engine
|
4
|
+
|
5
|
+
=== Installation
|
6
|
+
|
7
|
+
gem 'acts_as_versionable'
|
8
|
+
|
9
|
+
=== Generator
|
10
|
+
|
11
|
+
rails g versionable MODEL
|
12
|
+
|
13
|
+
rails g model Document title:string body:text
|
14
|
+
rake db:migrate
|
15
|
+
|
16
|
+
_generate versionable table_
|
17
|
+
|
18
|
+
rails g versionable Document
|
19
|
+
create db/migrate/20120119150513_create_documents_versions.rb
|
20
|
+
|
21
|
+
class CreateDocumentsVersions < ActiveRecord::Migration
|
22
|
+
def self.up
|
23
|
+
create_table :documents_versions do |t|
|
24
|
+
t.column :title, :string
|
25
|
+
t.column :body, :text
|
26
|
+
t.column :current_version, :integer
|
27
|
+
t.integer :document_id
|
28
|
+
t.integer :versioned_as
|
29
|
+
t.timestamps
|
30
|
+
end
|
31
|
+
add_index :documents_versions, :versioned_as
|
32
|
+
add_column :documents, :current_version, :integer
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.down
|
36
|
+
drop_table :documents_versions
|
37
|
+
remove_column :documents, :current_version
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
=== Example
|
42
|
+
|
43
|
+
class Document < ActiveRecord::Base
|
44
|
+
acts_as_versionable :limit => 3
|
45
|
+
end
|
46
|
+
|
47
|
+
document = Document.create(:title => 'title', :body => 'body')
|
48
|
+
document.version => 1
|
49
|
+
|
50
|
+
document.title = 'new title'
|
51
|
+
document.save => true
|
52
|
+
document.version => 2
|
53
|
+
document.versions => Array(2)
|
54
|
+
document.revert_to(1) => #<Document ...>
|
55
|
+
|
data/lib/acts_as_versionable.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'acts_as_versionable/version'
|
2
2
|
|
3
|
-
# ActsAsVersionable
|
4
3
|
module ActsAsVersionable
|
5
4
|
|
6
5
|
class NoSuchVersionError < Exception
|
@@ -21,7 +20,7 @@ module ActsAsVersionable
|
|
21
20
|
def acts_as_versionable options={}
|
22
21
|
options.symbolize_keys!
|
23
22
|
|
24
|
-
has_many :versions, :class_name => "#{self.name
|
23
|
+
has_many :versions, :class_name => "#{self.name}Versions", :dependent => :destroy
|
25
24
|
after_save :apply_versioning
|
26
25
|
after_save :clear_old_versions
|
27
26
|
|
@@ -30,7 +29,7 @@ module ActsAsVersionable
|
|
30
29
|
|
31
30
|
self.max_versions = options[:limit].to_i
|
32
31
|
|
33
|
-
class << create_class("#{self.name
|
32
|
+
class << create_class("#{self.name}Versions", ActiveRecord::Base)
|
34
33
|
def actual_columns
|
35
34
|
content_columns.reject { |c| c.type == :datetime || c.name == 'versioned_as' }
|
36
35
|
end
|
@@ -95,38 +94,3 @@ module ActsAsVersionable
|
|
95
94
|
end
|
96
95
|
|
97
96
|
ActiveRecord::Base.class_eval { include ActsAsVersionable }
|
98
|
-
|
99
|
-
#def self.included(base)
|
100
|
-
# base.extend ClassMethods
|
101
|
-
#end
|
102
|
-
|
103
|
-
#module ClassMethods
|
104
|
-
|
105
|
-
# def create_class(name, superclass, &block)
|
106
|
-
# klass = Class.new superclass, &block
|
107
|
-
# Object.const_set name, klass
|
108
|
-
# end
|
109
|
-
|
110
|
-
# def acts_as_versionable(opts = {})
|
111
|
-
|
112
|
-
# has_many :versions, :class_name => "#{self}Version", :dependent => :destroy
|
113
|
-
# after_save :apply_versioning
|
114
|
-
# after_save :clear_old_versions
|
115
|
-
|
116
|
-
# attr_accessor :local_changes
|
117
|
-
|
118
|
-
# class << create_class("#{self}Version", ActiveRecord::Base)
|
119
|
-
# def actual_columns
|
120
|
-
# content_columns.reject { |c| c.type == :datetime || c.name == 'versioned_as' }
|
121
|
-
# end
|
122
|
-
# end
|
123
|
-
|
124
|
-
#include InstanceMethods
|
125
|
-
# end
|
126
|
-
|
127
|
-
#end
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
#end
|
132
|
-
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%
|
2
|
-
versions_table = "#{@model_name
|
2
|
+
versions_table = "#{@model_name}_versions".downcase
|
3
3
|
columns = @model.classify.constantize.content_columns.reject { |c| c.type == :datetime }
|
4
4
|
%>
|
5
5
|
class <%= migration_name %> < ActiveRecord::Migration
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rails/generators'
|
2
2
|
require 'rails/generators/migration'
|
3
3
|
|
4
|
-
class VersionableGenerator < Rails::Generators::
|
4
|
+
class VersionableGenerator < Rails::Generators::Base
|
5
5
|
include Rails::Generators::Migration
|
6
6
|
source_root File.expand_path('../templates', __FILE__)
|
7
7
|
argument :klass, :type => :string, :description => "Model to versionate"
|
@@ -15,23 +15,8 @@ class VersionableGenerator < Rails::Generators::NamedBase
|
|
15
15
|
def create_model_file
|
16
16
|
@model_name = klass.downcase
|
17
17
|
@model = klass
|
18
|
-
|
19
|
-
@migration_name = "create_#{@model_name}_versions".camelize
|
20
|
-
puts @migration_name
|
18
|
+
@migration_name = "create_#{@model_name}_versions".camelize
|
21
19
|
migration_template "migration.rb.erb", "db/migrate/create_#{@model_name}_versions.rb"
|
22
20
|
end
|
23
|
-
|
24
|
-
|
25
|
-
#def manifest
|
26
|
-
#
|
27
|
-
# record do |m|
|
28
|
-
# m.migration_template('migration.rb', 'db/migrate',
|
29
|
-
# :assigns => {
|
30
|
-
# :model_name => @model_name,
|
31
|
-
# :migration_name => "CreateVersionsFor#{@model_name.pluralize}"
|
32
|
-
# },
|
33
|
-
# :migration_file_name => "create_versions_for_#{model_name_for_migration}")
|
34
|
-
# end
|
35
|
-
#end
|
36
21
|
|
37
22
|
end
|
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.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -20,9 +20,9 @@ extra_rdoc_files: []
|
|
20
20
|
files:
|
21
21
|
- .gitignore
|
22
22
|
- Gemfile
|
23
|
+
- README.rdoc
|
23
24
|
- Rakefile
|
24
25
|
- acts_as_versionable.gemspec
|
25
|
-
- init.rb
|
26
26
|
- lib/acts_as_versionable.rb
|
27
27
|
- lib/acts_as_versionable/version.rb
|
28
28
|
- lib/generators/versionable/templates/migration.rb.erb
|
data/init.rb
DELETED