mongoid-locomotive 2.0.0.beta9

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 (274) hide show
  1. data/MIT_LICENSE +20 -0
  2. data/README.rdoc +47 -0
  3. data/lib/mongoid.rb +141 -0
  4. data/lib/mongoid/associations.rb +306 -0
  5. data/lib/mongoid/associations/embedded_in.rb +74 -0
  6. data/lib/mongoid/associations/embeds_many.rb +280 -0
  7. data/lib/mongoid/associations/embeds_one.rb +97 -0
  8. data/lib/mongoid/associations/foreign_key.rb +35 -0
  9. data/lib/mongoid/associations/meta_data.rb +38 -0
  10. data/lib/mongoid/associations/options.rb +62 -0
  11. data/lib/mongoid/associations/proxy.rb +33 -0
  12. data/lib/mongoid/associations/referenced_in.rb +59 -0
  13. data/lib/mongoid/associations/references_many.rb +245 -0
  14. data/lib/mongoid/associations/references_many_as_array.rb +78 -0
  15. data/lib/mongoid/associations/references_one.rb +99 -0
  16. data/lib/mongoid/atomicity.rb +55 -0
  17. data/lib/mongoid/attributes.rb +242 -0
  18. data/lib/mongoid/callbacks.rb +21 -0
  19. data/lib/mongoid/collection.rb +120 -0
  20. data/lib/mongoid/collections.rb +71 -0
  21. data/lib/mongoid/collections/cyclic_iterator.rb +34 -0
  22. data/lib/mongoid/collections/master.rb +29 -0
  23. data/lib/mongoid/collections/operations.rb +41 -0
  24. data/lib/mongoid/collections/slaves.rb +45 -0
  25. data/lib/mongoid/components.rb +34 -0
  26. data/lib/mongoid/config.rb +263 -0
  27. data/lib/mongoid/contexts.rb +24 -0
  28. data/lib/mongoid/contexts/enumerable.rb +156 -0
  29. data/lib/mongoid/contexts/ids.rb +25 -0
  30. data/lib/mongoid/contexts/mongo.rb +285 -0
  31. data/lib/mongoid/contexts/paging.rb +50 -0
  32. data/lib/mongoid/criteria.rb +248 -0
  33. data/lib/mongoid/criterion/complex.rb +21 -0
  34. data/lib/mongoid/criterion/exclusion.rb +65 -0
  35. data/lib/mongoid/criterion/inclusion.rb +110 -0
  36. data/lib/mongoid/criterion/optional.rb +189 -0
  37. data/lib/mongoid/cursor.rb +81 -0
  38. data/lib/mongoid/deprecation.rb +21 -0
  39. data/lib/mongoid/dirty.rb +252 -0
  40. data/lib/mongoid/document.rb +210 -0
  41. data/lib/mongoid/errors.rb +131 -0
  42. data/lib/mongoid/extensions.rb +115 -0
  43. data/lib/mongoid/extensions/array/accessors.rb +17 -0
  44. data/lib/mongoid/extensions/array/assimilation.rb +26 -0
  45. data/lib/mongoid/extensions/array/conversions.rb +23 -0
  46. data/lib/mongoid/extensions/array/parentization.rb +13 -0
  47. data/lib/mongoid/extensions/big_decimal/conversions.rb +19 -0
  48. data/lib/mongoid/extensions/binary/conversions.rb +17 -0
  49. data/lib/mongoid/extensions/boolean/conversions.rb +27 -0
  50. data/lib/mongoid/extensions/date/conversions.rb +24 -0
  51. data/lib/mongoid/extensions/datetime/conversions.rb +12 -0
  52. data/lib/mongoid/extensions/false_class/equality.rb +13 -0
  53. data/lib/mongoid/extensions/float/conversions.rb +20 -0
  54. data/lib/mongoid/extensions/hash/accessors.rb +42 -0
  55. data/lib/mongoid/extensions/hash/assimilation.rb +40 -0
  56. data/lib/mongoid/extensions/hash/conversions.rb +42 -0
  57. data/lib/mongoid/extensions/hash/criteria_helpers.rb +20 -0
  58. data/lib/mongoid/extensions/hash/scoping.rb +12 -0
  59. data/lib/mongoid/extensions/integer/conversions.rb +20 -0
  60. data/lib/mongoid/extensions/nil/assimilation.rb +17 -0
  61. data/lib/mongoid/extensions/object/conversions.rb +21 -0
  62. data/lib/mongoid/extensions/objectid/conversions.rb +15 -0
  63. data/lib/mongoid/extensions/proc/scoping.rb +12 -0
  64. data/lib/mongoid/extensions/set/conversions.rb +20 -0
  65. data/lib/mongoid/extensions/string/conversions.rb +15 -0
  66. data/lib/mongoid/extensions/string/inflections.rb +97 -0
  67. data/lib/mongoid/extensions/symbol/inflections.rb +40 -0
  68. data/lib/mongoid/extensions/time_conversions.rb +35 -0
  69. data/lib/mongoid/extensions/true_class/equality.rb +13 -0
  70. data/lib/mongoid/extras.rb +61 -0
  71. data/lib/mongoid/factory.rb +20 -0
  72. data/lib/mongoid/field.rb +83 -0
  73. data/lib/mongoid/fields.rb +62 -0
  74. data/lib/mongoid/finders.rb +145 -0
  75. data/lib/mongoid/hierarchy.rb +74 -0
  76. data/lib/mongoid/identity.rb +47 -0
  77. data/lib/mongoid/indexes.rb +27 -0
  78. data/lib/mongoid/javascript.rb +21 -0
  79. data/lib/mongoid/javascript/functions.yml +37 -0
  80. data/lib/mongoid/logger.rb +19 -0
  81. data/lib/mongoid/matchers.rb +35 -0
  82. data/lib/mongoid/matchers/all.rb +11 -0
  83. data/lib/mongoid/matchers/default.rb +26 -0
  84. data/lib/mongoid/matchers/exists.rb +13 -0
  85. data/lib/mongoid/matchers/gt.rb +11 -0
  86. data/lib/mongoid/matchers/gte.rb +11 -0
  87. data/lib/mongoid/matchers/in.rb +11 -0
  88. data/lib/mongoid/matchers/lt.rb +11 -0
  89. data/lib/mongoid/matchers/lte.rb +11 -0
  90. data/lib/mongoid/matchers/ne.rb +11 -0
  91. data/lib/mongoid/matchers/nin.rb +11 -0
  92. data/lib/mongoid/matchers/size.rb +11 -0
  93. data/lib/mongoid/memoization.rb +33 -0
  94. data/lib/mongoid/named_scope.rb +37 -0
  95. data/lib/mongoid/paranoia.rb +106 -0
  96. data/lib/mongoid/paths.rb +61 -0
  97. data/lib/mongoid/persistence.rb +216 -0
  98. data/lib/mongoid/persistence/command.rb +39 -0
  99. data/lib/mongoid/persistence/insert.rb +48 -0
  100. data/lib/mongoid/persistence/insert_embedded.rb +44 -0
  101. data/lib/mongoid/persistence/remove.rb +39 -0
  102. data/lib/mongoid/persistence/remove_all.rb +38 -0
  103. data/lib/mongoid/persistence/remove_embedded.rb +50 -0
  104. data/lib/mongoid/persistence/update.rb +71 -0
  105. data/lib/mongoid/railtie.rb +67 -0
  106. data/lib/mongoid/railties/database.rake +60 -0
  107. data/lib/mongoid/scope.rb +75 -0
  108. data/lib/mongoid/state.rb +32 -0
  109. data/lib/mongoid/timestamps.rb +27 -0
  110. data/lib/mongoid/validations.rb +51 -0
  111. data/lib/mongoid/validations/associated.rb +32 -0
  112. data/lib/mongoid/validations/locale/en.yml +5 -0
  113. data/lib/mongoid/validations/uniqueness.rb +56 -0
  114. data/lib/mongoid/version.rb +4 -0
  115. data/lib/mongoid/versioning.rb +26 -0
  116. data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
  117. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +24 -0
  118. data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
  119. data/lib/rails/generators/mongoid/model/templates/model.rb +15 -0
  120. data/lib/rails/generators/mongoid_generator.rb +61 -0
  121. data/spec/integration/mongoid/association_attributes_spec.rb +71 -0
  122. data/spec/integration/mongoid/associations_spec.rb +768 -0
  123. data/spec/integration/mongoid/attributes_spec.rb +59 -0
  124. data/spec/integration/mongoid/callback_spec.rb +33 -0
  125. data/spec/integration/mongoid/contexts/enumerable_spec.rb +33 -0
  126. data/spec/integration/mongoid/criteria_spec.rb +281 -0
  127. data/spec/integration/mongoid/dirty_spec.rb +85 -0
  128. data/spec/integration/mongoid/document_spec.rb +741 -0
  129. data/spec/integration/mongoid/extensions_spec.rb +22 -0
  130. data/spec/integration/mongoid/finders_spec.rb +119 -0
  131. data/spec/integration/mongoid/inheritance_spec.rb +171 -0
  132. data/spec/integration/mongoid/named_scope_spec.rb +58 -0
  133. data/spec/integration/mongoid/paranoia_spec.rb +44 -0
  134. data/spec/integration/mongoid/persistence/update_spec.rb +46 -0
  135. data/spec/integration/mongoid/persistence_spec.rb +311 -0
  136. data/spec/integration/mongoid/validations/uniqueness_spec.rb +206 -0
  137. data/spec/models/account.rb +5 -0
  138. data/spec/models/address.rb +40 -0
  139. data/spec/models/agent.rb +7 -0
  140. data/spec/models/animal.rb +15 -0
  141. data/spec/models/answer.rb +4 -0
  142. data/spec/models/callbacks.rb +47 -0
  143. data/spec/models/category.rb +13 -0
  144. data/spec/models/comment.rb +10 -0
  145. data/spec/models/country_code.rb +6 -0
  146. data/spec/models/employer.rb +5 -0
  147. data/spec/models/favorite.rb +8 -0
  148. data/spec/models/game.rb +9 -0
  149. data/spec/models/inheritance.rb +72 -0
  150. data/spec/models/location.rb +5 -0
  151. data/spec/models/login.rb +6 -0
  152. data/spec/models/mixed_drink.rb +4 -0
  153. data/spec/models/name.rb +13 -0
  154. data/spec/models/namespacing.rb +11 -0
  155. data/spec/models/paranoid_post.rb +18 -0
  156. data/spec/models/parents.rb +32 -0
  157. data/spec/models/patient.rb +15 -0
  158. data/spec/models/person.rb +106 -0
  159. data/spec/models/pet.rb +7 -0
  160. data/spec/models/pet_owner.rb +6 -0
  161. data/spec/models/phone.rb +7 -0
  162. data/spec/models/post.rb +25 -0
  163. data/spec/models/preference.rb +7 -0
  164. data/spec/models/question.rb +8 -0
  165. data/spec/models/survey.rb +6 -0
  166. data/spec/models/translation.rb +5 -0
  167. data/spec/models/user.rb +6 -0
  168. data/spec/models/user_accout.rb +5 -0
  169. data/spec/models/vet_visit.rb +5 -0
  170. data/spec/models/video.rb +5 -0
  171. data/spec/spec_helper.rb +33 -0
  172. data/spec/unit/mongoid/associations/embedded_in_spec.rb +193 -0
  173. data/spec/unit/mongoid/associations/embeds_many_spec.rb +626 -0
  174. data/spec/unit/mongoid/associations/embeds_one_spec.rb +287 -0
  175. data/spec/unit/mongoid/associations/foreign_key_spec.rb +90 -0
  176. data/spec/unit/mongoid/associations/meta_data_spec.rb +110 -0
  177. data/spec/unit/mongoid/associations/options_spec.rb +215 -0
  178. data/spec/unit/mongoid/associations/referenced_in_spec.rb +145 -0
  179. data/spec/unit/mongoid/associations/references_many_as_array_spec.rb +424 -0
  180. data/spec/unit/mongoid/associations/references_many_spec.rb +502 -0
  181. data/spec/unit/mongoid/associations/references_one_spec.rb +204 -0
  182. data/spec/unit/mongoid/associations_spec.rb +688 -0
  183. data/spec/unit/mongoid/atomicity_spec.rb +164 -0
  184. data/spec/unit/mongoid/attributes_spec.rb +646 -0
  185. data/spec/unit/mongoid/callbacks_spec.rb +85 -0
  186. data/spec/unit/mongoid/collection_spec.rb +187 -0
  187. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +75 -0
  188. data/spec/unit/mongoid/collections/master_spec.rb +41 -0
  189. data/spec/unit/mongoid/collections/slaves_spec.rb +81 -0
  190. data/spec/unit/mongoid/collections_spec.rb +98 -0
  191. data/spec/unit/mongoid/config_spec.rb +298 -0
  192. data/spec/unit/mongoid/contexts/enumerable_spec.rb +447 -0
  193. data/spec/unit/mongoid/contexts/mongo_spec.rb +703 -0
  194. data/spec/unit/mongoid/contexts_spec.rb +25 -0
  195. data/spec/unit/mongoid/criteria_spec.rb +873 -0
  196. data/spec/unit/mongoid/criterion/complex_spec.rb +17 -0
  197. data/spec/unit/mongoid/criterion/exclusion_spec.rb +121 -0
  198. data/spec/unit/mongoid/criterion/inclusion_spec.rb +274 -0
  199. data/spec/unit/mongoid/criterion/optional_spec.rb +483 -0
  200. data/spec/unit/mongoid/cursor_spec.rb +80 -0
  201. data/spec/unit/mongoid/deprecation_spec.rb +24 -0
  202. data/spec/unit/mongoid/dirty_spec.rb +430 -0
  203. data/spec/unit/mongoid/document_spec.rb +623 -0
  204. data/spec/unit/mongoid/errors_spec.rb +154 -0
  205. data/spec/unit/mongoid/extensions/array/accessors_spec.rb +50 -0
  206. data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +24 -0
  207. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +52 -0
  208. data/spec/unit/mongoid/extensions/array/parentization_spec.rb +20 -0
  209. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +36 -0
  210. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +22 -0
  211. data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +49 -0
  212. data/spec/unit/mongoid/extensions/date/conversions_spec.rb +145 -0
  213. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +14 -0
  214. data/spec/unit/mongoid/extensions/false_class/equality_spec.rb +35 -0
  215. data/spec/unit/mongoid/extensions/float/conversions_spec.rb +61 -0
  216. data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +184 -0
  217. data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +59 -0
  218. data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +35 -0
  219. data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +17 -0
  220. data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +14 -0
  221. data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +61 -0
  222. data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +29 -0
  223. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +44 -0
  224. data/spec/unit/mongoid/extensions/objectid/conversions_spec.rb +22 -0
  225. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +34 -0
  226. data/spec/unit/mongoid/extensions/set/conversions_spec.rb +21 -0
  227. data/spec/unit/mongoid/extensions/string/conversions_spec.rb +28 -0
  228. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +208 -0
  229. data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +107 -0
  230. data/spec/unit/mongoid/extensions/time_conversions_spec.rb +186 -0
  231. data/spec/unit/mongoid/extensions/true_class/equality_spec.rb +35 -0
  232. data/spec/unit/mongoid/extras_spec.rb +102 -0
  233. data/spec/unit/mongoid/factory_spec.rb +31 -0
  234. data/spec/unit/mongoid/field_spec.rb +169 -0
  235. data/spec/unit/mongoid/fields_spec.rb +181 -0
  236. data/spec/unit/mongoid/finders_spec.rb +439 -0
  237. data/spec/unit/mongoid/hierarchy_spec.rb +68 -0
  238. data/spec/unit/mongoid/identity_spec.rb +109 -0
  239. data/spec/unit/mongoid/indexes_spec.rb +99 -0
  240. data/spec/unit/mongoid/javascript_spec.rb +48 -0
  241. data/spec/unit/mongoid/logger_spec.rb +38 -0
  242. data/spec/unit/mongoid/matchers/all_spec.rb +27 -0
  243. data/spec/unit/mongoid/matchers/default_spec.rb +27 -0
  244. data/spec/unit/mongoid/matchers/exists_spec.rb +56 -0
  245. data/spec/unit/mongoid/matchers/gt_spec.rb +39 -0
  246. data/spec/unit/mongoid/matchers/gte_spec.rb +49 -0
  247. data/spec/unit/mongoid/matchers/in_spec.rb +27 -0
  248. data/spec/unit/mongoid/matchers/lt_spec.rb +39 -0
  249. data/spec/unit/mongoid/matchers/lte_spec.rb +49 -0
  250. data/spec/unit/mongoid/matchers/ne_spec.rb +27 -0
  251. data/spec/unit/mongoid/matchers/nin_spec.rb +27 -0
  252. data/spec/unit/mongoid/matchers/size_spec.rb +27 -0
  253. data/spec/unit/mongoid/matchers_spec.rb +329 -0
  254. data/spec/unit/mongoid/memoization_spec.rb +75 -0
  255. data/spec/unit/mongoid/named_scope_spec.rb +123 -0
  256. data/spec/unit/mongoid/paranoia_spec.rb +108 -0
  257. data/spec/unit/mongoid/paths_spec.rb +272 -0
  258. data/spec/unit/mongoid/persistence/insert_embedded_spec.rb +154 -0
  259. data/spec/unit/mongoid/persistence/insert_spec.rb +144 -0
  260. data/spec/unit/mongoid/persistence/remove_all_spec.rb +82 -0
  261. data/spec/unit/mongoid/persistence/remove_embedded_spec.rb +152 -0
  262. data/spec/unit/mongoid/persistence/remove_spec.rb +89 -0
  263. data/spec/unit/mongoid/persistence/update_spec.rb +177 -0
  264. data/spec/unit/mongoid/persistence_spec.rb +452 -0
  265. data/spec/unit/mongoid/scope_spec.rb +240 -0
  266. data/spec/unit/mongoid/serialization_spec.rb +43 -0
  267. data/spec/unit/mongoid/state_spec.rb +94 -0
  268. data/spec/unit/mongoid/timestamps_spec.rb +30 -0
  269. data/spec/unit/mongoid/validations/associated_spec.rb +103 -0
  270. data/spec/unit/mongoid/validations/uniqueness_spec.rb +201 -0
  271. data/spec/unit/mongoid/validations_spec.rb +43 -0
  272. data/spec/unit/mongoid/versioning_spec.rb +41 -0
  273. data/spec/unit/mongoid_spec.rb +46 -0
  274. metadata +433 -0
