mongomatic 0.6.1 → 0.6.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.
- data/lib/mongomatic/base.rb +53 -16
- data/lib/mongomatic/exceptions.rb +10 -0
- data/lib/mongomatic.rb +1 -0
- data/test/test_exceptions.rb +36 -0
- metadata +5 -2
data/lib/mongomatic/base.rb
CHANGED
@@ -174,10 +174,19 @@ module Mongomatic
|
|
174
174
|
# Insert the document into the database. Will return false if the document has
|
175
175
|
# already been inserted or is invalid. Returns the generated BSON::ObjectId
|
176
176
|
# for the new document. Will silently fail if MongoDB is unable to insert the
|
177
|
-
# document, use insert!
|
178
|
-
#
|
177
|
+
# document, use insert! or send in {:safe => true} if you want a Mongo::OperationError.
|
178
|
+
# If you want to raise the following errors also, pass in {:raise => true}
|
179
|
+
# * Raises Mongomatic::Exceptions::DocumentNotNew if document is not new
|
180
|
+
# * Raises Mongomatic::Exceptions::DocumentNotValid if there are validation errors
|
179
181
|
def insert(opts={})
|
180
|
-
|
182
|
+
if opts[:raise] == true
|
183
|
+
raise Mongomatic::Exceptions::DocumentWasRemoved if removed?
|
184
|
+
raise Mongomatic::Exceptions::DocumentNotNew unless new?
|
185
|
+
raise Mongomatic::Exceptions::DocumentNotValid unless valid?
|
186
|
+
else
|
187
|
+
return false unless new? && valid?
|
188
|
+
end
|
189
|
+
|
181
190
|
do_callback(:before_insert)
|
182
191
|
do_callback(:before_insert_or_update)
|
183
192
|
if ret = self.class.collection.insert(@doc,opts)
|
@@ -189,18 +198,30 @@ module Mongomatic
|
|
189
198
|
ret
|
190
199
|
end
|
191
200
|
|
192
|
-
# Calls insert(...) with {:safe => true} passed in as an option.
|
193
|
-
#
|
194
|
-
#
|
201
|
+
# Calls insert(...) with {:safe => true} passed in as an option.
|
202
|
+
# * Raises Mongo::OperationError if there was a DB error on inserting
|
203
|
+
# If you want to raise the following errors also, pass in {:raise => true}
|
204
|
+
# * Raises Mongomatic::Exceptions::DocumentNotNew if document is not new
|
205
|
+
# * Raises Mongomatic::Exceptions::DocumentNotValid if there are validation errors
|
195
206
|
def insert!(opts={})
|
196
207
|
insert(opts.merge(:safe => true))
|
197
208
|
end
|
198
209
|
|
199
|
-
# Will persist any changes you have made to the document.
|
200
|
-
#
|
201
|
-
#
|
210
|
+
# Will persist any changes you have made to the document. Silently fails on
|
211
|
+
# db update error. Use update! or pass in {:safe => true} to raise a
|
212
|
+
# Mongo::OperationError if that's what you want.
|
213
|
+
# If you want to raise the following errors also, pass in {:raise => true}
|
214
|
+
# * Raises Mongomatic::Exceptions::DocumentIsNew if document is new
|
215
|
+
# * Raises Mongomatic::Exceptions::DocumentNotValid if there are validation errors
|
216
|
+
# * Raises Mongomatic::Exceptions::DocumentWasRemoved if document has been removed
|
202
217
|
def update(opts={},update_doc=@doc)
|
203
|
-
|
218
|
+
if opts[:raise] == true
|
219
|
+
raise Mongomatic::Exceptions::DocumentWasRemoved if removed?
|
220
|
+
raise Mongomatic::Exceptions::DocumentIsNew if new?
|
221
|
+
raise Mongomatic::Exceptions::DocumentNotValid unless valid?
|
222
|
+
else
|
223
|
+
return false if new? || removed? || !valid?
|
224
|
+
end
|
204
225
|
do_callback(:before_update)
|
205
226
|
do_callback(:before_insert_or_update)
|
206
227
|
ret = self.class.collection.update({"_id" => @doc["_id"]}, update_doc, opts)
|
@@ -209,15 +230,28 @@ module Mongomatic
|
|
209
230
|
ret
|
210
231
|
end
|
211
232
|
|
212
|
-
#
|
233
|
+
# Calls update(...) with {:safe => true} passed in as an option.
|
234
|
+
# * Raises Mongo::OperationError if there was a DB error on updating
|
235
|
+
# If you want to raise the following errors also, pass in {:raise => true}
|
236
|
+
# * Raises Mongomatic::Exceptions::DocumentIsNew if document is new
|
237
|
+
# * Raises Mongomatic::Exceptions::DocumentNotValid if there are validation errors
|
238
|
+
# * Raises Mongomatic::Exceptions::DocumentWasRemoved if document has been removed
|
213
239
|
def update!(opts={},update_doc=@doc)
|
214
240
|
update(opts.merge(:safe => true),update_doc)
|
215
241
|
end
|
216
242
|
|
217
|
-
# Remove this document from the collection. Silently fails on error,
|
218
|
-
# if you want an exception raised.
|
243
|
+
# Remove this document from the collection. Silently fails on db error,
|
244
|
+
# use remove! or pass in {:safe => true} if you want an exception raised.
|
245
|
+
# If you want to raise the following errors also, pass in {:raise => true}
|
246
|
+
# * Raises Mongomatic::Exceptions::DocumentIsNew if document is new
|
247
|
+
# * Raises Mongomatic::Exceptions::DocumentWasRemoved if document has been already removed
|
219
248
|
def remove(opts={})
|
220
|
-
|
249
|
+
if opts[:raise] == true
|
250
|
+
raise Mongomatic::Exceptions::DocumentWasRemoved if removed?
|
251
|
+
raise Mongomatic::Exceptions::DocumentIsNew if new?
|
252
|
+
else
|
253
|
+
return false if new? || removed?
|
254
|
+
end
|
221
255
|
do_callback(:before_remove)
|
222
256
|
if ret = self.class.collection.remove({"_id" => @doc["_id"]})
|
223
257
|
self.removed = true; freeze; ret
|
@@ -226,8 +260,11 @@ module Mongomatic
|
|
226
260
|
ret
|
227
261
|
end
|
228
262
|
|
229
|
-
#
|
230
|
-
#
|
263
|
+
# Calls remove(...) with {:safe => true} passed in as an option.
|
264
|
+
# * Raises Mongo::OperationError if there was a DB error on removing
|
265
|
+
# If you want to raise the following errors also, pass in {:raise => true}
|
266
|
+
# * Raises Mongomatic::Exceptions::DocumentIsNew if document is new
|
267
|
+
# * Raises Mongomatic::Exceptions::DocumentWasRemoved if document has been already removed
|
231
268
|
def remove!(opts={})
|
232
269
|
remove(opts.merge(:safe => true))
|
233
270
|
end
|
data/lib/mongomatic.rb
CHANGED
@@ -29,6 +29,7 @@ module Mongomatic
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
require "#{File.dirname(__FILE__)}/mongomatic/exceptions"
|
32
33
|
require "#{File.dirname(__FILE__)}/mongomatic/util"
|
33
34
|
require "#{File.dirname(__FILE__)}/mongomatic/m_hash"
|
34
35
|
require "#{File.dirname(__FILE__)}/mongomatic/cursor"
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestExceptions < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
Person.collection.drop
|
6
|
+
end
|
7
|
+
|
8
|
+
should "raise on updating new document" do
|
9
|
+
p1 = Person.new(:name => "Jordan")
|
10
|
+
assert_equal false, p1.update
|
11
|
+
assert_raise(Mongomatic::Exceptions::DocumentIsNew) { p1.update(:raise => true) }
|
12
|
+
end
|
13
|
+
|
14
|
+
should "raise on inserting invalid document" do
|
15
|
+
p1 = Person.new
|
16
|
+
assert_equal false, p1.insert
|
17
|
+
assert_raise(Mongomatic::Exceptions::DocumentNotValid) { p1.insert(:raise => true) }
|
18
|
+
end
|
19
|
+
|
20
|
+
should "raise on updating invalid document" do
|
21
|
+
p1 = Person.new(:name => "Ben")
|
22
|
+
assert p1.insert
|
23
|
+
p1["name"] = nil
|
24
|
+
assert_equal false, p1.update
|
25
|
+
assert_raise(Mongomatic::Exceptions::DocumentNotValid) { p1.update(:raise => true) }
|
26
|
+
end
|
27
|
+
|
28
|
+
should "raise on remove" do
|
29
|
+
p1 = Person.new(:name => "Ben")
|
30
|
+
assert p1.insert
|
31
|
+
assert p1.remove
|
32
|
+
assert_raise(Mongomatic::Exceptions::DocumentWasRemoved) { p1.remove(:raise => true) }
|
33
|
+
assert_raise(Mongomatic::Exceptions::DocumentWasRemoved) { p1.update(:raise => true) }
|
34
|
+
assert_raise(Mongomatic::Exceptions::DocumentWasRemoved) { p1.insert(:raise => true) }
|
35
|
+
end
|
36
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 2
|
9
|
+
version: 0.6.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ben Myles
|
@@ -90,6 +90,7 @@ files:
|
|
90
90
|
- lib/mongomatic/base.rb
|
91
91
|
- lib/mongomatic/cursor.rb
|
92
92
|
- lib/mongomatic/errors.rb
|
93
|
+
- lib/mongomatic/exceptions.rb
|
93
94
|
- lib/mongomatic/expectations.rb
|
94
95
|
- lib/mongomatic/expectations/be_reference.rb
|
95
96
|
- lib/mongomatic/expectations/expected.rb
|
@@ -103,6 +104,7 @@ files:
|
|
103
104
|
- LICENSE
|
104
105
|
- README.rdoc
|
105
106
|
- test/helper.rb
|
107
|
+
- test/test_exceptions.rb
|
106
108
|
- test/test_modifiers.rb
|
107
109
|
- test/test_mongomatic.rb
|
108
110
|
has_rdoc: true
|
@@ -139,5 +141,6 @@ specification_version: 3
|
|
139
141
|
summary: Mongomatic is a simple Ruby object mapper for Mongo
|
140
142
|
test_files:
|
141
143
|
- test/helper.rb
|
144
|
+
- test/test_exceptions.rb
|
142
145
|
- test/test_modifiers.rb
|
143
146
|
- test/test_mongomatic.rb
|