mm-versionable 0.2 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +62 -2
- data/lib/versionable.rb +9 -0
- data/lib/versionable/plugins/versionable.rb +4 -7
- data/lib/versionable/version.rb +1 -1
- data/test/models/user.rb +2 -1
- metadata +2 -1
data/README.md
CHANGED
@@ -14,8 +14,68 @@ Note on Patches/Pull Requests
|
|
14
14
|
*Commit, do not make any changes in the rakefile, version, or history. (If you want to have your own version, that is fine but bump the version in a commit by itself so I can ignore it when I pull)
|
15
15
|
*Send me a pull requests.
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
Usage
|
18
|
+
-----
|
19
|
+
class Thing
|
20
|
+
include MongoMapper::Document
|
21
|
+
|
22
|
+
enable_versioning :limit => 20 #:limit here defines the size of the version history that will be loaded into memory
|
23
|
+
|
24
|
+
key :name, String, :required => true
|
25
|
+
key :date, Time
|
26
|
+
end
|
27
|
+
|
28
|
+
thing = Thing.create(:name => 'Dhruva Sagar', :date => Time.now)
|
29
|
+
|
30
|
+
thing.name = 'Change Thing'
|
31
|
+
thing.save
|
32
|
+
|
33
|
+
#Alternatively you can also pass in a "updater_id" to the save method which will be saved within the version, this can be used to track who made changes
|
34
|
+
#example :
|
35
|
+
#thing.save :updater_id => "4cef9936f61aa33717000001"
|
36
|
+
|
37
|
+
thing.versions_count
|
38
|
+
#=> 2
|
39
|
+
|
40
|
+
thing.versions
|
41
|
+
#=> [#<Version _id: BSON::ObjectId('4cef96c4f61aa33621000002'), data: {"_id"=>BSON::ObjectId('4cef96c4f61aa33621000001'), "version_message"=>nil, "version_number"=>nil, "name"=>"Dhruva Sagar", "date"=>2010-11-26 11:15:16 UTC}, date: 2010-11-26 11:15:16 UTC, pos: 0, doc_id: "4cef96c4f61aa33621000001", message: nil, updater_id: nil>, #<Version _id: BSON::ObjectId('4cef96c4f61aa33621000003'), data: {"_id"=>BSON::ObjectId('4cef96c4f61aa33621000001'), "version_message"=>nil, "version_number"=>nil, "name"=>"Change Thing", "date"=>2010-11-26 11:15:16 UTC}, date: 2010-11-26 11:15:16 UTC, pos: 1, doc_id: "4cef96c4f61aa33621000001", message: nil, updater_id: nil>]
|
42
|
+
|
43
|
+
thing.all_versions
|
44
|
+
#=> #<Plucky::Query doc_id: "4cef96c4f61aa33621000001", sort: [["pos", -1]]>
|
45
|
+
|
46
|
+
thing.rollback(:first)
|
47
|
+
#=> #<Thing _id: BSON::ObjectId('4cef96c4f61aa33621000001'), version_message: nil, version_number: 0, name: "Dhruva Sagar", date: 2010-11-26 11:15:16 UTC>
|
48
|
+
|
49
|
+
thing.rollback(:last)
|
50
|
+
#=> #<Thing _id: BSON::ObjectId('4cef96c4f61aa33621000001'), version_message: nil, version_number: 0, name: "Dhruva Sagar", date: 2010-11-26 11:15:16 UTC>
|
51
|
+
|
52
|
+
thing.rollback!(:latest)
|
53
|
+
#=> #<Thing _id: BSON::ObjectId('4cef96c4f61aa33621000001'), version_message: nil, version_number: 1, name: "Change Thing", date: 2010-11-26 11:15:16 UTC>
|
54
|
+
#rollback! saves the document as well
|
55
|
+
|
56
|
+
thing.diff(:name, 0, 1)
|
57
|
+
#=> "<del class=\"differ\">Change</del><ins class=\"differ\">Dhruva</ins> <del class=\"differ\">Thing</del><ins class=\"differ\">Sagar</ins>"
|
58
|
+
|
59
|
+
thing.diff(:name, 0, 1, :ascii)
|
60
|
+
#=> "{\"Change\" >> \"Dhruva\"} {\"Thing\" >> \"Sagar\"}"
|
61
|
+
|
62
|
+
thing.current_version
|
63
|
+
#=> "\e[31mChange\e[0m\e[32mDhruva\e[0m \e[31mThing\e[0m\e[32mSagar\e[0m"
|
64
|
+
|
65
|
+
thing.version_at(:first)
|
66
|
+
#=> #<Version _id: BSON::ObjectId('4cef96c4f61aa33621000002'), data: {"_id"=>BSON::ObjectId('4cef96c4f61aa33621000001'), "version_message"=>nil, "version_number"=>nil, "name"=>"Dhruva Sagar", "date"=>2010-11-26 11:15:16 UTC}, date: 2010-11-26 11:15:16 UTC, pos: 0, doc_id: "4cef96c4f61aa33621000001", message: nil, updater_id: nil>
|
67
|
+
|
68
|
+
thing.version_at(:current)
|
69
|
+
#=> #<Version _id: BSON::ObjectId('4cef986df61aa33621000004'), data: {"_id"=>BSON::ObjectId('4cef96c4f61aa33621000001'), "version_message"=>nil, "version_number"=>1, "name"=>"Change Thing", "date"=>2010-11-26 11:15:16 UTC}, date: 2010-11-26 11:22:21 UTC, pos: nil, doc_id: "4cef96c4f61aa33621000001", message: nil, updater_id: nil>
|
70
|
+
|
71
|
+
thing.version_at(:last)
|
72
|
+
#=> #<Version _id: BSON::ObjectId('4cef96c4f61aa33621000002'), data: {"_id"=>BSON::ObjectId('4cef96c4f61aa33621000001'), "version_message"=>nil, "version_number"=>nil, "name"=>"Dhruva Sagar", "date"=>2010-11-26 11:15:16 UTC}, date: 2010-11-26 11:15:16 UTC, pos: 0, doc_id: "4cef96c4f61aa33621000001", message: nil, updater_id: nil>
|
73
|
+
|
74
|
+
thing.version_at(:latest)
|
75
|
+
#=> #<Version _id: BSON::ObjectId('4cef96c4f61aa33621000003'), data: {"_id"=>BSON::ObjectId('4cef96c4f61aa33621000001'), "version_message"=>nil, "version_number"=>nil, "name"=>"Change Thing", "date"=>2010-11-26 11:15:16 UTC}, date: 2010-11-26 11:15:16 UTC, pos: 1, doc_id: "4cef96c4f61aa33621000001", message: nil, updater_id: nil>
|
76
|
+
|
77
|
+
thing.version_at(10)
|
78
|
+
#=> nil
|
19
79
|
|
20
80
|
Problems or Questions?
|
21
81
|
----------------------
|
data/lib/versionable.rb
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
require 'versionable/models/version'
|
2
2
|
|
3
3
|
module Versionable
|
4
|
-
def self.configure(model)
|
5
|
-
model.enable_versioning
|
6
|
-
end
|
7
|
-
|
8
4
|
module InstanceMethods
|
9
5
|
def save(options={})
|
10
|
-
save_version(options
|
6
|
+
save_version(options.delete(:updater_id)) if self.respond_to?(:rolling_back) && !rolling_back
|
11
7
|
super
|
12
8
|
end
|
13
9
|
|
@@ -24,7 +20,7 @@ module Versionable
|
|
24
20
|
version.updater_id = updater_id
|
25
21
|
version.save
|
26
22
|
|
27
|
-
self.versions.shift
|
23
|
+
self.versions.shift if self.versions.count >= @limit
|
28
24
|
self.versions << version
|
29
25
|
|
30
26
|
@versions_count = @versions_count.to_i + 1
|
@@ -44,7 +40,8 @@ module Versionable
|
|
44
40
|
end
|
45
41
|
|
46
42
|
define_method(:versions) do
|
47
|
-
@
|
43
|
+
@limit ||= opts[:limit] || 10
|
44
|
+
@versions ||= Version.all(:doc_id => self._id.to_s, :order => 'pos desc', :limit => @limit).reverse
|
48
45
|
end
|
49
46
|
|
50
47
|
define_method(:all_versions) do
|
data/lib/versionable/version.rb
CHANGED
data/test/models/user.rb
CHANGED