mongoid 2.0.0.alpha → 2.0.0.beta.5

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 (216) hide show
  1. data/lib/mongoid.rb +11 -5
  2. data/lib/mongoid/associations.rb +112 -107
  3. data/lib/mongoid/associations/belongs_to_related.rb +2 -3
  4. data/lib/mongoid/associations/embedded_in.rb +12 -4
  5. data/lib/mongoid/associations/{embed_many.rb → embeds_many.rb} +101 -32
  6. data/lib/mongoid/associations/{embed_one.rb → embeds_one.rb} +10 -10
  7. data/lib/mongoid/associations/has_many_related.rb +51 -5
  8. data/lib/mongoid/associations/has_one_related.rb +9 -5
  9. data/lib/mongoid/associations/meta_data.rb +2 -1
  10. data/lib/mongoid/associations/options.rb +15 -6
  11. data/lib/mongoid/associations/proxy.rb +14 -21
  12. data/lib/mongoid/attributes.rb +34 -13
  13. data/lib/mongoid/callbacks.rb +1 -2
  14. data/lib/mongoid/collection.rb +4 -3
  15. data/lib/mongoid/collections.rb +41 -0
  16. data/lib/mongoid/collections/master.rb +3 -2
  17. data/lib/mongoid/collections/slaves.rb +3 -2
  18. data/lib/mongoid/components.rb +4 -1
  19. data/lib/mongoid/config.rb +163 -13
  20. data/lib/mongoid/contexts.rb +1 -2
  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/criteria.rb +13 -22
  25. data/lib/mongoid/criterion/exclusion.rb +3 -3
  26. data/lib/mongoid/criterion/inclusion.rb +17 -0
  27. data/lib/mongoid/criterion/optional.rb +1 -1
  28. data/lib/mongoid/dirty.rb +253 -0
  29. data/lib/mongoid/document.rb +40 -85
  30. data/lib/mongoid/errors.rb +48 -1
  31. data/lib/mongoid/extensions.rb +11 -9
  32. data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
  33. data/lib/mongoid/extensions/boolean/conversions.rb +8 -2
  34. data/lib/mongoid/extensions/date/conversions.rb +13 -4
  35. data/lib/mongoid/extensions/datetime/conversions.rb +1 -6
  36. data/lib/mongoid/extensions/float/conversions.rb +5 -1
  37. data/lib/mongoid/extensions/hash/assimilation.rb +12 -3
  38. data/lib/mongoid/extensions/hash/conversions.rb +34 -4
  39. data/lib/mongoid/extensions/integer/conversions.rb +5 -1
  40. data/lib/mongoid/extensions/nil/assimilation.rb +4 -0
  41. data/lib/mongoid/extensions/object/conversions.rb +3 -3
  42. data/lib/mongoid/extensions/string/conversions.rb +1 -1
  43. data/lib/mongoid/extensions/symbol/inflections.rb +5 -2
  44. data/lib/mongoid/extensions/time_conversions.rb +35 -0
  45. data/lib/mongoid/factory.rb +2 -1
  46. data/lib/mongoid/field.rb +15 -2
  47. data/lib/mongoid/fields.rb +1 -1
  48. data/lib/mongoid/identity.rb +3 -3
  49. data/lib/mongoid/indexes.rb +3 -3
  50. data/lib/mongoid/matchers.rb +1 -2
  51. data/lib/mongoid/memoization.rb +8 -2
  52. data/lib/mongoid/named_scope.rb +0 -5
  53. data/lib/mongoid/observable.rb +1 -1
  54. data/lib/mongoid/paths.rb +30 -22
  55. data/lib/mongoid/persistence.rb +218 -0
  56. data/lib/mongoid/persistence/command.rb +39 -0
  57. data/lib/mongoid/persistence/insert.rb +47 -0
  58. data/lib/mongoid/persistence/insert_embedded.rb +38 -0
  59. data/lib/mongoid/persistence/remove.rb +39 -0
  60. data/lib/mongoid/persistence/remove_all.rb +37 -0
  61. data/lib/mongoid/persistence/remove_embedded.rb +50 -0
  62. data/lib/mongoid/persistence/update.rb +63 -0
  63. data/lib/mongoid/railtie.rb +53 -0
  64. data/lib/mongoid/railties/database.rake +37 -0
  65. data/lib/mongoid/timestamps.rb +2 -2
  66. data/lib/mongoid/validations.rb +2 -2
  67. data/lib/mongoid/validations/associated.rb +2 -2
  68. data/lib/mongoid/validations/uniqueness.rb +13 -2
  69. data/lib/mongoid/version.rb +4 -0
  70. data/lib/mongoid/versioning.rb +3 -2
  71. data/lib/rails/generators/mongoid/config/config_generator.rb +41 -0
  72. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +24 -0
  73. data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
  74. data/lib/rails/generators/mongoid/model/templates/model.rb +15 -0
  75. data/lib/rails/generators/mongoid_generator.rb +61 -0
  76. metadata +76 -301
  77. data/.gitignore +0 -6
  78. data/.watchr +0 -29
  79. data/Rakefile +0 -52
  80. data/VERSION +0 -1
  81. data/caliper.yml +0 -4
  82. data/lib/mongoid/collections/mimic.rb +0 -46
  83. data/lib/mongoid/commands.rb +0 -161
  84. data/lib/mongoid/commands/create.rb +0 -19
  85. data/lib/mongoid/commands/delete.rb +0 -16
  86. data/lib/mongoid/commands/delete_all.rb +0 -23
  87. data/lib/mongoid/commands/deletion.rb +0 -18
  88. data/lib/mongoid/commands/destroy.rb +0 -17
  89. data/lib/mongoid/commands/destroy_all.rb +0 -23
  90. data/lib/mongoid/commands/save.rb +0 -29
  91. data/lib/mongoid/extensions/time/conversions.rb +0 -18
  92. data/mongoid.gemspec +0 -408
  93. data/perf/benchmark.rb +0 -77
  94. data/spec/integration/mongoid/associations_spec.rb +0 -340
  95. data/spec/integration/mongoid/attributes_spec.rb +0 -22
  96. data/spec/integration/mongoid/commands_spec.rb +0 -227
  97. data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -33
  98. data/spec/integration/mongoid/criteria_spec.rb +0 -272
  99. data/spec/integration/mongoid/document_spec.rb +0 -650
  100. data/spec/integration/mongoid/extensions_spec.rb +0 -22
  101. data/spec/integration/mongoid/finders_spec.rb +0 -119
  102. data/spec/integration/mongoid/inheritance_spec.rb +0 -137
  103. data/spec/integration/mongoid/named_scope_spec.rb +0 -46
  104. data/spec/models/address.rb +0 -39
  105. data/spec/models/animal.rb +0 -6
  106. data/spec/models/callbacks.rb +0 -18
  107. data/spec/models/comment.rb +0 -8
  108. data/spec/models/country_code.rb +0 -6
  109. data/spec/models/employer.rb +0 -5
  110. data/spec/models/game.rb +0 -7
  111. data/spec/models/inheritance.rb +0 -56
  112. data/spec/models/location.rb +0 -5
  113. data/spec/models/mixed_drink.rb +0 -4
  114. data/spec/models/name.rb +0 -13
  115. data/spec/models/namespacing.rb +0 -11
  116. data/spec/models/patient.rb +0 -4
  117. data/spec/models/person.rb +0 -99
  118. data/spec/models/pet.rb +0 -7
  119. data/spec/models/pet_owner.rb +0 -6
  120. data/spec/models/phone.rb +0 -7
  121. data/spec/models/post.rb +0 -15
  122. data/spec/models/translation.rb +0 -5
  123. data/spec/models/vet_visit.rb +0 -5
  124. data/spec/spec.opts +0 -3
  125. data/spec/spec_helper.rb +0 -31
  126. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -145
  127. data/spec/unit/mongoid/associations/embed_many_spec.rb +0 -516
  128. data/spec/unit/mongoid/associations/embed_one_spec.rb +0 -282
  129. data/spec/unit/mongoid/associations/embedded_in_spec.rb +0 -193
  130. data/spec/unit/mongoid/associations/has_many_related_spec.rb +0 -418
  131. data/spec/unit/mongoid/associations/has_one_related_spec.rb +0 -179
  132. data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
  133. data/spec/unit/mongoid/associations/options_spec.rb +0 -192
  134. data/spec/unit/mongoid/associations_spec.rb +0 -595
  135. data/spec/unit/mongoid/attributes_spec.rb +0 -507
  136. data/spec/unit/mongoid/callbacks_spec.rb +0 -55
  137. data/spec/unit/mongoid/collection_spec.rb +0 -187
  138. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +0 -75
  139. data/spec/unit/mongoid/collections/master_spec.rb +0 -41
  140. data/spec/unit/mongoid/collections/mimic_spec.rb +0 -43
  141. data/spec/unit/mongoid/collections/slaves_spec.rb +0 -81
  142. data/spec/unit/mongoid/commands/create_spec.rb +0 -31
  143. data/spec/unit/mongoid/commands/delete_all_spec.rb +0 -58
  144. data/spec/unit/mongoid/commands/delete_spec.rb +0 -38
  145. data/spec/unit/mongoid/commands/destroy_all_spec.rb +0 -21
  146. data/spec/unit/mongoid/commands/destroy_spec.rb +0 -51
  147. data/spec/unit/mongoid/commands/save_spec.rb +0 -107
  148. data/spec/unit/mongoid/commands_spec.rb +0 -270
  149. data/spec/unit/mongoid/config_spec.rb +0 -172
  150. data/spec/unit/mongoid/contexts/enumerable_spec.rb +0 -421
  151. data/spec/unit/mongoid/contexts/mongo_spec.rb +0 -682
  152. data/spec/unit/mongoid/contexts_spec.rb +0 -25
  153. data/spec/unit/mongoid/criteria_spec.rb +0 -824
  154. data/spec/unit/mongoid/criterion/complex_spec.rb +0 -19
  155. data/spec/unit/mongoid/criterion/exclusion_spec.rb +0 -91
  156. data/spec/unit/mongoid/criterion/inclusion_spec.rb +0 -219
  157. data/spec/unit/mongoid/criterion/optional_spec.rb +0 -319
  158. data/spec/unit/mongoid/cursor_spec.rb +0 -74
  159. data/spec/unit/mongoid/deprecation_spec.rb +0 -24
  160. data/spec/unit/mongoid/document_spec.rb +0 -818
  161. data/spec/unit/mongoid/errors_spec.rb +0 -103
  162. data/spec/unit/mongoid/extensions/array/accessors_spec.rb +0 -50
  163. data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +0 -24
  164. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +0 -35
  165. data/spec/unit/mongoid/extensions/array/parentization_spec.rb +0 -20
  166. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
  167. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
  168. data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +0 -49
  169. data/spec/unit/mongoid/extensions/date/conversions_spec.rb +0 -102
  170. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +0 -67
  171. data/spec/unit/mongoid/extensions/float/conversions_spec.rb +0 -61
  172. data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +0 -184
  173. data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +0 -46
  174. data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +0 -21
  175. data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +0 -17
  176. data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +0 -14
  177. data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +0 -61
  178. data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +0 -24
  179. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +0 -57
  180. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +0 -34
  181. data/spec/unit/mongoid/extensions/string/conversions_spec.rb +0 -17
  182. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +0 -208
  183. data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +0 -91
  184. data/spec/unit/mongoid/extensions/time/conversions_spec.rb +0 -70
  185. data/spec/unit/mongoid/extras_spec.rb +0 -102
  186. data/spec/unit/mongoid/factory_spec.rb +0 -31
  187. data/spec/unit/mongoid/field_spec.rb +0 -143
  188. data/spec/unit/mongoid/fields_spec.rb +0 -181
  189. data/spec/unit/mongoid/finders_spec.rb +0 -404
  190. data/spec/unit/mongoid/identity_spec.rb +0 -109
  191. data/spec/unit/mongoid/indexes_spec.rb +0 -93
  192. data/spec/unit/mongoid/javascript_spec.rb +0 -48
  193. data/spec/unit/mongoid/matchers/all_spec.rb +0 -27
  194. data/spec/unit/mongoid/matchers/default_spec.rb +0 -27
  195. data/spec/unit/mongoid/matchers/exists_spec.rb +0 -56
  196. data/spec/unit/mongoid/matchers/gt_spec.rb +0 -39
  197. data/spec/unit/mongoid/matchers/gte_spec.rb +0 -49
  198. data/spec/unit/mongoid/matchers/in_spec.rb +0 -27
  199. data/spec/unit/mongoid/matchers/lt_spec.rb +0 -39
  200. data/spec/unit/mongoid/matchers/lte_spec.rb +0 -49
  201. data/spec/unit/mongoid/matchers/ne_spec.rb +0 -27
  202. data/spec/unit/mongoid/matchers/nin_spec.rb +0 -27
  203. data/spec/unit/mongoid/matchers/size_spec.rb +0 -27
  204. data/spec/unit/mongoid/matchers_spec.rb +0 -329
  205. data/spec/unit/mongoid/memoization_spec.rb +0 -75
  206. data/spec/unit/mongoid/named_scope_spec.rb +0 -123
  207. data/spec/unit/mongoid/observable_spec.rb +0 -46
  208. data/spec/unit/mongoid/paths_spec.rb +0 -124
  209. data/spec/unit/mongoid/scope_spec.rb +0 -240
  210. data/spec/unit/mongoid/state_spec.rb +0 -83
  211. data/spec/unit/mongoid/timestamps_spec.rb +0 -25
  212. data/spec/unit/mongoid/validations/associated_spec.rb +0 -103
  213. data/spec/unit/mongoid/validations/uniqueness_spec.rb +0 -47
  214. data/spec/unit/mongoid/validations_spec.rb +0 -190
  215. data/spec/unit/mongoid/versioning_spec.rb +0 -41
  216. 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