mongoid 1.2.14 → 1.9.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 (200) hide show
  1. data/lib/mongoid.rb +10 -3
  2. data/lib/mongoid/associations.rb +133 -97
  3. data/lib/mongoid/associations/belongs_to_related.rb +2 -3
  4. data/lib/mongoid/associations/{belongs_to.rb → embedded_in.rb} +14 -6
  5. data/lib/mongoid/associations/{has_many.rb → embeds_many.rb} +89 -31
  6. data/lib/mongoid/associations/{has_one.rb → embeds_one.rb} +8 -7
  7. data/lib/mongoid/associations/has_many_related.rb +52 -7
  8. data/lib/mongoid/associations/has_one_related.rb +8 -4
  9. data/lib/mongoid/associations/meta_data.rb +2 -1
  10. data/lib/mongoid/associations/options.rb +6 -1
  11. data/lib/mongoid/associations/proxy.rb +14 -21
  12. data/lib/mongoid/attributes.rb +27 -12
  13. data/lib/mongoid/collection.rb +4 -3
  14. data/lib/mongoid/collections.rb +41 -0
  15. data/lib/mongoid/collections/master.rb +3 -2
  16. data/lib/mongoid/collections/slaves.rb +3 -2
  17. data/lib/mongoid/components.rb +21 -19
  18. data/lib/mongoid/concern.rb +31 -0
  19. data/lib/mongoid/config.rb +117 -12
  20. data/lib/mongoid/contexts.rb +1 -1
  21. data/lib/mongoid/contexts/enumerable.rb +1 -1
  22. data/lib/mongoid/contexts/mongo.rb +1 -1
  23. data/lib/mongoid/contexts/paging.rb +10 -2
  24. data/lib/mongoid/criterion/inclusion.rb +17 -0
  25. data/lib/mongoid/criterion/optional.rb +1 -1
  26. data/lib/mongoid/dirty.rb +253 -0
  27. data/lib/mongoid/document.rb +81 -52
  28. data/lib/mongoid/errors.rb +32 -1
  29. data/lib/mongoid/extensions.rb +11 -9
  30. data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
  31. data/lib/mongoid/extensions/boolean/conversions.rb +8 -2
  32. data/lib/mongoid/extensions/date/conversions.rb +13 -4
  33. data/lib/mongoid/extensions/datetime/conversions.rb +1 -6
  34. data/lib/mongoid/extensions/float/conversions.rb +5 -1
  35. data/lib/mongoid/extensions/hash/assimilation.rb +12 -3
  36. data/lib/mongoid/extensions/hash/conversions.rb +34 -4
  37. data/lib/mongoid/extensions/integer/conversions.rb +5 -1
  38. data/lib/mongoid/extensions/nil/assimilation.rb +4 -0
  39. data/lib/mongoid/extensions/object/conversions.rb +1 -1
  40. data/lib/mongoid/extensions/string/conversions.rb +1 -1
  41. data/lib/mongoid/extensions/symbol/inflections.rb +1 -1
  42. data/lib/mongoid/extensions/time_conversions.rb +35 -0
  43. data/lib/mongoid/extras.rb +6 -9
  44. data/lib/mongoid/factory.rb +2 -1
  45. data/lib/mongoid/field.rb +9 -2
  46. data/lib/mongoid/fields.rb +1 -0
  47. data/lib/mongoid/identity.rb +3 -3
  48. data/lib/mongoid/indexes.rb +3 -3
  49. data/lib/mongoid/memoization.rb +8 -2
  50. data/lib/mongoid/named_scope.rb +0 -3
  51. data/lib/mongoid/observable.rb +30 -0
  52. data/lib/mongoid/paths.rb +62 -0
  53. data/lib/mongoid/persistence.rb +222 -0
  54. data/lib/mongoid/persistence/command.rb +39 -0
  55. data/lib/mongoid/persistence/insert.rb +50 -0
  56. data/lib/mongoid/persistence/insert_embedded.rb +38 -0
  57. data/lib/mongoid/persistence/remove.rb +39 -0
  58. data/lib/mongoid/persistence/remove_all.rb +37 -0
  59. data/lib/mongoid/persistence/remove_embedded.rb +50 -0
  60. data/lib/mongoid/persistence/update.rb +63 -0
  61. data/lib/mongoid/state.rb +28 -21
  62. data/lib/mongoid/timestamps.rb +5 -8
  63. data/lib/mongoid/version.rb +4 -0
  64. data/lib/mongoid/versioning.rb +6 -7
  65. metadata +81 -300
  66. data/.gitignore +0 -6
  67. data/.watchr +0 -29
  68. data/Rakefile +0 -53
  69. data/VERSION +0 -1
  70. data/caliper.yml +0 -4
  71. data/lib/mongoid/collections/mimic.rb +0 -46
  72. data/lib/mongoid/commands.rb +0 -174
  73. data/lib/mongoid/commands/create.rb +0 -21
  74. data/lib/mongoid/commands/delete.rb +0 -16
  75. data/lib/mongoid/commands/delete_all.rb +0 -23
  76. data/lib/mongoid/commands/deletion.rb +0 -18
  77. data/lib/mongoid/commands/destroy.rb +0 -19
  78. data/lib/mongoid/commands/destroy_all.rb +0 -23
  79. data/lib/mongoid/commands/save.rb +0 -27
  80. data/lib/mongoid/extensions/time/conversions.rb +0 -18
  81. data/mongoid.gemspec +0 -395
  82. data/perf/benchmark.rb +0 -77
  83. data/spec/integration/mongoid/associations_spec.rb +0 -340
  84. data/spec/integration/mongoid/attributes_spec.rb +0 -22
  85. data/spec/integration/mongoid/commands_spec.rb +0 -218
  86. data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -33
  87. data/spec/integration/mongoid/criteria_spec.rb +0 -272
  88. data/spec/integration/mongoid/document_spec.rb +0 -593
  89. data/spec/integration/mongoid/extensions_spec.rb +0 -26
  90. data/spec/integration/mongoid/finders_spec.rb +0 -119
  91. data/spec/integration/mongoid/inheritance_spec.rb +0 -137
  92. data/spec/integration/mongoid/named_scope_spec.rb +0 -46
  93. data/spec/models/address.rb +0 -39
  94. data/spec/models/animal.rb +0 -6
  95. data/spec/models/callbacks.rb +0 -18
  96. data/spec/models/comment.rb +0 -8
  97. data/spec/models/country_code.rb +0 -6
  98. data/spec/models/employer.rb +0 -5
  99. data/spec/models/game.rb +0 -7
  100. data/spec/models/inheritance.rb +0 -56
  101. data/spec/models/location.rb +0 -5
  102. data/spec/models/mixed_drink.rb +0 -4
  103. data/spec/models/name.rb +0 -13
  104. data/spec/models/namespacing.rb +0 -11
  105. data/spec/models/patient.rb +0 -4
  106. data/spec/models/person.rb +0 -99
  107. data/spec/models/pet.rb +0 -7
  108. data/spec/models/pet_owner.rb +0 -6
  109. data/spec/models/phone.rb +0 -7
  110. data/spec/models/post.rb +0 -15
  111. data/spec/models/translation.rb +0 -5
  112. data/spec/models/vet_visit.rb +0 -5
  113. data/spec/spec.opts +0 -3
  114. data/spec/spec_helper.rb +0 -31
  115. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -145
  116. data/spec/unit/mongoid/associations/belongs_to_spec.rb +0 -193
  117. data/spec/unit/mongoid/associations/has_many_related_spec.rb +0 -420
  118. data/spec/unit/mongoid/associations/has_many_spec.rb +0 -519
  119. data/spec/unit/mongoid/associations/has_one_related_spec.rb +0 -179
  120. data/spec/unit/mongoid/associations/has_one_spec.rb +0 -282
  121. data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
  122. data/spec/unit/mongoid/associations/options_spec.rb +0 -192
  123. data/spec/unit/mongoid/associations_spec.rb +0 -595
  124. data/spec/unit/mongoid/attributes_spec.rb +0 -507
  125. data/spec/unit/mongoid/callbacks_spec.rb +0 -55
  126. data/spec/unit/mongoid/collection_spec.rb +0 -187
  127. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +0 -75
  128. data/spec/unit/mongoid/collections/master_spec.rb +0 -41
  129. data/spec/unit/mongoid/collections/mimic_spec.rb +0 -43
  130. data/spec/unit/mongoid/collections/slaves_spec.rb +0 -81
  131. data/spec/unit/mongoid/commands/create_spec.rb +0 -30
  132. data/spec/unit/mongoid/commands/delete_all_spec.rb +0 -58
  133. data/spec/unit/mongoid/commands/delete_spec.rb +0 -38
  134. data/spec/unit/mongoid/commands/destroy_all_spec.rb +0 -23
  135. data/spec/unit/mongoid/commands/destroy_spec.rb +0 -50
  136. data/spec/unit/mongoid/commands/save_spec.rb +0 -105
  137. data/spec/unit/mongoid/commands_spec.rb +0 -275
  138. data/spec/unit/mongoid/config_spec.rb +0 -172
  139. data/spec/unit/mongoid/contexts/enumerable_spec.rb +0 -421
  140. data/spec/unit/mongoid/contexts/mongo_spec.rb +0 -682
  141. data/spec/unit/mongoid/contexts_spec.rb +0 -25
  142. data/spec/unit/mongoid/criteria_spec.rb +0 -824
  143. data/spec/unit/mongoid/criterion/complex_spec.rb +0 -19
  144. data/spec/unit/mongoid/criterion/exclusion_spec.rb +0 -91
  145. data/spec/unit/mongoid/criterion/inclusion_spec.rb +0 -219
  146. data/spec/unit/mongoid/criterion/optional_spec.rb +0 -319
  147. data/spec/unit/mongoid/cursor_spec.rb +0 -74
  148. data/spec/unit/mongoid/deprecation_spec.rb +0 -24
  149. data/spec/unit/mongoid/document_spec.rb +0 -952
  150. data/spec/unit/mongoid/errors_spec.rb +0 -103
  151. data/spec/unit/mongoid/extensions/array/accessors_spec.rb +0 -50
  152. data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +0 -24
  153. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +0 -35
  154. data/spec/unit/mongoid/extensions/array/parentization_spec.rb +0 -20
  155. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
  156. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
  157. data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +0 -49
  158. data/spec/unit/mongoid/extensions/date/conversions_spec.rb +0 -102
  159. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +0 -70
  160. data/spec/unit/mongoid/extensions/float/conversions_spec.rb +0 -61
  161. data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +0 -184
  162. data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +0 -46
  163. data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +0 -21
  164. data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +0 -17
  165. data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +0 -14
  166. data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +0 -61
  167. data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +0 -24
  168. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +0 -57
  169. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +0 -34
  170. data/spec/unit/mongoid/extensions/string/conversions_spec.rb +0 -17
  171. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +0 -208
  172. data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +0 -91
  173. data/spec/unit/mongoid/extensions/time/conversions_spec.rb +0 -70
  174. data/spec/unit/mongoid/extras_spec.rb +0 -102
  175. data/spec/unit/mongoid/factory_spec.rb +0 -31
  176. data/spec/unit/mongoid/field_spec.rb +0 -143
  177. data/spec/unit/mongoid/fields_spec.rb +0 -181
  178. data/spec/unit/mongoid/finders_spec.rb +0 -404
  179. data/spec/unit/mongoid/identity_spec.rb +0 -109
  180. data/spec/unit/mongoid/indexes_spec.rb +0 -93
  181. data/spec/unit/mongoid/javascript_spec.rb +0 -48
  182. data/spec/unit/mongoid/matchers/all_spec.rb +0 -27
  183. data/spec/unit/mongoid/matchers/default_spec.rb +0 -27
  184. data/spec/unit/mongoid/matchers/exists_spec.rb +0 -56
  185. data/spec/unit/mongoid/matchers/gt_spec.rb +0 -39
  186. data/spec/unit/mongoid/matchers/gte_spec.rb +0 -49
  187. data/spec/unit/mongoid/matchers/in_spec.rb +0 -27
  188. data/spec/unit/mongoid/matchers/lt_spec.rb +0 -39
  189. data/spec/unit/mongoid/matchers/lte_spec.rb +0 -49
  190. data/spec/unit/mongoid/matchers/ne_spec.rb +0 -27
  191. data/spec/unit/mongoid/matchers/nin_spec.rb +0 -27
  192. data/spec/unit/mongoid/matchers/size_spec.rb +0 -27
  193. data/spec/unit/mongoid/matchers_spec.rb +0 -329
  194. data/spec/unit/mongoid/memoization_spec.rb +0 -75
  195. data/spec/unit/mongoid/named_scope_spec.rb +0 -123
  196. data/spec/unit/mongoid/scope_spec.rb +0 -240
  197. data/spec/unit/mongoid/state_spec.rb +0 -83
  198. data/spec/unit/mongoid/timestamps_spec.rb +0 -25
  199. data/spec/unit/mongoid/versioning_spec.rb +0 -41
  200. data/spec/unit/mongoid_spec.rb +0 -46
