mongoid 7.5.4 → 8.1.9

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 (446) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/README.md +6 -6
  4. data/Rakefile +44 -46
  5. data/lib/config/locales/en.yml +92 -43
  6. data/lib/mongoid/association/accessors.rb +44 -11
  7. data/lib/mongoid/association/bindable.rb +50 -2
  8. data/lib/mongoid/association/builders.rb +5 -3
  9. data/lib/mongoid/association/constrainable.rb +0 -1
  10. data/lib/mongoid/association/eager_loadable.rb +32 -7
  11. data/lib/mongoid/association/embedded/batchable.rb +34 -11
  12. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  13. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  14. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  15. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
  16. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  17. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  18. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
  19. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +85 -46
  20. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  21. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
  22. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
  23. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  24. data/lib/mongoid/association/macros.rb +8 -1
  25. data/lib/mongoid/association/many.rb +11 -7
  26. data/lib/mongoid/association/nested/many.rb +5 -4
  27. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  28. data/lib/mongoid/association/nested/one.rb +45 -7
  29. data/lib/mongoid/association/one.rb +2 -2
  30. data/lib/mongoid/association/options.rb +9 -9
  31. data/lib/mongoid/association/proxy.rb +15 -4
  32. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  33. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  34. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  35. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  36. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  37. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  38. data/lib/mongoid/association/referenced/eager.rb +2 -2
  39. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
  40. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  41. data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
  42. data/lib/mongoid/association/referenced/has_many/proxy.rb +40 -21
  43. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  44. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  45. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  46. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  47. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  48. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  49. data/lib/mongoid/association/reflections.rb +4 -4
  50. data/lib/mongoid/association/relatable.rb +44 -10
  51. data/lib/mongoid/association.rb +5 -5
  52. data/lib/mongoid/atomic/modifiers.rb +2 -2
  53. data/lib/mongoid/atomic.rb +16 -7
  54. data/lib/mongoid/attributes/dynamic.rb +4 -4
  55. data/lib/mongoid/attributes/nested.rb +6 -6
  56. data/lib/mongoid/attributes/processing.rb +37 -6
  57. data/lib/mongoid/attributes/projector.rb +2 -2
  58. data/lib/mongoid/attributes/readonly.rb +11 -6
  59. data/lib/mongoid/attributes.rb +51 -42
  60. data/lib/mongoid/changeable.rb +147 -14
  61. data/lib/mongoid/clients/options.rb +5 -1
  62. data/lib/mongoid/clients/sessions.rb +2 -14
  63. data/lib/mongoid/clients/storage_options.rb +2 -5
  64. data/lib/mongoid/clients/validators/storage.rb +3 -15
  65. data/lib/mongoid/collection_configurable.rb +58 -0
  66. data/lib/mongoid/composable.rb +2 -0
  67. data/lib/mongoid/config/defaults.rb +60 -0
  68. data/lib/mongoid/config/options.rb +3 -0
  69. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  70. data/lib/mongoid/config/validators/client.rb +6 -6
  71. data/lib/mongoid/config/validators.rb +1 -0
  72. data/lib/mongoid/config.rb +153 -18
  73. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  74. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  75. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  76. data/lib/mongoid/contextual/atomic.rb +1 -1
  77. data/lib/mongoid/contextual/geo_near.rb +7 -7
  78. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  79. data/lib/mongoid/contextual/memory.rb +285 -58
  80. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  81. data/lib/mongoid/contextual/mongo.rb +540 -346
  82. data/lib/mongoid/contextual/none.rb +193 -20
  83. data/lib/mongoid/contextual/queryable.rb +1 -1
  84. data/lib/mongoid/contextual.rb +14 -2
  85. data/lib/mongoid/copyable.rb +32 -8
  86. data/lib/mongoid/criteria/findable.rb +8 -5
  87. data/lib/mongoid/criteria/includable.rb +27 -22
  88. data/lib/mongoid/criteria/marshalable.rb +10 -2
  89. data/lib/mongoid/criteria/permission.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  91. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
  92. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  93. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  94. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  95. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  96. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
  97. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -9
  98. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  99. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  100. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  101. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  102. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
  103. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
  104. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  105. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  106. data/lib/mongoid/criteria/queryable/key.rb +4 -4
  107. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  108. data/lib/mongoid/criteria/queryable/optional.rb +11 -17
  109. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  110. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  111. data/lib/mongoid/criteria/queryable/selectable.rb +48 -39
  112. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  113. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  114. data/lib/mongoid/criteria/queryable.rb +12 -7
  115. data/lib/mongoid/criteria/scopable.rb +2 -2
  116. data/lib/mongoid/criteria/translator.rb +45 -0
  117. data/lib/mongoid/criteria.rb +20 -40
  118. data/lib/mongoid/deprecable.rb +37 -0
  119. data/lib/mongoid/deprecation.rb +25 -0
  120. data/lib/mongoid/document.rb +135 -36
  121. data/lib/mongoid/equality.rb +9 -8
  122. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  123. data/lib/mongoid/errors/document_not_found.rb +10 -6
  124. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  125. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  126. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  127. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  128. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  129. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  130. data/lib/mongoid/errors/invalid_field.rb +6 -2
  131. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  132. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  133. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  134. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  135. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  136. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  137. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  138. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  139. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  140. data/lib/mongoid/errors/no_client_database.rb +1 -1
  141. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  142. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  143. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  144. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  145. data/lib/mongoid/errors.rb +6 -3
  146. data/lib/mongoid/extensions/array.rb +9 -7
  147. data/lib/mongoid/extensions/big_decimal.rb +33 -10
  148. data/lib/mongoid/extensions/binary.rb +42 -0
  149. data/lib/mongoid/extensions/boolean.rb +8 -2
  150. data/lib/mongoid/extensions/date.rb +26 -20
  151. data/lib/mongoid/extensions/date_time.rb +1 -1
  152. data/lib/mongoid/extensions/false_class.rb +1 -1
  153. data/lib/mongoid/extensions/float.rb +7 -4
  154. data/lib/mongoid/extensions/hash.rb +38 -9
  155. data/lib/mongoid/extensions/integer.rb +7 -4
  156. data/lib/mongoid/extensions/module.rb +1 -1
  157. data/lib/mongoid/extensions/object.rb +10 -8
  158. data/lib/mongoid/extensions/range.rb +41 -10
  159. data/lib/mongoid/extensions/regexp.rb +11 -4
  160. data/lib/mongoid/extensions/set.rb +11 -4
  161. data/lib/mongoid/extensions/string.rb +11 -22
  162. data/lib/mongoid/extensions/symbol.rb +4 -15
  163. data/lib/mongoid/extensions/time.rb +29 -16
  164. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  165. data/lib/mongoid/extensions/true_class.rb +1 -1
  166. data/lib/mongoid/extensions.rb +1 -0
  167. data/lib/mongoid/factory.rb +55 -7
  168. data/lib/mongoid/fields/foreign_key.rb +11 -4
  169. data/lib/mongoid/fields/localized.rb +19 -4
  170. data/lib/mongoid/fields/standard.rb +17 -7
  171. data/lib/mongoid/fields/validators/macro.rb +3 -9
  172. data/lib/mongoid/fields.rb +142 -28
  173. data/lib/mongoid/findable.rb +54 -24
  174. data/lib/mongoid/indexable/specification.rb +2 -2
  175. data/lib/mongoid/indexable/validators/options.rb +6 -2
  176. data/lib/mongoid/interceptable.rb +187 -16
  177. data/lib/mongoid/matchable.rb +1 -1
  178. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  179. data/lib/mongoid/matcher/type.rb +1 -1
  180. data/lib/mongoid/matcher.rb +48 -14
  181. data/lib/mongoid/persistable/creatable.rb +19 -9
  182. data/lib/mongoid/persistable/deletable.rb +2 -2
  183. data/lib/mongoid/persistable/destroyable.rb +1 -1
  184. data/lib/mongoid/persistable/savable.rb +14 -2
  185. data/lib/mongoid/persistable/unsettable.rb +2 -2
  186. data/lib/mongoid/persistable/updatable.rb +69 -12
  187. data/lib/mongoid/persistable/upsertable.rb +21 -2
  188. data/lib/mongoid/persistable.rb +6 -3
  189. data/lib/mongoid/persistence_context.rb +6 -4
  190. data/lib/mongoid/query_cache.rb +13 -261
  191. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  192. data/lib/mongoid/railties/database.rake +7 -2
  193. data/lib/mongoid/reloadable.rb +10 -8
  194. data/lib/mongoid/scopable.rb +15 -13
  195. data/lib/mongoid/selectable.rb +1 -2
  196. data/lib/mongoid/serializable.rb +17 -13
  197. data/lib/mongoid/stateful.rb +57 -10
  198. data/lib/mongoid/tasks/database.rake +12 -0
  199. data/lib/mongoid/tasks/database.rb +20 -2
  200. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  201. data/lib/mongoid/threaded.rb +42 -12
  202. data/lib/mongoid/timestamps/created.rb +9 -2
  203. data/lib/mongoid/timestamps/updated.rb +2 -2
  204. data/lib/mongoid/touchable.rb +3 -4
  205. data/lib/mongoid/traversable.rb +41 -5
  206. data/lib/mongoid/utils.rb +22 -0
  207. data/lib/mongoid/validatable/associated.rb +98 -17
  208. data/lib/mongoid/validatable/localizable.rb +1 -1
  209. data/lib/mongoid/validatable/macros.rb +5 -7
  210. data/lib/mongoid/validatable/presence.rb +2 -2
  211. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  212. data/lib/mongoid/validatable.rb +17 -6
  213. data/lib/mongoid/version.rb +1 -1
  214. data/lib/mongoid/warnings.rb +19 -4
  215. data/lib/mongoid.rb +17 -3
  216. data/spec/config/mongoid.yml +16 -0
  217. data/spec/integration/app_spec.rb +24 -19
  218. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  219. data/spec/integration/associations/embedded_spec.rb +15 -0
  220. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  221. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  222. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  223. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
  224. data/spec/integration/associations/has_one_spec.rb +97 -1
  225. data/spec/integration/associations/scope_option_spec.rb +1 -1
  226. data/spec/integration/callbacks_models.rb +132 -1
  227. data/spec/integration/callbacks_spec.rb +381 -4
  228. data/spec/integration/criteria/range_spec.rb +95 -1
  229. data/spec/integration/discriminator_key_spec.rb +118 -80
  230. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  231. data/spec/integration/i18n_fallbacks_spec.rb +3 -32
  232. data/spec/integration/matcher_examples_spec.rb +20 -13
  233. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  234. data/spec/integration/matcher_operator_spec.rb +3 -5
  235. data/spec/integration/persistence/range_field_spec.rb +350 -0
  236. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  237. data/spec/mongoid/association/depending_spec.rb +9 -9
  238. data/spec/mongoid/association/eager_spec.rb +26 -3
  239. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  240. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  241. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
  242. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  243. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +290 -65
  244. data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
  245. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -0
  246. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  247. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  248. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  249. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  250. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  251. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  252. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  253. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +19 -0
  254. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  255. data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
  256. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
  257. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  258. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  259. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  260. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  261. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +215 -177
  262. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  263. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  264. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  265. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  266. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  267. data/spec/mongoid/association/syncable_spec.rb +15 -1
  268. data/spec/mongoid/association_spec.rb +60 -0
  269. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  270. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  271. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  272. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  273. data/spec/mongoid/attributes/readonly_spec.rb +19 -0
  274. data/spec/mongoid/attributes_spec.rb +526 -33
  275. data/spec/mongoid/changeable_spec.rb +429 -37
  276. data/spec/mongoid/clients/factory_spec.rb +23 -30
  277. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  278. data/spec/mongoid/clients_spec.rb +149 -15
  279. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  280. data/spec/mongoid/config/defaults_spec.rb +160 -0
  281. data/spec/mongoid/config_spec.rb +214 -31
  282. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  283. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  284. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  285. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  286. data/spec/mongoid/contextual/memory_spec.rb +850 -88
  287. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  288. data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
  289. data/spec/mongoid/contextual/none_spec.rb +60 -21
  290. data/spec/mongoid/copyable_spec.rb +453 -11
  291. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  292. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  293. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  294. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  295. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  296. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  297. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  298. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  299. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  300. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  301. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
  302. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
  303. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  304. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  305. data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
  306. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  307. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
  308. data/spec/mongoid/criteria/queryable/selectable_spec.rb +107 -86
  309. data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
  310. data/spec/mongoid/criteria/translator_spec.rb +132 -0
  311. data/spec/mongoid/criteria_projection_spec.rb +1 -5
  312. data/spec/mongoid/criteria_spec.rb +469 -1205
  313. data/spec/mongoid/document_fields_spec.rb +173 -24
  314. data/spec/mongoid/document_spec.rb +59 -41
  315. data/spec/mongoid/equality_spec.rb +6 -0
  316. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  317. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  318. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  319. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  320. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  321. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  322. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  323. data/spec/mongoid/extensions/array_spec.rb +16 -2
  324. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  325. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  326. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  327. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  328. data/spec/mongoid/extensions/date_spec.rb +71 -1
  329. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  330. data/spec/mongoid/extensions/float_spec.rb +53 -74
  331. data/spec/mongoid/extensions/hash_spec.rb +33 -3
  332. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  333. data/spec/mongoid/extensions/range_spec.rb +255 -54
  334. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  335. data/spec/mongoid/extensions/set_spec.rb +106 -0
  336. data/spec/mongoid/extensions/string_spec.rb +53 -25
  337. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  338. data/spec/mongoid/extensions/time_spec.rb +639 -106
  339. data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
  340. data/spec/mongoid/factory_spec.rb +61 -1
  341. data/spec/mongoid/fields/localized_spec.rb +80 -37
  342. data/spec/mongoid/fields_spec.rb +503 -87
  343. data/spec/mongoid/findable_spec.rb +450 -58
  344. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  345. data/spec/mongoid/indexable_spec.rb +55 -30
  346. data/spec/mongoid/interceptable_spec.rb +904 -22
  347. data/spec/mongoid/interceptable_spec_models.rb +189 -22
  348. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  349. data/spec/mongoid/mongoizable_spec.rb +285 -0
  350. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  351. data/spec/mongoid/persistable/deletable_spec.rb +28 -8
  352. data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
  353. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  354. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  355. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  356. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  357. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  358. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  359. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  360. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  361. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  362. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  363. data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
  364. data/spec/mongoid/persistence_context_spec.rb +31 -57
  365. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  366. data/spec/mongoid/query_cache_spec.rb +56 -215
  367. data/spec/mongoid/reloadable_spec.rb +83 -6
  368. data/spec/mongoid/scopable_spec.rb +91 -1
  369. data/spec/mongoid/serializable_spec.rb +25 -39
  370. data/spec/mongoid/shardable_spec.rb +4 -4
  371. data/spec/mongoid/stateful_spec.rb +150 -8
  372. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  373. data/spec/mongoid/tasks/database_spec.rb +127 -0
  374. data/spec/mongoid/timestamps/created_spec.rb +23 -0
  375. data/spec/mongoid/timestamps_spec.rb +392 -4
  376. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  377. data/spec/mongoid/touchable_spec.rb +390 -2
  378. data/spec/mongoid/touchable_spec_models.rb +14 -8
  379. data/spec/mongoid/traversable_spec.rb +13 -35
  380. data/spec/mongoid/validatable/associated_spec.rb +27 -34
  381. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  382. data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
  383. data/spec/mongoid/warnings_spec.rb +35 -0
  384. data/spec/mongoid_spec.rb +34 -16
  385. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  386. data/spec/rails/mongoid_spec.rb +4 -16
  387. data/spec/spec_helper.rb +5 -0
  388. data/spec/support/constraints.rb +24 -0
  389. data/spec/support/immutable_ids.rb +118 -0
  390. data/spec/support/macros.rb +78 -0
  391. data/spec/support/models/artist.rb +0 -1
  392. data/spec/support/models/augmentation.rb +12 -0
  393. data/spec/support/models/band.rb +5 -0
  394. data/spec/support/models/book.rb +1 -0
  395. data/spec/support/models/building.rb +2 -0
  396. data/spec/support/models/catalog.rb +24 -0
  397. data/spec/support/models/circus.rb +3 -0
  398. data/spec/support/models/cover.rb +10 -0
  399. data/spec/support/models/fanatic.rb +8 -0
  400. data/spec/support/models/implant.rb +9 -0
  401. data/spec/support/models/label.rb +2 -0
  402. data/spec/support/models/lat_lng.rb +6 -0
  403. data/spec/support/models/name.rb +10 -0
  404. data/spec/support/models/passport.rb +9 -0
  405. data/spec/support/models/person.rb +2 -0
  406. data/spec/support/models/player.rb +2 -0
  407. data/spec/support/models/powerup.rb +12 -0
  408. data/spec/support/models/product.rb +1 -0
  409. data/spec/support/models/purse.rb +9 -0
  410. data/spec/support/models/registry.rb +1 -0
  411. data/spec/support/models/school.rb +14 -0
  412. data/spec/support/models/shield.rb +18 -0
  413. data/spec/support/models/student.rb +14 -0
  414. data/spec/support/models/weapon.rb +12 -0
  415. metadata +98 -96
  416. checksums.yaml.gz.sig +0 -0
  417. data/lib/mongoid/errors/eager_load.rb +0 -23
  418. data/lib/mongoid/errors/invalid_value.rb +0 -17
  419. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  420. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
  421. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
  422. data/spec/shared/LICENSE +0 -20
  423. data/spec/shared/bin/get-mongodb-download-url +0 -17
  424. data/spec/shared/bin/s3-copy +0 -45
  425. data/spec/shared/bin/s3-upload +0 -69
  426. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  427. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  428. data/spec/shared/lib/mrss/constraints.rb +0 -378
  429. data/spec/shared/lib/mrss/docker_runner.rb +0 -291
  430. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  431. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  432. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  433. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  434. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  435. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  436. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  437. data/spec/shared/lib/mrss/utils.rb +0 -15
  438. data/spec/shared/share/Dockerfile.erb +0 -325
  439. data/spec/shared/share/haproxy-1.conf +0 -16
  440. data/spec/shared/share/haproxy-2.conf +0 -17
  441. data/spec/shared/shlib/config.sh +0 -27
  442. data/spec/shared/shlib/distro.sh +0 -74
  443. data/spec/shared/shlib/server.sh +0 -392
  444. data/spec/shared/shlib/set_env.sh +0 -169
  445. data.tar.gz.sig +0 -0
  446. metadata.gz.sig +0 -3
