mm-versionable 0.2.7 → 0.2.8

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.
@@ -10,7 +10,8 @@ module Versionable
10
10
  end
11
11
 
12
12
  def save(options={})
13
- save_version(options.delete(:updater_id)) if self.respond_to?(:rolling_back) && !rolling_back
13
+ updater_id = options.delete(:updater_id)
14
+ save_version(updater_id) if self.respond_to?(:rolling_back) && !rolling_back
14
15
  super
15
16
  end
16
17
 
@@ -67,6 +68,21 @@ module Versionable
67
68
  Version.where(:doc_id => self._id.to_s).sort(:pos.desc)
68
69
  end
69
70
 
71
+ define_method(:delete_version) do |pos|
72
+ case pos
73
+ when :all
74
+ @versions_count = 0
75
+ self.all_versions.each(&:delete)
76
+ else
77
+ @versions_count -= 1
78
+ self.version_at(pos).delete
79
+ # resetting position of all versions after the one at pos
80
+ self.all_versions.where(['pos > ?', pos]).each do |version|
81
+ version.update_attributes(:pos => version.pos - 1)
82
+ end
83
+ end
84
+ end
85
+
70
86
  define_method(:rollback) do |*args|
71
87
  pos = args.first #workaround for optional args in ruby1.8
72
88
  #The last version is always same as the current version, so -2 instead of -1
@@ -132,4 +148,3 @@ module Versionable
132
148
  end
133
149
  end
134
150
  end
135
-
@@ -1,3 +1,3 @@
1
1
  module Versionable
2
- VERSION = '0.2.7'
2
+ VERSION = '0.2.8'
3
3
  end
@@ -38,6 +38,9 @@ class VersioningTest < Test::Unit::TestCase
38
38
  should 'respond to method save_version' do
39
39
  assert @user.respond_to?(:save_version)
40
40
  end
41
+ should 'respond to method delete_version' do
42
+ assert @user.respond_to?(:delete_version)
43
+ end
41
44
  end
42
45
 
43
46
  context 'Version manipulations' do
@@ -115,6 +118,28 @@ class VersioningTest < Test::Unit::TestCase
115
118
  end
116
119
  end
117
120
 
121
+ context 'deleting versions' do
122
+ setup do
123
+ @user = User.create :fname => 'Dhruva', :lname => 'Sagar'
124
+ @user.posts << Post.new(:title => 'New', :body => 'Test', :date => Time.now)
125
+ @user.save
126
+ end
127
+ should "delete all versions on calling delete_version with :all as argument" do
128
+ @user.delete_version(:all)
129
+ assert @user.versions_count == 0
130
+ assert @user.all_versions.count == 0
131
+ end
132
+ should "delete specific version on calling delete_version with position index as argument and reset position of all subsequent versions" do
133
+ versions_count = @user.versions_count
134
+ @user.delete_version(:first)
135
+ assert_equal @user.version_at(:first).pos, 0
136
+ assert_equal versions_count, (@user.versions_count + 1)
137
+ end
138
+ teardown do
139
+ @user.delete
140
+ end
141
+ end
142
+
118
143
  context 'Versioning with update_attributes' do
119
144
  setup do
120
145
  @user = User.first
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.7
4
+ version: 0.2.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-04 00:00:00.000000000 Z
12
+ date: 2012-04-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: i18n
@@ -174,7 +174,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
174
174
  version: '0'
175
175
  segments:
176
176
  - 0
177
- hash: 3591903220904652982
177
+ hash: -2921783502865972979
178
178
  required_rubygems_version: !ruby/object:Gem::Requirement
179
179
  none: false
180
180
  requirements:
@@ -183,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
183
183
  version: '0'
184
184
  segments:
185
185
  - 0
186
- hash: 3591903220904652982
186
+ hash: -2921783502865972979
187
187
  requirements: []
188
188
  rubyforge_project:
189
189
  rubygems_version: 1.8.21