mongoid 1.1.4 → 1.2.0

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.
Files changed (65) hide show
  1. data/HISTORY +69 -1
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/lib/mongoid.rb +39 -13
  5. data/lib/mongoid/associations.rb +1 -0
  6. data/lib/mongoid/associations/has_many.rb +19 -3
  7. data/lib/mongoid/attributes.rb +6 -1
  8. data/lib/mongoid/collection.rb +106 -0
  9. data/lib/mongoid/collections/cyclic_iterator.rb +34 -0
  10. data/lib/mongoid/collections/master.rb +28 -0
  11. data/lib/mongoid/collections/mimic.rb +46 -0
  12. data/lib/mongoid/collections/operations.rb +39 -0
  13. data/lib/mongoid/collections/slaves.rb +44 -0
  14. data/lib/mongoid/commands.rb +1 -0
  15. data/lib/mongoid/config.rb +61 -9
  16. data/lib/mongoid/contexts/enumerable.rb +24 -15
  17. data/lib/mongoid/contexts/mongo.rb +25 -31
  18. data/lib/mongoid/contexts/paging.rb +2 -2
  19. data/lib/mongoid/criteria.rb +48 -7
  20. data/lib/mongoid/criterion/exclusion.rb +2 -0
  21. data/lib/mongoid/criterion/optional.rb +2 -2
  22. data/lib/mongoid/cursor.rb +82 -0
  23. data/lib/mongoid/document.rb +12 -13
  24. data/lib/mongoid/errors.rb +35 -4
  25. data/lib/mongoid/extensions.rb +1 -0
  26. data/lib/mongoid/extensions/array/aliasing.rb +4 -0
  27. data/lib/mongoid/extensions/string/inflections.rb +44 -1
  28. data/lib/mongoid/factory.rb +17 -0
  29. data/lib/mongoid/finders.rb +7 -2
  30. data/lib/mongoid/matchers/default.rb +6 -0
  31. data/lib/mongoid/matchers/gt.rb +1 -1
  32. data/lib/mongoid/matchers/gte.rb +1 -1
  33. data/lib/mongoid/matchers/lt.rb +1 -1
  34. data/lib/mongoid/matchers/lte.rb +1 -1
  35. data/mongoid.gemspec +30 -5
  36. data/perf/benchmark.rb +5 -3
  37. data/spec/integration/mongoid/associations_spec.rb +12 -0
  38. data/spec/integration/mongoid/contexts/enumerable_spec.rb +20 -0
  39. data/spec/integration/mongoid/criteria_spec.rb +28 -0
  40. data/spec/integration/mongoid/document_spec.rb +1 -1
  41. data/spec/integration/mongoid/inheritance_spec.rb +2 -2
  42. data/spec/models/person.rb +1 -1
  43. data/spec/spec_helper.rb +9 -4
  44. data/spec/unit/mongoid/associations/has_many_spec.rb +19 -0
  45. data/spec/unit/mongoid/associations_spec.rb +9 -0
  46. data/spec/unit/mongoid/attributes_spec.rb +4 -4
  47. data/spec/unit/mongoid/collection_spec.rb +113 -0
  48. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +75 -0
  49. data/spec/unit/mongoid/collections/master_spec.rb +41 -0
  50. data/spec/unit/mongoid/collections/mimic_spec.rb +43 -0
  51. data/spec/unit/mongoid/collections/slaves_spec.rb +81 -0
  52. data/spec/unit/mongoid/commands_spec.rb +7 -0
  53. data/spec/unit/mongoid/config_spec.rb +52 -1
  54. data/spec/unit/mongoid/contexts/enumerable_spec.rb +38 -12
  55. data/spec/unit/mongoid/contexts/mongo_spec.rb +38 -31
  56. data/spec/unit/mongoid/criteria_spec.rb +20 -12
  57. data/spec/unit/mongoid/criterion/exclusion_spec.rb +26 -0
  58. data/spec/unit/mongoid/criterion/optional_spec.rb +13 -0
  59. data/spec/unit/mongoid/cursor_spec.rb +74 -0
  60. data/spec/unit/mongoid/document_spec.rb +4 -5
  61. data/spec/unit/mongoid/errors_spec.rb +5 -9
  62. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +21 -2
  63. data/spec/unit/mongoid/factory_spec.rb +16 -0
  64. data/spec/unit/mongoid_spec.rb +4 -4
  65. metadata +28 -3
