mongoid 7.5.0 → 8.0.2

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 (358) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +3 -3
  4. data/lib/config/locales/en.yml +47 -30
  5. data/lib/mongoid/association/accessors.rb +38 -9
  6. data/lib/mongoid/association/bindable.rb +50 -2
  7. data/lib/mongoid/association/builders.rb +4 -2
  8. data/lib/mongoid/association/constrainable.rb +0 -1
  9. data/lib/mongoid/association/eager_loadable.rb +29 -7
  10. data/lib/mongoid/association/embedded/batchable.rb +53 -13
  11. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  12. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  13. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -2
  14. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  15. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  16. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
  17. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +50 -28
  18. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  19. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
  20. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +23 -4
  21. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  22. data/lib/mongoid/association/macros.rb +2 -1
  23. data/lib/mongoid/association/many.rb +11 -7
  24. data/lib/mongoid/association/nested/many.rb +5 -4
  25. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  26. data/lib/mongoid/association/nested/one.rb +5 -5
  27. data/lib/mongoid/association/one.rb +2 -2
  28. data/lib/mongoid/association/options.rb +9 -9
  29. data/lib/mongoid/association/proxy.rb +14 -3
  30. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  31. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  32. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  33. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  34. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  35. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  36. data/lib/mongoid/association/referenced/eager.rb +2 -2
  37. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +66 -13
  38. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  39. data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -28
  40. data/lib/mongoid/association/referenced/has_many/proxy.rb +24 -18
  41. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  42. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  43. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  44. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  45. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  46. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  47. data/lib/mongoid/association/reflections.rb +2 -2
  48. data/lib/mongoid/association/relatable.rb +44 -10
  49. data/lib/mongoid/association.rb +5 -5
  50. data/lib/mongoid/atomic/modifiers.rb +2 -2
  51. data/lib/mongoid/atomic/paths/embedded/many.rb +19 -0
  52. data/lib/mongoid/attributes/dynamic.rb +3 -3
  53. data/lib/mongoid/attributes/nested.rb +5 -5
  54. data/lib/mongoid/attributes/processing.rb +10 -3
  55. data/lib/mongoid/attributes/projector.rb +1 -1
  56. data/lib/mongoid/attributes/readonly.rb +2 -2
  57. data/lib/mongoid/attributes.rb +43 -40
  58. data/lib/mongoid/changeable.rb +42 -7
  59. data/lib/mongoid/clients/options.rb +5 -1
  60. data/lib/mongoid/clients/sessions.rb +2 -14
  61. data/lib/mongoid/clients/validators/storage.rb +3 -3
  62. data/lib/mongoid/config/validators/client.rb +6 -6
  63. data/lib/mongoid/config.rb +27 -17
  64. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  65. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  66. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  67. data/lib/mongoid/contextual/atomic.rb +1 -1
  68. data/lib/mongoid/contextual/geo_near.rb +7 -7
  69. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  70. data/lib/mongoid/contextual/memory.rb +59 -32
  71. data/lib/mongoid/contextual/mongo.rb +184 -256
  72. data/lib/mongoid/contextual/none.rb +34 -16
  73. data/lib/mongoid/contextual/queryable.rb +1 -1
  74. data/lib/mongoid/contextual.rb +2 -2
  75. data/lib/mongoid/copyable.rb +32 -8
  76. data/lib/mongoid/criteria/findable.rb +7 -4
  77. data/lib/mongoid/criteria/includable.rb +24 -20
  78. data/lib/mongoid/criteria/marshalable.rb +10 -2
  79. data/lib/mongoid/criteria/permission.rb +1 -1
  80. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  81. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -15
  82. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  83. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  84. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  85. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  86. data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -16
  87. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
  88. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  89. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  90. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  91. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  92. data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -3
  93. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -2
  94. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  95. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  96. data/lib/mongoid/criteria/queryable/key.rb +3 -3
  97. data/lib/mongoid/criteria/queryable/optional.rb +5 -11
  98. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  99. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  100. data/lib/mongoid/criteria/queryable/selectable.rb +5 -27
  101. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  102. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  103. data/lib/mongoid/criteria/queryable.rb +12 -7
  104. data/lib/mongoid/criteria/scopable.rb +2 -2
  105. data/lib/mongoid/criteria.rb +15 -37
  106. data/lib/mongoid/deprecable.rb +36 -0
  107. data/lib/mongoid/deprecation.rb +25 -0
  108. data/lib/mongoid/document.rb +98 -36
  109. data/lib/mongoid/equality.rb +12 -12
  110. data/lib/mongoid/errors/document_not_found.rb +10 -6
  111. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  112. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  113. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  114. data/lib/mongoid/errors/invalid_field.rb +6 -2
  115. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  116. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  117. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  118. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  119. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  120. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  121. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  122. data/lib/mongoid/errors/no_client_database.rb +1 -1
  123. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  124. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  125. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  126. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  127. data/lib/mongoid/errors.rb +2 -2
  128. data/lib/mongoid/extensions/array.rb +9 -7
  129. data/lib/mongoid/extensions/big_decimal.rb +29 -10
  130. data/lib/mongoid/extensions/binary.rb +42 -0
  131. data/lib/mongoid/extensions/boolean.rb +8 -2
  132. data/lib/mongoid/extensions/date.rb +26 -20
  133. data/lib/mongoid/extensions/date_time.rb +1 -1
  134. data/lib/mongoid/extensions/false_class.rb +1 -1
  135. data/lib/mongoid/extensions/float.rb +4 -5
  136. data/lib/mongoid/extensions/hash.rb +13 -6
  137. data/lib/mongoid/extensions/integer.rb +4 -5
  138. data/lib/mongoid/extensions/module.rb +1 -1
  139. data/lib/mongoid/extensions/object.rb +8 -6
  140. data/lib/mongoid/extensions/range.rb +41 -10
  141. data/lib/mongoid/extensions/regexp.rb +11 -4
  142. data/lib/mongoid/extensions/set.rb +11 -4
  143. data/lib/mongoid/extensions/string.rb +11 -22
  144. data/lib/mongoid/extensions/symbol.rb +4 -15
  145. data/lib/mongoid/extensions/time.rb +27 -16
  146. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  147. data/lib/mongoid/extensions/true_class.rb +1 -1
  148. data/lib/mongoid/extensions.rb +1 -0
  149. data/lib/mongoid/factory.rb +42 -7
  150. data/lib/mongoid/fields/foreign_key.rb +11 -4
  151. data/lib/mongoid/fields/localized.rb +2 -2
  152. data/lib/mongoid/fields/standard.rb +7 -7
  153. data/lib/mongoid/fields/validators/macro.rb +3 -9
  154. data/lib/mongoid/fields.rb +57 -15
  155. data/lib/mongoid/findable.rb +28 -22
  156. data/lib/mongoid/indexable/specification.rb +2 -2
  157. data/lib/mongoid/indexable/validators/options.rb +6 -2
  158. data/lib/mongoid/interceptable.rb +73 -13
  159. data/lib/mongoid/matchable.rb +1 -1
  160. data/lib/mongoid/matcher.rb +12 -7
  161. data/lib/mongoid/persistable/creatable.rb +18 -9
  162. data/lib/mongoid/persistable/deletable.rb +1 -1
  163. data/lib/mongoid/persistable/destroyable.rb +1 -1
  164. data/lib/mongoid/persistable/savable.rb +2 -2
  165. data/lib/mongoid/persistable/unsettable.rb +1 -1
  166. data/lib/mongoid/persistable/updatable.rb +19 -12
  167. data/lib/mongoid/persistable/upsertable.rb +1 -1
  168. data/lib/mongoid/persistable.rb +3 -3
  169. data/lib/mongoid/persistence_context.rb +22 -5
  170. data/lib/mongoid/query_cache.rb +8 -260
  171. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  172. data/lib/mongoid/reloadable.rb +7 -3
  173. data/lib/mongoid/scopable.rb +17 -15
  174. data/lib/mongoid/selectable.rb +1 -2
  175. data/lib/mongoid/serializable.rb +10 -6
  176. data/lib/mongoid/stateful.rb +35 -9
  177. data/lib/mongoid/tasks/database.rb +0 -2
  178. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  179. data/lib/mongoid/threaded.rb +9 -9
  180. data/lib/mongoid/timestamps/created.rb +1 -1
  181. data/lib/mongoid/timestamps/updated.rb +2 -2
  182. data/lib/mongoid/touchable.rb +2 -3
  183. data/lib/mongoid/traversable.rb +4 -3
  184. data/lib/mongoid/validatable/localizable.rb +1 -1
  185. data/lib/mongoid/validatable/macros.rb +0 -2
  186. data/lib/mongoid/validatable/presence.rb +2 -2
  187. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  188. data/lib/mongoid/validatable.rb +6 -6
  189. data/lib/mongoid/version.rb +1 -1
  190. data/lib/mongoid/warnings.rb +3 -4
  191. data/lib/mongoid.rb +1 -0
  192. data/spec/config/mongoid.yml +16 -0
  193. data/spec/integration/app_spec.rb +8 -12
  194. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  195. data/spec/integration/associations/embedded_spec.rb +15 -0
  196. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  197. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  198. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  199. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  200. data/spec/integration/associations/has_one_spec.rb +97 -1
  201. data/spec/integration/associations/scope_option_spec.rb +1 -1
  202. data/spec/integration/callbacks_models.rb +95 -1
  203. data/spec/integration/callbacks_spec.rb +226 -4
  204. data/spec/integration/criteria/range_spec.rb +95 -1
  205. data/spec/integration/discriminator_key_spec.rb +115 -76
  206. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  207. data/spec/integration/i18n_fallbacks_spec.rb +1 -15
  208. data/spec/integration/matcher_examples_spec.rb +20 -13
  209. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  210. data/spec/integration/matcher_operator_spec.rb +3 -5
  211. data/spec/integration/persistence/range_field_spec.rb +350 -0
  212. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  213. data/spec/mongoid/association/depending_spec.rb +9 -9
  214. data/spec/mongoid/association/eager_spec.rb +2 -1
  215. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  216. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  217. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
  218. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  219. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +219 -8
  220. data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -0
  221. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
  222. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  223. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  224. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  225. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  226. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  227. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  228. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
  229. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  230. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
  231. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +67 -4
  232. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  233. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  234. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  235. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  236. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -13
  237. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  238. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  239. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  240. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  241. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  242. data/spec/mongoid/association/syncable_spec.rb +14 -0
  243. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  244. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  245. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  246. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  247. data/spec/mongoid/attributes_spec.rb +524 -27
  248. data/spec/mongoid/changeable_spec.rb +130 -13
  249. data/spec/mongoid/clients/factory_spec.rb +23 -30
  250. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  251. data/spec/mongoid/clients_spec.rb +32 -2
  252. data/spec/mongoid/config_spec.rb +58 -13
  253. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  254. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  255. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  256. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  257. data/spec/mongoid/contextual/memory_spec.rb +521 -14
  258. data/spec/mongoid/contextual/mongo_spec.rb +564 -394
  259. data/spec/mongoid/contextual/none_spec.rb +11 -19
  260. data/spec/mongoid/copyable_spec.rb +451 -1
  261. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  262. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  263. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  264. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  265. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  266. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  267. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  268. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  269. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  270. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  271. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  272. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  273. data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
  274. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
  275. data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
  276. data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
  277. data/spec/mongoid/criteria_spec.rb +469 -1201
  278. data/spec/mongoid/document_fields_spec.rb +173 -24
  279. data/spec/mongoid/document_spec.rb +32 -41
  280. data/spec/mongoid/equality_spec.rb +12 -12
  281. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  282. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  283. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  284. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  285. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  286. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  287. data/spec/mongoid/extensions/array_spec.rb +16 -2
  288. data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
  289. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  290. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  291. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  292. data/spec/mongoid/extensions/date_spec.rb +71 -1
  293. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  294. data/spec/mongoid/extensions/float_spec.rb +48 -76
  295. data/spec/mongoid/extensions/hash_spec.rb +30 -0
  296. data/spec/mongoid/extensions/integer_spec.rb +45 -66
  297. data/spec/mongoid/extensions/range_spec.rb +255 -54
  298. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  299. data/spec/mongoid/extensions/set_spec.rb +106 -0
  300. data/spec/mongoid/extensions/string_spec.rb +53 -25
  301. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  302. data/spec/mongoid/extensions/time_spec.rb +634 -66
  303. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
  304. data/spec/mongoid/factory_spec.rb +61 -1
  305. data/spec/mongoid/fields_spec.rb +321 -50
  306. data/spec/mongoid/findable_spec.rb +64 -29
  307. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  308. data/spec/mongoid/indexable_spec.rb +39 -20
  309. data/spec/mongoid/interceptable_spec.rb +584 -5
  310. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  311. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  312. data/spec/mongoid/mongoizable_spec.rb +285 -0
  313. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  314. data/spec/mongoid/persistable/deletable_spec.rb +2 -2
  315. data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
  316. data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
  317. data/spec/mongoid/persistence_context_spec.rb +50 -1
  318. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  319. data/spec/mongoid/query_cache_spec.rb +0 -154
  320. data/spec/mongoid/reloadable_spec.rb +35 -2
  321. data/spec/mongoid/scopable_spec.rb +54 -16
  322. data/spec/mongoid/shardable_spec.rb +14 -0
  323. data/spec/mongoid/stateful_spec.rb +28 -0
  324. data/spec/mongoid/timestamps_spec.rb +390 -0
  325. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  326. data/spec/mongoid/touchable_spec.rb +116 -0
  327. data/spec/mongoid/touchable_spec_models.rb +12 -8
  328. data/spec/mongoid/traversable_spec.rb +4 -11
  329. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  330. data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
  331. data/spec/mongoid/warnings_spec.rb +35 -0
  332. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  333. data/spec/rails/mongoid_spec.rb +4 -16
  334. data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
  335. data/spec/support/constraints.rb +24 -0
  336. data/spec/support/macros.rb +30 -0
  337. data/spec/support/models/augmentation.rb +12 -0
  338. data/spec/support/models/band.rb +3 -0
  339. data/spec/support/models/catalog.rb +24 -0
  340. data/spec/support/models/circus.rb +3 -0
  341. data/spec/support/models/fanatic.rb +8 -0
  342. data/spec/support/models/implant.rb +9 -0
  343. data/spec/support/models/label.rb +2 -0
  344. data/spec/support/models/passport.rb +9 -0
  345. data/spec/support/models/person.rb +1 -0
  346. data/spec/support/models/player.rb +2 -0
  347. data/spec/support/models/powerup.rb +12 -0
  348. data/spec/support/models/registry.rb +1 -0
  349. data/spec/support/models/school.rb +14 -0
  350. data/spec/support/models/shield.rb +18 -0
  351. data/spec/support/models/student.rb +14 -0
  352. data/spec/support/models/weapon.rb +12 -0
  353. data.tar.gz.sig +0 -0
  354. metadata +49 -13
  355. metadata.gz.sig +0 -0
  356. data/lib/mongoid/errors/eager_load.rb +0 -23
  357. data/lib/mongoid/errors/invalid_value.rb +0 -17
  358. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -20,9 +20,9 @@ module Mongoid