@@ -15,18 +15,53 @@ describe BSON::Binary do
15
15
  end
16
16
  end
17
17
 
18
- describe ".demongoize" do
19
18
 
20
- let(:binary) do
21
- BSON::Binary.new("testing", :md5)
22
- end
19
+ [ :mongoize, :demongoize].each do |method|
20
+ describe ".#{method}" do
23
21
 
24
- let(:demongoized) do
25
- BSON::Binary.demongoize(binary)
26
- end
22
+ let(:binary) do
23
+ BSON::Binary.new("testing")
24
+ end
27
25
 
28
- it "returns the binary" do
29
- expect(demongoized).to eq(binary)
26
+ let(:evaluated) do
27
+ BSON::Binary.send(method, value)
28
+ end
29
+
30
+ context "when mongoizing a BSON::Binary" do
31
+
32
+ let(:value) { binary }
33
+
34
+ it "returns the binary" do
35
+ expect(evaluated).to eq(binary)
36
+ end
37
+ end
38
+
39
+ context "when mongoizing a String" do
40
+
41
+ let(:value) { "testing" }
42
+
43
+ it "returns it as binary" do
44
+ expect(evaluated).to eq(binary)
45
+ end
46
+ end
47
+
48
+ context "when mongoizing nil" do
49
+
50
+ let(:value) { nil }
51
+
52
+ it "returns nil" do
53
+ expect(evaluated).to eq(nil)
54
+ end
55
+ end
56
+
57
+ context "when mongoizing an invalid type" do
58
+
59
+ let(:value) { true }
60
+
61
+ it "returns nil" do
62
+ expect(evaluated).to be_nil
63
+ end
64
+ end
30
65
  end
