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,19 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Criterion::Complex do
4
-
5
- let(:complex) { Mongoid::Criterion::Complex.new(:key => :field, :operator => "$gt") }
6
-
7
- describe "#initialize" do
8
-
9
- it "sets the key" do
10
- complex.key.should == :field
11
- end
12
-
13
- it "sets the operator" do
14
- complex.operator.should == "$gt"
15
- end
16
-
17
- end
18
-
19
- end
@@ -1,91 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Criterion::Exclusion do
4
-
5
- before do
6
- @criteria = Mongoid::Criteria.new(Person)
7
- @canvas_criteria = Mongoid::Criteria.new(Canvas)
8
- end
9
-
10
- describe "#excludes" do
11
-
12
- it "adds the $ne query to the selector" do
13
- @criteria.excludes(:title => "Bad Title", :text => "Bad Text")
14
- @criteria.selector.should ==
15
- {
16
- :title =>
17
- { "$ne" => "Bad Title"},
18
- :text =>
19
- { "$ne" => "Bad Text" }
20
- }
21
- end
22
-
23
- it "returns self" do
24
- @criteria.excludes(:title => "Bad").should == @criteria
25
- end
26
-
27
- context "when passing an id" do
28
-
29
- it "accepts id" do
30
- @criteria.excludes(:id => "1")
31
- @criteria.selector.should ==
32
- {
33
- :_id => { "$ne" => "1" }
34
- }
35
- end
36
-
37
- it "accepts _id" do
38
- @criteria.excludes(:_id => "1")
39
- @criteria.selector.should ==
40
- {
41
- :_id => { "$ne" => "1" }
42
- }
43
- end
44
-
45
- end
46
-
47
- end
48
-
49
- describe "#not_in" do
50
-
51
- it "adds the exclusion to the selector" do
52
- @criteria.not_in(:title => ["title1", "title2"], :text => ["test"])
53
- @criteria.selector.should == {
54
- :title => { "$nin" => ["title1", "title2"] },
55
- :text => { "$nin" => ["test"] }
56
- }
57
- end
58
-
59
- it "returns self" do
60
- @criteria.not_in(:title => ["title1"]).should == @criteria
61
- end
62
-
63
- end
64
-
65
- describe "#only" do
66
-
67
- context "when args are provided" do
68
-
69
- it "adds the options for limiting by fields" do
70
- @criteria.only(:title, :text)
71
- @criteria.options.should == { :fields => [ :title, :text ] }
72
- end
73
-
74
- it "returns self" do
75
- @criteria.only.should == @criteria
76
- end
77
-
78
- end
79
-
80
- context "when no args provided" do
81
-
82
- it "does not add the field option" do
83
- @criteria.only
84
- @criteria.options[:fields].should be_nil
85
- end
86
-
87
- end
88
-
89
- end
90
-
91
- end
@@ -1,219 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Criterion::Inclusion do
4
-
5
- before do
6
- @criteria = Mongoid::Criteria.new(Person)
7
- @canvas_criteria = Mongoid::Criteria.new(Canvas)
8
- end
9
-
10
- describe "#all" do
11
-
12
- it "adds the $all query to the selector" do
13
- @criteria.all(:title => ["title1", "title2"])
14
- @criteria.selector.should ==
15
- {
16
- :title => { "$all" => ["title1", "title2"] }
17
- }
18
- end
19
-
20
- it "returns self" do
21
- @criteria.all(:title => [ "title1" ]).should == @criteria
22
- end
23
-
24
- end
25
-
26
- describe "#and" do
27
-
28
- context "when provided a hash" do
29
-
30
- it "adds the clause to the selector" do
31
- @criteria.and(:title => "Title", :text => "Text")
32
- @criteria.selector.should ==
33
- {
34
- :title => "Title",
35
- :text => "Text"
36
- }
37
- end
38
-
39
- end
40
-
41
- context "when provided a string" do
42
-
43
- it "adds the $where clause to the selector" do
44
- @criteria.and("this.date < new Date()")
45
- @criteria.selector.should ==
46
- {
47
- "$where" => "this.date < new Date()"
48
- }
49
- end
50
-
51
- end
52
-
53
- it "returns self" do
54
- @criteria.and.should == @criteria
55
- end
56
-
57
- end
58
-
59
- describe "#in" do
60
-
61
- it "adds the $in clause to the selector" do
62
- @criteria.in(:title => ["title1", "title2"], :text => ["test"])
63
- @criteria.selector.should ==
64
- {
65
- :title => { "$in" => ["title1", "title2"] }, :text => { "$in" => ["test"] }
66
- }
67
- end
68
-
69
- it "#any_in is aliased to #in" do
70
- @criteria.any_in(:title => ["title1", "title2"], :text => ["test"])
71
- @criteria.selector.should ==
72
- {
73
- :title => { "$in" => ["title1", "title2"] }, :text => { "$in" => ["test"] }
74
- }
75
- end
76
-
77
- it "returns self" do
78
- @criteria.in(:title => ["title1"]).should == @criteria
79
- end
80
-
81
- end
82
-
83
- describe "#where" do
84
-
85
- context "when provided a hash" do
86
-
87
- context "with simple hash keys" do
88
-
89
- it "adds the clause to the selector" do
90
- @criteria.where(:title => "Title", :text => "Text")
91
- @criteria.selector.should ==
92
- { :title => "Title", :text => "Text" }
93
- end
94
-
95
- end
96
-
97
- context "with complex criterion" do
98
-
99
- context "#all" do
100
-
101
- it "returns those matching an all clause" do
102
- @criteria.where(:title.all => ["Sir"])
103
- @criteria.selector.should ==
104
- { :title => { "$all" => ["Sir"] } }
105
- end
106
-
107
- end
108
-
109
- context "#exists" do
110
-
111
- it "returns those matching an exists clause" do
112
- @criteria.where(:title.exists => true)
113
- @criteria.selector.should ==
114
- { :title => { "$exists" => true } }
115
- end
116
-
117
- end
118
-
119
- context "#gt" do
120
-
121
- it "returns those matching a gt clause" do
122
- @criteria.where(:age.gt => 30)
123
- @criteria.selector.should ==
124
- { :age => { "$gt" => 30 } }
125
- end
126
-
127
- end
128
-
129
- context "#gte" do
130
-
131
- it "returns those matching a gte clause" do
132
- @criteria.where(:age.gte => 33)
133
- @criteria.selector.should ==
134
- { :age => { "$gte" => 33 } }
135
- end
136
-
137
- end
138
-
139
- context "#in" do
140
-
141
- it "returns those matching an in clause" do
142
- @criteria.where(:title.in => ["Sir", "Madam"])
143
- @criteria.selector.should ==
144
- { :title => { "$in" => ["Sir", "Madam"] } }
145
- end
146
-
147
- end
148
-
149
- context "#lt" do
150
-
151
- it "returns those matching a lt clause" do
152
- @criteria.where(:age.lt => 34)
153
- @criteria.selector.should ==
154
- { :age => { "$lt" => 34 } }
155
- end
156
-
157
- end
158
-
159
- context "#lte" do
160
-
161
- it "returns those matching a lte clause" do
162
- @criteria.where(:age.lte => 33)
163
- @criteria.selector.should ==
164
- { :age => { "$lte" => 33 } }
165
- end
166
-
167
- end
168
-
169
- context "#ne" do
170
-
171
- it "returns those matching a ne clause" do
172
- @criteria.where(:age.ne => 50)
173
- @criteria.selector.should ==
174
- { :age => { "$ne" => 50 } }
175
- end
176
-
177
- end
178
-
179
- context "#nin" do
180
-
181
- it "returns those matching a nin clause" do
182
- @criteria.where(:title.nin => ["Esquire", "Congressman"])
183
- @criteria.selector.should ==
184
- { :title => { "$nin" => ["Esquire", "Congressman"] } }
185
- end
186
-
187
- end
188
-
189
- context "#size" do
190
-
191
- it "returns those matching a size clause" do
192
- @criteria.where(:aliases.size => 2)
193
- @criteria.selector.should ==
194
- { :aliases => { "$size" => 2 } }
195
- end
196
-
197
- end
198
-
199
- end
200
-
201
- end
202
-
203
- context "when provided a string" do
204
-
205
- it "adds the $where clause to the selector" do
206
- @criteria.where("this.date < new Date()")
207
- @criteria.selector.should ==
208
- { "$where" => "this.date < new Date()" }
209
- end
210
-
211
- end
212
-
213
- it "returns self" do
214
- @criteria.where.should == @criteria
215
- end
216
-
217
- end
218
-
219
- end
@@ -1,319 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Criterion::Optional do
4
-
5
- before do
6
- @criteria = Mongoid::Criteria.new(Person)
7
- @canvas_criteria = Mongoid::Criteria.new(Canvas)
8
- end
9
-
10
- describe "#cache" do
11
-
12
- it "sets the cache option on the criteria" do
13
- @criteria.cache
14
- @criteria.options[:cache].should be_true
15
- end
16
-
17
- it "returns self" do
18
- @criteria.cache.should == @criteria
19
- end
20
- end
21
-
22
- describe "#cached?" do
23
-
24
- context "when the criteria has a cache option" do
25
-
26
- before do
27
- @criteria.cache
28
- end
29
-
30
- it "returns true" do
31
- @criteria.cached?.should be_true
32
- end
33
- end
34
-
35
- context "when the criteria has no cache option" do
36
-
37
- it "returns false" do
38
- @criteria.cached?.should be_false
39
- end
40
- end
41
- end
42
-
43
- describe "#enslave" do
44
-
45
- it "sets the enslaved option on the criteria" do
46
- @criteria.enslave
47
- @criteria.options[:enslave].should be_true
48
- end
49
-
50
- it "returns self" do
51
- @criteria.enslave.should == @criteria
52
- end
53
- end
54
-
55
- describe "#extras" do
56
-
57
- context "filtering" do
58
-
59
- context "when page is provided" do
60
-
61
- it "sets the limit and skip options" do
62
- @criteria.extras({ :page => "2" })
63
- @criteria.page.should == 2
64
- @criteria.options.should == { :skip => 20, :limit => 20 }
65
- end
66
-
67
- end
68
-
69
- context "when per_page is provided" do
70
-
71
- it "sets the limit and skip options" do
72
- @criteria.extras({ :per_page => 45 })
73
- @criteria.options.should == { :skip => 0, :limit => 45 }
74
- end
75
-
76
- end
77
-
78
- context "when page and per_page both provided" do
79
-
80
- it "sets the limit and skip options" do
81
- @criteria.extras({ :per_page => 30, :page => "4" })
82
- @criteria.options.should == { :skip => 90, :limit => 30 }
83
- @criteria.page.should == 4
84
- end
85
-
86
- end
87
-
88
- end
89
-
90
- it "adds the extras to the options" do
91
- @criteria.limit(10).extras({ :skip => 10 })
92
- @criteria.options.should == { :skip => 10, :limit => 10 }
93
- end
94
-
95
- it "returns self" do
96
- @criteria.extras({}).should == @criteria
97
- end
98
-
99
- end
100
-
101
- describe "#id" do
102
-
103
- context "when passing a single id" do
104
-
105
- context "when the id is a string" do
106
-
107
- it "adds the _id query to the selector" do
108
- id = Mongo::ObjectID.new.to_s
109
- @criteria.id(id)
110
- @criteria.selector.should == { :_id => id }
111
- end
112
-
113
- it "returns self" do
114
- id = Mongo::ObjectID.new.to_s
115
- @criteria.id(id).should == @criteria
116
- end
117
- end
118
-
119
- context "when the id is an object id" do
120
-
121
- it "adds the _id query to the selector" do
122
- id = Mongo::ObjectID.new
123
- @criteria.id(id)
124
- @criteria.selector.should == { :_id => id }
125
- end
126
-
127
- it "returns self" do
128
- id = Mongo::ObjectID.new
129
- @criteria.id(id).should == @criteria
130
- end
131
- end
132
-
133
- end
134
-
135
- context "when passing in an array of ids" do
136
-
137
- before do
138
- @ids = []
139
- 3.times { @ids << Mongo::ObjectID.new.to_s }
140
- end
141
-
142
- it "adds the _id query to the selector" do
143
- @criteria.id(@ids)
144
- @criteria.selector.should ==
145
- { :_id => { "$in" => @ids } }
146
- end
147
-
148
- end
149
-
150
- end
151
-
152
- describe "#limit" do
153
-
154
- context "when value provided" do
155
-
156
- it "adds the limit to the options" do
157
- @criteria.limit(100)
158
- @criteria.options.should == { :limit => 100 }
159
- end
160
-
161
- end
162
-
163
- context "when value not provided" do
164
-
165
- it "defaults to 20" do
166
- @criteria.limit
167
- @criteria.options.should == { :limit => 20 }
168
- end
169
-
170
- end
171
-
172
- it "returns self" do
173
- @criteria.limit.should == @criteria
174
- end
175
-
176
- end
177
-
178
- describe "#offset" do
179
-
180
- context "when the per_page option exists" do
181
-
182
- before do
183
- @criteria = Mongoid::Criteria.new(Person).extras({ :per_page => 20, :page => 3 })
184
- end
185
-
186
- it "returns the per_page option" do
187
- @criteria.offset.should == 40
188
- end
189
-
190
- end
191
-
192
- context "when the skip option exists" do
193
-
194
- before do
195
- @criteria = Mongoid::Criteria.new(Person).extras({ :skip => 20 })
196
- end
197
-
198
- it "returns the skip option" do
199
- @criteria.offset.should == 20
200
- end
201
-
202
- end
203
-
204
- context "when an argument is provided" do
205
-
206
- before do
207
- @criteria = Mongoid::Criteria.new(Person)
208
- @criteria.offset(40)
209
- end
210
-
211
- it "delegates to skip" do
212
- @criteria.options[:skip].should == 40
213
- end
214
-
215
- end
216
-
217
- context "when no option exists" do
218
-
219
- context "when page option exists" do
220
-
221
- before do
222
- @criteria = Mongoid::Criteria.new(Person).extras({ :page => 2 })
223
- end
224
-
225
- it "adds the skip option to the options and returns it" do
226
- @criteria.offset.should == 20
227
- @criteria.options[:skip].should == 20
228
- end
229
-
230
- end
231
-
232
- context "when page option does not exist" do
233
-
234
- before do
235
- @criteria = Mongoid::Criteria.new(Person)
236
- end
237
-
238
- it "returns nil" do
239
- @criteria.offset.should be_nil
240
- @criteria.options[:skip].should be_nil
241
- end
242
-
243
- end
244
-
245
- end
246
-
247
- end
248
-
249
- describe "#order_by" do
250
-
251
- context "when field names and direction specified" do
252
-
253
- it "adds the sort to the options" do
254
- @criteria.order_by([[:title, :asc], [:text, :desc]])
255
- @criteria.options.should == { :sort => [[:title, :asc], [:text, :desc]] }
256
- end
257
-
258
- end
259
-
260
- it "returns self" do
261
- @criteria.order_by.should == @criteria
262
- end
263
-
264
- end
265
-
266
- describe "#page" do
267
-
268
- context "when the page option exists" do
269
-
270
- before do
271
- @criteria = Mongoid::Criteria.new(Person).extras({ :page => 5 })
272
- end
273
-
274
- it "returns the page option" do
275
- @criteria.page.should == 5
276
- end
277
-
278
- end
279
-
280
- context "when the page option does not exist" do
281
-
282
- before do
283
- @criteria = Mongoid::Criteria.new(Person)
284
- end
285
-
286
- it "returns 1" do
287
- @criteria.page.should == 1
288
- end
289
-
290
- end
291
-
292
- end
293
-
294
- describe "#skip" do
295
-
296
- context "when value provided" do
297
-
298
- it "adds the skip value to the options" do
299
- @criteria.skip(20)
300
- @criteria.options.should == { :skip => 20 }
301
- end
302
-
303
- end
304
-
305
- context "when value not provided" do
306
-
307
- it "defaults to zero" do
308
- @criteria.skip
309
- @criteria.options.should == { :skip => 0 }
310
- end
311
-
312
- end
313
-
314
- it "returns self" do
315
- @criteria.skip.should == @criteria
316
- end
317
-
318
- end
319
- end