mongomatic 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mongomatic/base.rb +14 -8
- data/lib/mongomatic/cursor.rb +2 -6
- data/test/test_mongomatic.rb +29 -0
- metadata +2 -2
data/lib/mongomatic/base.rb
CHANGED
@@ -28,7 +28,7 @@ module Mongomatic
|
|
28
28
|
|
29
29
|
def find_one(query={}, opts={})
|
30
30
|
return nil unless doc = self.collection.find_one(query, opts)
|
31
|
-
self.new(doc)
|
31
|
+
self.new(doc, false)
|
32
32
|
end
|
33
33
|
|
34
34
|
def all
|
@@ -48,11 +48,20 @@ module Mongomatic
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
attr_accessor :removed
|
51
|
+
attr_accessor :removed, :is_new
|
52
52
|
|
53
|
-
def initialize(doc={})
|
53
|
+
def initialize(doc={}, is_new=true)
|
54
54
|
@doc = doc.stringify_keys
|
55
55
|
self.removed = false
|
56
|
+
self.is_new = is_new
|
57
|
+
end
|
58
|
+
|
59
|
+
def is_new?
|
60
|
+
self.is_new == true
|
61
|
+
end
|
62
|
+
|
63
|
+
def new?
|
64
|
+
self.is_new == true
|
56
65
|
end
|
57
66
|
|
58
67
|
def []=(k,v)
|
@@ -74,10 +83,6 @@ module Mongomatic
|
|
74
83
|
def ==(obj)
|
75
84
|
obj.is_a?(self.class) && obj.doc["_id"] == @doc["_id"]
|
76
85
|
end
|
77
|
-
|
78
|
-
def new?
|
79
|
-
@doc["_id"] == nil
|
80
|
-
end
|
81
86
|
|
82
87
|
def reload
|
83
88
|
if obj = self.class.find({"_id" => @doc["_id"]}).next_document
|
@@ -90,7 +95,8 @@ module Mongomatic
|
|
90
95
|
self.send(:before_insert) if self.respond_to?(:before_insert)
|
91
96
|
self.send(:before_insert_or_update) if self.respond_to?(:before_insert_or_update)
|
92
97
|
if ret = self.class.collection.insert(@doc,opts)
|
93
|
-
@doc["_id"] = @doc.delete(:_id)
|
98
|
+
@doc["_id"] = @doc.delete(:_id) if @doc[:_id]
|
99
|
+
self.is_new = false
|
94
100
|
end
|
95
101
|
self.send(:after_insert) if self.respond_to?(:after_insert)
|
96
102
|
self.send(:after_insert_or_update) if self.respond_to?(:after_insert_or_update)
|
data/lib/mongomatic/cursor.rb
CHANGED
@@ -20,7 +20,7 @@ module Mongomatic
|
|
20
20
|
|
21
21
|
def next_document
|
22
22
|
if doc = @mongo_cursor.next_document
|
23
|
-
@obj_class.new(doc)
|
23
|
+
@obj_class.new(doc, false)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -28,14 +28,10 @@ module Mongomatic
|
|
28
28
|
|
29
29
|
def each
|
30
30
|
@mongo_cursor.each do |doc|
|
31
|
-
yield(@obj_class.new(doc))
|
31
|
+
yield(@obj_class.new(doc, false))
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
# def to_a
|
36
|
-
# @mongo_cursor.to_a.collect { |doc| @obj_class.new(doc) }
|
37
|
-
# end
|
38
|
-
|
39
35
|
def current_limit
|
40
36
|
@mongo_cursor.limit
|
41
37
|
end
|
data/test/test_mongomatic.rb
CHANGED
@@ -183,4 +183,33 @@ class TestMongomatic < Test::Unit::TestCase
|
|
183
183
|
|
184
184
|
assert_equal 1, Person.count
|
185
185
|
end
|
186
|
+
|
187
|
+
should "have the is_new flag set appropriately" do
|
188
|
+
Person.collection.drop
|
189
|
+
p = Person.new
|
190
|
+
assert p.is_new?
|
191
|
+
assert !p.insert
|
192
|
+
assert p.is_new?
|
193
|
+
p["name"] = "Ben"
|
194
|
+
assert p.insert
|
195
|
+
assert !p.is_new?
|
196
|
+
p = Person.find_one(p["_id"])
|
197
|
+
assert !p.is_new?
|
198
|
+
end
|
199
|
+
|
200
|
+
should "be able to set a custom id" do
|
201
|
+
Person.collection.drop
|
202
|
+
p = Person.new(:name => "Ben")
|
203
|
+
assert p.is_new?
|
204
|
+
p["_id"] = "mycustomid"
|
205
|
+
assert p.insert
|
206
|
+
found = Person.find_one({"_id" => "mycustomid"})
|
207
|
+
assert_equal found, p
|
208
|
+
assert !p.is_new?
|
209
|
+
found["age"] = 26
|
210
|
+
assert found.update
|
211
|
+
found = Person.find_one({"_id" => "mycustomid"})
|
212
|
+
assert_equal found["_id"], "mycustomid"
|
213
|
+
assert_equal 26, found["age"]
|
214
|
+
end
|
186
215
|
end
|