mongoid 0.5.1 → 0.5.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/VERSION +1 -1
- data/lib/mongoid/criteria.rb +25 -9
- data/lib/mongoid/document.rb +8 -0
- data/mongoid.gemspec +2 -2
- data/spec/unit/mongoid/criteria_spec.rb +19 -0
- data/spec/unit/mongoid/document_spec.rb +15 -0
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.2
|
data/lib/mongoid/criteria.rb
CHANGED
@@ -24,7 +24,7 @@ module Mongoid #:nodoc:
|
|
24
24
|
# query has returned it will provided a grouping of keys with counts.
|
25
25
|
#
|
26
26
|
# Example:
|
27
|
-
#
|
27
|
+
#
|
28
28
|
# <tt>criteria.select(:field1).where(:field1 => "Title").aggregate(Person)</tt>
|
29
29
|
def aggregate(klass = nil)
|
30
30
|
@klass = klass if klass
|
@@ -38,7 +38,7 @@ module Mongoid #:nodoc:
|
|
38
38
|
#
|
39
39
|
# Options:
|
40
40
|
#
|
41
|
-
# selections: A +Hash+ where the key is the field name and the value is an
|
41
|
+
# selections: A +Hash+ where the key is the field name and the value is an
|
42
42
|
# +Array+ of values that must all match.
|
43
43
|
#
|
44
44
|
# Example:
|
@@ -52,6 +52,22 @@ module Mongoid #:nodoc:
|
|
52
52
|
selections.each { |key, value| @selector[key] = { "$all" => value } }; self
|
53
53
|
end
|
54
54
|
|
55
|
+
# Get the count of matching documents in the database for the +Criteria+.
|
56
|
+
#
|
57
|
+
# Options:
|
58
|
+
#
|
59
|
+
# klass: Optional class that the collection will be retrieved from.
|
60
|
+
#
|
61
|
+
# Example:
|
62
|
+
#
|
63
|
+
# <tt>criteria.count</tt>
|
64
|
+
#
|
65
|
+
# Returns: <tt>Integer</tt>
|
66
|
+
def count(klass = nil)
|
67
|
+
@klass = klass if klass
|
68
|
+
return @klass.collection.find(@selector, @options).count
|
69
|
+
end
|
70
|
+
|
55
71
|
# Adds a criterion to the +Criteria+ that specifies values that are not allowed
|
56
72
|
# to match any document in the database. The MongoDB conditional operator that
|
57
73
|
# will be used is "$ne".
|
@@ -111,7 +127,7 @@ module Mongoid #:nodoc:
|
|
111
127
|
# query has returned it will provided a grouping of keys with objects.
|
112
128
|
#
|
113
129
|
# Example:
|
114
|
-
#
|
130
|
+
#
|
115
131
|
# <tt>criteria.select(:field1).where(:field1 => "Title").group(Person)</tt>
|
116
132
|
def group(klass = nil)
|
117
133
|
@klass = klass if klass
|
@@ -256,8 +272,8 @@ module Mongoid #:nodoc:
|
|
256
272
|
end
|
257
273
|
|
258
274
|
# Adds a criterion to the +Criteria+ that specifies how many results to skip
|
259
|
-
# when returning Documents. This is mostly used in conjunction with
|
260
|
-
# <tt>limit()</tt> to handle paginated results, and is similar to the
|
275
|
+
# when returning Documents. This is mostly used in conjunction with
|
276
|
+
# <tt>limit()</tt> to handle paginated results, and is similar to the
|
261
277
|
# traditional "offset" parameter.
|
262
278
|
#
|
263
279
|
# Options:
|
@@ -273,9 +289,9 @@ module Mongoid #:nodoc:
|
|
273
289
|
@options[:skip] = value; self
|
274
290
|
end
|
275
291
|
|
276
|
-
# Translate the supplied arguments into a +Criteria+ object.
|
277
|
-
#
|
278
|
-
# If the passed in args is a single +String+, then it will
|
292
|
+
# Translate the supplied arguments into a +Criteria+ object.
|
293
|
+
#
|
294
|
+
# If the passed in args is a single +String+, then it will
|
279
295
|
# construct an id +Criteria+ from it.
|
280
296
|
#
|
281
297
|
# If the passed in args are a type and a hash, then it will construct
|
@@ -300,7 +316,7 @@ module Mongoid #:nodoc:
|
|
300
316
|
|
301
317
|
# Adds a criterion to the +Criteria+ that specifies values that must
|
302
318
|
# be matched in order to return results. This is similar to a SQL "WHERE"
|
303
|
-
# clause. This is the actual selector that will be provided to MongoDB,
|
319
|
+
# clause. This is the actual selector that will be provided to MongoDB,
|
304
320
|
# similar to the Javascript object that is used when performing a find()
|
305
321
|
# in the MongoDB console.
|
306
322
|
#
|
data/lib/mongoid/document.rb
CHANGED
@@ -39,6 +39,14 @@ module Mongoid #:nodoc:
|
|
39
39
|
@collection ||= Mongoid.database.collection(@collection_name)
|
40
40
|
end
|
41
41
|
|
42
|
+
# Returns a count of matching records in the database based on the
|
43
|
+
# provided arguments.
|
44
|
+
#
|
45
|
+
# <tt>Person.count(:first, :conditions => { :attribute => "value" })</tt>
|
46
|
+
def count(*args)
|
47
|
+
Criteria.translate(*args).count(self)
|
48
|
+
end
|
49
|
+
|
42
50
|
# Defines all the fields that are accessable on the Document
|
43
51
|
# For each field that is defined, a getter and setter will be
|
44
52
|
# added as an instance method to the Document.
|
data/mongoid.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongoid}
|
8
|
-
s.version = "0.5.
|
8
|
+
s.version = "0.5.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Durran Jordan"]
|
12
|
-
s.date = %q{2009-10-
|
12
|
+
s.date = %q{2009-10-28}
|
13
13
|
s.email = %q{durran@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.textile"
|
@@ -54,6 +54,25 @@ describe Mongoid::Criteria do
|
|
54
54
|
|
55
55
|
end
|
56
56
|
|
57
|
+
describe "#count" do
|
58
|
+
|
59
|
+
before do
|
60
|
+
@criteria = Mongoid::Criteria.new(:all, Person)
|
61
|
+
@selector = { :test => "Testing" }
|
62
|
+
@criteria.where(@selector)
|
63
|
+
@collection = mock
|
64
|
+
@cursor = mock
|
65
|
+
Person.expects(:collection).returns(@collection)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "returns the count from the cursor without creating the documents" do
|
69
|
+
@collection.expects(:find).with(@selector, {}).returns(@cursor)
|
70
|
+
@cursor.expects(:count).returns(10)
|
71
|
+
@criteria.count.should == 10
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
57
76
|
describe "#excludes" do
|
58
77
|
|
59
78
|
it "adds the $ne query to the selector" do
|
@@ -109,6 +109,21 @@ describe Mongoid::Document do
|
|
109
109
|
|
110
110
|
end
|
111
111
|
|
112
|
+
describe "#count" do
|
113
|
+
|
114
|
+
before do
|
115
|
+
@params = { :conditions => { :title => "Sir" } }
|
116
|
+
@criteria = mock
|
117
|
+
end
|
118
|
+
|
119
|
+
it "delegates to the criteria api" do
|
120
|
+
Mongoid::Criteria.expects(:translate).with(@params).returns(@criteria)
|
121
|
+
@criteria.expects(:count).with(Person).returns(10)
|
122
|
+
Person.count(@params).should == 10
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
112
127
|
describe "#field" do
|
113
128
|
|
114
129
|
context "with no options" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-28 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|