@@ -0,0 +1,68 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Hierarchy do
4
+
5
+ describe "#_children" do
6
+
7
+ let(:person) do
8
+ Person.new(:title => "King")
9
+ end
10
+
11
+ context "with one level of embedding" do
12
+
13
+ let(:name) do
14
+ Name.new(:first_name => "Titus")
15
+ end
16
+
17
+ let(:address) do
18
+ Address.new(:street => "Queen St")
19
+ end
20
+
21
+ before do
22
+ person.name = name
23
+ person.addresses << address
24
+ end
25
+
26
+ it "includes embeds_one documents" do
27
+ person._children.should include(name)
28
+ end
29
+
30
+ it "includes embeds_many documents" do
31
+ person._children.should include(address)
32
+ end
33
+ end
34
+
35
+ context "with multiple levels of embedding" do
36
+
37
+ let(:name) do
38
+ Name.new(:first_name => "Titus")
39
+ end
40
+
41
+ let(:address) do
42
+ Address.new(:street => "Queen St")
43
+ end
44
+
45
+ let(:location) do
46
+ Location.new(:name => "Work")
47
+ end
48
+
49
+ before do
50
+ person.name = name
51
+ address.locations << location
52
+ person.addresses << address
53
+ end
54
+
55
+ it "includes embeds_one documents" do
56
+ person._children.should include(name)
57
+ end
58
+
59
+ it "includes embeds_many documents" do
60
+ person._children.should include(address)
61
+ end
62
+
63
+ it "includes embedded documents multiple levels deep" do
64
+ person._children.should include(location)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,109 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Identity do
4
+
5
+ describe ".create" do
6
+
7
+ let(:name) { Name.new }
8
+
9
+ context "when class is inherited" do
10
+
11
+ let(:canvas) { Canvas.new }
12
+
13
+ it "sets the document _type to the class name" do
14
+ Mongoid::Identity.new(canvas).create
15
+ canvas._type.should == "Canvas"
16
+ end
17
+
18
+ end
19
+
20
+ context "when class is a subclass" do
21
+
22
+ let(:browser) { Browser.new }
23
+
24
+ it "sets the document _type to the class name" do
25
+ Mongoid::Identity.new(browser).create
26
+ browser._type.should == "Browser"
27
+ end
28
+
29
+ end
30
+
31
+ context "when not using inheritance" do
32
+
33
+ it "does not set the type" do
34
+ name._type.should be_nil
35
+ end
36
+
37
+ end
38
+
39
+ context "when the document has a primary key" do
40
+
41
+ before do
42
+ @address = Address.allocate
43
+ @address.instance_variable_set(:@attributes, { "street" => "Market St"})
44
+ end
45
+
46
+ it "sets the id to the composite key" do
47
+ Mongoid::Identity.new(@address).create
48
+ @address.id.should == "market-st"
49
+ end
50
+
51
+ end
52
+
53
+ context "when the document has no primary key" do
54
+
55
+ context "when the document has no id" do
56
+
57
+ before do
58
+ @person = Person.allocate
59
+ @person.instance_variable_set(:@attributes, {})
60
+ @object_id = stub(:to_s => "1")
61
+ BSON::ObjectID.expects(:new).returns(@object_id)
62
+ end
63
+
64
+ context "when using object ids" do
65
+
66
+ before do
67
+ Mongoid.use_object_ids = true
68
+ end
69
+
70
+ after do
71
+ Mongoid.use_object_ids = false
72
+ end
73
+
74
+ it "sets the id to a mongo object id" do
75
+ Mongoid::Identity.new(@person).create
76
+ @person.id.should == @object_id
77
+ end
78
+ end
79
+
80
+ context "when not using object ids" do
81
+
82
+ it "sets the id to a mongo object id string" do
83
+ Mongoid::Identity.new(@person).create
84
+ @person.id.should == "1"
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+
91
+ context "when the document has an id" do
92
+
93
+ before do
94
+ @person = Person.allocate
95
+ @person.instance_variable_set(:@attributes, { "_id" => "5" })
96
+ end
97
+
98
+ it "returns the existing id" do
99
+ Mongoid::Identity.new(@person)
100
+ @person.id.should == "5"
101
+ end
102
+
103
+ end
104
+
105
+ end
106
+
107
+ end
108
+
109
+ end
@@ -0,0 +1,99 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Indexes do
4
+
5
+ describe ".included" do
6
+
7
+ before do
8
+ @class = Class.new do
9
+ include Mongoid::Indexes
10
+ end
11
+ end
12
+
13
+ it "adds an indexed accessor" do
14
+ @class.should respond_to(:indexed)
15
+ end
16
+
17
+ it "defaults indexed to false" do
18
+ @class.indexed.should be_false
19
+ end
20
+
21
+ end
22
+
23
+ describe ".add_indexes" do
24
+
25
+ before do
26
+ @collection = mock
27
+ end
28
+
29
+ context "when indexes have not been added" do
30
+
31
+ before do
32
+ @class = Class.new do
33
+ include Mongoid::Indexes
34
+ def self.hereditary
35
+ true
36
+ end
37
+ end
38
+ end
39
+
40
+ it "adds the _type index" do
41
+ @class.expects(:_collection).returns(@collection)
42
+ @collection.expects(:create_index).with(:_type, :unique => false, :background => true)
43
+ @class.add_indexes
44
+ @class.indexed.should be_true
45
+ end
46
+
47
+ end
48
+
49
+ context "when indexes have been added" do
50
+
51
+ before do
52
+ @class = Class.new do
53
+ include Mongoid::Indexes
54
+ def self.hereditary
55
+ true
56
+ end
57
+ end
58
+ @class.indexed = true
59
+ end
60
+
61
+ it "ignores the request" do
62
+ @class.add_indexes
63
+ end
64
+
65
+ end
66
+
67
+ end
68
+
69
+ describe ".index" do
70
+
71
+ before do
72
+ @collection = mock
73
+ @class = Class.new do
74
+ include Mongoid::Indexes
75
+ end
76
+ @class.expects(:collection).returns(@collection)
77
+ end
78
+
79
+ context "when unique" do
80
+
81
+ it "creates a unique index on the collection" do
82
+ @collection.expects(:create_index).with(:name, :unique => true)
83
+ @class.index(:name, :unique => true)
84
+ end
85
+
86
+ end
87
+
88
+ context "when not unique" do
89
+
90
+ it "creates an index on the collection" do
91
+ @collection.expects(:create_index).with(:name, :unique => false)
92
+ @class.index(:name)
93
+ end
94
+
95
+ end
96
+
97
+ end
98
+
99
+ end
@@ -0,0 +1,48 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Javascript do
4
+
5
+ let(:js) do
6
+ Mongoid::Javascript
7
+ end
8
+
9
+ describe ".aggregate" do
10
+
11
+ it "returns the aggregate function" do
12
+ js.aggregate.should == "function(obj, prev) { prev.count++; }"
13
+ end
14
+ end
15
+
16
+ describe ".group" do
17
+
18
+ it "returns the group function" do
19
+ js.group.should == "function(obj, prev) { prev.group.push(obj); }"
20
+ end
21
+ end
22
+
23
+ describe ".max" do
24
+
25
+ it "returns the max function" do
26
+ js.max.should == "function(obj, prev) { if (prev.max == 'start') { " +
27
+ "prev.max = obj.[field]; } if (prev.max < obj.[field]) { prev.max = obj.[field];" +
28
+ " } }"
29
+ end
30
+ end
31
+
32
+ describe ".min" do
33
+
34
+ it "returns the min function" do
35
+ js.min.should == "function(obj, prev) { if (prev.min == 'start') { " +
36
+ "prev.min = obj.[field]; } if (prev.min > obj.[field]) { prev.min = obj.[field];" +
37
+ " } }"
38
+ end
39
+ end
40
+
41
+ describe ".sum" do
42
+
43
+ it "returns the sum function" do
44
+ js.sum.should == "function(obj, prev) { if (prev.sum == 'start') { prev.sum = 0; " +
45
+ "} prev.sum += obj.[field]; }"
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,38 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Logger do
4
+ describe ".logger" do
5
+ it "returns Mongoid's configured logger" do
6
+ Mongoid.expects(:logger)
7
+ subject.logger
8
+ end
9
+ end
10
+
11
+ context "log_levels" do
12
+ log_levels = %w(info debug warn error fatal)
13
+
14
+ context "with a logger set" do
15
+ let(:logger) { stub.quacks_like(Logger.allocate) }
16
+ log_levels.each do |log_level|
17
+ before do
18
+ subject.stubs(:logger => logger)
19
+ end
20
+ it "#{log_level} delegates to the configured logger" do
21
+ logger.expects(log_level).with("message")
22
+ subject.send(log_level.to_sym, "message")
23
+ end
24
+ end
25
+ end
26
+
27
+ context "with a nil logger" do
28
+ log_levels.each do |log_level|
29
+ before do
30
+ subject.stubs(:logger => nil)
31
+ end
32
+ it "#{log_level} does nothing" do
33
+ expect { subject.send(log_level.to_sym, "message") }.to_not raise_error
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchers::All do
4
+
5
+ let(:matcher) { Mongoid::Matchers::All.new(["first", "second"]) }
6
+
7
+ describe "#matches?" do
8
+
9
+ context "when the values are equal" do
10
+
11
+ it "returns true" do
12
+ matcher.matches?("$all" => ["first", "second"]).should be_true
13
+ end
14
+
15
+ end
16
+
17
+ context "when the values are not equal" do
18
+
19
+ it "returns false" do
20
+ matcher.matches?("$all" => ["first"]).should be_false
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchers::Default do
4
+
5
+ let(:matcher) { Mongoid::Matchers::Default.new("Testing") }
6
+
7
+ describe "#matches?" do
8
+
9
+ context "when the values are equal" do
10
+
11
+ it "returns true" do
12
+ matcher.matches?("Testing").should be_true
13
+ end
14
+
15
+ end
16
+
17
+ context "when the values are not equal" do
18
+
19
+ it "returns false" do
20
+ matcher.matches?("Other").should be_false
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
27
+ end
@@ -0,0 +1,56 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchers::Exists do
4
+
5
+ describe "#matches?" do
6
+
7
+ context "when checking for existence" do
8
+
9
+ context "when the value exists" do
10
+
11
+ let(:matcher) { Mongoid::Matchers::Exists.new("Test") }
12
+
13
+ it "returns true" do
14
+ matcher.matches?("$exists" => true).should be_true
15
+ end
16
+
17
+ end
18
+
19
+ context "when the value does not exist" do
20
+
21
+ let(:matcher) { Mongoid::Matchers::Exists.new(nil) }
22
+
23
+ it "returns false" do
24
+ matcher.matches?("$exists" => true).should be_false
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+ context "when checking for nonexistence" do
32
+
33
+ context "when the value exists" do
34
+
35
+ let(:matcher) { Mongoid::Matchers::Exists.new("Test") }
36
+
37
+ it "returns false" do
38
+ matcher.matches?("$exists" => false).should be_false
39
+ end
40
+
41
+ end
42
+
43
+ context "when the value does not exist" do
44
+
45
+ let(:matcher) { Mongoid::Matchers::Exists.new(nil) }
46
+
47
+ it "returns true" do
48
+ matcher.matches?("$exists" => false).should be_true
49
+ end
50
+
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ end