mm-versionable 0.2.5 → 0.2.6
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 +5 -4
- data/lib/versionable/models/version.rb +4 -2
- data/lib/versionable/plugins/versionable.rb +11 -2
- data/lib/versionable/version.rb +1 -1
- data/test/unit/test_versioning.rb +47 -13
- metadata +91 -100
data/README.md
CHANGED
@@ -19,10 +19,7 @@ Usage
|
|
19
19
|
The following example should demonstrate how to use versioning well :
|
20
20
|
|
21
21
|
require 'mongo_mapper'
|
22
|
-
require '
|
23
|
-
# we need to load & configure mongo_mapper before we can load versionable.
|
24
|
-
require 'versionable'
|
25
|
-
# gem 'mm-versionable', :require => 'versionable' -- Put this in your Gemfile if you're using bundler
|
22
|
+
require 'versionable' # gem 'mm-versionable', :require => 'versionable' -- Put this in your Gemfile if you're using bundler
|
26
23
|
|
27
24
|
class Thing
|
28
25
|
include MongoMapper::Document
|
@@ -44,6 +41,10 @@ The following example should demonstrate how to use versioning well :
|
|
44
41
|
#example :
|
45
42
|
#thing.save :updater_id => "4cef9936f61aa33717000001"
|
46
43
|
|
44
|
+
#Also you can now pass :updater_id to update_attrubytes
|
45
|
+
#example :
|
46
|
+
#thing.update_attributes(:updater_id => "4cef9936f61aa33717000001", params[:thing])
|
47
|
+
|
47
48
|
thing.versions_count
|
48
49
|
#=> 2
|
49
50
|
|
@@ -3,11 +3,13 @@ class Version
|
|
3
3
|
|
4
4
|
key :data, Hash
|
5
5
|
key :date, Time
|
6
|
-
key :pos, Integer
|
7
|
-
key :doc_id, String
|
6
|
+
key :pos, Integer
|
7
|
+
key :doc_id, String
|
8
8
|
key :message, String
|
9
9
|
key :updater_id, String
|
10
10
|
|
11
|
+
ensure_index [[:doc_id, 1], [:pos, -1]]
|
12
|
+
|
11
13
|
def content(key)
|
12
14
|
cdata = self.data[key]
|
13
15
|
if cdata.respond_to?(:join)
|
@@ -4,7 +4,12 @@ module Versionable
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
module InstanceMethods
|
7
|
-
|
7
|
+
def update_attributes(attrs={})
|
8
|
+
updater_id = attrs.delete(:updater_id)
|
9
|
+
assign(attrs)
|
10
|
+
save_version(updater_id) if self.respond_to?(:rolling_back) && !rolling_back
|
11
|
+
end
|
12
|
+
|
8
13
|
def save(options={})
|
9
14
|
save_version(options.delete(:updater_id)) if self.respond_to?(:rolling_back) && !rolling_back
|
10
15
|
super
|
@@ -27,7 +32,11 @@ module Versionable
|
|
27
32
|
self.versions << version
|
28
33
|
self.version_number = version.pos
|
29
34
|
|
30
|
-
|
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
|
31
40
|
end
|
32
41
|
end
|
33
42
|
end
|
data/lib/versionable/version.rb
CHANGED
@@ -56,35 +56,35 @@ class VersioningTest < Test::Unit::TestCase
|
|
56
56
|
assert @user.all_versions.is_a?(Plucky::Query)
|
57
57
|
end
|
58
58
|
should 'load first version on rollback :first' do
|
59
|
-
|
60
|
-
|
59
|
+
assert_equal @user.rollback(:first).fname, 'dhruva'
|
60
|
+
assert_equal @user.version_number, 0
|
61
61
|
end
|
62
62
|
should 'load last version on rollback :last' do
|
63
|
-
|
63
|
+
assert_equal @user.rollback(:last).fname, 'Dhruva'
|
64
64
|
assert @user.posts.empty?
|
65
|
-
|
65
|
+
assert_equal @user.version_number, (@user.versions_count - 2)
|
66
66
|
end
|
67
67
|
should 'load latest version on rollback :latest' do
|
68
|
-
|
68
|
+
assert_equal @user.rollback(:latest).fname, 'Dhruva'
|
69
69
|
assert !@user.posts.empty?
|
70
|
-
|
70
|
+
assert_equal @user.version_number, (@user.versions_count - 1)
|
71
71
|
end
|
72
72
|
should 'revert to first version on rollback!' do
|
73
73
|
@user.rollback!(:first)
|
74
|
-
|
75
|
-
|
74
|
+
assert_equal @user.fname, 'dhruva'
|
75
|
+
assert_equal @user.version_number, 0
|
76
76
|
end
|
77
77
|
should 'revert to last version on rollback!' do
|
78
78
|
@user.rollback!(:last)
|
79
|
-
|
79
|
+
assert_equal @user.fname, 'Dhruva'
|
80
80
|
assert @user.posts.empty?
|
81
|
-
|
81
|
+
assert_equal @user.version_number, (@user.versions_count - 2)
|
82
82
|
end
|
83
83
|
should 'revert to last version on rollback! without args' do
|
84
84
|
@user.rollback!
|
85
|
-
|
85
|
+
assert_equal @user.fname, 'Dhruva'
|
86
86
|
assert @user.posts.empty?
|
87
|
-
|
87
|
+
assert_equal @user.version_number, (@user.versions_count - 2)
|
88
88
|
end
|
89
89
|
should 'only create a new version when the data changes' do
|
90
90
|
versions_count = @user.versions_count
|
@@ -95,7 +95,7 @@ class VersioningTest < Test::Unit::TestCase
|
|
95
95
|
@user.rollback!(:latest)
|
96
96
|
assert @user.fname == 'Dhruva'
|
97
97
|
assert !@user.posts.empty?
|
98
|
-
|
98
|
+
assert_equal @user.version_number, (@user.versions_count - 1)
|
99
99
|
end
|
100
100
|
should 'create a new version without saving' do
|
101
101
|
user = User.create :fname => 'Dave', :lname => 'Smiggins'
|
@@ -106,6 +106,40 @@ class VersioningTest < Test::Unit::TestCase
|
|
106
106
|
user.reload
|
107
107
|
assert_equal initial_version_number, user.version_number
|
108
108
|
end
|
109
|
+
end
|
109
110
|
|
111
|
+
context 'Versioning with update_attributes' do
|
112
|
+
setup do
|
113
|
+
@user = User.first
|
114
|
+
end
|
115
|
+
should 'create a new version for changes' do
|
116
|
+
versions_count = @user.versions_count
|
117
|
+
@user.update_attributes(:fname => 'Dave')
|
118
|
+
assert_equal @user.versions_count, (versions_count + 1)
|
119
|
+
end
|
120
|
+
should 'not create a new version without changes' do
|
121
|
+
versions_count = @user.versions_count
|
122
|
+
@user.update_attributes
|
123
|
+
assert_equal @user.versions_count, versions_count
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'assigning updater_id' do
|
128
|
+
setup do
|
129
|
+
@user = User.first
|
130
|
+
end
|
131
|
+
should 'create a new version and update the updater_id for save' do
|
132
|
+
versions_count = @user.versions_count
|
133
|
+
@user.fname = 'Updater1'
|
134
|
+
@user.save(:updater_id => 'test_id')
|
135
|
+
assert_equal @user.versions_count, (versions_count + 1)
|
136
|
+
assert_equal @user.version_at(:latest).updater_id, 'test_id'
|
137
|
+
end
|
138
|
+
should 'create a new version and update the updater_id for update_attributes' do
|
139
|
+
versions_count = @user.versions_count
|
140
|
+
@user.update_attributes(:updater_id => 'test_id_2', :fname => 'Updater2')
|
141
|
+
assert_equal @user.versions_count, (versions_count + 1)
|
142
|
+
assert_equal @user.version_at(:latest).updater_id, 'test_id_2'
|
143
|
+
end
|
110
144
|
end
|
111
145
|
end
|
metadata
CHANGED
@@ -1,163 +1,154 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mm-versionable
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.6
|
4
5
|
prerelease:
|
5
|
-
version: 0.2.5
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Dhruva Sagar
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-08-29 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
17
15
|
name: i18n
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &14826060 !ruby/object:Gem::Requirement
|
20
17
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
25
22
|
type: :runtime
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: differ
|
29
23
|
prerelease: false
|
30
|
-
|
24
|
+
version_requirements: *14826060
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: differ
|
27
|
+
requirement: &14825500 !ruby/object:Gem::Requirement
|
31
28
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
36
33
|
type: :runtime
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: builder
|
40
34
|
prerelease: false
|
41
|
-
|
35
|
+
version_requirements: *14825500
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: builder
|
38
|
+
requirement: &14824920 !ruby/object:Gem::Requirement
|
42
39
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version:
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
47
44
|
type: :runtime
|
48
|
-
version_requirements: *id003
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: bson_ext
|
51
45
|
prerelease: false
|
52
|
-
|
46
|
+
version_requirements: *14824920
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bson_ext
|
49
|
+
requirement: &14824300 !ruby/object:Gem::Requirement
|
53
50
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version:
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
58
55
|
type: :runtime
|
59
|
-
version_requirements: *id004
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: mongo_mapper
|
62
56
|
prerelease: false
|
63
|
-
|
57
|
+
version_requirements: *14824300
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: mongo_mapper
|
60
|
+
requirement: &14823660 !ruby/object:Gem::Requirement
|
64
61
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version:
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.9.0
|
69
66
|
type: :runtime
|
70
|
-
version_requirements: *id005
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: rake
|
73
67
|
prerelease: false
|
74
|
-
|
68
|
+
version_requirements: *14823660
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: &14823140 !ruby/object:Gem::Requirement
|
75
72
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version:
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
80
77
|
type: :development
|
81
|
-
version_requirements: *id006
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: shoulda
|
84
78
|
prerelease: false
|
85
|
-
|
79
|
+
version_requirements: *14823140
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: shoulda
|
82
|
+
requirement: &14822620 !ruby/object:Gem::Requirement
|
86
83
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version:
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
91
88
|
type: :development
|
92
|
-
version_requirements: *id007
|
93
|
-
- !ruby/object:Gem::Dependency
|
94
|
-
name: ruby-debug19
|
95
89
|
prerelease: false
|
96
|
-
|
90
|
+
version_requirements: *14822620
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: ruby-debug19
|
93
|
+
requirement: &14822100 !ruby/object:Gem::Requirement
|
97
94
|
none: false
|
98
|
-
requirements:
|
99
|
-
- -
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version:
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
102
99
|
type: :development
|
103
|
-
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *14822100
|
104
102
|
description:
|
105
103
|
email: dhruva.sagar@gmail.com
|
106
104
|
executables: []
|
107
|
-
|
108
105
|
extensions: []
|
109
|
-
|
110
106
|
extra_rdoc_files: []
|
111
|
-
|
112
|
-
files:
|
107
|
+
files:
|
113
108
|
- lib/versionable.rb
|
109
|
+
- lib/versionable/version.rb
|
114
110
|
- lib/versionable/models/version.rb
|
115
111
|
- lib/versionable/plugins/versionable.rb
|
116
|
-
- lib/versionable/version.rb
|
117
112
|
- config.ru
|
118
113
|
- Gemfile
|
119
114
|
- Rakefile
|
120
115
|
- README.md
|
121
|
-
- test/
|
116
|
+
- test/config/config.rb
|
117
|
+
- test/config/database.yml
|
122
118
|
- test/models/user.rb
|
123
119
|
- test/models/post.rb
|
120
|
+
- test/unit/test_versioning.rb
|
124
121
|
- test/performance/read_write.rb
|
125
|
-
- test/config/database.yml
|
126
|
-
- test/config/config.rb
|
127
122
|
- test/test_helper.rb
|
128
|
-
has_rdoc: true
|
129
123
|
homepage: http://github.com/dhruvasagar/mm-versionable
|
130
124
|
licenses: []
|
131
|
-
|
132
125
|
post_install_message:
|
133
126
|
rdoc_options: []
|
134
|
-
|
135
|
-
require_paths:
|
127
|
+
require_paths:
|
136
128
|
- lib
|
137
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
130
|
none: false
|
139
|
-
requirements:
|
140
|
-
- -
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
version:
|
143
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ! '>='
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
136
|
none: false
|
145
|
-
requirements:
|
146
|
-
- -
|
147
|
-
- !ruby/object:Gem::Version
|
148
|
-
version:
|
137
|
+
requirements:
|
138
|
+
- - ! '>='
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
149
141
|
requirements: []
|
150
|
-
|
151
142
|
rubyforge_project:
|
152
|
-
rubygems_version: 1.6
|
143
|
+
rubygems_version: 1.8.6
|
153
144
|
signing_key:
|
154
145
|
specification_version: 3
|
155
146
|
summary: A MongoMapper extension adding Versioning
|
156
|
-
test_files:
|
157
|
-
- test/
|
147
|
+
test_files:
|
148
|
+
- test/config/config.rb
|
149
|
+
- test/config/database.yml
|
158
150
|
- test/models/user.rb
|
159
151
|
- test/models/post.rb
|
152
|
+
- test/unit/test_versioning.rb
|
160
153
|
- test/performance/read_write.rb
|
161
|
-
- test/config/database.yml
|
162
|
-
- test/config/config.rb
|
163
154
|
- test/test_helper.rb
|