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 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