mm-versionable 0.2 → 0.2.1
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/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