mongodoc 0.2.2 → 0.2.4
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/Rakefile +21 -0
- data/TODO +6 -1
- data/VERSION +1 -1
- data/features/finders.feature +1 -1
- data/features/mongodoc_base.feature +11 -2
- data/features/{named_scopes.feature → scopes.feature} +0 -0
- data/features/step_definitions/document_steps.rb +15 -4
- data/features/step_definitions/documents.rb +3 -3
- data/features/step_definitions/query_steps.rb +17 -14
- data/features/step_definitions/{named_scope_steps.rb → scope_steps.rb} +0 -0
- data/features/using_criteria.feature +22 -43
- data/lib/mongodoc.rb +1 -1
- data/lib/mongodoc/associations/collection_proxy.rb +3 -1
- data/lib/mongodoc/associations/document_proxy.rb +4 -1
- data/lib/mongodoc/associations/hash_proxy.rb +3 -1
- data/lib/mongodoc/associations/proxy_base.rb +6 -4
- data/lib/mongodoc/attributes.rb +6 -6
- data/lib/mongodoc/contexts.rb +24 -0
- data/lib/mongodoc/contexts/enumerable.rb +132 -0
- data/lib/mongodoc/contexts/mongo.rb +215 -0
- data/lib/mongodoc/criteria.rb +36 -479
- data/lib/mongodoc/document.rb +3 -2
- data/lib/mongodoc/finders.rb +31 -11
- data/lib/mongodoc/matchers.rb +35 -0
- data/lib/mongodoc/scope.rb +64 -0
- data/lib/mongoid/contexts/paging.rb +42 -0
- data/lib/mongoid/criteria.rb +264 -0
- data/lib/mongoid/criterion/complex.rb +21 -0
- data/lib/mongoid/criterion/exclusion.rb +65 -0
- data/lib/mongoid/criterion/inclusion.rb +92 -0
- data/lib/mongoid/criterion/optional.rb +136 -0
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +20 -0
- data/lib/mongoid/extensions/symbol/inflections.rb +36 -0
- data/lib/mongoid/matchers/all.rb +11 -0
- data/lib/mongoid/matchers/default.rb +26 -0
- data/lib/mongoid/matchers/exists.rb +13 -0
- data/lib/mongoid/matchers/gt.rb +11 -0
- data/lib/mongoid/matchers/gte.rb +11 -0
- data/lib/mongoid/matchers/in.rb +11 -0
- data/lib/mongoid/matchers/lt.rb +11 -0
- data/lib/mongoid/matchers/lte.rb +11 -0
- data/lib/mongoid/matchers/ne.rb +11 -0
- data/lib/mongoid/matchers/nin.rb +11 -0
- data/lib/mongoid/matchers/size.rb +11 -0
- data/mongodoc.gemspec +39 -9
- data/spec/attributes_spec.rb +16 -2
- data/spec/contexts/enumerable_spec.rb +335 -0
- data/spec/contexts/mongo_spec.rb +148 -0
- data/spec/contexts_spec.rb +28 -0
- data/spec/criteria_spec.rb +15 -766
- data/spec/finders_spec.rb +28 -36
- data/spec/matchers_spec.rb +342 -0
- data/spec/scope_spec.rb +79 -0
- metadata +40 -10
- data/features/step_definitions/criteria_steps.rb +0 -42
- data/lib/mongodoc/named_scope.rb +0 -68
- data/spec/named_scope_spec.rb +0 -82
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 4
|
9
|
+
version: 0.2.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Les Hill
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-02-
|
17
|
+
date: 2010-02-23 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -125,23 +125,22 @@ files:
|
|
125
125
|
- features/finders.feature
|
126
126
|
- features/mongodb.yml
|
127
127
|
- features/mongodoc_base.feature
|
128
|
-
- features/named_scopes.feature
|
129
128
|
- features/new_record.feature
|
130
129
|
- features/partial_updates.feature
|
131
130
|
- features/removing_documents.feature
|
132
131
|
- features/saving_an_object.feature
|
132
|
+
- features/scopes.feature
|
133
133
|
- features/step_definitions/collection_steps.rb
|
134
|
-
- features/step_definitions/criteria_steps.rb
|
135
134
|
- features/step_definitions/document_steps.rb
|
136
135
|
- features/step_definitions/documents.rb
|
137
136
|
- features/step_definitions/finder_steps.rb
|
138
137
|
- features/step_definitions/json_steps.rb
|
139
|
-
- features/step_definitions/named_scope_steps.rb
|
140
138
|
- features/step_definitions/object_steps.rb
|
141
139
|
- features/step_definitions/objects.rb
|
142
140
|
- features/step_definitions/partial_update_steps.rb
|
143
141
|
- features/step_definitions/query_steps.rb
|
144
142
|
- features/step_definitions/removing_documents_steps.rb
|
143
|
+
- features/step_definitions/scope_steps.rb
|
145
144
|
- features/step_definitions/util_steps.rb
|
146
145
|
- features/support/support.rb
|
147
146
|
- features/using_criteria.feature
|
@@ -154,6 +153,9 @@ files:
|
|
154
153
|
- lib/mongodoc/bson.rb
|
155
154
|
- lib/mongodoc/collection.rb
|
156
155
|
- lib/mongodoc/connection.rb
|
156
|
+
- lib/mongodoc/contexts.rb
|
157
|
+
- lib/mongodoc/contexts/enumerable.rb
|
158
|
+
- lib/mongodoc/contexts/mongo.rb
|
157
159
|
- lib/mongodoc/criteria.rb
|
158
160
|
- lib/mongodoc/cursor.rb
|
159
161
|
- lib/mongodoc/document.rb
|
@@ -173,10 +175,30 @@ files:
|
|
173
175
|
- lib/mongodoc/ext/symbol.rb
|
174
176
|
- lib/mongodoc/ext/time.rb
|
175
177
|
- lib/mongodoc/finders.rb
|
176
|
-
- lib/mongodoc/
|
178
|
+
- lib/mongodoc/matchers.rb
|
177
179
|
- lib/mongodoc/query.rb
|
180
|
+
- lib/mongodoc/scope.rb
|
178
181
|
- lib/mongodoc/validations/macros.rb
|
179
182
|
- lib/mongodoc/validations/validates_embedded.rb
|
183
|
+
- lib/mongoid/contexts/paging.rb
|
184
|
+
- lib/mongoid/criteria.rb
|
185
|
+
- lib/mongoid/criterion/complex.rb
|
186
|
+
- lib/mongoid/criterion/exclusion.rb
|
187
|
+
- lib/mongoid/criterion/inclusion.rb
|
188
|
+
- lib/mongoid/criterion/optional.rb
|
189
|
+
- lib/mongoid/extensions/hash/criteria_helpers.rb
|
190
|
+
- lib/mongoid/extensions/symbol/inflections.rb
|
191
|
+
- lib/mongoid/matchers/all.rb
|
192
|
+
- lib/mongoid/matchers/default.rb
|
193
|
+
- lib/mongoid/matchers/exists.rb
|
194
|
+
- lib/mongoid/matchers/gt.rb
|
195
|
+
- lib/mongoid/matchers/gte.rb
|
196
|
+
- lib/mongoid/matchers/in.rb
|
197
|
+
- lib/mongoid/matchers/lt.rb
|
198
|
+
- lib/mongoid/matchers/lte.rb
|
199
|
+
- lib/mongoid/matchers/ne.rb
|
200
|
+
- lib/mongoid/matchers/nin.rb
|
201
|
+
- lib/mongoid/matchers/size.rb
|
180
202
|
- mongod.example.yml
|
181
203
|
- mongodb.example.yml
|
182
204
|
- mongodoc.gemspec
|
@@ -191,6 +213,9 @@ files:
|
|
191
213
|
- spec/bson_spec.rb
|
192
214
|
- spec/collection_spec.rb
|
193
215
|
- spec/connection_spec.rb
|
216
|
+
- spec/contexts/enumerable_spec.rb
|
217
|
+
- spec/contexts/mongo_spec.rb
|
218
|
+
- spec/contexts_spec.rb
|
194
219
|
- spec/criteria_spec.rb
|
195
220
|
- spec/cursor_spec.rb
|
196
221
|
- spec/document_ext.rb
|
@@ -198,11 +223,12 @@ files:
|
|
198
223
|
- spec/embedded_save_spec.rb
|
199
224
|
- spec/finders_spec.rb
|
200
225
|
- spec/hash_matchers.rb
|
226
|
+
- spec/matchers_spec.rb
|
201
227
|
- spec/mongodb.yml
|
202
228
|
- spec/mongodb_pairs.yml
|
203
|
-
- spec/named_scope_spec.rb
|
204
229
|
- spec/new_record_spec.rb
|
205
230
|
- spec/query_spec.rb
|
231
|
+
- spec/scope_spec.rb
|
206
232
|
- spec/spec.opts
|
207
233
|
- spec/spec_helper.rb
|
208
234
|
has_rdoc: true
|
@@ -231,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
231
257
|
requirements: []
|
232
258
|
|
233
259
|
rubyforge_project:
|
234
|
-
rubygems_version: 1.3.6
|
260
|
+
rubygems_version: 1.3.6
|
235
261
|
signing_key:
|
236
262
|
specification_version: 3
|
237
263
|
summary: ODM for MongoDB
|
@@ -244,6 +270,9 @@ test_files:
|
|
244
270
|
- spec/bson_spec.rb
|
245
271
|
- spec/collection_spec.rb
|
246
272
|
- spec/connection_spec.rb
|
273
|
+
- spec/contexts/enumerable_spec.rb
|
274
|
+
- spec/contexts/mongo_spec.rb
|
275
|
+
- spec/contexts_spec.rb
|
247
276
|
- spec/criteria_spec.rb
|
248
277
|
- spec/cursor_spec.rb
|
249
278
|
- spec/document_ext.rb
|
@@ -251,9 +280,10 @@ test_files:
|
|
251
280
|
- spec/embedded_save_spec.rb
|
252
281
|
- spec/finders_spec.rb
|
253
282
|
- spec/hash_matchers.rb
|
254
|
-
- spec/
|
283
|
+
- spec/matchers_spec.rb
|
255
284
|
- spec/new_record_spec.rb
|
256
285
|
- spec/query_spec.rb
|
286
|
+
- spec/scope_spec.rb
|
257
287
|
- spec/spec_helper.rb
|
258
288
|
- examples/simple_document.rb
|
259
289
|
- examples/simple_object.rb
|
@@ -1,42 +0,0 @@
|
|
1
|
-
When /^I query (.*) with 'all'$/ do |doc|
|
2
|
-
query(doc).all
|
3
|
-
end
|
4
|
-
|
5
|
-
When /^I query (.*) to select fields? "([^\"]*)"$/ do |doc, fields|
|
6
|
-
fields = fields.split
|
7
|
-
query(doc).only(*fields)
|
8
|
-
end
|
9
|
-
|
10
|
-
When /^I query (.*) where "([^\"]*)"$/ do |doc, where_text|
|
11
|
-
where = eval(where_text)
|
12
|
-
query(doc).where(where)
|
13
|
-
end
|
14
|
-
|
15
|
-
When /^I query (.*) that excludes "([^\"]*)"$/ do |doc, exclude_text|
|
16
|
-
exclude = eval(exclude_text)
|
17
|
-
query(doc).excludes(exclude)
|
18
|
-
end
|
19
|
-
|
20
|
-
When /^I set the query on (.*) to (limit|skip) (.*)$/ do |doc, op, count|
|
21
|
-
query(doc).send(op, count.to_i)
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
When /^I query (.*) with (every|not in|in) "([^\"]*)"$/ do |doc, op, hash_text|
|
26
|
-
hash = eval(hash_text)
|
27
|
-
query(doc).send(op.gsub(' ', '_'), hash)
|
28
|
-
end
|
29
|
-
|
30
|
-
When /^I query (.*) with the '(.*)' id$/ do |doc, name|
|
31
|
-
object = instance_variable_get("@#{name}")
|
32
|
-
query(doc).id(object.id)
|
33
|
-
end
|
34
|
-
|
35
|
-
When /^I set the query extras limit on (.*) to (.*)$/ do |doc, count|
|
36
|
-
query(doc).limit(count.to_i)
|
37
|
-
end
|
38
|
-
|
39
|
-
When /^I order the (.*) query by "([^\"]*)"$/ do |doc, order_text|
|
40
|
-
order = eval(order_text)
|
41
|
-
query(doc).order_by(order)
|
42
|
-
end
|
data/lib/mongodoc/named_scope.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
# Based on ActiveRecord::NamedScope
|
2
|
-
module MongoDoc
|
3
|
-
module NamedScope
|
4
|
-
def scopes
|
5
|
-
read_inheritable_attribute(:scopes) || write_inheritable_attribute(:scopes, {})
|
6
|
-
end
|
7
|
-
|
8
|
-
def named_scope(name, options = {}, &block)
|
9
|
-
name = name.to_sym
|
10
|
-
scopes[name] = lambda do |parent_scope, *args|
|
11
|
-
CriteriaProxy.new(parent_scope, Hash === options ? options : options.call(*args), &block)
|
12
|
-
end
|
13
|
-
(class << self; self; end).class_eval <<-EOT
|
14
|
-
def #{name}(*args)
|
15
|
-
scopes[:#{name}].call(self, *args)
|
16
|
-
end
|
17
|
-
EOT
|
18
|
-
end
|
19
|
-
|
20
|
-
class CriteriaProxy
|
21
|
-
attr_accessor :conditions, :klass, :parent_scope
|
22
|
-
|
23
|
-
delegate :scopes, :to => :parent_scope
|
24
|
-
|
25
|
-
def initialize(parent_scope, conditions, &block)
|
26
|
-
conditions ||= {}
|
27
|
-
[conditions.delete(:extend)].flatten.each { |extension| extend extension } if conditions.include?(:extend)
|
28
|
-
extend Module.new(&block) if block_given?
|
29
|
-
self.klass = parent_scope unless CriteriaProxy === parent_scope
|
30
|
-
self.parent_scope, self.conditions = parent_scope, conditions
|
31
|
-
end
|
32
|
-
|
33
|
-
def respond_to?(method, include_private = false)
|
34
|
-
super || if klass
|
35
|
-
proxy_found.respond_to?(method, include_private)
|
36
|
-
else
|
37
|
-
parent_scope.respond_to?(method, include_private)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
protected
|
42
|
-
|
43
|
-
def proxy_found
|
44
|
-
@found || load_found
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def method_missing(method, *args, &block)
|
50
|
-
if scopes.include?(method)
|
51
|
-
scopes[method].call(self, *args)
|
52
|
-
elsif klass
|
53
|
-
proxy_found.send(method, *args, &block)
|
54
|
-
else
|
55
|
-
parent_scope.criteria(conditions)
|
56
|
-
parent_scope.send(method, *args, &block)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def load_found
|
61
|
-
@found = Criteria.new(klass)
|
62
|
-
@found.criteria(conditions)
|
63
|
-
@found
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
data/spec/named_scope_spec.rb
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper.rb"))
|
2
|
-
|
3
|
-
describe MongoDoc::NamedScope do
|
4
|
-
|
5
|
-
module Extension
|
6
|
-
def extension_module_method
|
7
|
-
"extension module method"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
class NamedScopeTest
|
12
|
-
include MongoDoc::Document
|
13
|
-
|
14
|
-
key :active
|
15
|
-
key :count
|
16
|
-
|
17
|
-
named_scope :active, :where => {:active => true} do
|
18
|
-
def extension_method
|
19
|
-
"extension method"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
named_scope :count_gt_one, :where => {:count => {'$gt' => 1}}, :extend => Extension
|
23
|
-
named_scope :at_least_count, lambda {|count| {:where => {:count => {'$gt' => count}}}}
|
24
|
-
end
|
25
|
-
|
26
|
-
context ".named_scope" do
|
27
|
-
it "adds the named scope to the hash of scopes" do
|
28
|
-
NamedScopeTest.scopes.should have_key(:active)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "creates a class method for the named scope" do
|
32
|
-
NamedScopeTest.should respond_to(:active)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "accessing a named scope" do
|
37
|
-
it "is a criteria proxy" do
|
38
|
-
MongoDoc::NamedScope::CriteriaProxy.should === NamedScopeTest.active
|
39
|
-
end
|
40
|
-
|
41
|
-
it "responds like a criteria" do
|
42
|
-
NamedScopeTest.active.should respond_to(:selector)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "instantiates the criteria" do
|
46
|
-
criteria = MongoDoc::Criteria.new(NamedScopeTest)
|
47
|
-
MongoDoc::Criteria.should_receive(:new).and_return(criteria)
|
48
|
-
NamedScopeTest.active.selector
|
49
|
-
end
|
50
|
-
|
51
|
-
it "has set the conditions on the criteria" do
|
52
|
-
NamedScopeTest.active.selector.should has_entry(:active => true)
|
53
|
-
end
|
54
|
-
|
55
|
-
it "sets the association extension by block" do
|
56
|
-
NamedScopeTest.active.extension_method.should == "extension method"
|
57
|
-
end
|
58
|
-
|
59
|
-
it "sets the association extension by :extend" do
|
60
|
-
NamedScopeTest.count_gt_one.extension_module_method.should == "extension module method"
|
61
|
-
end
|
62
|
-
|
63
|
-
context "when using a lambda" do
|
64
|
-
it "accepts parameters to the criteria" do
|
65
|
-
NamedScopeTest.at_least_count(3).selector.should has_entry(:count => {'$gt' => 3})
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
context "chained scopes" do
|
71
|
-
it "instantiates the criteria" do
|
72
|
-
criteria = MongoDoc::Criteria.new(NamedScopeTest)
|
73
|
-
MongoDoc::Criteria.should_receive(:new).and_return(criteria)
|
74
|
-
NamedScopeTest.active.count_gt_one.selector
|
75
|
-
end
|
76
|
-
|
77
|
-
it "merges the criteria" do
|
78
|
-
NamedScopeTest.active.count_gt_one.selector.should has_entry(:count => {'$gt' => 1}, :active => true)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|