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,31 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Factory do
4
-
5
- describe ".build" do
6
-
7
- context "when the _type attribute is present" do
8
-
9
- before do
10
- @attributes = { "_type" => "Person", "title" => "Sir" }
11
- end
12
-
13
- it "instantiates based on the type" do
14
- person = Mongoid::Factory.build(Person, @attributes)
15
- person.title.should == "Sir"
16
- end
17
- end
18
-
19
- context "when _type is not preset" do
20
-
21
- before do
22
- @attributes = { "title" => "Sir" }
23
- end
24
-
25
- it "instantiates based on the type" do
26
- person = Mongoid::Factory.build(Person, @attributes)
27
- person.title.should == "Sir"
28
- end
29
- end
30
- end
31
- end
@@ -1,143 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Field do
4
-
5
- describe "#accessible?" do
6
-
7
- context "when value is not set" do
8
-
9
- before do
10
- @field = Mongoid::Field.new(:name)
11
- end
12
-
13
- it "defaults to true" do
14
- @field.accessible?.should be_true
15
- end
16
- end
17
-
18
- context "when set to true" do
19
-
20
- before do
21
- @field = Mongoid::Field.new(:name, :accessible => true)
22
- end
23
-
24
- it "returns true" do
25
- @field.accessible?.should be_true
26
- end
27
- end
28
-
29
- context "when set to false" do
30
-
31
- before do
32
- @field = Mongoid::Field.new(:name, :accessible => false)
33
- end
34
-
35
- it "returns false" do
36
- @field.accessible?.should be_false
37
- end
38
- end
39
- end
40
-
41
- describe "#default" do
42
-
43
- before do
44
- @field = Mongoid::Field.new(:score, :default => 0)
45
- end
46
-
47
- it "returns the default option" do
48
- @field.default.should == 0
49
- end
50
-
51
- context "when the field is an array" do
52
-
53
- before do
54
- @field = Mongoid::Field.new(:vals, :type => Array, :default => [ "first" ])
55
- end
56
-
57
- it "dups the array" do
58
- array = @field.default
59
- array << "second"
60
- @field.default.should == [ "first" ]
61
- end
62
- end
63
-
64
- context "when the field is a hash" do
65
-
66
- before do
67
- @field = Mongoid::Field.new(:vals, :type => Hash, :default => { :key => "value" })
68
- end
69
-
70
- it "dups the hash" do
71
- hash = @field.default
72
- hash[:key_two] = "value2"
73
- @field.default.should == { :key => "value" }
74
- end
75
- end
76
-
77
- end
78
-
79
- describe "#name" do
80
-
81
- before do
82
- @field = Mongoid::Field.new(:score, :default => 0)
83
- end
84
-
85
- it "returns the name" do
86
- @field.name.should == :score
87
- end
88
-
89
- end
90
-
91
- describe "#type" do
92
-
93
- before do
94
- @field = Mongoid::Field.new(:name)
95
- end
96
-
97
- it "defaults to String" do
98
- @field.type.should == String
99
- end
100
-
101
- end
102
-
103
- describe "#set" do
104
-
105
- before do
106
- @type = mock
107
- @field = Mongoid::Field.new(:score, :default => 10, :type => @type)
108
- end
109
-
110
- context "nil is provided" do
111
-
112
- it "returns the default value" do
113
- @field.set(nil).should == 10
114
- end
115
-
116
- end
117
-
118
- context "value is provided" do
119
-
120
- it "sets the value" do
121
- @type.expects(:set).with("30").returns(30)
122
- @field.set("30").should == 30
123
- end
124
-
125
- end
126
-
127
- end
128
-
129
- describe "#get" do
130
-
131
- before do
132
- @type = mock
133
- @field = Mongoid::Field.new(:score, :default => 10, :type => @type)
134
- end
135
-
136
- it "returns the value" do
137
- @type.expects(:get).with(30).returns(30)
138
- @field.get(30).should == 30
139
- end
140
-
141
- end
142
-
143
- end
@@ -1,181 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Fields do
4
-
5
- describe ".defaults" do
6
-
7
- it "returns a hash of all the default values" do
8
- Game.defaults.should == { "high_score" => 500, "score" => 0 }
9
- end
10
-
11
- end
12
-
13
- describe "#defaults" do
14
-
15
- context "with defaults specified as a non-primitive" do
16
-
17
- before do
18
- Person.field(:hash_testing, :type => Hash, :default => {})
19
- Person.field(:array_testing, :type => Array, :default => [])
20
- @first_person = Person.new
21
- @second_person = Person.new
22
- end
23
-
24
- after do
25
- Person.fields.delete("hash_testing")
26
- Person.fields.delete("array_testing")
27
- end
28
-
29
- it "should not return the same object when calling defaults with a default hash" do
30
- @first_person.hash_testing.object_id.should_not == @second_person.hash_testing.object_id
31
- end
32
-
33
- it "should not return the same object when calling defaults with a default array" do
34
- @first_person.array_testing.object_id.should_not == @second_person.array_testing.object_id
35
- end
36
- end
37
-
38
- context "on parent classes" do
39
-
40
- before do
41
- @shape = Shape.new
42
- end
43
-
44
- it "does not return subclass defaults" do
45
- @shape.defaults.should == { "x" => 0, "y" => 0 }
46
- end
47
-
48
- end
49
-
50
- context "on subclasses" do
51
-
52
- before do
53
- @circle = Circle.new
54
- end
55
-
56
- it "has the parent and child defaults" do
57
- @circle.defaults.should == { "x" => 0, "y" => 0, "radius" => 0 }
58
- end
59
-
60
- end
61
-
62
- end
63
-
64
- describe ".field" do
65
-
66
- context "with no options" do
67
-
68
- before do
69
- Person.field(:testing)
70
- end
71
-
72
- it "adds a reader for the fields defined" do
73
- @person = Person.new(:testing => "Test")
74
- @person.testing.should == "Test"
75
- end
76
-
77
- it "adds a writer for the fields defined" do
78
- @person = Person.new(:testing => "Test")
79
- @person.testing = "Testy"
80
- @person.testing.should == "Testy"
81
- end
82
-
83
- it "adds an reader method with a question mark" do
84
- @person = Person.new(:testing => "Test")
85
- @person.testing?.should be_true
86
- Person.new.testing?.should be_false
87
- end
88
-
89
- end
90
-
91
- context "when type is an object" do
92
-
93
- before do
94
- @person = Person.new
95
- @drink = MixedDrink.new(:name => "Jack and Coke")
96
- @person.mixed_drink = @drink
97
- end
98
-
99
- it "allows proper access to the object" do
100
- @person.mixed_drink.should == @drink
101
- @person.attributes[:mixed_drink].except(:_id).except(:_type).should ==
102
- { "name" => "Jack and Coke" }
103
- end
104
-
105
- it "adds an reader method with a question mark" do
106
- @person.mixed_drink?.should be_true
107
- end
108
-
109
- end
110
-
111
- context "when type is a boolean" do
112
-
113
- before do
114
- @person = Person.new(:terms => true)
115
- end
116
-
117
- it "adds an accessor method with a question mark" do
118
- @person.terms?.should be_true
119
- end
120
-
121
- end
122
-
123
- context "when as is specified" do
124
-
125
- before do
126
- Person.field :aliased, :as => :alias, :type => Boolean
127
- @person = Person.new(:alias => true)
128
- end
129
-
130
- it "uses the alias to write the attribute" do
131
- @person.expects(:write_attribute).with("aliased", true)
132
- @person.alias = true
133
- end
134
-
135
- it "uses the alias to read the attribute" do
136
- @person.expects(:read_attribute).with("aliased")
137
- @person.alias
138
- end
139
-
140
- it "uses the alias for the query method" do
141
- @person.expects(:read_attribute).with("aliased")
142
- @person.alias?
143
- end
144
-
145
- end
146
-
147
- end
148
-
149
- describe "#fields" do
150
-
151
- context "on parent classes" do
152
-
153
- before do
154
- @shape = Shape.new
155
- end
156
-
157
- it "does not return subclass fields" do
158
- @shape.fields.keys.should include("x")
159
- @shape.fields.keys.should include("y")
160
- @shape.fields.keys.should_not include("radius")
161
- end
162
-
163
- end
164
-
165
- context "on subclasses" do
166
-
167
- before do
168
- @circle = Circle.new
169
- end
170
-
171
- it "has the parent and child fields" do
172
- @circle.fields.keys.should include("x")
173
- @circle.fields.keys.should include("y")
174
- @circle.fields.keys.should include("radius")
175
- end
176
-
177
- end
178
-
179
- end
180
-
181
- end
@@ -1,404 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Finders do
4
-
5
- before do
6
- @collection = stub(:name => "people")
7
- @database = stub(:collection => @collection)
8
- Mongoid.stubs(:database).returns(@database)
9
- end
10
-
11
- after do
12
- Person.instance_variable_set(:@collection, nil)
13
- @database = nil
14
- @collection = nil
15
- end
16
-
17
- describe ".all" do
18
-
19
- before do
20
- @conditions = { :conditions => { :test => "Test" } }
21
- end
22
-
23
- context "when a selector is provided" do
24
-
25
- it "finds from the collection and instantiate objects for each returned" do
26
- Mongoid::Criteria.expects(:translate).with(Person, @conditions)
27
- Person.all(@conditions)
28
- end
29
-
30
- end
31
-
32
- context "when a selector is not provided" do
33
-
34
- it "finds from the collection and instantiate objects for each returned" do
35
- Mongoid::Criteria.expects(:translate).with(Person, nil)
36
- Person.all
37
- end
38
-
39
- end
40
-
41
- end
42
-
43
- describe ".all_in" do
44
-
45
- it "returns a new criteria with select conditions added" do
46
- criteria = Person.all_in(:aliases => [ "Bond", "007" ])
47
- criteria.selector.should == { :aliases => { "$all" => [ "Bond", "007" ] } }
48
- end
49
-
50
- end
51
-
52
- describe ".any_in" do
53
-
54
- it "returns a new criteria with select conditions added" do
55
- criteria = Person.any_in(:aliases => [ "Bond", "007" ])
56
- criteria.selector.should == { :aliases => { "$in" => [ "Bond", "007" ] } }
57
- end
58
-
59
- end
60
-
61
- describe ".count" do
62
-
63
- before do
64
- @conditions = { :conditions => { :title => "Sir" } }
65
- @criteria = mock
66
- end
67
-
68
- it "delegates to the criteria api" do
69
- Mongoid::Criteria.expects(:translate).with(Person, @conditions).returns(@criteria)
70
- @criteria.expects(:count).returns(10)
71
- Person.count(@conditions).should == 10
72
- end
73
-
74
- context "when no options provided" do
75
-
76
- it "adds in the default parameters" do
77
- Mongoid::Criteria.expects(:translate).with(Person, nil).returns(@criteria)
78
- @criteria.expects(:count).returns(10)
79
- Person.count.should == 10
80
- end
81
-
82
- end
83
-
84
- end
85
-
86
- describe ".excludes" do
87
-
88
- it "returns a new criteria with select conditions added" do
89
- criteria = Person.excludes(:title => "Sir")
90
- criteria.selector.should == { :title => { "$ne" => "Sir" } }
91
- end
92
-
93
- end
94
-
95
- describe ".find" do
96
-
97
- before do
98
- @attributes = {}
99
- @criteria = mock
100
- end
101
-
102
- context "when an id is passed in" do
103
-
104
- before do
105
- @id = Mongo::ObjectID.new.to_s
106
- end
107
-
108
- it "delegates to criteria" do
109
- Mongoid::Criteria.expects(:translate).with(Person, @id.to_s).returns(Person.new)
110
- Person.find(@id.to_s)
111
- end
112
-
113
- context "when no document is found" do
114
-
115
- it "raises an error" do
116
- @error = Mongoid::Errors::DocumentNotFound.new(Person, @id.to_s)
117
- Mongoid::Criteria.expects(:translate).with(Person, @id.to_s).raises(@error)
118
- lambda { Person.find(@id.to_s) }.should raise_error
119
- end
120
-
121
- end
122
-
123
- end
124
-
125
- context "when an array of ids is passed in" do
126
-
127
- before do
128
- @ids = []
129
- 3.times { @ids << Mongo::ObjectID.new.to_s }
130
- end
131
-
132
- it "delegates to the criteria" do
133
-
134
- end
135
-
136
- end
137
-
138
- context "when nil passed in" do
139
-
140
- it "raises an error" do
141
- lambda { Person.find(nil) }.should raise_error
142
- end
143
-
144
- end
145
-
146
- context "when finding first" do
147
-
148
- it "delegates to criteria" do
149
- Mongoid::Criteria.expects(:translate).with(Person, :conditions => { :test => "Test" }).returns(@criteria)
150
- @criteria.expects(:one).returns(@attributes)
151
- Person.find(:first, :conditions => { :test => "Test" })
152
- end
153
-
154
- end
155
-
156
- context "when finding all" do
157
-
158
- before do
159
- @conditions = { :conditions => { :test => "Test" } }
160
- end
161
-
162
- it "delegates to find_all" do
163
- Mongoid::Criteria.expects(:translate).with(Person, @conditions).returns(@criteria)
164
- Person.find(:all, @conditions)
165
- end
166
-
167
- end
168
-
169
- context "when sorting" do
170
-
171
- before do
172
- @conditions = { :conditions => { :test => "Test" }, :sort => { :test => -1 } }
173
- end
174
-
175
- it "adds the sort parameters for the collection call" do
176
- Mongoid::Criteria.expects(:translate).with(Person, @conditions).returns(@criteria)
177
- Person.find(:all, @conditions)
178
- end
179
- end
180
-
181
- end
182
-
183
- describe ".find_or_create_by" do
184
-
185
- before do
186
- @person = Person.new(:age => 30)
187
- @criteria = mock
188
- end
189
-
190
- context "when the document is found" do
191
-
192
- it "returns the document" do
193
- Mongoid::Criteria.expects(:translate).with(
194
- Person, :conditions => { :age => 30 }
195
- ).returns(@criteria)
196
- @criteria.expects(:one).returns(@person)
197
- Person.find_or_create_by(:age => 30).should == @person
198
- end
199
-
200
- end
201
-
202
- context "when the document is not found" do
203
-
204
- it "creates a new document" do
205
- Mongoid::Criteria.expects(:translate).with(
206
- Person, :conditions => { :age => 30 }
207
- ).returns(@criteria)
208
- @criteria.expects(:one).returns(nil)
209
- Person.expects(:create).returns(@person)
210
- person = Person.find_or_create_by(:age => 30)
211
- person.should be_a_kind_of(Person)
212
- person.age.should == 30
213
- end
214
-
215
- end
216
-
217
- end
218
-
219
- describe ".find_or_initialize_by" do
220
-
221
- before do
222
- @person = Person.new(:age => 30)
223
- @criteria = mock
224
- end
225
-
226
- context "when the document is found" do
227
-
228
- it "returns the document" do
229
- Mongoid::Criteria.expects(:translate).with(
230
- Person, :conditions => { :age => 30 }
231
- ).returns(@criteria)
232
- @criteria.expects(:one).returns(@person)
233
- Person.find_or_initialize_by(:age => 30).should == @person
234
- end
235
-
236
- end
237
-
238
- context "when the document is not found" do
239
-
240
- it "returns a new document with the conditions" do
241
- Mongoid::Criteria.expects(:translate).with(
242
- Person, :conditions => { :age => 30 }
243
- ).returns(@criteria)
244
- @criteria.expects(:one).returns(nil)
245
- person = Person.find_or_initialize_by(:age => 30)
246
- person.should be_a_kind_of(Person)
247
- person.should be_a_new_record
248
- person.age.should == 30
249
- end
250
-
251
- end
252
-
253
- end
254
-
255
- describe ".first" do
256
-
257
- before do
258
- @criteria = mock
259
- @conditions = { :conditions => { :test => "Test" } }
260
- end
261
-
262
- context "when a selector is provided" do
263
-
264
- it "finds the first document from the collection and instantiates it" do
265
- Mongoid::Criteria.expects(:translate).with(Person, @conditions).returns(@criteria)
266
- @criteria.expects(:one)
267
- Person.first(@conditions)
268
- end
269
-
270
- end
271
-
272
- context "when a selector is not provided" do
273
-
274
- it "finds the first document from the collection and instantiates it" do
275
- Mongoid::Criteria.expects(:translate).with(Person, nil).returns(@criteria)
276
- @criteria.expects(:one)
277
- Person.first
278
- end
279
-
280
- end
281
-
282
- end
283
-
284
- describe ".last" do
285
-
286
- before do
287
- @criteria = mock
288
- end
289
-
290
- it "finds the last document by the id" do
291
- Mongoid::Criteria.expects(:translate).with(Person, nil).returns(@criteria)
292
- @criteria.expects(:last)
293
- Person.last
294
- end
295
-
296
- end
297
-
298
- describe ".max" do
299
-
300
- before do
301
- @criteria = mock
302
- end
303
-
304
- it "returns the sum of a new criteria" do
305
- Mongoid::Criteria.expects(:new).returns(@criteria)
306
- @criteria.expects(:max).with(:age).returns(50.0)
307
- Person.max(:age).should == 50.0
308
- end
309
-
310
- end
311
-
312
- describe ".min" do
313
-
314
- before do
315
- @criteria = mock
316
- end
317
-
318
- it "returns the sum of a new criteria" do
319
- Mongoid::Criteria.expects(:new).returns(@criteria)
320
- @criteria.expects(:min).with(:age).returns(50.0)
321
- Person.min(:age).should == 50.0
322
- end
323
-
324
- end
325
-
326
- describe ".not_in" do
327
-
328
- it "returns a new criteria with select conditions added" do
329
- criteria = Person.not_in(:aliases => [ "Bond", "007" ])
330
- criteria.selector.should == { :aliases => { "$nin" => [ "Bond", "007" ] } }
331
- end
332
-
333
- end
334
-
335
- describe ".paginate" do
336
-
337
- before do
338
- @criteria = stub(:page => 1, :per_page => "20", :count => 100)
339
- end
340
-
341
- context "when pagination parameters are passed" do
342
-
343
- before do
344
- @params = { :conditions => { :test => "Test" }, :page => 2, :per_page => 20 }
345
- end
346
-
347
- it "delegates to will paginate with the results" do
348
- Mongoid::Criteria.expects(:translate).with(Person, @params).returns(@criteria)
349
- @criteria.expects(:paginate).returns([])
350
- Person.paginate(@params)
351
- end
352
-
353
- end
354
-
355
- context "when pagination parameters are not passed" do
356
-
357
- before do
358
- @params = { :conditions => { :test => "Test" }}
359
- end
360
-
361
- it "delegates to will paginate with default values" do
362
- Mongoid::Criteria.expects(:translate).with(Person, @params).returns(@criteria)
363
- @criteria.expects(:paginate).returns([])
364
- Person.paginate(:conditions => { :test => "Test" })
365
- end
366
-
367
- end
368
-
369
- end
370
-
371
- describe ".only" do
372
-
373
- it "returns a new criteria with select conditions added" do
374
- criteria = Person.only(:title, :age)
375
- criteria.options.should == { :fields => [ :title, :age ] }
376
- end
377
-
378
- end
379
-
380
- describe ".sum" do
381
-
382
- before do
383
- @criteria = mock
384
- end
385
-
386
- it "returns the sum of a new criteria" do
387
- Mongoid::Criteria.expects(:new).returns(@criteria)
388
- @criteria.expects(:sum).with(:age).returns(50.0)
389
- sum = Person.sum(:age)
390
- sum.should == 50.0
391
- end
392
-
393
- end
394
-
395
- describe ".where" do
396
-
397
- it "returns a new criteria with select conditions added" do
398
- criteria = Person.where(:title => "Sir")
399
- criteria.selector.should == { :title => "Sir" }
400
- end
401
-
402
- end
403
-
404
- end