@@ -27,6 +27,32 @@ describe Mongoid::Criterion::Exclusion do
27
27
  @criteria.excludes(:title => "Bad").should == @criteria
28
28
  end
29
29
 
30
+ context "when passing an id" do
31
+
32
+ it "accepts id" do
33
+ @criteria.excludes(:id => "1")
34
+ @criteria.selector.should ==
35
+ { :_type =>
36
+ { "$in" =>
37
+ ["Doctor", "Person"]
38
+ },
39
+ :_id => { "$ne" => "1" }
40
+ }
41
+ end
42
+
43
+ it "accepts _id" do
44
+ @criteria.excludes(:_id => "1")
45
+ @criteria.selector.should ==
46
+ { :_type =>
47
+ { "$in" =>
48
+ ["Doctor", "Person"]
49
+ },
50
+ :_id => { "$ne" => "1" }
51
+ }
52
+ end
53
+
54
+ end
55
+
30
56
  end
31
57
 
32
58
  describe "#not_in" do
@@ -139,6 +139,19 @@ describe Mongoid::Criterion::Optional do
139
139
 
140
140
  end
141
141
 
142
+ context "when an argument is provided" do
143
+
144
+ before do
145
+ @criteria = Mongoid::Criteria.new(Person)
146
+ @criteria.offset(40)
147
+ end
148
+
149
+ it "delegates to skip" do
150
+ @criteria.options[:skip].should == 40
151
+ end
152
+
153
+ end
154
+
142
155
  context "when no option exists" do
143
156
 
144
157
  context "when page option exists" do
@@ -0,0 +1,74 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Cursor do
4
+
5
+ let(:collection) do
6
+ stub.quacks_like(Mongoid::Collection.allocate)
7
+ end
8
+
9
+ let(:proxy) do
10
+ stub.quacks_like(Mongo::Cursor.allocate)
11
+ end
12
+
13
+ let(:cursor) do
14
+ Mongoid::Cursor.new(collection, proxy)
15
+ end
16
+
17
+ (Mongoid::Cursor::OPERATIONS - [ :timeout ]).each do |name|
18
+
19
+ describe "##{name}" do
20
+
21
+ before do
22
+ proxy.expects(name)
23
+ end
24
+
25
+ it "delegates to the proxy" do
26
+ cursor.send(name)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe "#collection" do
32
+
33
+ it "returns the mongoid collection" do
34
+ cursor.collection.should == collection
35
+ end
36
+ end
37
+
38
+ describe "#each" do
39
+
40
+ before do
41
+ proxy.expects(:each).yields({ "_type" => "Person" })
42
+ end
43
+
44
+ it "yields to the next document" do
45
+ cursor.each do |doc|
46
+ doc.attributes.except(:_id).should == Person.new.attributes.except(:_id)
47
+ end
48
+ end
49
+ end
50
+
51
+ describe "#next_document" do
52
+
53
+ before do
54
+ proxy.expects(:next_document).returns({ "_type" => "Person" })
55
+ end
56
+
57
+ it "returns the next document from the proxied cursor" do
58
+ doc = cursor.next_document
59
+ doc.attributes.except(:_id).should == Person.new.attributes.except(:_id)
60
+ end
61
+ end
62
+
63
+ describe "#to_a" do
64
+
65
+ before do
66
+ proxy.expects(:to_a).returns([{ "_type" => "Person" }])
67
+ end
68
+
69
+ it "converts the proxy cursor to an array of documents" do
70
+ docs = cursor.to_a
71
+ docs[0].attributes.except(:_id).should == Person.new.attributes.except(:_id)
72
+ end
73
+ end
74
+ end
@@ -4,11 +4,10 @@ describe Mongoid::Document do
4
4
 
