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,186 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::TimeConversions 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
+ Time.set(nil).should be_nil
10
+ end
11
+ end
12
+
13
+ context "when string is empty" do
14
+ it "returns nil" do
15
+ Time.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
+ Time.set(@time.to_s).utc_offset.should == 0
22
+ end
23
+
24
+ it "uses Time.parse - note that this returns the wrong day due sometimes since it ignores the time zone" do
25
+ Time.set(@time.to_s).should == Time.parse(@time.to_s).utc
26
+ end
27
+
28
+ it "returns a local date from the string due to a limitation in Time.parse" do
29
+ Time.set(@time.to_s).should == Time.local(@time.year, @time.month, @time.day, @time.hour, @time.min, @time.sec)
30
+ end
31
+ end
32
+
33
+ context "when given a DateTime" do
34
+ it "returns a time" do
35
+ Time.set(@time.to_datetime).should == Time.utc(@time.year, @time.month, @time.day, @time.hour, @time.min, @time.sec)
36
+ end
37
+ end
38
+
39
+ context "when given a Time" do
40
+ it "converts to a utc time" do
41
+ Time.set(@time).utc_offset.should == 0
42
+ end
43
+
44
+ it "strips miliseconds" do
45
+ Time.set(Time.now).usec.should == 0
46
+ end
47
+
48
+ it "returns utc times unchanged" do
49
+ Time.set(@time.utc).should == @time.utc
50
+ end
51
+
52
+ it "returns the time as utc" do
53
+ Time.set(@time).should == @time.utc
54
+ end
55
+ end
56
+
57
+ context "when given an ActiveSupport::TimeWithZone" do
58
+ before { @time = 1.hour.ago }
59
+
60
+ it "converts it to utc" do
61
+ Time.set(@time.in_time_zone("Alaska")).should == Time.at(@time.to_i).utc
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
+ Time.set(@date).should == Time.utc(@date.year, @date.month, @date.day)
70
+ end
71
+ end
72
+ end
73
+
74
+ describe ".get" do
75
+ context "when the time zone is not defined" do
76
+ before { Mongoid::Config.instance.use_utc = false }
77
+
78
+ context "when the local time is not observing daylight saving" do
79
+ before { @time = Time.utc(2010, 11, 19) }
80
+
81
+ it "returns the local time" do
82
+ Time.get(@time).utc_offset.should == Time.local(2010, 11, 19).utc_offset
83
+ end
84
+ end
85
+
86
+ context "when the local time is observing daylight saving" do
87
+ before { @time = Time.utc(2010, 9, 19) }
88
+
89
+ it "returns the local time" do
90
+ Time.get(@time).should == @time.getlocal
91
+ end
92
+ end
93
+
94
+ context "when we have a time close to midnight" do
95
+ before { @time = Time.local(2010, 11, 19, 0, 30).utc }
96
+
97
+ it "change it back to the equivalent local time" do
98
+ Time.get(@time).should == @time
99
+ end
100
+ end
101
+ end
102
+
103
+ context "when the time zone is defined as UTC" do
104
+ before { Mongoid::Config.instance.use_utc = true }
105
+ after { Mongoid::Config.instance.use_utc = false }
106
+
107
+ it "returns utc" do
108
+ Time.get(@time.dup.utc).utc_offset.should == 0
109
+ end
110
+ end
111
+
112
+ context "when time is nil" do
113
+ it "returns nil" do
114
+ Time.get(nil).should be_nil
115
+ end
116
+ end
117
+ end
118
+
119
+ describe "round trip - set then get" do
120
+ context "when the time zone is not defined" do
121
+ before { Mongoid::Config.instance.use_utc = false }
122
+
123
+ context "when the local time is not observing daylight saving" do
124
+ before { @time = Time.set(Time.local(2010, 11, 19)) }
125
+
126
+ it "returns the local time" do
127
+ Time.get(@time).utc_offset.should == Time.local(2010, 11, 19).utc_offset
128
+ end
129
+ end
130
+
131
+ context "when the local time is observing daylight saving" do
132
+ before { @time = Time.set(Time.local(2010, 9, 19)) }
133
+
134
+ it "returns the local time" do
135
+ Time.get(@time).utc_offset.should == Time.local(2010, 9, 19).utc_offset
136
+ end
137
+ end
138
+
139
+ context "when we have a time close to midnight" do
140
+ before do
141
+ @original_time = Time.local(2010, 11, 19, 0, 30)
142
+ @stored_time = Time.set(@original_time)
143
+ end
144
+
145
+ it "does not change a local time" do
146
+ Time.get(@stored_time).should == @original_time
147
+ end
148
+ end
149
+ end
150
+
151
+ context "when the time zone is defined as UTC" do
152
+ before { Mongoid::Config.instance.use_utc = true }
153
+ after { Mongoid::Config.instance.use_utc = false }
154
+
155
+ context "when the local time is not observing daylight saving" do
156
+ before { @time = Time.set(Time.local(2010, 11, 19)) }
157
+
158
+ it "returns UTC" do
159
+ Time.get(@time).utc_offset.should == 0
160
+ end
161
+ end
162
+
163
+ context "when the local time is observing daylight saving" do
164
+ before do
165
+ @time = Time.set(Time.local(2010, 9, 19))
166
+ end
167
+
168
+ it "returns UTC" do
169
+ Time.get(@time).utc_offset.should == 0
170
+ end
171
+ end
172
+
173
+ context "when we have a time close to midnight" do
174
+ before do
175
+ Time.zone = "Stockholm"
176
+ @time = Time.set(Time.zone.local(2010, 11, 19, 0, 30))
177
+ end
178
+ after { Time.zone = nil }
179
+
180
+ it "changes the day since UTC is behind Stockholm" do
181
+ Time.get(@time).day.should == 18
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,35 @@
1
+ require "spec_helper"
2
+
3
+ describe TrueClass do
4
+
5
+ describe "#is_a?" do
6
+
7
+ context "when provided a Boolean" do
8
+
9
+ it "returns true" do
10
+ true.is_a?(Boolean).should be_true
11
+ end
12
+ end
13
+
14
+ context "when provided a FalseClass" do
15
+
16
+ it "returns false" do
17
+ true.is_a?(FalseClass).should be_false
18
+ end
19
+ end
20
+
21
+ context "when provided a TrueClass" do
22
+
23
+ it "returns true" do
24
+ true.is_a?(TrueClass).should be_true
25
+ end
26
+ end
27
+
28
+ context "when provided an invalid class" do
29
+
30
+ it "returns false" do
31
+ false.is_a?(String).should be_false
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,102 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extras do
4
+
5
+ before do
6
+ @klass = Class.new do
7
+ include Mongoid::Extras
8
+ end
9
+ end
10
+
11
+ describe ".cache" do
12
+
13
+ before do
14
+ @klass.cache
15
+ end
16
+
17
+ it "sets the cached boolean on the class" do
18
+ @klass.cached.should be_true
19
+ end
20
+
21
+ end
22
+
23
+ describe ".cached?" do
24
+
25
+ context "when the class is cached" do
26
+
27
+ before do
28
+ @klass.cache
29
+ end
30
+
31
+ it "returns true" do
32
+ @klass.should be_cached
33
+ end
34
+ end
35
+
36
+ context "when the class is not cached" do
37
+
38
+ it "returns false" do
39
+ @klass.should_not be_cached
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+ describe "#cached?" do
46
+
47
+ before do
48
+ @klass.cache
49
+ @doc = @klass.new
50
+ end
51
+
52
+ it "returns the class cached? value" do
53
+ @doc.should be_cached
54
+ end
55
+ end
56
+
57
+ describe ".enslave" do
58
+
59
+ before do
60
+ @klass.enslave
61
+ end
62
+
63
+ it "sets the enslaved boolean on the class" do
64
+ @klass.enslaved.should be_true
65
+ end
66
+
67
+ end
68
+
69
+ describe ".enslaved?" do
70
+
71
+ context "when the class is enslaved" do
72
+
73
+ before do
74
+ @klass.enslave
75
+ end
76
+
77
+ it "returns true" do
78
+ @klass.should be_enslaved
79
+ end
80
+ end
81
+
82
+ context "when the class is not enslaved" do
83
+
84
+ it "returns false" do
85
+ @klass.should_not be_enslaved
86
+ end
87
+ end
88
+
89
+ end
90
+
91
+ describe "#enslaved?" do
92
+
93
+ before do
94
+ @klass.enslave
95
+ @doc = @klass.new
96
+ end
97
+
98
+ it "returns the class enslaved? value" do
99
+ @doc.should be_enslaved
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,31 @@
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
@@ -0,0 +1,169 @@
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, :type => Integer, :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 "#initialize" do
80
+
81
+ context "when the field name is invalid" do
82
+
83
+ it "raises an error" do
84
+ lambda { Mongoid::Field.new(:collection) }.should raise_error(Mongoid::Errors::InvalidField)
85
+ end
86
+ end
87
+
88
+ context "when the default value does not match the type" do
89
+
90
+ it "raises an error" do
91
+ lambda {
92
+ Mongoid::Field.new(:names, :type => Integer, :default => "Jacob")
93
+ }.should raise_error(Mongoid::Errors::InvalidType)
94
+ end
95
+ end
96
+ end
97
+
98
+ describe "#name" do
99
+
100
+ before do
101
+ @field = Mongoid::Field.new(:score, :type => Integer, :default => 0)
102
+ end
103
+
104
+ it "returns the name" do
105
+ @field.name.should == :score
106
+ end
107
+
108
+ end
109
+
110
+ describe "#type" do
111
+
112
+ before do
113
+ @field = Mongoid::Field.new(:name)
114
+ end
115
+
116
+ it "defaults to String" do
117
+ @field.type.should == String
118
+ end
119
+
120
+ end
121
+
122
+ describe "#set" do
123
+
124
+ before do
125
+ @field = Mongoid::Field.new(:score, :default => 10, :type => Integer)
126
+ end
127
+
128
+ context "nil is provided" do
129
+
130
+ it "returns the default value" do
131
+ @field.set(nil).should == nil
132
+ end
133
+
134
+ end
135
+
136
+ context "value is provided" do
137
+
138
+ it "sets the value" do
139
+ @field.set("30").should == 30
140
+ end
141
+
142
+ end
143
+
144
+ end
145
+
146
+ describe "#get" do
147
+
148
+ before do
149
+ @field = Mongoid::Field.new(:score, :default => 10, :type => Integer)
150
+ end
151
+
152
+ it "returns the value" do
153
+ @field.get(30).should == 30
154
+ end
155
+ end
156
+
157
+ describe "#options" do
158
+ before do
159
+ @field = Mongoid::Field.new(:terrible_and_unsafe_html_goes_here, :sanitize => true, :hello => :goodbye)
160
+ end
161
+
162
+ it "stores the arbitrary options" do
163
+ @field.options[:sanitize].should be_true
164
+ @field.options[:hello].should == :goodbye
165
+ end
166
+
167
+ end
168
+
169
+ end