20
20
  # @example Mongoize the object.
21
21
  # object.mongoize
22
22
  #
23
- # @return [ Object ] The object.
23
+ # @return [ String | BSON::Decimal128 | nil ] The object or nil.
24
24
  def mongoize
25
- to_s
25
+ ::BigDecimal.mongoize(self)
26
26
  end
27
27
 
28
28
  # Is the BigDecimal a number?
@@ -39,26 +39,45 @@ module Mongoid
39
39
 
40
40
  # Convert the object from its mongo friendly ruby type to this type.
41
41
  #
42
- # @example Demongoize the object.
43
- # Object.demongoize(object)
44
- #
45
42
  # @param [ Object ] object The object to demongoize.
46
43
  #
47
- # @return [ BigDecimal, nil ] A BigDecimal derived from the object or nil.
44
+ # @return [ BigDecimal | nil ] A BigDecimal derived from the object or nil.
48
45
  def demongoize(object)
49
- object && object.numeric? ? BigDecimal(object.to_s) : nil
46
+ return if object.blank?
47
+ if object.is_a?(BSON::Decimal128)
48
+ object.to_big_decimal
49
+ elsif object.numeric?
50
+ BigDecimal(object.to_s)
51
+ elsif object.numeric?
52
+ object.to_d
53
+ end
50
54
  end