31
66
  end
32
67
 
@@ -4,139 +4,125 @@ require "spec_helper"
4
4
 
5
5
  describe Mongoid::Boolean do
6
6
 
7
- describe ".demongoize" do
7
+ [ :mongoize, :demongoize ].each do |method|
8
8
 
9
- context "when provided true" do
9
+ describe ".#{method}" do
10
10
 
11
- it "returns true" do
12
- expect(described_class.demongoize(true)).to eq(true)
13
- end
14
- end
15
-
16
- context "when provided false" do
17
-
18
- it "returns false" do
19
- expect(described_class.demongoize(false)).to eq(false)
20
- end
21
- end
22
- end
23
-
24
- describe ".mongoize" do
25
-
26
- context "when provided a boolean" do
11
+ context "when provided a boolean" do
27
12
 
28
- context "when provided true" do
13
+ context "when provided true" do
29
14
 
30
- it "returns true" do
31
- expect(described_class.mongoize(true)).to eq(true)
15
+ it "returns true" do
16
+ expect(described_class.send(method, true)).to eq(true)
17
+ end
32
18
  end
33
- end
34
19
 
35
- context "when provided false" do
20
+ context "when provided false" do
36
21
 
37
- it "returns false" do
38
- expect(described_class.mongoize(false)).to eq(false)
22
+ it "returns false" do
23
+ expect(described_class.send(method, false)).to eq(false)
24
+ end
39
25
  end