5
5
  before do
6
6
  @database = mock
7
- Mongoid.stubs(:database).returns(@database)
8
7
  @collection = stub(:name => "people")
9
8
  @canvas_collection = stub(:name => "canvases")
10
- @database.stubs(:collection).with("people").returns(@collection)
11
- @database.stubs(:collection).with("canvases").returns(@canvas_collection)
9
+ Mongoid::Collection.stubs(:new).with("people").returns(@collection)
10
+ Mongoid::Collection.stubs(:new).with("canvases").returns(@canvas_collection)
12
11
  @collection.stubs(:create_index).with(:_type, false)
13
12
  @canvas_collection.stubs(:create_index).with(:_type, false)
14
13
  end
@@ -553,7 +552,7 @@ describe Mongoid::Document do
553
552
  context "on a parent class" do
554
553
 
555
554
  it "sets the collection name and collection for the document" do
556
- @database.expects(:collection).with("population").returns(@collection)
555
+ Mongoid::Collection.expects(:new).with("population").returns(@collection)
557
556
  Patient.store_in :population
558
557
  Patient.collection_name.should == "population"
559
558
  end
@@ -567,7 +566,7 @@ describe Mongoid::Document do
567
566
  end
568
567
 
569
568
  it "changes the collection name for the entire hierarchy" do
570
- @database.expects(:collection).with("browsers").returns(@collection)
569
+ Mongoid::Collection.expects(:new).with("browsers").returns(@collection)
571
570
  Firefox.store_in :browsers
572
571
  Canvas.collection_name.should == "browsers"
573
572
  end
@@ -46,16 +46,12 @@ describe Mongoid::Errors do
46
46
 
47
47
  describe "#message" do
48
48
 
49
- context "default" do
50
-
51
- before do
52
- @error = Mongoid::Errors::InvalidDatabase.new
53
- end
54
-
55
- it "returns the class name" do
56
- @error.message.should == @error.class.name
57
- end
49
+ before do
50
+ @error = Mongoid::Errors::InvalidDatabase.new("Test")
51
+ end
58
52
 
53
+ it "returns a message with the bad db object class" do
54
+ @error.message.should include("String")
59
55
  end
60
56
 
61
57
  end
@@ -24,8 +24,27 @@ describe Mongoid::Extensions::String::Inflections do
24
24
 
25
25
  describe "#identify" do
26
26
 
27
- it "converts the string to all lowercase and dashed" do
28
- "A Midnight Summer Night's Dream".identify.should == "a-midnight-summer-nights-dream"
27
+ context "when parameterizing composite keys" do
28
+
29
+ it "converts the string to all lowercase and dashed" do
30
+ "A Midsummer Night's Dream".identify.should == "a-midsummer-night-quo-s-dream"
31
+ end
32
+
33
+ end
34
+
35
+ context "when not parameterizing keys" do
36
+
37
+ before do
38
+ Mongoid.parameterize_keys = false
39
+ end
40
+
41
+ after do
42
+ Mongoid.parameterize_keys = true
43
+ end
44
+
45
+ it "does nothing to the keys" do
46
+ "A Midsummer Night's Dream".identify.should == "A Midsummer Night's Dream"
47
+ end
29
48
  end
30
49
 
31
50
  end
@@ -0,0 +1,16 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Factory do
4
+
5
+ describe ".build" do
6
+
7
+ before do
8
+ @attributes = { "_type" => "Person", "title" => "Sir" }
9
+ end
10
+
11
+ it "instantiates based on the type" do
12
+ person = Mongoid::Factory.build(@attributes)
13
+ person.title.should == "Sir"
14
+ end
15
+ end
16
+ end
@@ -2,12 +2,12 @@ require "spec_helper"
2
2
 
3
3
  describe Mongoid do
4
4
 
5
- describe ".config" do
5
+ describe ".configure" do
6
6
 
7
7
  context "when no block supplied" do
8
8
 