51
55
 
52
- # Mongoize an object of any type to how it's stored in the db as a String.
56
+ # Mongoize an object of any type to how it's stored in the db.
53
57
  #
54
58
  # @example Mongoize the object.
55
59
  # BigDecimal.mongoize(123)
56
60
  #
57
61
  # @param [ Object ] object The object to Mongoize
58
62
  #
59
- # @return [ String, nil ] A String representing the object or nil.
63
+ # @return [ String | BSON::Decimal128 | nil ] A String or Decimal128
64
+ # representing the object or nil. String if Mongoid.map_big_decimal_to_decimal128
65
+ # is false, BSON::Decimal128 otherwise.
60
66
  def mongoize(object)
61
- object && object.numeric? ? object.to_s : nil
67
+ return if object.blank?
68
+ if Mongoid.map_big_decimal_to_decimal128
69
+ if object.is_a?(BSON::Decimal128)
70
+ object
71
+ elsif object.is_a?(BigDecimal)
72
+ BSON::Decimal128.new(object)
73
+ elsif object.numeric?
74
+ BSON::Decimal128.new(object.to_s)
75
+ end
76
+ else
77
+ if object.is_a?(BSON::Decimal128) || object.numeric?
78
+ object.to_s
79
+ end
80
+ end
62
81
  end
