mm-versionable 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
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 'config' # Since versionable defines it's own Version model and has a few indexes defined for the same,
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, :index => true
7
- key :doc_id, String, :index => true
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
- # Save new versions but only if the data changes
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
- @versions_count = @versions_count.to_i + 1
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
@@ -1,3 +1,3 @@
1
1
  module Versionable
2
- VERSION = '0.2.5'
2
+ VERSION = '0.2.6'
3
3
  end
@@ -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
- assert @user.rollback(:first).fname == 'dhruva'
60
- assert @user.version_number == 0
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
- assert @user.rollback(:last).fname == 'Dhruva'
63
+ assert_equal @user.rollback(:last).fname, 'Dhruva'
64
64
  assert @user.posts.empty?
65
- assert @user.version_number == (@user.versions_count - 2)
65
+ assert_equal @user.version_number, (@user.versions_count - 2)
66
66
  end
67
67
  should 'load latest version on rollback :latest' do
68
- assert @user.rollback(:latest).fname == 'Dhruva'
68
+ assert_equal @user.rollback(:latest).fname, 'Dhruva'
69
69
  assert !@user.posts.empty?
70
- assert @user.version_number == (@user.versions_count - 1)
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
- assert @user.fname == 'dhruva'
75
- assert @user.version_number == 0
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
- assert @user.fname == 'Dhruva'
79
+ assert_equal @user.fname, 'Dhruva'
80
80
  assert @user.posts.empty?
81
- assert @user.version_number == (@user.versions_count - 2)
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
- assert @user.fname == 'Dhruva'
85
+ assert_equal @user.fname, 'Dhruva'
86
86
  assert @user.posts.empty?
87
- assert @user.version_number == (@user.versions_count - 2)
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
- assert @user.version_number == (@user.versions_count - 1)
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
- date: 2011-06-18 00:00:00 +05:30
14
- default_executable:
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
- prerelease: false
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: "0"
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
- requirement: &id002 !ruby/object:Gem::Requirement
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: "0"
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
- requirement: &id003 !ruby/object:Gem::Requirement
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: "0"
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
- requirement: &id004 !ruby/object:Gem::Requirement
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: "0"
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
- requirement: &id005 !ruby/object:Gem::Requirement
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: "0"
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
- requirement: &id006 !ruby/object:Gem::Requirement
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: "0"
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
- requirement: &id007 !ruby/object:Gem::Requirement
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: "0"
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
- requirement: &id008 !ruby/object:Gem::Requirement
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: "0"
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
102
99
  type: :development
103
- version_requirements: *id008
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/unit/test_versioning.rb
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: "0"
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: "0"
137
+ requirements:
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
149
141
  requirements: []
150
-
151
142
  rubyforge_project:
152
- rubygems_version: 1.6.2
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/unit/test_versioning.rb
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