9
9
  it "returns the config singleton" do
10
- Mongoid.config.should == Mongoid::Config.instance
10
+ Mongoid.configure.should == Mongoid::Config.instance
11
11
  end
12
12
 
13
13
  end
@@ -15,13 +15,13 @@ describe Mongoid do
15
15
  context "when a block is supplied" do
16
16
 
17
17
  before do
18
- Mongoid.config do |config|
18
+ Mongoid.configure do |config|
19
19
  config.allow_dynamic_fields = false
20
20
  end
21
21
  end
22
22
 
23
23
  after do
24
- Mongoid.config do |config|
24
+ Mongoid.configure do |config|
25
25
  config.allow_dynamic_fields = true
26
26
  end
27
27
  end
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: 1.1.4
4
+ version: 1.2.0
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: 2010-01-26 00:00:00 -05:00
12
+ date: 2010-02-07 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: 2.0.1
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
- name: leshill-will_paginate
46
+ name: will_paginate
47
47
  type: :runtime
48
48
  version_requirement:
49
49
  version_requirements: !ruby/object:Gem::Requirement
@@ -101,6 +101,12 @@ files:
101
101
  - lib/mongoid/associations/proxy.rb
102
102
  - lib/mongoid/attributes.rb
103
103
  - lib/mongoid/callbacks.rb
104
+ - lib/mongoid/collection.rb
105
+ - lib/mongoid/collections/cyclic_iterator.rb
106
+ - lib/mongoid/collections/master.rb
107
+ - lib/mongoid/collections/mimic.rb
108
+ - lib/mongoid/collections/operations.rb
109
+ - lib/mongoid/collections/slaves.rb
104
110
  - lib/mongoid/commands.rb
105
111
  - lib/mongoid/commands/create.rb
106
112
  - lib/mongoid/commands/delete.rb
@@ -120,10 +126,12 @@ files:
120
126
  - lib/mongoid/criterion/exclusion.rb
121
127
  - lib/mongoid/criterion/inclusion.rb
122
128
  - lib/mongoid/criterion/optional.rb
129
+ - lib/mongoid/cursor.rb
123
130
  - lib/mongoid/document.rb
124
131
  - lib/mongoid/errors.rb
125
132
  - lib/mongoid/extensions.rb
126
133
  - lib/mongoid/extensions/array/accessors.rb
134
+ - lib/mongoid/extensions/array/aliasing.rb
127
135
  - lib/mongoid/extensions/array/assimilation.rb
128
136
  - lib/mongoid/extensions/array/conversions.rb
129
137
  - lib/mongoid/extensions/array/parentization.rb
@@ -144,6 +152,7 @@ files:
144
152
  - lib/mongoid/extensions/string/inflections.rb
145
153
  - lib/mongoid/extensions/symbol/inflections.rb
146
154
  - lib/mongoid/extensions/time/conversions.rb
155
+ - lib/mongoid/factory.rb
147
156
  - lib/mongoid/field.rb
148
157
  - lib/mongoid/fields.rb
149
158
  - lib/mongoid/finders.rb
@@ -171,6 +180,7 @@ files:
171
180
  - spec/integration/mongoid/associations_spec.rb
172
181
  - spec/integration/mongoid/attributes_spec.rb
173
182
  - spec/integration/mongoid/commands_spec.rb
183
+ - spec/integration/mongoid/contexts/enumerable_spec.rb
174
184
  - spec/integration/mongoid/criteria_spec.rb
175
185
  - spec/integration/mongoid/document_spec.rb
176
186
  - spec/integration/mongoid/extensions_spec.rb
@@ -208,6 +218,11 @@ files:
208
218
  - spec/unit/mongoid/associations_spec.rb
209
219
  - spec/unit/mongoid/attributes_spec.rb
210
220
  - spec/unit/mongoid/callbacks_spec.rb