63
82
  end
64
83
  end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+ module Extensions
5
+ module Binary
6
+
7
+ # Turn the object from the ruby type we deal with to a Mongo friendly
8
+ # type.
9
+ #
10
+ # @example Mongoize the object.
11
+ # object.mongoize
12
+ #
13
+ # @return [ BSON::Binary | nil ] The object.
14
+ def mongoize
15
+ BSON::Binary.mongoize(self)
16
+ end
17
+
18
+ module ClassMethods
19
+
20
+ # Mongoize an object of any type to how it's stored in the db.
21
+ #
22
+ # @example Mongoize the object.
23
+ # BigDecimal.mongoize(123)
24
+ #
25
+ # @param [ Object ] object The object to Mongoize
26
+ #
27
+ # @return [ BSON::Binary | nil ] A Binary representing the object or nil.
28
+ def mongoize(object)
29
+ return if object.nil?
30
+ case object
31
+ when BSON::Binary then object
32
+ when String, Symbol then BSON::Binary.new(object.to_s)
33
+ end
34
+ end
35
+ alias :demongoize :mongoize
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ BSON::Binary.__send__(:include, Mongoid::Extensions::Binary)
42
+ BSON::Binary.extend(Mongoid::Extensions::Binary::ClassMethods)
@@ -11,10 +11,16 @@ module Mongoid
11
11
  # @example Mongoize the object.
12
12
  # Boolean.mongoize("123.11")
13
13
  #
14
- # @return [ String ] The object mongoized.
14
+ # @return [ true | false | nil ] The object mongoized or nil.
15
15
  def mongoize(object)
16
- evolve(object)
16
+ return if object.nil?
17
+ if object.to_s =~ (/\A(true|t|yes|y|on|1|1.0)\z/i)
18
+ true
19
+ elsif object.to_s =~ (/\A(false|f|no|n|off|0|0.0)\z/i)
20
+ false
21
+ end
17
22
  end
23
+ alias :demongoize :mongoize
18
24
  end
19
25
  end
20
26
  end
@@ -4,12 +4,6 @@ module Mongoid
4
4
  module Extensions
5
5
  module Date
6
6
 
7
- # Constant for epoch - used when passing invalid times.
8
- #
9
- # @deprecated No longer used as a return value from #mongoize passed
10
- # an invalid date string.
11
- EPOCH = ::Date.new(1970, 1, 1)
12
-
13
7
  # Convert the date into a time.
14
8
  #
