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,154 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Errors do
4
+
5
+ describe Mongoid::Errors::DocumentNotFound do
6
+
7
+ describe "#message" do
8
+
9
+ context "default" do
10
+
11
+ before do
12
+ @error = Mongoid::Errors::DocumentNotFound.new(Person, "3")
13
+ end
14
+
15
+ it "contains document not found" do
16
+ @error.message.should include("Document not found")
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ describe Mongoid::Errors::InvalidOptions do
23
+
24
+ describe "#message" do
25
+
26
+ context "default" do
27
+
28
+ before do
29
+ @error = Mongoid::Errors::InvalidOptions.new
30
+ end
31
+
32
+ it "returns the class name" do
33
+ @error.message.should == @error.class.name
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ describe Mongoid::Errors::InvalidDatabase do
40
+
41
+ describe "#message" do
42
+
43
+ before do
44
+ @error = Mongoid::Errors::InvalidDatabase.new("Test")
45
+ end
46
+
47
+ it "returns a message with the bad db object class" do
48
+ @error.message.should include("String")
49
+ end
50
+ end
51
+ end
52
+
53
+ describe Mongoid::Errors::InvalidType do
54
+
55
+ describe "#message" do
56
+
57
+ before do
58
+ @error = Mongoid::Errors::InvalidType.new(Array, "Test")
59
+ end
60
+
61
+ it "returns a message with the bad type and supplied value" do
62
+ @error.message.should include("Array, but received a String")
63
+ end
64
+ end
65
+ end
66
+
67
+ describe Mongoid::Errors::UnsupportedVersion do
68
+
69
+ describe "#message" do
70
+
71
+ before do
72
+ @version = Mongo::ServerVersion.new("1.2.4")
73
+ @error = Mongoid::Errors::UnsupportedVersion.new(@version)
74
+ end
75
+
76
+ it "returns a message with the bad version and good version" do
77
+ @error.message.should ==
78
+ "MongoDB 1.2.4 not supported, please upgrade to #{Mongoid::MONGODB_VERSION}"
79
+ end
80
+ end
81
+ end
82
+
83
+ describe Mongoid::Errors::Validations do
84
+
85
+ describe "#message" do
86
+
87
+ context "default" do
88
+
89
+ before do
90
+ @errors = stub(:full_messages => [ "Error 1", "Error 2" ], :empty? => false)
91
+ @document = stub(:errors => @errors)
92
+ @error = Mongoid::Errors::Validations.new(@document)
93
+ end
94
+
95
+ it "contains the errors' full messages" do
96
+ @error.message.should == "Validation Failed: Error 1, Error 2"
97
+ end
98
+
99
+ it "allows access to the invalid document" do
100
+ @error.document.should == @document
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ describe Mongoid::Errors::InvalidCollection do
107
+
108
+ describe "#message" do
109
+
110
+ context "default" do
111
+
112
+ before do
113
+ @klass = Address
114
+ @error = Mongoid::Errors::InvalidCollection.new(@klass)
115
+ end
116
+
117
+ it "contains class is not allowed" do
118
+ @error.message.should include("Address is not allowed")
119
+ end
120
+ end
121
+ end
122
+ end
123
+
124
+ describe Mongoid::Errors::InvalidField do
125
+
126
+ describe "#message" do
127
+
128
+ context "default" do
129
+
130
+ before do
131
+ @error = Mongoid::Errors::InvalidField.new("collection")
132
+ end
133
+
134
+ it "contains class is not allowed" do
135
+ @error.message.should include("field named 'collection' is not allowed")
136
+ end
137
+ end
138
+ end
139
+ end
140
+
141
+ describe Mongoid::Errors::TooManyNestedAttributeRecords do
142
+ describe "#message" do
143
+ context "default" do
144
+ before do
145
+ @error = Mongoid::Errors::TooManyNestedAttributeRecords.new('Favorites', 5)
146
+ end
147
+
148
+ it "contains error message" do
149
+ @error.message.should include("Accept Nested Attributes for Favorites is limited to 5 records")
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,50 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Array::Accessors do
4
+
5
+ describe "#update" do
6
+
7
+ context "when the attributes exist" do
8
+
9
+ before do
10
+ @array = [{ "_id" => 1, "name" => "James T. Kirk" }]
11
+ end
12
+
13
+ it "overwrites with the new attributes" do
14
+ @array.update({ "_id" => 1, "name" => "Spock" })
15
+ @array.first["name"].should == "Spock"
16
+ end
17
+
18
+ end
19
+
20
+ context "when the attributes do not exist" do
21
+
22
+ before do
23
+ @array = [{ "_id" => 1, "name" => "James T. Kirk" }]
24
+ end
25
+
26
+ it "appends the new attributes" do
27
+ @array.update({ "_id" => 2, "name" => "Scotty" })
28
+ @array.size.should == 2
29
+ @array.last["name"].should == "Scotty"
30
+ end
31
+
32
+ end
33
+
34
+ context "when the new attribtues have no id" do
35
+
36
+ before do
37
+ @array = [{ "_id" => 1, :name => "James T. Kirk" }]
38
+ end
39
+
40
+ it "appends the new attributes" do
41
+ @array.update({"name" => "Scotty" })
42
+ @array.size.should == 2
43
+ @array.last["name"].should == "Scotty"
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+
50
+ end
@@ -0,0 +1,24 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Array::Assimilation do
4
+
5
+ describe "#assimilate" do
6
+
7
+ before do
8
+ @address_one = { :street => "Circular Quay" }
9
+ @address_two = Address.new(:street => "King St.")
10
+ @parent = Person.new(:title => "Mr.")
11
+ @options = Mongoid::Associations::Options.new(:name => :addresses)
12
+ @child = [@address_one, @address_two]
13
+ end
14
+
15
+ it "incorporates the hash into the object graph" do
16
+ @child.assimilate(@parent, @options)
17
+ @parent.addresses.size.should == 2
18
+ @parent.addresses.first.street.should == "Circular Quay"
19
+ @parent.addresses.last.street.should == "King St."
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Array::Conversions do
4
+
5
+ describe "#get" do
6
+
7
+ context "when the value is not an array" do
8
+
9
+ it "raises an error" do
10
+ lambda { Array.get("test") }.should raise_error(Mongoid::Errors::InvalidType)
11
+ end
12
+ end
13
+
14
+ context "when the value is nil" do
15
+
16
+ it "returns nil" do
17
+ Array.get(nil).should be_nil
18
+ end
19
+ end
20
+
21
+ context "when the value is an array" do
22
+
23
+ it "returns the array" do
24
+ Array.get(["test"]).should == ["test"]
25
+ end
26
+ end
27
+ end
28
+
29
+ describe "#set" do
30
+
31
+ context "when the value is not an array" do
32
+
33
+ it "raises an error" do
34
+ lambda { Array.set("test") }.should raise_error(Mongoid::Errors::InvalidType)
35
+ end
36
+ end
37
+
38
+ context "when the value is nil" do
39
+
40
+ it "returns nil" do
41
+ Array.get(nil).should be_nil
42
+ end
43
+ end
44
+
45
+ context "when the value is an array" do
46
+
47
+ it "returns the array" do
48
+ Array.set(["test"]).should == ["test"]
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,20 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Array::Parentization do
4
+
5
+ describe "#parentize" do
6
+
7
+ before do
8
+ @parent = stub
9
+ @child = mock
10
+ @array = [@child]
11
+ end
12
+
13
+ it "sets the parent on each element" do
14
+ @child.expects(:parentize).with(@parent, :child)
15
+ @array.parentize(@parent, :child)
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,36 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::BigDecimal::Conversions do
4
+
5
+ let(:number) do
6
+ BigDecimal.new("123456.789")
7
+ end
8
+
9
+ describe "#get" do
10
+
11
+ it "converts the string to a big decimal" do
12
+ BigDecimal.get("123456.789").should == number
13
+ end
14
+
15
+ context "when nil" do
16
+
17
+ it "returns nil" do
18
+ BigDecimal.get(nil).should be_nil
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "#set" do
24
+
25
+ it "converts the big decimal to a string" do
26
+ BigDecimal.set(number).should == "123456.789"
27
+ end
28
+
29
+ context "when nil" do
30
+
31
+ it "returns nil" do
32
+ BigDecimal.set(nil).should be_nil
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,22 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Binary::Conversions do
4
+
5
+ let(:bin) do
6
+ Binary.new
7
+ end
8
+
9
+ describe "#get" do
10
+
11
+ it "returns self" do
12
+ Binary.get(bin).should == bin
13
+ end
14
+ end
15
+
16
+ describe "#set" do
17
+
18
+ it "returns self" do
19
+ Binary.set(bin).should == bin
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,49 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Boolean::Conversions do
4
+
5
+ describe ".set" do
6
+
7
+ context "when 'true'" do
8
+
9
+ it "returns true" do
10
+ Boolean.set("true").should be_true
11
+ end
12
+ end
13
+
14
+ context "when 'false'" do
15
+
16
+ it "returns false" do
17
+ Boolean.set("false").should be_false
18
+ end
19
+ end
20
+
21
+ context "when 0" do
22
+
23
+ it "returns false" do
24
+ Boolean.set("0").should be_false
25
+ end
26
+ end
27
+
28
+ context "when 1" do
29
+
30
+ it "returns true" do
31
+ Boolean.set("1").should be_true
32
+ end
33
+ end
34
+
35
+ context "when nil" do
36
+
37
+ it "returns nil" do
38
+ Boolean.set(nil).should be_nil
39
+ end
40
+ end
41
+ end
42
+
43
+ describe ".get" do
44
+
45
+ it "returns the boolean" do
46
+ Boolean.get(false).should be_false
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,145 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Date::Conversions do
4
+ before { @time = Time.local(2010, 11, 19) }
5
+
6
+ describe ".set" do
7
+ context "when given nil" do
8
+ it "returns nil" do
9
+ Date.set(nil).should be_nil
10
+ end
11
+ end
12
+
13
+ context "when string is empty" do
14
+ it "returns nil" do
15
+ Date.set("").should be_nil
16
+ end
17
+ end
18
+
19
+ context "when given a string" do
20
+ it "converts to a utc time" do
21
+ Date.set(@time.to_s).utc_offset.should == 0
22
+ end
23
+
24
+ it "returns the right day" do
25
+ Date.set(@time.to_s).day.should == @time.day
26
+ end
27
+
28
+ it "returns a utc date from the string" do
29
+ Date.set(@time.to_s).should == Time.utc(@time.year, @time.month, @time.day)
30
+ end
31
+ end
32
+
33
+ context "when given a DateTime" do
34
+ it "returns a time" do
35
+ Date.set(@time.to_datetime).should == Time.utc(@time.year, @time.month, @time.day)
36
+ end
37
+ end
38
+
39
+ context "when given a Time" do
40
+ it "converts to a utc time" do
41
+ Date.set(@time).utc_offset.should == 0
42
+ end
43
+
44
+ it "strips miliseconds" do
45
+ Date.set(Time.now).usec.should == 0
46
+ end
47
+
48
+ it "returns utc times the same day, but at midnight" do
49
+ Date.set(@time.utc).should == Time.utc(@time.utc.year, @time.utc.month, @time.utc.day)
50
+ end
51
+
52
+ it "returns the date for the time" do
53
+ Date.set(@time).should == Time.utc(@time.year, @time.month, @time.day)
54
+ end
55
+ end
56
+
57
+ context "when given an ActiveSupport::TimeWithZone" do
58
+ before { @time = @time.in_time_zone("Canberra") }
59
+
60
+ it "converts it to utc" do
61
+ Date.set(@time).should == Time.utc(@time.year, @time.month, @time.day)
62
+ end
63
+ end
64
+
65
+ context "when given a Date" do
66
+ before { @date = Date.today }
67
+
68
+ it "converts to a utc time" do
69
+ Date.set(@date).should == Time.utc(@date.year, @date.month, @date.day)
70
+ end
71
+
72
+ end
73
+ end
74
+
75
+ describe ".get" do
76
+ before { @time = Time.now.utc }
77
+
78
+ it "converts the time back to a date" do
79
+ Date.get(@time).should be_a_kind_of(Date)
80
+ end
81
+
82
+ context "when the time zone is not defined" do
83
+ before do
84
+ Mongoid::Config.instance.use_utc = false
85
+ end
86
+
87
+ context "when the local time is not observing daylight saving" do
88
+ before { @time = Time.utc(2010, 11, 19) }
89
+
90
+ it "returns the same day" do
91
+ Date.get(@time).day.should == 19
92
+ end
93
+ end
94
+
95
+ context "when the local time is observing daylight saving" do
96
+ before { @time = Time.utc(2010, 9, 19) }
97
+
98
+ it "returns the same day" do
99
+ Date.get(@time).day.should == 19
100
+ end
101
+ end
102
+ end
103
+
104
+ context "when the time zone is defined as UTC" do
105
+ before { Mongoid::Config.instance.use_utc = true }
106
+ after { Mongoid::Config.instance.use_utc = false }
107
+
108
+ it "returns the same day" do
109
+ Date.get(@time.dup.utc).day.should == @time.day
110
+ end
111
+ end
112
+
113
+ context "when time is nil" do
114
+ it "returns nil" do
115
+ Date.get(nil).should be_nil
116
+ end
117
+ end
118
+ end
119
+
120
+ describe "round trip - set then get" do
121
+ context "when the time zone is not defined" do
122
+ before do
123
+ Mongoid::Config.instance.use_utc = false
124
+ Time.zone = "Stockholm"
125
+ end
126
+ after { Time.zone = nil }
127
+
128
+ context "when the local time is not observing daylight saving" do
129
+ before { @time = Date.set(Time.zone.local(2010, 11, 19, 0, 30)) }
130
+
131
+ it "does not change the day" do
132
+ Date.get(@time).day.should == 19
133
+ end
134
+ end
135
+
136
+ context "when the local time is observing daylight saving" do
137
+ before { @time = Date.set(Time.zone.local(2010, 9, 19, 0, 30)) }
138
+
139
+ it "does not change the day" do
140
+ Date.get(@time).day.should == 19
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end