40
26
  end
41
- end
42
27
 
43
- context "when provided a string" do
28
+ context "when provided a string" do
44
29
 
45
- context "when provided true" do
30
+ context "when provided true" do
46
31
 
47
- it "returns true" do
48
- expect(described_class.mongoize("true")).to eq(true)
32
+ it "returns true" do
33
+ expect(described_class.send(method, "true")).to eq(true)
34
+ end
49
35
  end
50
- end
51
36
 
52
- context "when provided t" do
37
+ context "when provided t" do
53
38
 
54
- it "returns true" do
55
- expect(described_class.mongoize("t")).to eq(true)
39
+ it "returns true" do
40
+ expect(described_class.send(method, "t")).to eq(true)
41
+ end
56
42
  end
57
- end
58
43
 
59
- context "when provided 1" do
44
+ context "when provided 1" do
60
45
 
61
- it "returns true" do
62
- expect(described_class.mongoize("1")).to eq(true)
46
+ it "returns true" do
47
+ expect(described_class.send(method, "1")).to eq(true)
48
+ end
63
49
  end
64
- end
65
50
 
66
- context "when provided 1.0" do
51
+ context "when provided 1.0" do
67
52
 
68
- it "returns true" do
69
- expect(described_class.mongoize("1.0")).to eq(true)
53
+ it "returns true" do
54
+ expect(described_class.send(method, "1.0")).to eq(true)
55
+ end
70
56
  end