15
9
  # @example Convert the date to a time.
@@ -43,9 +37,20 @@ module Mongoid
43
37
  #
44
38
  # @param [ Time ] object The time from Mongo.
45
39
  #
46
- # @return [ Date ] The object as a date.
40
+ # @return [ Date | nil ] The object as a date or nil.
47
41
  def demongoize(object)
48
- ::Date.new(object.year, object.month, object.day) if object
42
+ return if object.nil?
43
+ if object.is_a?(String)
44
+ object = begin
45
+ object.__mongoize_time__
46
+ rescue ArgumentError
47
+ nil
48
+ end
49
+ end
50
+
51
+ if object.acts_like?(:time) || object.acts_like?(:date)
52
+ ::Date.new(object.year, object.month, object.day)
53
+ end
49
54
  end
50
55
 
51
56
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -56,20 +61,21 @@ module Mongoid
56
61
  #
57
62
  # @param [ Object ] object The object to mongoize.
58
63
  #
59
- # @return [ Time ] The object mongoized.
64
+ # @return [ Time | nil ] The object mongoized or nil.
60
65
  def mongoize(object)
61
- unless object.blank?
62
- begin
63
- if object.is_a?(String)
64
- # https://jira.mongodb.org/browse/MONGOID-4460
65
- time = ::Time.parse(object)
66
- else
67
- time = object.__mongoize_time__
68
- end
69
- ::Time.utc(time.year, time.month, time.day)
70
- rescue ArgumentError
71
- nil
66
+ return if object.blank?
67
+ begin
68
+ if object.is_a?(String)
69
+ # https://jira.mongodb.org/browse/MONGOID-4460
70
+ time = ::Time.parse(object)
71
+ else
72
+ time = object.__mongoize_time__
72
73
  end
74
+ rescue ArgumentError
75
+ nil
76
+ end
77
+ if time.acts_like?(:time)
78
+ ::Time.utc(time.year, time.month, time.day)
73
79
  end
74
80
  end
75
81
  end
@@ -39,7 +39,7 @@ module Mongoid
39
39
  #
40
40
  # @param [ Time ] object The time from Mongo.
41
41
  #
42
- # @return [ DateTime ] The object as a date.
42
+ # @return [ DateTime | nil ] The object as a datetime or nil.
43
43
  def demongoize(object)
44
44
  ::Time.demongoize(object).try(:to_datetime)
45
45
  end
@@ -21,7 +21,7 @@ module Mongoid
21
21
  #
22
22
  # @param [ Class ] other The class to check.
23
23
  #
24
- # @return [ true, false ] If the other is a boolean.
24
+ # @return [ true | false ] If the other is a boolean.
25
25
  def is_a?(other)
26
26
  if other == Mongoid::Boolean || other.class == Mongoid::Boolean
27
27
  return true
@@ -34,12 +34,11 @@ module Mongoid
34
34
  #
35
35
  # @param [ Object ] object The object to mongoize.
36
36
  #
37
- # @return [ String ] The object mongoized.
37
+ # @return [ Float | nil ] The object mongoized or nil.
38
38
  def mongoize(object)
39
- unless object.blank?
40
- __numeric__(object).to_f rescue 0.0
41
- else
42
- nil
39
+ return if object.blank?
40
+ if object.numeric?
41
+ object.to_f
43
42
  end
44
43
  end
45
44
  alias :demongoize :mongoize
@@ -11,7 +11,7 @@ module Mongoid
11
11
  #
12
12
  # @return [ Hash ] The converted hash.
13
13
  def __evolve_object_id__
14
- update_values(&:__evolve_object_id__)
14
+ transform_values!(&:__evolve_object_id__)
15
15
  end
16
16
 
17
17
  # Mongoizes each value in the hash to an object id if it is convertable.
@@ -24,7 +24,7 @@ module Mongoid
24
24
  if id = self['$oid']
25
25
  BSON::ObjectId.from_string(id)
26
26
  else
27
- update_values(&:__mongoize_object_id__)
27
+ transform_values!(&:__mongoize_object_id__)
28
28
  end
29
29
  end
30
30
 
@@ -148,7 +148,7 @@ module Mongoid
148
148
  # @example Mongoize the object.
149
149
  # object.mongoize
150
150
  #
151
- # @return [ Hash ] The object.
151
+ # @return [ Hash | nil ] The object mongoized or nil.
152
152
  def mongoize
153
153
  ::Hash.mongoize(self)
154
154
  end
@@ -190,7 +190,7 @@ module Mongoid
190
190
  #
191
191
  # @param [ String ] operator The operator.
192
192
  # @param [ Class ] klass The model class.
193
- # @param [ String, Symbol ] key The field key.
193
+ # @param [ String | Symbol ] key The field key.
194
194
  # @param [ Object ] value The value to mongoize.
195
195
  #
196
196
  # @return [ Object ] The mongoized value.
@@ -217,10 +217,15 @@ module Mongoid
217
217
  #
218
218
  # @param [ Object ] object The object to mongoize.
219
219
  #
220
- # @return [ Hash ] The object mongoized.
220
+ # @return [ Hash | nil ] The object mongoized or nil.
221
221
  def mongoize(object)