@@ -1,172 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Config do
4
-
5
- after :all do
6
- config.raise_not_found_error = true
7
- end
8
-
9
- let(:config) { Mongoid::Config.instance }
10
-
11
- describe "#database=" do
12
-
13
- context "when object provided is not a Mongo::DB" do
14
-
15
- it "raises an error" do
16
- lambda { config.database = "Test" }.should raise_error
17
- end
18
-
19
- end
20
-
21
- end
22
-
23
- describe "#master=" do
24
-
25
- context "when object provided is not a Mongo::DB" do
26
-
27
- it "raises an error" do
28
- lambda { config.master = "Test" }.should raise_error
29
- end
30
-
31
- end
32
-
33
- end
34
-
35
- describe "#parameterize_keys" do
36
-
37
- it "defaults to true" do
38
- config.parameterize_keys.should == true
39
- end
40
- end
41
-
42
- describe "#persist_types" do
43
-
44
- it "defaults to true" do
45
- config.persist_types.should == true
46
- end
47
- end
48
-
49
- describe "#persist_in_safe_mode=" do
50
-
51
- context "when setting to true" do
52
-
53
- before do
54
- config.persist_in_safe_mode = true
55
- end
56
-
57
- it "sets the value" do
58
- config.persist_in_safe_mode.should == true
59
- end
60
-
61
- end
62
-
63
- context "when setting to false" do
64
-
65
- before do
66
- config.persist_in_safe_mode = false
67
- end
68
-
69
- it "sets the value" do
70
- config.persist_in_safe_mode.should == false
71
- end
72
-
73
- end
74
-
75
- end
76
-
77
- describe "#raise_not_found_error=" do
78
-
79
- context "when setting to true" do
80
-
81
- before do
82
- config.raise_not_found_error = true
83
- end
84
-
85
- it "sets the value" do
86
- config.raise_not_found_error.should == true
87
- end
88
-
89
- end
90
-
91
- context "when setting to false" do
92
-
93
- before do
94
- config.raise_not_found_error = false
95
- end
96
-
97
- it "sets the value" do
98
- config.raise_not_found_error.should == false
99
- end
100
-
101
- end
102
-
103
- end
104
-
105
- describe "#reconnect_time" do
106
-
107
- it "defaults to 3" do
108
- config.reconnect_time.should == 3
109
- end
110
-
111
- end
112
-
113
- describe "#reconnect_time=" do
114
-
115
- after do
116
- config.reconnect_time = 3
117
- end
118
-
119
- it "sets the time" do
120
- config.reconnect_time = 5
121
- config.reconnect_time.should == 5
122
- end
123
- end
124
-
125
- describe "#slaves=" do
126
-
127
- context "when object provided is not a Mongo::DB" do
128
-
129
- it "raises an error" do
130
- lambda { config.slaves = ["Test"] }.should raise_error
131
- end
132
-
133
- end
134
-
135
- end
136
-
137
- describe "#allow_dynamic_fields=" do
138
-
139
- context "when setting to true" do
140
-
141
- before do
142
- config.allow_dynamic_fields = true
143
- end
144
-
145
- it "sets the value" do
146
- config.allow_dynamic_fields.should == true
147
- end
148
-
149
- end
150
-
151
- context "when setting to false" do
152
-
153
- before do
154
- config.allow_dynamic_fields = false
155
- end
156
-
157
- it "sets the value" do
158
- config.allow_dynamic_fields.should == false
159
- end
160
-
161
- end
162
-
163
- end
164
-
165
- describe "#use_object_ids" do
166
-
167
- it "defaults to false" do
168
- config.use_object_ids.should == false
169
- end
170
- end
171
-
172
- end
@@ -1,421 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Contexts::Enumerable do
4
-
5
- before do
6
- @london = Address.new(:number => 1, :street => "Bond Street")
7
- @shanghai = Address.new(:number => 10, :street => "Nan Jing Dong Lu")
8
- @melbourne = Address.new(:number => 20, :street => "Bourke Street")
9
- @new_york = Address.new(:number => 20, :street => "Broadway")
10
- @docs = [ @london, @shanghai, @melbourne, @new_york ]
11
- @criteria = Mongoid::Criteria.new(Address)
12
- @criteria.documents = @docs
13
- @criteria.where(:street => "Bourke Street").only(:number)
14
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
15
- end
16
-
17
- describe "#aggregate" do
18
-
19
- before do
20
- @counts = @context.aggregate
21
- end
22
-
23
- it "groups by the fields provided in the options" do
24
- @counts.size.should == 3
25
- end
26
-
27
- it "stores the counts in proper groups" do
28
- @counts[1].should == 1
29
- @counts[10].should == 1
30
- @counts[20].should == 2
31
- end
32
- end
33
-
34
- describe "#avg" do
35
-
36
- it "returns the avg value for the supplied field" do
37
- @context.avg(:number).should == 12.75
38
- end
39
- end
40
-
41
- describe "#count" do
42
-
43
- it "returns the size of the enumerable" do
44
- @context.count.should == 4
45
- end
46
-
47
- end
48
-
49
- describe "#distinct" do
50
-
51
- context "when the criteria is limited" do
52
-
53
- it "returns an array of distinct values for the field" do
54
- @context.distinct(:street).should == [ "Bourke Street" ]
55
- end
56
- end
57
-
58
- context "when the criteria is not limited" do
59
-
60
- before do
61
- @criteria = Mongoid::Criteria.new(Address)
62
- @criteria.documents = @docs
63
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
64
- end
65
-
66
- it "returns an array of distinct values for the field" do
67
- @context.distinct(:street).should ==
68
- [ "Bond Street", "Nan Jing Dong Lu", "Bourke Street", "Broadway" ]
69
- end
70
- end
71
- end
72
-
73
- describe "#execute" do
74
-
75
- before do
76
- @criteria = Mongoid::Criteria.new(Address)
77
- @criteria.documents = @docs
78
- end
79
-
80
- it "returns the matching documents from the array" do
81
- @context.execute.should == [ @melbourne ]
82
- end
83
-
84
- context "when selector is empty" do
85
-
86
- before do
87
- @criteria.only(:number)
88
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
89
- end
90
-
91
- it "returns all the documents" do
92
- @context.execute.should == @docs
93
- end
94
- end
95
-
96
- context "when skip and limit are in the options" do
97
-
98
- before do
99
- @criteria.skip(2).limit(2)
100
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
101
- end
102
-
103
- it "properly narrows down the matching results" do
104
- @context.execute.should == [ @melbourne, @new_york ]
105
- end
106
- end
107
-
108
- context "when limit is set without skip in the options" do
109
-
110
- before do
111
- @criteria.limit(2)
112
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
113
- end
114
-
115
- it "properly narrows down the matching results" do
116
- @context.execute.size.should == 2
117
- end
118
-
119
- end
120
-
121
- end
122
-
123
- describe "#first" do
124
-
125
- context "when a selector is present" do
126
-
127
- it "returns the first that matches the selector" do
128
- @context.first.should == @melbourne
129
- end
130
- end
131
-
132
- end
133
-
134
- describe "#group" do
135
-
136
- before do
137
- @group = @context.group
138
- end
139
-
140
- it "groups by the fields provided in the options" do
141
- @group.size.should == 3
142
- end
143
-
144
- it "stores the documents in proper groups" do
145
- @group[1].should == [ @london ]
146
- @group[10].should == [ @shanghai ]
147
- @group[20].should == [ @melbourne, @new_york ]
148
- end
149
-
150
- end
151
-
152
- describe ".initialize" do
153
-
154
- let(:selector) { { :field => "value" } }
155
- let(:options) { { :skip => 20 } }
156
- let(:documents) { [stub] }
157
-
158
- before do
159
- @criteria = Mongoid::Criteria.new(Address)
160
- @criteria.documents = documents
161
- @criteria.where(selector).skip(20)
162
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
163
- end
164
-
165
- it "sets the selector" do
166
- @context.selector.should == selector
167
- end
168
-
169
- it "sets the options" do
170
- @context.options.should == options
171
- end
172
-
173
- it "sets the documents" do
174
- @context.documents.should == documents
175
- end
176
-
177
- end
178
-
179
- describe "#iterate" do
180
- before do
181
- @criteria.where(:street => "Bourke Street")
182
- @criteria.documents = @docs
183
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
184
- end
185
-
186
- it "executes the criteria" do
187
- acc = []
188
- @context.iterate do |doc|
189
- acc << doc
190
- end
191
- acc.should == [@melbourne]
192
- end
193
- end
194
-
195
- describe "#last" do
196
-
197
- it "returns the last matching in the enumerable" do
198
- @context.last.should == @melbourne
199
- end
200
-
201
- end
202
-
203
- describe "#max" do
204
-
205
- it "returns the max value for the supplied field" do
206
- @context.max(:number).should == 20
207
- end
208
-
209
- end
210
-
211
- describe "#min" do
212
-
213
- it "returns the min value for the supplied field" do
214
- @context.min(:number).should == 1
215
- end
216
-
217
- end
218
-
219
- describe "#one" do
220
-
221
- it "returns the first matching in the enumerable" do
222
- @context.one.should == @melbourne
223
- end
224
-
225
- end
226
-
227
- describe "#page" do
228
-
229
- context "when the page option exists" do
230
-
231
- before do
232
- @criteria = Mongoid::Criteria.new(Person).extras({ :page => 5 })
233
- @criteria.documents = []
234
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
235
- end
236
-
237
- it "returns the page option" do
238
- @context.page.should == 5
239
- end
240
-
241
- end
242
-
243
- context "when the page option does not exist" do
244
-
245
- before do
246
- @criteria = Mongoid::Criteria.new(Person)
247
- @criteria.documents = []
248
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
249
- end
250
-
251
- it "returns 1" do
252
- @context.page.should == 1
253
- end
254
-
255
- end
256
-
257
- end
258
-
259
- describe "#paginate" do
260
-
261
- before do
262
- @criteria = Person.criteria.skip(2).limit(2)
263
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
264
- @results = @context.paginate
265
- end
266
-
267
- it "executes and paginates the results" do
268
- @results.current_page.should == 2
269
- @results.per_page.should == 2
270
- end
271
-
272
- end
273
-
274
- describe "#per_page" do
275
-
276
- context "when a limit option exists" do
277
-
278
- it "returns 20" do
279
- @context.per_page.should == 20
280
- end
281
-
282
- end
283
-
284
- context "when a limit option does not exist" do
285
-
286
- before do
287
- @criteria = Person.criteria.limit(50)
288
- @criteria.documents = []
289
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
290
- end
291
-
292
- it "returns the limit" do
293
- @context.per_page.should == 50
294
- end
295
-
296
- end
297
-
298
- end
299
-
300
- describe "#sum" do
301
-
302
- it "returns the sum of all the field values" do
303
- @context.sum(:number).should == 51
304
- end
305
-
306
- end
307
-
308
- context "#id_criteria" do
309
-
310
- let(:criteria) do
311
- criteria = Mongoid::Criteria.new(Address)
312
- criteria.documents = []
313
- criteria
314
- end
315
- let(:context) { criteria.context }
316
-
317
- context "with a single argument" do
318
-
319
- let(:id) { Mongo::ObjectID.new.to_s }
320
-
321
- before do
322
- criteria.expects(:id).with(id).returns(criteria)
323
- end
324
-
325
- context "when the document is found" do
326
-
327
- let(:document) { stub }
328
-
329
- it "returns a matching document" do
330
- context.expects(:one).returns(document)
331
- document.expects(:blank? => false)
332
- context.id_criteria(id).should == document
333
- end
334
-
335
- end
336
-
337
- context "when the document is not found" do
338
-
339
- it "raises an error" do
340
- context.expects(:one).returns(nil)
341
- lambda { context.id_criteria(id) }.should raise_error
342
- end
343
-
344
- end
345
-
346
- end
347
-
348
- context "multiple arguments" do
349
-
350
- context "when an array of ids" do
351
-
352
- let(:ids) do
353
- (0..2).inject([]) { |ary, i| ary << Mongo::ObjectID.new.to_s }
354
- end
355
-
356
- context "when documents are found" do
357
-
358
- let(:docs) do
359
- (0..2).inject([]) { |ary, i| ary << stub }
360
- end
361
-
362
- before do
363
- criteria.expects(:id).with(ids).returns(criteria)
364
- end
365
-
366
- it "returns matching documents" do
367
- context.expects(:execute).returns(docs)
368
- context.id_criteria(ids).should == docs
369
- end
370
-
371
- end
372
-
373
- context "when documents are not found" do
374
-
375
- it "raises an error" do
376
- context.expects(:execute).returns([])
377
- lambda { context.id_criteria(ids) }.should raise_error
378
- end
379
-
380
- end
381
-
382
- end
383
-
384
- context "when an array of object ids" do
385
-
386
- let(:ids) do
387
- (0..2).inject([]) { |ary, i| ary << Mongo::ObjectID.new }
388
- end
389
-
390
- context "when documents are found" do
391
-
392
- let(:docs) do
393
- (0..2).inject([]) { |ary, i| ary << stub }
394
- end
395
-
396
- before do
397
- criteria.expects(:id).with(ids).returns(criteria)
398
- end
399
-
400
- it "returns matching documents" do
401
- context.expects(:execute).returns(docs)
402
- context.id_criteria(ids).should == docs
403
- end
404
-
405
- end
406
-
407
- context "when documents are not found" do
408
-
409
- it "raises an error" do
410
- context.expects(:execute).returns([])
411
- lambda { context.id_criteria(ids) }.should raise_error
412
- end
413
-
414
- end
415
-
416
- end
417
- end
418
-
419
- end
420
-
421
- end