mm-versionable 0.2.6 → 0.2.7
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 +14 -14
- data/lib/versionable/plugins/versionable.rb +33 -32
- data/lib/versionable/version.rb +1 -1
- data/test/models/user.rb +2 -0
- data/test/unit/test_versioning.rb +9 -0
- metadata +72 -26
data/README.md
CHANGED
@@ -41,7 +41,7 @@ The following example should demonstrate how to use versioning well :
|
|
41
41
|
#example :
|
42
42
|
#thing.save :updater_id => "4cef9936f61aa33717000001"
|
43
43
|
|
44
|
-
#Also you can now pass :updater_id to
|
44
|
+
#Also you can now pass :updater_id to update_attributes
|
45
45
|
#example :
|
46
46
|
#thing.update_attributes(:updater_id => "4cef9936f61aa33717000001", params[:thing])
|
47
47
|
|
@@ -49,44 +49,44 @@ The following example should demonstrate how to use versioning well :
|
|
49
49
|
#=> 2
|
50
50
|
|
51
51
|
thing.versions
|
52
|
-
|
52
|
+
#=> [#<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>]
|
53
53
|
|
54
54
|
thing.all_versions
|
55
|
-
|
55
|
+
#=> #<Plucky::Query doc_id: "4cef96c4f61aa33621000001", sort: [["pos", -1]]>
|
56
56
|
|
57
57
|
thing.rollback(:first)
|
58
|
-
|
58
|
+
#=> #<Thing _id: BSON::ObjectId('4cef96c4f61aa33621000001'), version_message: nil, version_number: 0, name: "Dhruva Sagar", date: 2010-11-26 11:15:16 UTC>
|
59
59
|
|
60
60
|
thing.rollback(:last)
|
61
|
-
|
61
|
+
#=> #<Thing _id: BSON::ObjectId('4cef96c4f61aa33621000001'), version_message: nil, version_number: 0, name: "Dhruva Sagar", date: 2010-11-26 11:15:16 UTC>
|
62
62
|
|
63
63
|
thing.rollback!(:latest)
|
64
|
-
|
64
|
+
#=> #<Thing _id: BSON::ObjectId('4cef96c4f61aa33621000001'), version_message: nil, version_number: 1, name: "Change Thing", date: 2010-11-26 11:15:16 UTC>
|
65
65
|
#rollback! saves the document as well
|
66
66
|
|
67
67
|
thing.diff(:name, 0, 1)
|
68
|
-
|
68
|
+
#=> "<del class=\"differ\">Change</del><ins class=\"differ\">Dhruva</ins> <del class=\"differ\">Thing</del><ins class=\"differ\">Sagar</ins>"
|
69
69
|
|
70
70
|
thing.diff(:name, 0, 1, :ascii)
|
71
|
-
|
71
|
+
#=> "{\"Change\" >> \"Dhruva\"} {\"Thing\" >> \"Sagar\"}"
|
72
72
|
|
73
73
|
thing.diff(:name, 0, 1, :color)
|
74
|
-
|
74
|
+
#=> "\e[31mChange\e[0m\e[32mDhruva\e[0m \e[31mThing\e[0m\e[32mSagar\e[0m"
|
75
75
|
|
76
76
|
thing.current_version
|
77
|
-
|
77
|
+
#=> #<Version _id: BSON::ObjectId('4cf03822f61aa30fd8000004'), data: {"_id"=>BSON::ObjectId('4cf03816f61aa30fd8000001'), "version_message"=>nil, "version_number"=>nil, "name"=>"Change Thing", "date"=>2010-11-26 22:43:34 UTC}, date: 2010-11-26 22:43:46 UTC, pos: nil, doc_id: "4cf03816f61aa30fd8000001", message: nil, updater_id: nil>
|
78
78
|
|
79
79
|
thing.version_at(:first)
|
80
|
-
|
80
|
+
#=> #<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>
|
81
81
|
|
82
82
|
thing.version_at(:current)
|
83
|
-
|
83
|
+
#=> #<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>
|
84
84
|
|
85
85
|
thing.version_at(:last)
|
86
|
-
|
86
|
+
#=> #<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>
|
87
87
|
|
88
88
|
thing.version_at(:latest)
|
89
|
-
|
89
|
+
#=> #<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>
|
90
90
|
|
91
91
|
thing.version_at(10)
|
92
92
|
#=> nil
|
@@ -3,40 +3,38 @@ autoload :Version, 'versionable/models/version'
|
|
3
3
|
module Versionable
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
6
|
+
def update_attributes(attrs={})
|
7
|
+
updater_id = attrs.delete(:updater_id)
|
8
|
+
self.attributes = attrs
|
9
|
+
save(:updater_id => updater_id)
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
def save(options={})
|
13
|
+
save_version(options.delete(:updater_id)) if self.respond_to?(:rolling_back) && !rolling_back
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def save_version(updater_id=nil)
|
18
|
+
if self.respond_to?(:versions)
|
19
|
+
version = self.current_version
|
20
|
+
version.message = self.version_message
|
21
|
+
if self.versions.empty?
|
22
|
+
version.pos = 0
|
23
|
+
else
|
24
|
+
version.pos = self.versions.last.pos + 1
|
25
|
+
end
|
26
|
+
if self.version_at(self.version_number).try(:data) != version.data
|
27
|
+
version.updater_id = updater_id
|
28
|
+
version.save
|
17
29
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
if
|
23
|
-
|
30
|
+
self.versions.shift if self.versions.count >= @limit
|
31
|
+
self.versions << version
|
32
|
+
self.version_number = version.pos
|
33
|
+
|
34
|
+
if @versions_count
|
35
|
+
@versions_count = @versions_count + 1
|
24
36
|
else
|
25
|
-
|
26
|
-
end
|
27
|
-
if self.version_at(self.version_number).try(:data) != version.data
|
28
|
-
version.updater_id = updater_id
|
29
|
-
version.save
|
30
|
-
|
31
|
-
self.versions.shift if self.versions.count >= @limit
|
32
|
-
self.versions << version
|
33
|
-
self.version_number = version.pos
|
34
|
-
|
35
|
-
if @versions_count
|
36
|
-
@versions_count = @versions_count + 1
|
37
|
-
else
|
38
|
-
@versions_count = Version.count(:doc_id => self._id.to_s)
|
39
|
-
end
|
37
|
+
@versions_count = Version.count(:doc_id => self._id.to_s)
|
40
38
|
end
|
41
39
|
end
|
42
40
|
end
|
@@ -76,7 +74,9 @@ module Versionable
|
|
76
74
|
version = self.version_at(pos)
|
77
75
|
|
78
76
|
if version
|
79
|
-
self.attributes
|
77
|
+
self.attributes.keys.each do |key|
|
78
|
+
self.send(:"#{key}=", version.data[key])
|
79
|
+
end
|
80
80
|
end
|
81
81
|
|
82
82
|
self.version_number = version.pos
|
@@ -132,3 +132,4 @@ module Versionable
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
end
|
135
|
+
|
data/lib/versionable/version.rb
CHANGED
data/test/models/user.rb
CHANGED
@@ -106,6 +106,13 @@ class VersioningTest < Test::Unit::TestCase
|
|
106
106
|
user.reload
|
107
107
|
assert_equal initial_version_number, user.version_number
|
108
108
|
end
|
109
|
+
should "allow protected attributes to be changed" do
|
110
|
+
user = User.create :fname => 'Dave', :lname => 'Smiggins'
|
111
|
+
user.address = "123 Main St"
|
112
|
+
user.save
|
113
|
+
user.rollback!(:first)
|
114
|
+
assert_equal nil, user.address
|
115
|
+
end
|
109
116
|
end
|
110
117
|
|
111
118
|
context 'Versioning with update_attributes' do
|
@@ -115,6 +122,8 @@ class VersioningTest < Test::Unit::TestCase
|
|
115
122
|
should 'create a new version for changes' do
|
116
123
|
versions_count = @user.versions_count
|
117
124
|
@user.update_attributes(:fname => 'Dave')
|
125
|
+
@user.reload
|
126
|
+
assert_equal @user.fname, 'Dave'
|
118
127
|
assert_equal @user.versions_count, (versions_count + 1)
|
119
128
|
end
|
120
129
|
should 'not create a new version without changes' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mm-versionable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-04-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: i18n
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: differ
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: builder
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement:
|
63
|
+
name: bson
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: mongo_mapper
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: 0.9.0
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.9.0
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: rake
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :development
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: shoulda
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :development
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: ruby-debug19
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ! '>='
|
@@ -98,28 +133,33 @@ dependencies:
|
|
98
133
|
version: '0'
|
99
134
|
type: :development
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
102
142
|
description:
|
103
143
|
email: dhruva.sagar@gmail.com
|
104
144
|
executables: []
|
105
145
|
extensions: []
|
106
146
|
extra_rdoc_files: []
|
107
147
|
files:
|
108
|
-
- lib/versionable.rb
|
109
|
-
- lib/versionable/version.rb
|
110
148
|
- lib/versionable/models/version.rb
|
111
149
|
- lib/versionable/plugins/versionable.rb
|
150
|
+
- lib/versionable/version.rb
|
151
|
+
- lib/versionable.rb
|
112
152
|
- config.ru
|
113
153
|
- Gemfile
|
114
154
|
- Rakefile
|
115
155
|
- README.md
|
116
156
|
- test/config/config.rb
|
117
157
|
- test/config/database.yml
|
118
|
-
- test/models/user.rb
|
119
158
|
- test/models/post.rb
|
120
|
-
- test/
|
159
|
+
- test/models/user.rb
|
121
160
|
- test/performance/read_write.rb
|
122
161
|
- test/test_helper.rb
|
162
|
+
- test/unit/test_versioning.rb
|
123
163
|
homepage: http://github.com/dhruvasagar/mm-versionable
|
124
164
|
licenses: []
|
125
165
|
post_install_message:
|
@@ -132,23 +172,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
132
172
|
- - ! '>='
|
133
173
|
- !ruby/object:Gem::Version
|
134
174
|
version: '0'
|
175
|
+
segments:
|
176
|
+
- 0
|
177
|
+
hash: 3591903220904652982
|
135
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
179
|
none: false
|
137
180
|
requirements:
|
138
181
|
- - ! '>='
|
139
182
|
- !ruby/object:Gem::Version
|
140
183
|
version: '0'
|
184
|
+
segments:
|
185
|
+
- 0
|
186
|
+
hash: 3591903220904652982
|
141
187
|
requirements: []
|
142
188
|
rubyforge_project:
|
143
|
-
rubygems_version: 1.8.
|
189
|
+
rubygems_version: 1.8.21
|
144
190
|
signing_key:
|
145
191
|
specification_version: 3
|
146
192
|
summary: A MongoMapper extension adding Versioning
|
147
193
|
test_files:
|
148
194
|
- test/config/config.rb
|
149
195
|
- test/config/database.yml
|
150
|
-
- test/models/user.rb
|
151
196
|
- test/models/post.rb
|
152
|
-
- test/
|
197
|
+
- test/models/user.rb
|
153
198
|
- test/performance/read_write.rb
|
154
199
|
- test/test_helper.rb
|
200
|
+
- test/unit/test_versioning.rb
|