71
- end
72
57
 
73
- context "when provided yes" do
58
+ context "when provided yes" do
74
59
 
75
- it "returns true" do
76
- expect(described_class.mongoize("yes")).to eq(true)
60
+ it "returns true" do
61
+ expect(described_class.send(method, "yes")).to eq(true)
62
+ end
77
63
  end
78
- end
79
64
 
80
- context "when provided y" do
65
+ context "when provided y" do
81
66
 
82
- it "returns true" do
83
- expect(described_class.mongoize("y")).to eq(true)
67
+ it "returns true" do
68
+ expect(described_class.send(method, "y")).to eq(true)
69
+ end
84
70
  end
85
- end
86
71
 
87
- context "when provided on" do
72
+ context "when provided on" do
88
73
 
89
- it "returns true" do
90
- expect(described_class.mongoize("on")).to eq(true)
74
+ it "returns true" do
75
+ expect(described_class.send(method, "on")).to eq(true)
76
+ end
91
77
  end
92
- end
93
78
 
94
- context "when provided false" do
79
+ context "when provided false" do
95
80
 
96
- it "returns false" do
97
- expect(described_class.mongoize("false")).to eq(false)
81
+ it "returns false" do
82
+ expect(described_class.send(method, "false")).to eq(false)
83
+ end
98
84
  end
99
- end
100
85
 
101
- context "when provided f" do
86
+ context "when provided f" do
102
87
 