222
222
  return if object.nil?
223
- evolve(object.dup).update_values { |value| value.mongoize }
223
+ if object.is_a?(Hash)
224
+ # Need to use transform_values! which maintains the BSON::Document
225
+ # instead of transform_values which always returns a hash. To do this,
226
+ # we first need to dup the hash.
227
+ object.dup.transform_values!(&:mongoize)
228
+ end
224
229
  end
225
230
 
226
231
  # Can the size of this object change?
@@ -239,3 +244,5 @@ end
239
244
 
240
245
  ::Hash.__send__(:include, Mongoid::Extensions::Hash)
241
246
  ::Hash.extend(Mongoid::Extensions::Hash::ClassMethods)
247
+
248
+ ::Mongoid.deprecate(Hash, :blank_criteria)
@@ -42,12 +42,11 @@ module Mongoid
42
42
  # @example Mongoize the object.
43
43
  # BigDecimal.mongoize("123.11")
44
44
  #
45
- # @return [ String ] The object mongoized.
45
+ # @return [ Integer | nil ] The object mongoized or nil.
46
46
  def mongoize(object)
47
- unless object.blank?
48
- __numeric__(object).to_i rescue 0
49
- else
50
- nil
47
+ return if object.blank?
48
+ if object.numeric?
49
+ object.to_i
51
50
  end
52
51
  end
53
52
  alias :demongoize :mongoize
@@ -12,7 +12,7 @@ module Mongoid
12
12
  # self
13
13
  # end
14
14
  #
15
- # @param [ String, Symbol ] name The name of the method.
15
+ # @param [ String | Symbol ] name The name of the method.
16
16
  # @param [ Proc ] block The method body.
17
17
  #
18
18
  # @return [ Method ] The new method.
@@ -90,10 +90,10 @@ module Mongoid
90
90
  # @example Do or do not.
91
91
  # object.do_or_do_not(:use, "The Force")
92
92
  #
93
- # @param [ String, Symbol ] name The method name.
93
+ # @param [ String | Symbol ] name The method name.
94
94
  # @param [ Array ] args The arguments.
95
95
  #
96
- # @return [ Object, nil ] The result of the method call or nil if the
96
+ # @return [ Object | nil ] The result of the method call or nil if the
97
97
  # method does not exist.
98
98
  def do_or_do_not(name, *args)
99
99
  send(name, *args) if name && respond_to?(name)
@@ -106,7 +106,7 @@ module Mongoid
106
106
  #
107
107
  # @param [ String ] name The name of the variable.
108
108
  #
109
- # @return [ Object, false ] The value or false.
109
+ # @return [ Object | false ] The value or false.
110
110
  def ivar(name)
111
111
  var_name = "@_#{name}"
112
112
  if instance_variable_defined?(var_name)
@@ -154,7 +154,7 @@ module Mongoid
154
154
  #
155
155
  # @param [ String ] name The name of the variable.
156
156
  #
157
- # @return [ true, false ] If the variable was defined.
157
+ # @return [ true | false ] If the variable was defined.
158
158
  def remove_ivar(name)
159
159
  if instance_variable_defined?("@_#{name}")
160
160
  return remove_instance_variable("@_#{name}")
@@ -189,10 +189,10 @@ module Mongoid
189
189
  # @example You must perform this execution.
190
190
  # object.you_must(:use, "The Force")
191
191
  #
192
- # @param [ String, Symbol ] name The method name.
192
+ # @param [ String | Symbol ] name The method name.
193
193
  # @param [ Array ] args The arguments.
194
194
  #
195
- # @return [ Object, nil ] The result of the method call or nil if the
195
+ # @return [ Object | nil ] The result of the method call or nil if the
196
196
  # method does not exist. Nil if the object is frozen.
197
197
  def you_must(name, *args)
198
198
  frozen? ? nil : do_or_do_not(name, *args)
@@ -246,3 +246,5 @@ end
246
246
 
247
247
  ::Object.__send__(:include, Mongoid::Extensions::Object)
248
248
  ::Object.extend(Mongoid::Extensions::Object::ClassMethods)
249
+
250
+ ::Mongoid.deprecate(Object, :blank_criteria)
@@ -20,7 +20,7 @@ module Mongoid
20
20
  # @example Mongoize the object.
21
21
  # range.mongoize
22
22
  #
23
- # @return [ Hash ] The object mongoized.
23
+ # @return [ Hash | nil ] The object mongoized or nil.
24
24
  def mongoize
25
25
  ::Range.mongoize(self)
26
26
  end
@@ -44,9 +44,23 @@ module Mongoid
44
44
  #
45
45
  # @param [ Hash ] object The object to demongoize.
46
46
  #
47
- # @return [ Range ] The range.
47
+ # @return [ Range | nil ] The range, or nil if object cannot be represented as range.
48
+ #
49
+ # @note Ruby 2.6 and lower do not support endless ranges that Ruby 2.7+ support.
48
50
  def demongoize(object)
