mingo 0.4.1 → 0.4.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/mingo/connection.rb +3 -3
- data/lib/mingo/cursor.rb +1 -1
- data/lib/mingo/many_proxy.rb +16 -1
- data/lib/mingo.rb +11 -0
- data/spec/mingo_spec.rb +33 -2
- metadata +2 -2
data/lib/mingo/connection.rb
CHANGED
@@ -10,13 +10,13 @@ class Mingo
|
|
10
10
|
!!db
|
11
11
|
end
|
12
12
|
|
13
|
-
def connect(dbname_or_uri)
|
13
|
+
def connect(dbname_or_uri, options = {})
|
14
14
|
self.collection = nil
|
15
15
|
self.db = if dbname_or_uri.index('mongodb://') == 0
|
16
|
-
connection = Mongo::Connection.from_uri(dbname_or_uri)
|
16
|
+
connection = Mongo::Connection.from_uri(dbname_or_uri, options)
|
17
17
|
connection.db(connection.auths.last['db_name'])
|
18
18
|
else
|
19
|
-
Mongo::Connection.new.db(dbname_or_uri)
|
19
|
+
Mongo::Connection.new(nil, nil, options).db(dbname_or_uri)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
data/lib/mingo/cursor.rb
CHANGED
@@ -70,7 +70,7 @@ class Mingo
|
|
70
70
|
if @limit > 0 || @skip > 0
|
71
71
|
ids = selector[:_id]["$in"]
|
72
72
|
old_skip = @skip
|
73
|
-
selector[:_id]["$in"] = ids[@skip, @limit > 0 ? @limit : ids.size]
|
73
|
+
selector[:_id]["$in"] = Array(ids[@skip, @limit > 0 ? @limit : ids.size])
|
74
74
|
@skip = 0
|
75
75
|
begin
|
76
76
|
yield
|
data/lib/mingo/many_proxy.rb
CHANGED
@@ -82,6 +82,11 @@ class Mingo
|
|
82
82
|
def loaded?
|
83
83
|
!!@loaded
|
84
84
|
end
|
85
|
+
|
86
|
+
def reload
|
87
|
+
@loaded = @join_loaded = nil
|
88
|
+
self
|
89
|
+
end
|
85
90
|
|
86
91
|
def find(selector = {}, options = {}, &block)
|
87
92
|
@model.find(selector, find_options.merge(options), &block)
|
@@ -90,7 +95,17 @@ class Mingo
|
|
90
95
|
def respond_to?(method, priv = false)
|
91
96
|
super || method_missing(:respond_to?, method, priv)
|
92
97
|
end
|
93
|
-
|
98
|
+
|
99
|
+
def reset_counter_cache
|
100
|
+
delta = join_cursor.count - counter_cache
|
101
|
+
change_counter_cache delta
|
102
|
+
counter_cache
|
103
|
+
end
|
104
|
+
|
105
|
+
def cache_key
|
106
|
+
[@parent, @property, counter_cache]
|
107
|
+
end
|
108
|
+
|
94
109
|
private
|
95
110
|
|
96
111
|
def method_missing(method, *args, &block)
|
data/lib/mingo.rb
CHANGED
@@ -54,4 +54,15 @@ class Mingo < Hash
|
|
54
54
|
def ==(other)
|
55
55
|
other.is_a?(self.class) and other.id == self.id
|
56
56
|
end
|
57
|
+
|
58
|
+
def cache_key
|
59
|
+
model_key = self.class.model_name.cache_key
|
60
|
+
if not persisted?
|
61
|
+
"#{model_key}/new"
|
62
|
+
elsif timestamp = self['updated_at']
|
63
|
+
"#{model_key}/#{id}-#{timestamp.utc.strftime("%Y%m%d%H%M%S")}"
|
64
|
+
else
|
65
|
+
"#{model_key}/#{id}"
|
66
|
+
end
|
67
|
+
end
|
57
68
|
end
|
data/spec/mingo_spec.rb
CHANGED
@@ -200,13 +200,44 @@ describe User do
|
|
200
200
|
cursor.to_a.should == [@doc2]
|
201
201
|
end
|
202
202
|
|
203
|
+
it "doesn't die when offset is out of bounds" do
|
204
|
+
cursor = described_class.find([@doc3.id, @doc1.id, @doc2.id]).skip(4)
|
205
|
+
cursor.to_a.should be_empty
|
206
|
+
end
|
207
|
+
|
203
208
|
it "returns correct count" do
|
204
209
|
cursor = described_class.find([@doc3.id, @doc1.id, @doc2.id]).limit(1).skip(2)
|
205
|
-
cursor.next_document
|
206
210
|
cursor.count.should == 3
|
207
211
|
end
|
212
|
+
|
213
|
+
it "works with empty ID list" do
|
214
|
+
results = described_class.find([]).to_a
|
215
|
+
results.should be_empty
|
216
|
+
end
|
217
|
+
|
218
|
+
it "works with nonexistent ID" do
|
219
|
+
results = described_class.find([BSON::ObjectId.new]).to_a
|
220
|
+
results.should be_empty
|
221
|
+
end
|
208
222
|
end
|
209
|
-
|
223
|
+
|
224
|
+
context "cache_key" do
|
225
|
+
it "has it" do
|
226
|
+
build.cache_key.should == "users/new"
|
227
|
+
end
|
228
|
+
|
229
|
+
it "includes the ID if persisted" do
|
230
|
+
user = create
|
231
|
+
user.cache_key.should == "users/#{user.id}"
|
232
|
+
end
|
233
|
+
|
234
|
+
it "includes the timestamp if present" do
|
235
|
+
user = create
|
236
|
+
user['updated_at'] = Time.utc_time 2011, 12, 13, 14, 15, 16
|
237
|
+
user.cache_key.should == "users/#{user.id}-20111213141516"
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
210
241
|
def build(*args)
|
211
242
|
described_class.new(*args)
|
212
243
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mingo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.4.
|
5
|
+
version: 0.4.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- "Mislav Marohni\xC4\x87"
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-09-20 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mongo
|