103
- it "returns false" do
104
- expect(described_class.mongoize("f")).to eq(false)
88
+ it "returns false" do
89
+ expect(described_class.send(method, "f")).to eq(false)
90
+ end
105
91
  end
106
- end
107
92
 
108
- context "when provided 0" do
93
+ context "when provided 0" do
109
94
 
110
- it "returns false" do
111
- expect(described_class.mongoize("0")).to eq(false)
95
+ it "returns false" do
96
+ expect(described_class.send(method, "0")).to eq(false)
97
+ end
112
98
  end
113
- end
114
99
 
115
- context "when provided 0.0" do
100
+ context "when provided 0.0" do
116
101
 
117
- it "returns false" do
118
- expect(described_class.mongoize("0.0")).to eq(false)
102
+ it "returns false" do
103
+ expect(described_class.send(method, "0.0")).to eq(false)
104
+ end
119
105
  end
120
- end
121
106
 
122
- context "when provided no" do
107
+ context "when provided no" do
123
108
 
124
- it "returns false" do
125
- expect(described_class.mongoize("no")).to eq(false)
109
+ it "returns false" do
110
+ expect(described_class.send(method, "no")).to eq(false)
111
+ end
126
112
  end
127
- end
128
113
 
129
- context "when provided n" do
114
+ context "when provided n" do
130
115
 
131
- it "returns false" do
132
- expect(described_class.mongoize("n")).to eq(false)
116
+ it "returns false" do
117
+ expect(described_class.send(method, "n")).to eq(false)
118
+ end
133
119
  end
134
- end
135
120
 
136
- context "when provided off" do
121
+ context "when provided off" do
137
122
 
138
- it "returns true" do
139
- expect(described_class.mongoize("off")).to eq(false)
123
+ it "returns true" do
124
+ expect(described_class.send(method, "off")).to eq(false)
125
+ end
140
126
  end
141
127
  end
142
128
  end
@@ -98,19 +98,23 @@ describe Mongoid::Extensions::Date do
98
98
 
99
99
  context "when the string is empty" do
100
100
 
101
- let(:evolved) do
101
+ let(:mongoized) do
102
102
  Date.mongoize("")
103
103
  end
104
104
 
105
105
  it "returns nil" do
106
- expect(evolved).to be_nil
106
+ expect(mongoized).to be_nil
107
107
  end
108
108
  end
109
109
 
110
110
  context "when the string is an invalid time" do
111
111
 
112
+ let(:mongoized) do
113
+ Date.mongoize("time")
114
+ end
115
+
112
116
  it "returns nil" do
113
- expect(Date.mongoize("time")).to eq(nil)
117
+ expect(mongoized).to be_nil
114
118
  end
115
119
  end
116
120
  end
@@ -54,12 +54,37 @@ describe Mongoid::Extensions::Date do
54
54
  end
55
55
 
56
56
  it "keeps the date" do
57
- expect(Date.demongoize(time)).to eq(expected)
57
+ expect(Date.demongoize(expected)).to eq(expected)
58
+ expect(Date.demongoize(expected)).to be_a(Date)
58
59
  end
59
60
 
60
61
  it "converts to a date" do
62
+ expect(Date.demongoize(time)).to eq(expected)
61
63
  expect(Date.demongoize(time)).to be_a(Date)
62
64
  end
65
+
66
+ context "when demongoizing nil" do
67
+
68
+ it "returns nil" do
69
+ expect(Date.demongoize(nil)).to be_nil
70
+ end
71
+ end
72
+
73
+ context "when demongoizing a bogus value" do
74
+
75
+ it "returns nil" do
76
+ expect(Date.demongoize("bogus")).to be_nil
77
+ end
78
+ end
79
+
80
+ context "when demongoizing a string" do
81
+
82
+ let(:date) { "2022-07-11 14:03:42 -0400" }
83
+
84
+ it "returns a date" do
85
+ expect(Date.demongoize(date)).to eq(date.to_date)
86
+ end
87
+ end
63
88
  end
64
89
 
65
90
  describe "#mongoize" do
@@ -76,4 +101,49 @@ describe Mongoid::Extensions::Date do
76
101
  expect(date.mongoize).to eq(time)
77
102
  end
78
103
  end
104
+
105
+ describe ".mongoize" do
106
+ let(:date) do
107
+ Date.new(2010, 1, 1)
108
+ end
109
+
110
+ let(:time) do
111
+ Time.utc(2010, 1, 1, 0, 0, 0, 0)
112
+ end
113
+
114
+ let(:datetime) do
115
+ time.to_datetime
116
+ end
117
+
118
+ context "when the value is a date" do
119
+
120
+ it "converts to a date" do
121
+ expect(Date.mongoize(date)).to eq(date)
122
+ expect(Date.mongoize(date)).to be_a(Time)
123
+ end
124
+ end
125
+
126
+ context "when the value is a time" do
127
+
128
+ it "keeps the time" do
129
+ expect(Date.mongoize(time)).to eq(date)
130
+ expect(Date.mongoize(time)).to be_a(Time)
131
+ end
132
+ end
133
+
134
+ context "when the value is a datetime" do
135
+
136
+ it "converts to a time" do
137
+ expect(Date.mongoize(datetime)).to eq(date)
138
+ expect(Date.mongoize(datetime)).to be_a(Time)
139
+ end
140
+ end
141
+
142
+ context "when the value is uncastable" do
143
+
144
+ it "returns nil" do
145
+ expect(Date.mongoize("bogus")).to be_nil
146
+ end
147
+ end
148
+ end
79
149
  end