49
- object.nil? ? nil : ::Range.new(object["min"], object["max"], object["exclude_end"])
51
+ return if object.nil?
52
+ if object.is_a?(Hash)
53
+ hash = object.slice('min', 'max', 'exclude_end', :min, :max, :exclude_end)
54
+ unless hash.blank?
55
+ begin
56
+ ::Range.new(hash["min"] || hash[:min],
57
+ hash["max"] || hash[:max],
58
+ hash["exclude_end"] || hash[:exclude_end])
59
+ rescue ArgumentError # can be removed when Ruby version >= 2.7
60
+ nil
61
+ end
62
+ end
63
+ end
50
64
  end
51
65
 
52
66
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -55,16 +69,33 @@ module Mongoid
55
69
  # @example Mongoize the object.
56
70
  # Range.mongoize(1..3)
57
71
  #
58
- # @param [ Range ] object The object to mongoize.
72
+ # @param [ Object ] object The object to mongoize.
59
73
  #
60
- # @return [ Hash ] The object mongoized.
74
+ # @return [ Hash | nil ] The object mongoized or nil.
61
75
  def mongoize(object)
62
- return nil if object.nil?
63
- return object if object.is_a?(::Hash)
64
- return object if object.is_a?(String)
65
- hash = { "min" => object.first, "max" => object.last }
76
+ return if object.nil?
77
+ case object
78
+ when Hash then __mongoize_hash__(object)
79
+ when Range then __mongoize_range__(object)
80
+ end
81
+ end
82
+
83
+ private
84
+
85
+ def __mongoize_hash__(object)
86
+ hash = object.stringify_keys
87
+ hash.slice!('min', 'max', 'exclude_end')
88
+ hash.compact!
89
+ hash.transform_values!(&:mongoize)
90
+ hash.blank? ? nil : hash
91
+ end
92
+
93
+ def __mongoize_range__(object)
94
+ hash = {}
95
+ hash['min'] = object.begin.mongoize if object.begin
96
+ hash['max'] = object.end.mongoize if object.end
66
97
  if object.respond_to?(:exclude_end?) && object.exclude_end?
67
- hash.merge!("exclude_end" => true)
98
+ hash['exclude_end'] = true
68
99
  end
69
100
  hash
70
101
  end
@@ -12,13 +12,20 @@ module Mongoid
12
12
  # @example Mongoize the object.
13
13
  # Regexp.mongoize(/\A[abc]/)
14
14
  #
15
- # @param [ Regexp, String ] object The object to mongoize.
15
+ # @param [ Object ] object The object to mongoize.
16
16
  #
17
- # @return [ Regexp ] The object mongoized.
17
+ # @return [ Regexp | nil ] The object mongoized or nil.
18
18
  def mongoize(object)
19
- return nil if object.nil?
20
- ::Regexp.new(object)
19
+ return if object.nil?
20
+ case object
21
+ when String then ::Regexp.new(object)
22
+ when ::Regexp then object
23
+ when BSON::Regexp::Raw then object.compile
24
+ end
25
+ rescue RegexpError
26
+ nil
21
27
  end
28
+ alias :demongoize :mongoize
22
29
  end
23
30
  end
24
31
  end
@@ -10,7 +10,7 @@ module Mongoid
10
10
  # @example Mongoize the object.
11
11
  # set.mongoize
12
12
  #
13
- # @return [ Array ] The object mongoized.
13
+ # @return [ Array | nil ] The object mongoized or nil.
14
14
  def mongoize
15
15
  ::Set.mongoize(self)
16
16
  end
@@ -26,7 +26,10 @@ module Mongoid
26
26
  #
27
27
  # @return [ Set ] The set.
28
28
  def demongoize(object)
29
- ::Set.new(object)
29
+ case object
30
+ when ::Set then object
31
+ when ::Array then ::Set.new(object)
32
+ end
30
33
  end
31
34
 
32
35
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -37,9 +40,13 @@ module Mongoid
37
40
  #
38
41
  # @param [ Set ] object The object to mongoize.
39
42
  #
40
- # @return [ Array ] The object mongoized.
43
+ # @return [ Array | nil ] The object mongoized or nil.
41
44
  def mongoize(object)
42
- object.to_a
45
+ return if object.nil?
46
+ case object
47
+ when ::Set then ::Array.mongoize(object.to_a).uniq
48
+ when ::Array then ::Array.mongoize(object).uniq
49
+ end
43
50
  end
44
51
  end
45
52
  end
@@ -12,7 +12,7 @@ module Mongoid
12
12
  # @example Evolve the string.
13
13
  # "test".__evolve_object_id__
14
14
  #
15
- # @return [ String, BSON::ObjectId ] The evolved string.
15
+ # @return [ String | BSON::ObjectId ] The evolved string.
16
16
  def __evolve_object_id__
17
17
  convert_to_object_id
18
18
  end
@@ -22,7 +22,7 @@ module Mongoid
22
22
  # @example Evolve the string.
23
23
  # "test".__mongoize_object_id__
24
24
  #
25
- # @return [ String, BSON::ObjectId, nil ] The mongoized string.
25
+ # @return [ String | BSON::ObjectId | nil ] The mongoized string.
26
26
  def __mongoize_object_id__
27
27
  convert_to_object_id unless blank?
28
28
  end