221
+ - spec/unit/mongoid/collection_spec.rb
222
+ - spec/unit/mongoid/collections/cyclic_iterator_spec.rb
223
+ - spec/unit/mongoid/collections/master_spec.rb
224
+ - spec/unit/mongoid/collections/mimic_spec.rb
225
+ - spec/unit/mongoid/collections/slaves_spec.rb
211
226
  - spec/unit/mongoid/commands/create_spec.rb
212
227
  - spec/unit/mongoid/commands/delete_all_spec.rb
213
228
  - spec/unit/mongoid/commands/delete_spec.rb
@@ -223,6 +238,7 @@ files:
223
238
  - spec/unit/mongoid/criterion/exclusion_spec.rb
224
239
  - spec/unit/mongoid/criterion/inclusion_spec.rb
225
240
  - spec/unit/mongoid/criterion/optional_spec.rb
241
+ - spec/unit/mongoid/cursor_spec.rb
226
242
  - spec/unit/mongoid/document_spec.rb
227
243
  - spec/unit/mongoid/errors_spec.rb
228
244
  - spec/unit/mongoid/extensions/array/accessors_spec.rb
@@ -246,6 +262,7 @@ files:
246
262
  - spec/unit/mongoid/extensions/string/inflections_spec.rb
247
263
  - spec/unit/mongoid/extensions/symbol/inflections_spec.rb
248
264
  - spec/unit/mongoid/extensions/time/conversions_spec.rb
265
+ - spec/unit/mongoid/factory_spec.rb
249
266
  - spec/unit/mongoid/field_spec.rb
250
267
  - spec/unit/mongoid/fields_spec.rb
251
268
  - spec/unit/mongoid/finders_spec.rb
@@ -301,6 +318,7 @@ test_files:
301
318
  - spec/integration/mongoid/associations_spec.rb
302
319
  - spec/integration/mongoid/attributes_spec.rb
303
320
  - spec/integration/mongoid/commands_spec.rb
321
+ - spec/integration/mongoid/contexts/enumerable_spec.rb
304
322
  - spec/integration/mongoid/criteria_spec.rb
305
323
  - spec/integration/mongoid/document_spec.rb
306
324
  - spec/integration/mongoid/extensions_spec.rb
@@ -337,6 +355,11 @@ test_files:
337
355
  - spec/unit/mongoid/associations_spec.rb
338
356
  - spec/unit/mongoid/attributes_spec.rb
339
357
  - spec/unit/mongoid/callbacks_spec.rb
358
+ - spec/unit/mongoid/collection_spec.rb
359
+ - spec/unit/mongoid/collections/cyclic_iterator_spec.rb
360
+ - spec/unit/mongoid/collections/master_spec.rb
361
+ - spec/unit/mongoid/collections/mimic_spec.rb
362
+ - spec/unit/mongoid/collections/slaves_spec.rb
340
363
  - spec/unit/mongoid/commands/create_spec.rb
341
364
  - spec/unit/mongoid/commands/delete_all_spec.rb
342
365
  - spec/unit/mongoid/commands/delete_spec.rb
@@ -352,6 +375,7 @@ test_files:
352
375
  - spec/unit/mongoid/criterion/exclusion_spec.rb
353
376
  - spec/unit/mongoid/criterion/inclusion_spec.rb
354
377
  - spec/unit/mongoid/criterion/optional_spec.rb
378
+ - spec/unit/mongoid/cursor_spec.rb
355
379
  - spec/unit/mongoid/document_spec.rb
356
380
  - spec/unit/mongoid/errors_spec.rb
357
381
  - spec/unit/mongoid/extensions/array/accessors_spec.rb
@@ -375,6 +399,7 @@ test_files:
375
399
  - spec/unit/mongoid/extensions/string/inflections_spec.rb
376
400
  - spec/unit/mongoid/extensions/symbol/inflections_spec.rb
377
401
  - spec/unit/mongoid/extensions/time/conversions_spec.rb
402
+ - spec/unit/mongoid/factory_spec.rb
378
403
  - spec/unit/mongoid/field_spec.rb
379
404
  - spec/unit/mongoid/fields_spec.rb
380
405
  - spec/unit/mongoid/finders_spec.rb