@@ -52,14 +52,7 @@ describe Mongoid::Extensions::DateTime do
52
52
  end
53
53
 
54
54
  context "when using utc" do
55
-
56
- before do
57
- Mongoid.use_utc = true
58
- end
59
-
60
- after do
61
- Mongoid.use_utc = false
62
- end
55
+ config_override :use_utc, true
63
56
 
64
57
  context "when setting a utc time" do
65
58
 
@@ -80,14 +73,27 @@ describe Mongoid::Extensions::DateTime do
80
73
  end
81
74
  end
82
75
  end
76
+
77
+ context "when demongoizing a string" do
78
+
79
+ let(:date) { "2022-07-11 14:03:42 -0400" }
80
+
81
+ it "returns a date" do
82
+ expect(DateTime.demongoize(date)).to eq(date.to_datetime)
83
+ end
84
+ end
83
85
  end
84
86
 
85
87
  describe ".mongoize" do
86
88
 
87
89
  context "when the string is an invalid time" do
88
90
 
91
+ let(:mongoized) do
92
+ DateTime.mongoize("time")
93
+ end
94
+
89
95
  it "returns nil" do
90
- expect(DateTime.mongoize("time")).to eq(nil)
96
+ expect(mongoized).to be_nil
91
97
  end
92
98
  end
93
99
  end
@@ -35,118 +35,97 @@ describe Mongoid::Extensions::Float do
35
35
  end
36
36
  end
37
37
 
38
- describe ".demongoize" do
38
+ [ :mongoize, :demongoize ].each do |method|
39
39
 
40
- context "when the value is a float" do
40
+ describe ".#{method}" do
41
41
 
42
- it "returns a float" do
43
- expect(Float.demongoize(number)).to eq(number)
44
- end
45
- end
46
-
47
- context "when the value is nil" do
48
-
49
- it "returns nil" do
50
- expect(Float.demongoize(nil)).to be_nil
51
- end
52
- end
53
-
54
- context "when the value is a float string" do
55
-
56
- it "returns a float" do
57
- expect(Float.demongoize(number.to_s)).to eq(number)
58
- end
59
- end
60
-
61
- context "when the value is not a float string" do
42
+ context "when the value is a number" do
62
43
 
63
- it "returns a float" do
64
- expect(Float.demongoize('asdf')).to eq(0)
65
- end
66
- end
67
- end
44
+ context "when the value is an float" do
68
45
 
69
- describe ".mongoize" do
46
+ context "when the value is small" do
70
47
 
71
- context "when the value is a number" do
48
+ it "it returns the float" do
49
+ expect(Float.send(method, 3)).to eq(3)
50
+ end
72
51
 
73
- context "when the value is an float" do
74
-
75
- context "when the value is small" do
76
-
77
- it "it returns the float" do
78
- expect(Float.mongoize(3)).to eq(3)
52
+ it "returns the number as type float" do
53
+ expect(Float.send(method, 3)).to be_a(Float)
54
+ end
79
55
  end
80
56
 
81
- it "returns the number as type float" do
82
- expect(Float.mongoize(3)).to be_a(Float)
57
+ context "when the value is large" do
58
+
59
+ it "returns the float" do
60
+ expect(Float.send(method, 1024**2).to_s).to eq("1048576.0")
61
+ end
83
62
  end
84
63
  end
85
64
 
86
- context "when the value is large" do
65
+ context "when the value is a decimal" do
87
66
 
88
- it "returns the float" do
89
- expect(Float.mongoize(1024**2).to_s).to eq("1048576.0")
67
+ it "casts to float" do
68
+ expect(Float.send(method, 2.5)).to eq(2.5)
90
69
  end
91
70
  end
92
- end
93
71
 
94
- context "when the value is a decimal" do
72
+ context "when the value is floating point zero" do
95
73
 
96
- it "casts to float" do
97
- expect(Float.mongoize(2.5)).to eq(2.5)
74
+ it "returns the float zero" do
75
+ expect(Float.send(method, 0.00000)).to eq(0)
76
+ end
98
77
  end
99
- end
100
78
 
101
- context "when the value is floating point zero" do
79
+ context "when the value is a floating point float" do
102
80
 
103
- it "returns the float zero" do
104
- expect(Float.mongoize(0.00000)).to eq(0)
81
+ it "returns the float number" do
82
+ expect(Float.send(method, 4.00000)).to eq(4)
83
+ end
105
84
  end