@@ -65,7 +65,7 @@ module Mongoid
65
65
  # @example Is the string an id value?
66
66
  # "_id".mongoid_id?
67
67
  #
68
- # @return [ true, false ] If the string is id or _id.
68
+ # @return [ true | false ] If the string is id or _id.
69
69
  def mongoid_id?
70
70
  self =~ /\A(|_)id\z/
71
71
  end
@@ -76,7 +76,7 @@ module Mongoid
76
76
  # @example Is the string a number.
77
77
  # "1234.23".numeric?
78
78
  #
79
- # @return [ true, false ] If the string is a number.
79
+ # @return [ true | false ] If the string is a number.
80
80
  def numeric?
81
81
  !!Float(self)
82
82
  rescue ArgumentError
@@ -98,7 +98,7 @@ module Mongoid
98
98
  # @example Is the string a setter method?
99
99
  # "model=".writer?
100
100
  #
101
- # @return [ true, false ] If the string contains "=".
101
+ # @return [ true | false ] If the string contains "=".
102
102
  def writer?
103
103
  include?("=")
104
104
  end
@@ -108,7 +108,7 @@ module Mongoid
108
108
  # @example Is the string a valid Ruby identifier for use as a method name
109
109
  # "model=".valid_method_name?
110
110
  #
111
- # @return [ true, false ] If the string contains a valid Ruby identifier.
111
+ # @return [ true | false ] If the string contains a valid Ruby identifier.
112
112
  def valid_method_name?
113
113
  /[@$"-]/ !~ self
114
114
  end
@@ -118,7 +118,7 @@ module Mongoid
118
118
  # @example Is the string a setter method?
119
119
  # "price_before_type_cast".before_type_cast?
120
120
  #
121
- # @return [ true, false ] If the string ends with "_before_type_cast"
121
+ # @return [ true | false ] If the string ends with "_before_type_cast"
122
122
  def before_type_cast?
123
123
  ends_with?("_before_type_cast")
124
124
  end
@@ -128,7 +128,7 @@ module Mongoid
128
128
  # @example Is the object unconvertable?
129
129
  # object.unconvertable_to_bson?
130
130
  #
131
- # @return [ true, false ] If the object is unconvertable.
131
+ # @return [ true | false ] If the object is unconvertable.
132
132
  def unconvertable_to_bson?
133
133
  @unconvertable_to_bson ||= false
134
134
  end
@@ -142,25 +142,13 @@ module Mongoid
142
142
  # @example Convert to the object id.
143
143
  # string.convert_to_object_id
144
144
  #
145
- # @return [ String, BSON::ObjectId ] The string or the id.
145
+ # @return [ String | BSON::ObjectId ] The string or the id.
146
146
  def convert_to_object_id
147
147
  BSON::ObjectId.legal?(self) ? BSON::ObjectId.from_string(self) : self
148
148
  end
149
149
 
150
150
  module ClassMethods
151
151
 
152
- # Convert the object from its mongo friendly ruby type to this type.
153
- #
154
- # @example Demongoize the object.
155
- # String.demongoize(object)
156
- #
157
- # @param [ Object ] object The object to demongoize.
158
- #
159
- # @return [ String ] The object.
160
- def demongoize(object)
161
- object.try(:to_s)
162
- end
163
-
164
152
  # Turn the object from the ruby type we deal with to a Mongo friendly
165
153
  # type.
166
154
  #
@@ -171,8 +159,9 @@ module Mongoid
171
159
  #
172
160
  # @return [ String ] The object mongoized.
173
161
  def mongoize(object)
174
- demongoize(object)
162
+ object.try(:to_s)
175
163
  end
164
+ alias :demongoize :mongoize
176
165
  end
177
166
  end
178
167
  end
@@ -9,25 +9,13 @@ module Mongoid
9
9
  # @example Is the string an id value?
10
10
  # :_id.mongoid_id?
11
11
  #
12
- # @return [ true, false ] If the symbol is :id or :_id.
12
+ # @return [ true | false ] If the symbol is :id or :_id.
13
13
  def mongoid_id?
14
14
  to_s.mongoid_id?
15
15
  end
16
16
 
17
17
  module ClassMethods
18
18
 
19
- # Convert the object from its mongo friendly ruby type to this type.
20
- #
21
- # @example Demongoize the object.
22
- # Symbol.demongoize(object)
23
- #
24
- # @param [ Object ] object The object to demongoize.
25
- #
26
- # @return [ Symbol ] The object.
27
- def demongoize(object)
28
- object.try(:to_sym)
29
- end
30
-
31
19
  # Turn the object from the ruby type we deal with to a Mongo friendly
32
20
  # type.
33
21
  #
@@ -36,10 +24,11 @@ module Mongoid
36
24
  #
37
25
  # @param [ Object ] object The object to mongoize.
38
26
  #
39
- # @return [ Symbol ] The object mongoized.
27
+ # @return [ Symbol | nil ] The object mongoized or nil.
40
28
  def mongoize(object)
41
- demongoize(object)
29
+ object.try(:to_sym)
42
30
  end
31
+ alias :demongoize :mongoize
43
32
  end
44
33
  end
45
34
  end