mongoid_versioning 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1541712ab768cbdfe3e5feff620d363e15f26c36
4
- data.tar.gz: 502a9f2582215937f32dc231a1bfe92bebe4d68f
3
+ metadata.gz: 87547bda9b49e1db52669360fa1c652b81797bbc
4
+ data.tar.gz: 4970ab0963f35517304e732b5779fb2fa928f62c
5
5
  SHA512:
6
- metadata.gz: b36237f72a53a2d07d660c65a3bcfa67e41c9d665b6a4e8616795f070f44be2c06cdc41f6306b02650612afd5407ecc179c615a8e43cfe5f8b6eada0744794f6
7
- data.tar.gz: 73460dbb43b06e4235288c944ac2d1d62411d726bab2afedeb7fd5136528018f6aaf2b6a4bce9f2ab8201075b507339da1cc13a93c42983c88ff3f4c84d80439
6
+ metadata.gz: 25ae935bcacf3284bd31d7af9b03203b0f9b45801f3cfacd959114c8ce3b53bf47a69b6760400de0d493d3df48f9632e60c15466ba3a66ffceac00088f02d643
7
+ data.tar.gz: 736f7cf63d417a05d4d48c12ad593722cd5d3877c85a79831b864cb10e481b1b6f05bfafeaa05a9695930f1c52633959245ca4fc763e9b4317c8a591027a7576
data/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ ## 0.0.2
2
+
3
+ * Calling `#revise` on new document simply creates it (`:revise` callbacks are not triggered).
4
+ * Added `#revise!` method raising Mongoid exceptions.
5
+ * Added tests for conflicting updates.
6
+ * Added thread-safe version check and a loop to resolve version discrepancies in case of failure.
7
+
8
+ ## 0.0.1
9
+
10
+ Initial version
data/Gemfile.lock CHANGED
@@ -1,27 +1,27 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongoid_versioning (0.0.1)
4
+ mongoid_versioning (0.0.2)
5
5
  mongoid (~> 4.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (4.1.6)
11
- activesupport (= 4.1.6)
10
+ activemodel (4.2.0)
11
+ activesupport (= 4.2.0)
12
12
  builder (~> 3.1)
13
- activesupport (4.1.6)
14
- i18n (~> 0.6, >= 0.6.9)
13
+ activesupport (4.2.0)
14
+ i18n (~> 0.7)
15
15
  json (~> 1.7, >= 1.7.7)
16
16
  minitest (~> 5.1)
17
- thread_safe (~> 0.1)
17
+ thread_safe (~> 0.3, >= 0.3.4)
18
18
  tzinfo (~> 1.1)
19
19
  bson (2.3.0)
20
20
  builder (3.2.2)
21
21
  celluloid (0.16.0)
22
22
  timers (~> 4.0.0)
23
23
  coderay (1.1.0)
24
- connection_pool (2.0.0)
24
+ connection_pool (2.1.0)
25
25
  coveralls (0.7.1)
26
26
  multi_json (~> 1.3)
27
27
  rest-client
@@ -42,7 +42,7 @@ GEM
42
42
  guard (~> 2.0)
43
43
  minitest (>= 3.0)
44
44
  hitimes (1.2.2)
45
- i18n (0.6.11)
45
+ i18n (0.7.0)
46
46
  json (1.8.1)
47
47
  listen (2.7.11)
48
48
  celluloid (>= 0.15.2)
@@ -57,7 +57,7 @@ GEM
57
57
  moped (~> 2.0.0)
58
58
  origin (~> 2.1)
59
59
  tzinfo (>= 0.3.37)
60
- moped (2.0.0)
60
+ moped (2.0.2)
61
61
  bson (~> 2.2)
62
62
  connection_pool (~> 2.0)
63
63
  optionable (~> 0.2.0)
data/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/tomasc/mongoid_versioning.svg)](https://travis-ci.org/tomasc/mongoid_versioning) [![Gem Version](https://badge.fury.io/rb/mongoid_versioning.svg)](http://badge.fury.io/rb/mongoid_versioning) [![Coverage Status](https://img.shields.io/coveralls/tomasc/mongoid_versioning.svg)](https://coveralls.io/r/tomasc/mongoid_versioning)
4
4
 
5
+ Versioning of Mongoid documents. Past versions are stored in separate collection.
6
+
7
+ This gem is intended for versioning of whole documents. However, it might be possible to extend its support to embedded documents as well. Pull requests are welcome.
8
+
5
9
  ## Installation
6
10
 
7
11
  Add this line to your application's Gemfile:
@@ -51,7 +55,9 @@ doc._version # => 1
51
55
  doc._based_on_version # => nil
52
56
  ```
53
57
 
54
- The `#revise` method validates the document and runs `:revise`, `:save` and `:update` callbacks (resp. `:revise`, `:save` and `:create` for new record).
58
+ The `#revise` method validates the document and runs `:revise`, `:save` and `:update` callbacks. (Please note that running `#revise` on new document will resort to standard `#save`.)
59
+
60
+ A `#revise!` method, raising `Mongoid::Errors::Validations` and `Mongoid::Errors::Callbacks` exceptions, is also available.
55
61
 
56
62
  ### Retrieving versions
57
63
 
@@ -1,3 +1,3 @@
1
1
  module MongoidVersioning
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -9,10 +9,11 @@ module MongoidVersioning
9
9
  field :_version, type: Integer
10
10
  field :_based_on_version, type: Integer
11
11
 
12
- collection.database[versions_collection_name].indexes.create(
12
+ versions_collection.indexes.create(
13
13
  { _orig_id: 1, _version: 1 }, { unique: true }
14
14
  )
15
15
 
16
+ before_create :set_initial_version
16
17
  after_initialize :revert_id
17
18
  end
18
19
  end
@@ -23,16 +24,36 @@ module MongoidVersioning
23
24
  def versions_collection_name
24
25
  [collection.name, 'versions'].join('.')
25
26
  end
27
+
28
+ def versions_collection
29
+ collection.database[versions_collection_name]
30
+ end
26
31
  end
27
32
 
28
33
  # =====================================================================
29
34
 
30
35
  def revise options={}
31
- if new_record?
32
- !_create_revised(options).new_record?
33
- else
34
- _update_revised(options)
36
+ return save if new_record?
37
+
38
+ return false if performing_validations?(options) && invalid?(:update)
39
+ process_flagged_destroys
40
+ result = run_callbacks(:revise) do
41
+ run_callbacks(:save) do
42
+ run_callbacks(:update) do
43
+ _revise
44
+ true
45
+ end
46
+ end
35
47
  end
48
+ post_process_persist(result, options) and self
49
+ end
50
+
51
+ def revise! options={}
52
+ unless revise(options)
53
+ fail_due_to_validation! unless errors.empty?
54
+ fail_due_to_callback!(:revise!)
55
+ end
56
+ true
36
57
  end
37
58
 
38
59
  # ---------------------------------------------------------------------
@@ -59,65 +80,35 @@ module MongoidVersioning
59
80
 
60
81
  private # =============================================================
61
82
 
83
+ def set_initial_version
84
+ self._version ||= 1
85
+ end
86
+
62
87
  def revert_id
63
88
  return unless self['_orig_id']
64
89
  self._id = self['_orig_id']
65
90
  end
66
91
 
67
- # these mirror the #create and #save methods from Mongoid
68
- def _create_revised options={}
69
- return self if performing_validations?(options) && invalid?(:create)
70
- result = run_callbacks(:revise) do
71
- run_callbacks(:save) do
72
- run_callbacks(:create) do
73
- _revise
74
- true
75
- end
76
- end
77
- end
78
- post_process_persist(result, options) and self
79
- end
80
-
81
- def _update_revised options={}
82
- return false if performing_validations?(options) && invalid?(:update)
83
- process_flagged_destroys
84
- result = run_callbacks(:revise) do
85
- run_callbacks(:save) do
86
- run_callbacks(:update) do
87
- _revise
88
- true
89
- end
90
- end
91
- end
92
- post_process_persist(result, options) and self
93
- end
94
-
95
92
  def _revise
96
- previous_version = nil
97
-
98
- # 1. get the latest version as stored in the db
99
- if previous_doc = self.class.collection.find({ _id: id }).first
100
-
101
- previous_version = previous_doc["_version"] || 1
93
+ loop do
94
+ previous_doc = latest_version
102
95
 
103
96
  previous_doc['_orig_id'] = previous_doc['_id']
104
97
  previous_doc['_id'] = BSON::ObjectId.new
105
- previous_doc['_version'] = previous_version
106
98
 
107
- # 2. upsert the latest version into the .versions collection
108
- self.class.collection.database[self.class.versions_collection_name].where(_orig_id: id, _version: previous_version).upsert(previous_doc)
109
- end
99
+ current_version = previous_doc._version
100
+
101
+ res1 = self.class.versions_collection.where(_orig_id: previous_doc['_orig_id'], _version: previous_doc._version).upsert(previous_doc.as_document)
110
102
 
111
- # 3. insert new version
112
- self._based_on_version = _version || previous_version
113
- self._version = previous_version.to_i+1
103
+ self._based_on_version = _version || current_version
104
+ self._version = current_version+1
114
105
 
115
- self.class.collection.where(_id: id).upsert(self.as_document)
106
+ res2 = self.class.collection.where(_id: id, _version: current_version).update(self.as_document)
116
107
 
117
- # TODO
118
- # if (result.nModified != 1) {
119
- # print("Someone got there first, replay flow to try again");
120
- # }
108
+ # replay flow if someone else updated the document before us
109
+ break unless res2['n'] != 1
110
+ end
121
111
  end
112
+
122
113
  end
123
- end
114
+ end
@@ -32,12 +32,19 @@ module MongoidVersioning
32
32
  # =====================================================================
33
33
 
34
34
  describe 'fields' do
35
- it 'has :_version' do
36
- subject.must_respond_to :_version
35
+ describe '_version' do
36
+ it { subject.must_respond_to :_version }
37
+ it { subject._version.must_be_nil }
38
+
39
+ describe 'on create' do
40
+ before { subject.save }
41
+ it { subject._version.must_equal 1 }
42
+ end
37
43
  end
38
44
 
39
- it 'has :_based_on_version' do
40
- subject.must_respond_to :_based_on_version
45
+ describe '_based_on_version' do
46
+ it { subject.must_respond_to :_based_on_version }
47
+ it { subject._based_on_version.must_be_nil }
41
48
  end
42
49
  end
43
50
 
@@ -56,141 +63,193 @@ module MongoidVersioning
56
63
  describe 'instance methods' do
57
64
  describe '#revise' do
58
65
 
59
- describe 'when invalid' do
60
- let(:invalid_document) { TestDocument.new }
66
+ describe 'on new document' do
67
+ let(:new_document) { TestDocument.new(name: 'New') }
68
+
69
+ before do
70
+ new_document.name = 'Foo'
71
+ new_document.revise
61
72
 
62
- it 'returns false' do
63
- invalid_document.revise.must_equal false
73
+ @versions = TestDocument.versions_collection.where(_orig_id: new_document.id).sort(_version: -1)
74
+ @current = TestDocument.collection.where(_id: new_document.id).first
64
75
  end
65
- end
66
76
 
67
- describe 'new record' do
68
- before do
69
- subject.callbacks = []
70
- subject.revise
77
+ it 'sets _version' do
78
+ new_document._version.must_equal 1
79
+ end
80
+ it 'sets _based_on_version' do
81
+ new_document._based_on_version.must_be_nil
82
+ end
71
83
 
72
- @current_docs = TestDocument.collection.where({ _id: subject.id })
73
- @version_docs = TestDocument.collection.database[TestDocument.versions_collection_name].where(_orig_id: subject.id)
84
+ describe 'when invalid' do
85
+ before { new_document.name = nil }
86
+
87
+ it 'returns false' do
88
+ new_document.revise.must_equal false
89
+ end
74
90
  end
75
91
 
76
92
  describe 'callbacks' do
77
- it 'runs :revise, :save, :create' do
78
- subject.callbacks.must_equal %w(before_revise before_save before_create after_create after_save after_revise)
93
+ it 'does not run :revise' do
94
+ new_document.callbacks.wont_include 'before_revise'
95
+ new_document.callbacks.wont_include 'after_revise'
79
96
  end
80
97
  end
81
98
 
82
- describe 'default collection' do
83
- it 'stores the document' do
84
- @current_docs.first.must_be :present?
85
- end
86
- it '_version to 1' do
87
- @current_docs.first['_version'].must_equal 1
88
- end
89
- it '_based_on_version at nil' do
90
- @current_docs.first['_based_on_version'].must_be_nil
91
- end
92
- it 'maintains only one current doc' do
93
- @current_docs.count.must_equal 1
99
+ describe 'versions' do
100
+ it 'does not store anything' do
101
+ @versions.count.must_equal 0
94
102
  end
95
103
  end
96
104
 
97
- describe 'versions' do
98
- it 'does not create any versions' do
99
- @version_docs.count.must_equal 0
105
+ describe 'current' do
106
+ it 'stores updated doc into current collection' do
107
+ @current["_version"].must_equal 1
108
+ @current["_based_on_version"].must_be_nil
109
+ @current["name"].must_equal 'Foo'
100
110
  end
101
111
  end
102
112
  end
103
113
 
104
114
  # ---------------------------------------------------------------------
105
115
 
106
- describe 'existing record' do
107
- let(:existing_document) { TestDocument.create(name: 'Init') }
116
+ describe 'on existing document' do
117
+ let(:existing_document) { TestDocument.create(name: 'Existing') }
108
118
 
109
119
  before do
110
120
  existing_document.callbacks = []
111
121
  existing_document.name = 'Foo'
112
122
  existing_document.revise
113
123
 
114
- @current_docs = TestDocument.collection.where(_id: existing_document.id)
115
- @version_docs = TestDocument.collection.database[TestDocument.versions_collection_name].where(_orig_id: existing_document.id)
124
+ @versions = TestDocument.versions_collection.where(_orig_id: existing_document.id).sort(_version: -1)
125
+ @current = TestDocument.collection.where(_id: existing_document.id).first
126
+ end
127
+
128
+ it 'sets _version' do
129
+ existing_document._version.must_equal 2
130
+ end
131
+ it 'sets _based_on_version' do
132
+ existing_document._based_on_version.must_equal 1
133
+ end
134
+
135
+ describe 'when invalid' do
136
+ before { existing_document.name = nil }
137
+
138
+ it 'returns false' do
139
+ existing_document.revise.must_equal false
140
+ end
116
141
  end
117
142
 
118
143
  describe 'callbacks' do
119
- it 'runs :revise, :save, :update' do
144
+ it 'runs :revise, :save, :create' do
120
145
  existing_document.callbacks.must_equal %w(before_revise before_save before_update after_update after_save after_revise)
121
146
  end
122
147
  end
123
148
 
124
- describe 'default collection' do
125
- it 'updates the document' do
126
- @current_docs.first['name'].must_equal 'Foo'
127
- end
128
- it '_version to 2' do
129
- @current_docs.first['_version'].must_equal 2
130
- end
131
- it 'sets the _based_on_version to 1' do
132
- @current_docs.first['_based_on_version'].must_equal 1
149
+ describe 'versions' do
150
+ it 'stores previous doc' do
151
+ @versions.count.must_equal 1
152
+ @versions.first["_version"].must_equal 1
153
+ @versions.first["_based_on_version"].must_be_nil
154
+ @versions.first["name"].must_equal 'Existing'
133
155
  end
134
- it 'maintains only one current doc' do
135
- @current_docs.count.must_equal 1
156
+ end
157
+
158
+ describe 'current' do
159
+ it 'stores updated doc into current collection' do
160
+ @current["_version"].must_equal 2
161
+ @current["_based_on_version"].must_equal 1
162
+ @current["name"].must_equal 'Foo'
136
163
  end
137
164
  end
138
165
 
139
- describe 'previous versions' do
140
- it 'copies the latest version to .versions' do
141
- @version_docs.first.must_be :present?
166
+ describe 'subsequent revise' do
167
+ before do
168
+ existing_document.callbacks = []
169
+ existing_document.name = 'Bar'
170
+ existing_document.revise
171
+
172
+ @versions = TestDocument.versions_collection.where(_orig_id: existing_document.id).sort(_version: -1)
173
+ @current = TestDocument.collection.where(_id: existing_document.id).first
142
174
  end
143
175
 
144
- it '_version to 1' do
145
- @version_docs.first['_version'].must_equal 1
176
+ it 'sets _version' do
177
+ existing_document._version.must_equal 3
146
178
  end
147
- it '_version to 1' do
148
- @version_docs.first['_based_on_version'].must_equal nil
179
+ it 'sets _based_on_version' do
180
+ existing_document._based_on_version.must_equal 2
149
181
  end
150
- it 'is not updated' do
151
- @version_docs.first['name'].wont_equal 'Foo'
182
+
183
+ describe 'versions' do
184
+ it 'stores previous doc' do
185
+ @versions.count.must_equal 2
186
+ @versions.map{ |v| v['_version'] }.must_equal [2, 1]
187
+ @versions.map{ |v| v['_based_on_version'] }.must_equal [1, nil]
188
+ @versions.first["_version"].must_equal 2
189
+ @versions.first["_based_on_version"].must_equal 1
190
+ @versions.first["name"].must_equal 'Foo'
191
+ end
152
192
  end
153
- it 'creates only one version' do
154
- @version_docs.count.must_equal 1
193
+
194
+ describe 'current' do
195
+ it 'stores updated doc into current collection' do
196
+ @current["_version"].must_equal 3
197
+ @current["_based_on_version"].must_equal 2
198
+ @current["name"].must_equal 'Bar'
199
+ end
155
200
  end
156
201
  end
157
202
  end
158
203
 
159
204
  # ---------------------------------------------------------------------
160
205
 
161
- describe 'subsequent revision' do
206
+ describe 'on concurrent updates' do
162
207
  before do
163
- subject.name = 'v1'
164
- subject.revise
165
- subject.name = 'v2'
166
- subject.revise
167
- subject.name = 'v3'
168
- subject.revise
208
+ @doc = TestDocument.create(name: 'Doc')
169
209
 
170
- @current_docs = TestDocument.collection.where(_id: subject.id)
171
- @version_docs = TestDocument.collection.database[TestDocument.versions_collection_name].where(_orig_id: subject.id)
210
+ @user1 = TestDocument.where(_id: @doc.id).first
211
+ @user2 = TestDocument.where(_id: @doc.id).first
212
+
213
+ @user2.name = 'Doc2'
214
+ @user1.name = 'Doc1'
215
+
216
+ @user2.revise
217
+ @user1.revise
218
+
219
+ @result = TestDocument.where(_id: @doc.id).first
220
+ @versions = TestDocument.versions_collection.where(_orig_id: @doc.id).sort(_version: -1)
221
+ @current = TestDocument.collection.where(_id: @doc.id).first
172
222
  end
173
223
 
174
- describe 'default collection' do
175
- it 'updates the current document in the db' do
176
- @current_docs.first['name'].must_equal 'v3'
177
- @current_docs.first['_version'].must_equal 3
178
- @current_docs.first['_based_on_version'].must_equal 2
179
- @current_docs.count.must_equal 1
180
- end
224
+ it 'will correctly set values' do
225
+ @result._version.must_equal 3
226
+ @result._based_on_version.must_equal 1
227
+ @result.name.must_equal 'Doc1'
181
228
  end
182
229
 
183
230
  describe 'versions' do
184
- it 'has 2 previous versions' do
185
- @version_docs.count.must_equal 2
186
- @version_docs.collect{ |i| i['_version'] }.must_equal [1,2]
187
- @version_docs.collect{ |i| i['_based_on_version'] }.must_equal [nil,1]
231
+ it 'stores previous doc' do
232
+ @versions.count.must_equal 2
233
+ @versions.map{ |v| v['_version'] }.must_equal [2, 1]
234
+ @versions.map{ |v| v['_based_on_version'] }.must_equal [1, nil]
235
+ @versions.map{ |v| v['name'] }.must_equal ['Doc2', 'Doc']
236
+ @versions.first["_version"].must_equal 2
237
+ @versions.first["_based_on_version"].must_equal 1
238
+ @versions.first["name"].must_equal 'Doc2'
239
+ end
240
+ end
241
+
242
+ describe 'current' do
243
+ it 'stores updated doc into current collection' do
244
+ @current["_version"].must_equal 3
245
+ @current["_based_on_version"].must_equal 1
246
+ @current["name"].must_equal 'Doc1'
188
247
  end
189
248
  end
190
249
  end
191
250
 
192
251
  # ---------------------------------------------------------------------
193
-
252
+
194
253
  describe 'revise on previous version' do
195
254
  before do
196
255
  subject.name = 'v1'
@@ -216,6 +275,24 @@ module MongoidVersioning
216
275
  end
217
276
  end
218
277
 
278
+ # =====================================================================
279
+
280
+ describe '#revise!' do
281
+ let(:doc) { TestDocument.create(name: 'revise!') }
282
+
283
+ it 'raises error when invalid' do
284
+ doc.name = nil
285
+ proc { doc.revise! }.must_raise Mongoid::Errors::Validations
286
+ end
287
+
288
+ it 'raises error when the :revise callbacks returns false' do
289
+ skip 'not sure how to test this'
290
+ TestDocument.stub(:before_revise, false) do
291
+ proc { doc.revise! }.must_raise Mongoid::Errors::Callback
292
+ end
293
+ end
294
+ end
295
+
219
296
  # =====================================================================
220
297
 
221
298
  describe 'versions' do
@@ -229,70 +306,66 @@ module MongoidVersioning
229
306
  subject.name = 'Foo'
230
307
  end
231
308
 
232
- it 'returns an Array' do
233
- subject.versions.must_be_kind_of Array
234
- end
235
-
236
309
  # ---------------------------------------------------------------------
237
310
 
238
311
  describe '#previous_versions' do
239
312
  it 'returns everything but the latest' do
240
313
  subject.previous_versions.map(&:_version).must_equal [2,1]
241
314
  end
242
- it 'correctly reverts document _ids' do
315
+ it 'reverts document _ids' do
243
316
  subject.previous_versions.map(&:id).uniq.must_equal [subject.id]
244
317
  end
245
318
  end
246
319
 
247
- # ---------------------------------------------------------------------
248
-
249
320
  describe '#latest_version' do
250
321
  it 'includes the latest version as in the database' do
251
322
  subject.latest_version.name.wont_equal 'Foo'
252
323
  end
253
324
  end
254
325
 
255
- # ---------------------------------------------------------------------
256
-
257
326
  describe '#versions' do
327
+ it 'returns an Array' do
328
+ subject.versions.must_be_kind_of Array
329
+ end
258
330
  it 'returns all versions including the latest one' do
259
331
  subject.versions.map(&:_version).must_equal [3,2,1]
260
332
  end
261
333
  end
334
+ end
262
335
 
263
336
 
264
- # ---------------------------------------------------------------------
337
+ # ---------------------------------------------------------------------
265
338
 
266
- describe '#version' do
267
- before do
268
- subject.name = 'v1'
269
- subject.revise
270
- subject.name = 'v2'
271
- subject.revise
272
- subject.name = 'v3'
273
- subject.revise
274
- subject.name = 'Foo'
275
- end
339
+ describe '#version' do
340
+ before do
341
+ subject.name = 'v1'
342
+ subject.revise
343
+ subject.name = 'v2'
344
+ subject.revise
345
+ subject.name = 'v3'
346
+ subject.revise
347
+ subject.name = 'Foo'
348
+ end
276
349
 
277
- describe 'when latest version' do
278
- it 'returns the version from db' do
279
- subject.version(3)._version.must_equal 3
280
- end
350
+ describe 'when latest version' do
351
+ it 'returns the version from db' do
352
+ subject.version(3)._version.must_equal 3
281
353
  end
354
+ end
282
355
 
283
- describe 'when previous version' do
284
- it 'returns the version from db' do
285
- subject.version(1)._version.must_equal 1
286
- end
356
+ describe 'when previous version' do
357
+ it 'returns the version from db' do
358
+ subject.version(1)._version.must_equal 1
287
359
  end
360
+ end
288
361
 
289
- describe 'when version does not exist' do
290
- it 'returns nil' do
291
- subject.version(10).must_be_nil
292
- end
362
+ describe 'when version does not exist' do
363
+ it 'returns nil' do
364
+ subject.version(10).must_be_nil
293
365
  end
294
366
  end
295
367
  end
368
+
296
369
  end
297
370
 
298
371
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_versioning
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Celizna
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-30 00:00:00.000000000 Z
11
+ date: 2015-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
@@ -131,6 +131,7 @@ extra_rdoc_files: []
131
131
  files:
132
132
  - ".gitignore"
133
133
  - ".travis.yml"
134
+ - CHANGELOG.md
134
135
  - Gemfile
135
136
  - Gemfile.lock
136
137
  - Guardfile