106
- end
107
85
 
108
- context "when the value is a floating point float" do
86
+ context "when the value has leading zeros" do
109
87
 
110
- it "returns the float number" do
111
- expect(Float.mongoize(4.00000)).to eq(4)
88
+ it "returns the stripped float" do
89
+ expect(Float.send(method, "000011")).to eq(11)
90
+ end
112
91
  end
113
92
  end
114
93
 
115
- context "when the value has leading zeros" do
94
+ context "when the string is not a number" do
116
95
 
117
- it "returns the stripped float" do
118
- expect(Float.mongoize("000011")).to eq(11)
119
- end
120
- end
121
- end
96
+ context "when the string is non numerical" do
122
97
 
123
- context "when the string is not a number" do
98
+ it "returns nil" do
99
+ expect(Float.send(method, "foo")).to be_nil
100
+ end
101
+ end
124
102
 
125
- context "when the string is non numerical" do
103
+ context "when the string starts with a number" do
126
104
 
127
- it "returns 0" do
128
- expect(Float.mongoize("foo")).to eq(0.0)
105
+ it "returns nil" do
106
+ expect(Float.send(method, "42bogus")).to be_nil
107
+ end
129
108
  end
130
- end
131
109
 
132
- context "when the string is numerical" do
110
+ context "when the string is empty" do
133
111
 
134
- it "returns the float value for the string" do
135
- expect(Float.mongoize("3")).to eq(3)
112
+ it "returns nil" do
113
+ expect(Float.send(method, "")).to be_nil
114
+ end
136
115
  end
137
- end
138
116
 
139
- context "when the string is empty" do
117
+ context "when the string is nil" do
140
118
 
141
- it "returns nil" do
142
- expect(Float.mongoize("")).to be_nil
119
+ it "returns nil" do
120
+ expect(Float.send(method, nil)).to be_nil
121
+ end
143
122
  end
144
- end
145
123
 
146
- context "when the string is nil" do
124
+ context "when giving an object that is castable to an Float" do
147
125
 
148
- it "returns nil" do
149
- expect(Float.mongoize(nil)).to be_nil
126
+ it "returns the integer value" do
127
+ expect(Float.send(method, 2.hours)).to eq(7200)
128
+ end
150
129
  end
151
130
  end
152
131
  end
@@ -178,7 +178,7 @@ describe Mongoid::Extensions::Hash do
178
178
 
179
179
  it "moves the non hash values under the provided key" do
180
180
  expect(consolidated).to eq({
181
- "$set" => { name: "Tool", likes: 10 }, "$inc" => { plays: 1 }
181
+ "$set" => { 'name' => "Tool", likes: 10 }, "$inc" => { 'plays' => 1 }
182
182
  })
183
183
  end
184
184
  end
@@ -195,7 +195,7 @@ describe Mongoid::Extensions::Hash do
195
195
 
196
196
  it "moves the non hash values under the provided key" do
197
197
  expect(consolidated).to eq({
198
- "$set" => { likes: 10, name: "Tool" }, "$inc" => { plays: 1 }
198
+ "$set" => { likes: 10, 'name' => "Tool" }, "$inc" => { 'plays' => 1 }
199
199
  })
200
200
  end
201
201
  end
@@ -213,7 +213,7 @@ describe Mongoid::Extensions::Hash do
213
213
 
214
214
  it "moves the non hash values under the provided key" do
215
215
  expect(consolidated).to eq({
216
- "$set" => { likes: 10, name: "Tool" }, "$inc" => { plays: 1 }
216
+ "$set" => { likes: 10, name: "Tool" }, "$inc" => { 'plays' => 1 }
217
217
  })
218
218
  end
219
219
  end
@@ -290,6 +290,26 @@ describe Mongoid::Extensions::Hash do
290
290
  it "returns the hash" do
291
291
  expect(Hash.demongoize(hash)).to eq(hash)
292
292
  end
293
+
294
+ context "when object is nil" do
295
+ let(:demongoized) do
296
+ Hash.demongoize(nil)
297
+ end
298
+
299
+ it "returns nil" do
300
+ expect(demongoized).to be_nil
301
+ end
302
+ end
303
+
304
+ context "when the object is uncastable" do
305
+ let(:demongoized) do
306
+ Hash.demongoize(1)
307
+ end
308
+
309
+ it "returns the object" do
310
+ expect(demongoized).to eq(1)
311
+ end
312
+ end
293
313
  end
294
314
 
295
315
  describe ".mongoize" do
@@ -326,6 +346,16 @@ describe Mongoid::Extensions::Hash do
326
346
  expect(mongoized).to be_nil
327
347
  end
328
348
  end
349
+
350
+ context "when the object is uncastable" do
351
+ let(:mongoized) do
352
+ Hash.mongoize(1)
353
+ end
354
+
355
+ it "returns nil" do
356
+ expect(mongoized).to be_nil
357
+ end
358
+ end
329
359
  end
330
360
 
331
361
  describe "#mongoize" do