mongoid 7.4.0 → 8.0.3

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 (391) 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 +52 -28
  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 +22 -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 -24
  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/cacheable.rb +2 -2
  59. data/lib/mongoid/changeable.rb +42 -7
  60. data/lib/mongoid/clients/options.rb +5 -1
  61. data/lib/mongoid/clients/sessions.rb +2 -14
  62. data/lib/mongoid/clients/validators/storage.rb +3 -3
  63. data/lib/mongoid/config/environment.rb +20 -4
  64. data/lib/mongoid/config/validators/client.rb +6 -6
  65. data/lib/mongoid/config.rb +32 -17
  66. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  67. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  68. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  69. data/lib/mongoid/contextual/atomic.rb +1 -1
  70. data/lib/mongoid/contextual/geo_near.rb +7 -7
  71. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  72. data/lib/mongoid/contextual/memory.rb +180 -21
  73. data/lib/mongoid/contextual/mongo.rb +237 -217
  74. data/lib/mongoid/contextual/none.rb +67 -5
  75. data/lib/mongoid/contextual/queryable.rb +1 -1
  76. data/lib/mongoid/contextual.rb +2 -2
  77. data/lib/mongoid/copyable.rb +32 -8
  78. data/lib/mongoid/criteria/findable.rb +7 -4
  79. data/lib/mongoid/criteria/includable.rb +24 -20
  80. data/lib/mongoid/criteria/marshalable.rb +10 -2
  81. data/lib/mongoid/criteria/permission.rb +1 -1
  82. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  83. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -13
  84. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  85. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  86. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  87. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  88. data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -14
  89. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  91. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  92. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  93. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  94. data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -3
  95. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -2
  96. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  97. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  98. data/lib/mongoid/criteria/queryable/key.rb +3 -3
  99. data/lib/mongoid/criteria/queryable/mergeable.rb +21 -0
  100. data/lib/mongoid/criteria/queryable/optional.rb +5 -11
  101. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  102. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  103. data/lib/mongoid/criteria/queryable/selectable.rb +31 -37
  104. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  105. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  106. data/lib/mongoid/criteria/queryable.rb +12 -7
  107. data/lib/mongoid/criteria/scopable.rb +2 -2
  108. data/lib/mongoid/criteria.rb +15 -35
  109. data/lib/mongoid/deprecable.rb +36 -0
  110. data/lib/mongoid/deprecation.rb +25 -0
  111. data/lib/mongoid/document.rb +98 -34
  112. data/lib/mongoid/equality.rb +12 -12
  113. data/lib/mongoid/errors/document_not_found.rb +33 -12
  114. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  115. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  116. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  117. data/lib/mongoid/errors/invalid_field.rb +6 -2
  118. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  119. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  120. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  121. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  122. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  123. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  124. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  125. data/lib/mongoid/errors/no_client_database.rb +1 -1
  126. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  127. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  128. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  129. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  130. data/lib/mongoid/errors.rb +2 -2
  131. data/lib/mongoid/extensions/array.rb +9 -7
  132. data/lib/mongoid/extensions/big_decimal.rb +33 -10
  133. data/lib/mongoid/extensions/binary.rb +42 -0
  134. data/lib/mongoid/extensions/boolean.rb +8 -2
  135. data/lib/mongoid/extensions/date.rb +26 -20
  136. data/lib/mongoid/extensions/date_time.rb +1 -1
  137. data/lib/mongoid/extensions/false_class.rb +1 -1
  138. data/lib/mongoid/extensions/float.rb +7 -4
  139. data/lib/mongoid/extensions/hash.rb +13 -6
  140. data/lib/mongoid/extensions/integer.rb +7 -4
  141. data/lib/mongoid/extensions/module.rb +1 -1
  142. data/lib/mongoid/extensions/object.rb +8 -6
  143. data/lib/mongoid/extensions/range.rb +41 -10
  144. data/lib/mongoid/extensions/regexp.rb +11 -4
  145. data/lib/mongoid/extensions/set.rb +11 -4
  146. data/lib/mongoid/extensions/string.rb +11 -22
  147. data/lib/mongoid/extensions/symbol.rb +4 -15
  148. data/lib/mongoid/extensions/time.rb +27 -16
  149. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  150. data/lib/mongoid/extensions/true_class.rb +1 -1
  151. data/lib/mongoid/extensions.rb +1 -0
  152. data/lib/mongoid/factory.rb +42 -7
  153. data/lib/mongoid/fields/foreign_key.rb +11 -4
  154. data/lib/mongoid/fields/localized.rb +9 -4
  155. data/lib/mongoid/fields/standard.rb +7 -7
  156. data/lib/mongoid/fields/validators/macro.rb +3 -9
  157. data/lib/mongoid/fields.rb +201 -35
  158. data/lib/mongoid/findable.rb +34 -13
  159. data/lib/mongoid/indexable/specification.rb +2 -2
  160. data/lib/mongoid/indexable/validators/options.rb +6 -2
  161. data/lib/mongoid/interceptable.rb +73 -13
  162. data/lib/mongoid/matchable.rb +1 -1
  163. data/lib/mongoid/matcher.rb +12 -7
  164. data/lib/mongoid/persistable/creatable.rb +18 -9
  165. data/lib/mongoid/persistable/deletable.rb +1 -1
  166. data/lib/mongoid/persistable/destroyable.rb +1 -1
  167. data/lib/mongoid/persistable/savable.rb +2 -2
  168. data/lib/mongoid/persistable/unsettable.rb +1 -1
  169. data/lib/mongoid/persistable/updatable.rb +19 -12
  170. data/lib/mongoid/persistable/upsertable.rb +2 -2
  171. data/lib/mongoid/persistable.rb +3 -3
  172. data/lib/mongoid/persistence_context.rb +63 -10
  173. data/lib/mongoid/query_cache.rb +8 -260
  174. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  175. data/lib/mongoid/reloadable.rb +7 -3
  176. data/lib/mongoid/scopable.rb +26 -22
  177. data/lib/mongoid/selectable.rb +1 -2
  178. data/lib/mongoid/serializable.rb +10 -6
  179. data/lib/mongoid/stateful.rb +35 -9
  180. data/lib/mongoid/tasks/database.rb +0 -2
  181. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  182. data/lib/mongoid/threaded.rb +12 -12
  183. data/lib/mongoid/timestamps/created.rb +1 -1
  184. data/lib/mongoid/timestamps/updated.rb +2 -2
  185. data/lib/mongoid/touchable.rb +2 -3
  186. data/lib/mongoid/traversable.rb +8 -4
  187. data/lib/mongoid/validatable/localizable.rb +1 -1
  188. data/lib/mongoid/validatable/macros.rb +0 -2
  189. data/lib/mongoid/validatable/presence.rb +2 -2
  190. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  191. data/lib/mongoid/validatable.rb +6 -6
  192. data/lib/mongoid/version.rb +1 -1
  193. data/lib/mongoid/warnings.rb +28 -0
  194. data/lib/mongoid.rb +2 -0
  195. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +11 -5
  196. data/spec/config/mongoid.yml +16 -0
  197. data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
  198. data/spec/integration/app_spec.rb +28 -26
  199. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  200. data/spec/integration/associations/embedded_dirty_spec.rb +28 -0
  201. data/spec/integration/associations/embedded_spec.rb +15 -0
  202. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  203. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  204. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  205. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  206. data/spec/integration/associations/has_one_spec.rb +97 -1
  207. data/spec/integration/associations/scope_option_spec.rb +1 -1
  208. data/spec/integration/callbacks_models.rb +95 -1
  209. data/spec/integration/callbacks_spec.rb +226 -4
  210. data/spec/integration/criteria/range_spec.rb +95 -1
  211. data/spec/integration/discriminator_key_spec.rb +115 -76
  212. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  213. data/spec/integration/i18n_fallbacks_spec.rb +1 -17
  214. data/spec/integration/matcher_examples_spec.rb +20 -13
  215. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  216. data/spec/integration/matcher_operator_spec.rb +3 -5
  217. data/spec/integration/persistence/range_field_spec.rb +350 -0
  218. data/spec/lite_spec_helper.rb +1 -1
  219. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  220. data/spec/mongoid/association/depending_spec.rb +9 -9
  221. data/spec/mongoid/association/eager_spec.rb +2 -1
  222. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  223. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  224. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
  225. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  226. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +219 -8
  227. data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -0
  228. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
  229. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  230. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  231. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  232. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  233. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  234. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  235. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
  236. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  237. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
  238. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +67 -4
  239. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  240. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  241. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  242. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +8 -8
  243. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -13
  244. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  245. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  246. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  247. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  248. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  249. data/spec/mongoid/association/syncable_spec.rb +14 -0
  250. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  251. data/spec/mongoid/atomic_spec.rb +22 -0
  252. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  253. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  254. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  255. data/spec/mongoid/attributes_spec.rb +524 -27
  256. data/spec/mongoid/cacheable_spec.rb +3 -3
  257. data/spec/mongoid/changeable_spec.rb +130 -13
  258. data/spec/mongoid/clients/factory_spec.rb +34 -42
  259. data/spec/mongoid/clients/options_spec.rb +1 -0
  260. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  261. data/spec/mongoid/clients_spec.rb +57 -2
  262. data/spec/mongoid/config/environment_spec.rb +39 -1
  263. data/spec/mongoid/config_spec.rb +104 -13
  264. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  265. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  266. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  267. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  268. data/spec/mongoid/contextual/memory_spec.rb +1336 -69
  269. data/spec/mongoid/contextual/mongo_spec.rb +1105 -174
  270. data/spec/mongoid/contextual/none_spec.rb +38 -0
  271. data/spec/mongoid/copyable_spec.rb +451 -1
  272. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  273. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  274. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  275. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  276. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  277. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  278. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  279. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  280. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  281. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  282. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  283. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  284. data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
  285. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
  286. data/spec/mongoid/criteria/queryable/selectable_spec.rb +289 -124
  287. data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
  288. data/spec/mongoid/criteria_projection_spec.rb +0 -1
  289. data/spec/mongoid/criteria_spec.rb +475 -1199
  290. data/spec/mongoid/document_fields_spec.rb +173 -24
  291. data/spec/mongoid/document_spec.rb +32 -41
  292. data/spec/mongoid/equality_spec.rb +12 -12
  293. data/spec/mongoid/errors/document_not_found_spec.rb +76 -0
  294. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  295. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  296. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  297. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  298. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  299. data/spec/mongoid/extensions/array_spec.rb +16 -2
  300. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  301. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  302. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  303. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  304. data/spec/mongoid/extensions/date_spec.rb +71 -1
  305. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  306. data/spec/mongoid/extensions/float_spec.rb +53 -74
  307. data/spec/mongoid/extensions/hash_spec.rb +30 -0
  308. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  309. data/spec/mongoid/extensions/range_spec.rb +255 -54
  310. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  311. data/spec/mongoid/extensions/set_spec.rb +106 -0
  312. data/spec/mongoid/extensions/string_spec.rb +53 -25
  313. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  314. data/spec/mongoid/extensions/time_spec.rb +634 -66
  315. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
  316. data/spec/mongoid/factory_spec.rb +61 -1
  317. data/spec/mongoid/fields/localized_spec.rb +37 -12
  318. data/spec/mongoid/fields_spec.rb +321 -50
  319. data/spec/mongoid/findable_spec.rb +80 -15
  320. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  321. data/spec/mongoid/indexable_spec.rb +39 -20
  322. data/spec/mongoid/interceptable_spec.rb +584 -5
  323. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  324. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  325. data/spec/mongoid/mongoizable_spec.rb +285 -0
  326. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  327. data/spec/mongoid/persistable/deletable_spec.rb +2 -2
  328. data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
  329. data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
  330. data/spec/mongoid/persistence_context_spec.rb +50 -1
  331. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  332. data/spec/mongoid/query_cache_spec.rb +0 -154
  333. data/spec/mongoid/reloadable_spec.rb +35 -2
  334. data/spec/mongoid/scopable_spec.rb +54 -16
  335. data/spec/mongoid/shardable_spec.rb +14 -0
  336. data/spec/mongoid/stateful_spec.rb +28 -0
  337. data/spec/mongoid/timestamps_spec.rb +390 -0
  338. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  339. data/spec/mongoid/touchable_spec.rb +116 -0
  340. data/spec/mongoid/touchable_spec_models.rb +12 -8
  341. data/spec/mongoid/traversable_spec.rb +4 -11
  342. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  343. data/spec/mongoid/validatable/uniqueness_spec.rb +59 -31
  344. data/spec/mongoid/warnings_spec.rb +35 -0
  345. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  346. data/spec/rails/mongoid_spec.rb +4 -16
  347. data/spec/shared/lib/mrss/constraints.rb +8 -16
  348. data/spec/shared/lib/mrss/docker_runner.rb +23 -3
  349. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  350. data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
  351. data/spec/shared/share/Dockerfile.erb +34 -48
  352. data/spec/shared/shlib/config.sh +27 -0
  353. data/spec/shared/shlib/server.sh +32 -19
  354. data/spec/shared/shlib/set_env.sh +37 -0
  355. data/spec/support/constraints.rb +24 -0
  356. data/spec/support/macros.rb +55 -0
  357. data/spec/support/models/augmentation.rb +12 -0
  358. data/spec/support/models/band.rb +3 -0
  359. data/spec/support/models/catalog.rb +24 -0
  360. data/spec/support/models/circus.rb +3 -0
  361. data/spec/support/models/code.rb +2 -0
  362. data/spec/support/models/fanatic.rb +8 -0
  363. data/spec/support/models/implant.rb +9 -0
  364. data/spec/support/models/label.rb +2 -0
  365. data/spec/support/models/membership.rb +1 -0
  366. data/spec/support/models/passport.rb +9 -0
  367. data/spec/support/models/person.rb +1 -0
  368. data/spec/support/models/player.rb +2 -0
  369. data/spec/support/models/powerup.rb +12 -0
  370. data/spec/support/models/registry.rb +1 -0
  371. data/spec/support/models/school.rb +14 -0
  372. data/spec/support/models/shield.rb +18 -0
  373. data/spec/support/models/student.rb +14 -0
  374. data/spec/support/models/weapon.rb +12 -0
  375. data/spec/support/schema_maps/schema_map_aws.json +17 -0
  376. data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  377. data/spec/support/schema_maps/schema_map_azure.json +17 -0
  378. data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  379. data/spec/support/schema_maps/schema_map_gcp.json +17 -0
  380. data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  381. data/spec/support/schema_maps/schema_map_kmip.json +17 -0
  382. data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  383. data/spec/support/schema_maps/schema_map_local.json +18 -0
  384. data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
  385. data/spec/support/spec_config.rb +4 -0
  386. data.tar.gz.sig +0 -0
  387. metadata +682 -619
  388. metadata.gz.sig +0 -0
  389. data/lib/mongoid/errors/eager_load.rb +0 -23
  390. data/lib/mongoid/errors/invalid_value.rb +0 -17
  391. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -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
@@ -14,19 +14,13 @@ module Mongoid
14
14
  self
15
15
  end
16
16
 
17
- # Constant for epoch - used when passing invalid times.
18
- #
19
- # @deprecated No longer used as a return value from #mongoize passed
20
- # an invalid time string.
21
- EPOCH = ::Time.utc(1970, 1, 1, 0, 0, 0)
22
-
23
17
  # Turn the object from the ruby type we deal with to a Mongo friendly
24
18
  # type.
25
19
  #
26
20
  # @example Mongoize the object.
27
21
  # time.mongoize
28
22
  #
29
- # @return [ Time ] The object mongoized.
23
+ # @return [ Time | nil ] The object mongoized or nil.
30
24
  def mongoize
31
25
  ::Time.mongoize(self)
32
26
  end
@@ -51,14 +45,28 @@ module Mongoid
51
45
  #
52
46
  # @param [ Time ] object The time from Mongo.
53
47
  #
54
- # @return [ Time ] The object as a date.
48
+ # @return [ Time | nil ] The object as a time.
55
49
  def demongoize(object)
56
- return nil if object.blank?
57
- object = object.getlocal unless Mongoid::Config.use_utc?
50
+ return if object.blank?
51
+ time = if object.acts_like?(:time)
52
+ Mongoid::Config.use_utc? ? object : object.getlocal
53
+ elsif object.acts_like?(:date)
54
+ ::Date.demongoize(object).to_time
55
+ elsif object.is_a?(String)
56
+ begin
57
+ object.__mongoize_time__
58
+ rescue ArgumentError
59
+ nil
60
+ end
61
+ end
62
+
63
+ return if time.nil?
64
+
58
65
  if Mongoid::Config.use_activesupport_time_zone?
59
- object = object.in_time_zone(Mongoid.time_zone)
66
+ time.in_time_zone(Mongoid.time_zone)
67
+ else
68
+ time
60
69
  end
61
- object
62
70
  end
63
71
 
64
72
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -69,11 +77,16 @@ module Mongoid
69
77
  #
70
78
  # @param [ Object ] object The object to mongoize.
71
79
  #
72
- # @return [ Time ] The object mongoized.
80
+ # @return [ Time | nil ] The object mongoized or nil.
73
81
  def mongoize(object)
74
- return nil if object.blank?
82
+ return if object.blank?
75
83
  begin
76
84
  time = object.__mongoize_time__
85
+ rescue ArgumentError
86
+ return
87
+ end
88
+
89
+ if time.acts_like?(:time)
77
90
  if object.respond_to?(:sec_fraction)
78
91
  ::Time.at(time.to_i, object.sec_fraction * 10**6).utc
79
92
  elsif time.respond_to?(:subsec)
@@ -81,8 +94,6 @@ module Mongoid
81
94
  else
82
95
  ::Time.at(time.to_i, time.usec).utc
83
96
  end
84
- rescue ArgumentError
85
- nil
86
97
  end
87
98
  end
88
99
  end
@@ -49,8 +49,7 @@ module Mongoid
49
49
  #
50
50
  # @return [ TimeWithZone ] The object as a date.
51
51
  def demongoize(object)
52
- return nil if object.blank?
53
- ::Time.demongoize(object).in_time_zone
52
+ ::Time.demongoize(object).try(:in_time_zone)
54
53
  end
55
54
 
56
55
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -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,6 +34,7 @@ end
34
34
 
35
35
  require "mongoid/extensions/array"
36
36
  require "mongoid/extensions/big_decimal"
37
+ require "mongoid/extensions/binary"
37
38
  require "mongoid/extensions/boolean"
38
39
  require "mongoid/extensions/date"
39
40
  require "mongoid/extensions/date_time"
@@ -6,9 +6,6 @@ module Mongoid
6
6
  module Factory
7
7
  extend self
8
8
 
9
- # @deprecated
10
- TYPE = "_type".freeze
11
-
12
9
  # Builds a new +Document+ from the supplied attributes.
13
10
  #
14
11
  # This method either instantiates klass or a descendant of klass if the attributes include
@@ -23,16 +20,32 @@ module Mongoid
23
20
  #
24
21
  # @param [ Class ] klass The class to instantiate from if _type is not present.
25
22
  # @param [ Hash ] attributes The document attributes.
23
+ # @param [ true | false ] execute_callbacks Flag specifies whether callbacks
24
+ # should be run.
26
25
  #
27
26
  # @return [ Document ] The instantiated document.
28
27
  def build(klass, attributes = nil)
28
+ execute_build(klass, attributes, execute_callbacks: true)
29
+ end
30
+
31
+ # Execute the build.
32
+ #
33
+ # @param [ Class ] klass The class to instantiate from if _type is not present.
34
+ # @param [ Hash ] attributes The document attributes.
35
+ # @param [ true | false ] execute_callbacks Flag specifies whether callbacks
36
+ # should be run.
37
+ #
38
+ # @return [ Document ] The instantiated document.
39
+ #
40
+ # @api private
41
+ def execute_build(klass, attributes = nil, execute_callbacks: true)
29
42
  attributes ||= {}
30
43
  dvalue = attributes[klass.discriminator_key] || attributes[klass.discriminator_key.to_sym]
31
44
  type = klass.get_discriminator_mapping(dvalue)
32
45
  if type
33
- type.new(attributes)
46
+ type.construct_document(attributes, execute_callbacks: execute_callbacks)
34
47
  else
35
- klass.new(attributes)
48
+ klass.construct_document(attributes, execute_callbacks: execute_callbacks)
36
49
  end
37
50
  end
38
51
 
@@ -63,12 +76,34 @@ module Mongoid
63
76
  #
64
77
  # @return [ Document ] The instantiated document.
65
78
  def from_db(klass, attributes = nil, criteria = nil, selected_fields = nil)
79
+ execute_from_db(klass, attributes, criteria, selected_fields, execute_callbacks: true)
80
+ end
81
+
82
+ # Execute from_db.
83
+ #
84
+ # @param [ Class ] klass The class to instantiate from if _type is not present.
85
+ # @param [ Hash ] attributes The document attributes.
86
+ # @param [ Criteria ] criteria Optional criteria object.
87
+ # @param [ Hash ] selected_fields Fields which were retrieved via
88
+ # #only. If selected_fields are specified, fields not listed in it
89
+ # will not be accessible in the returned document.
90
+ # @param [ true | false ] execute_callbacks Whether this method should
91
+ # invoke the callbacks. If true, the callbacks will be invoked normally.
92
+ # If false, the callbacks will be stored in the +pending_callbacks+ list
93
+ # and caller is responsible for invoking +run_pending_callbacks+ at a
94
+ # later time. Use this option to defer callback execution until the
95
+ # entire object graph containing embedded associations is constructed.
96
+ #
97
+ # @return [ Document ] The instantiated document.
98
+ #
99
+ # @api private
100
+ def execute_from_db(klass, attributes = nil, criteria = nil, selected_fields = nil, execute_callbacks: true)
66
101
  if criteria
67
102
  selected_fields ||= criteria.options[:fields]
68
103
  end
69
104
  type = (attributes || {})[klass.discriminator_key]
70
105
  if type.blank?
71
- obj = klass.instantiate(attributes, selected_fields)
106
+ obj = klass.instantiate_document(attributes, selected_fields, execute_callbacks: execute_callbacks)
72
107
  if criteria && criteria.association && criteria.parent_document
73
108
  obj.set_relation(criteria.association.inverse, criteria.parent_document)
74
109
  end
@@ -92,7 +127,7 @@ module Mongoid
92
127
  raise Errors::UnknownModel.new(camelized, type)
93
128
  end
94
129
 
95
- constantized.instantiate(attributes, selected_fields)
130
+ constantized.instantiate_document(attributes, selected_fields, execute_callbacks: execute_callbacks)
96
131
  end
97
132
  end
98
133
  end
@@ -43,7 +43,7 @@ module Mongoid
43
43
  # @example Is the field a foreign key?
44
44
  # field.foreign_key?
45
45
  #
46
- # @return [ true, false ] If the field is a foreign key.
46
+ # @return [ true | false ] If the field is a foreign key.
47
47
  def foreign_key?
48
48
  true
49
49
  end
@@ -60,6 +60,8 @@ module Mongoid
60
60
  if object_id_field? || object.is_a?(Document)
61
61
  if association.polymorphic?
62
62
  association.convert_to_foreign_key(object)
63
+ elsif object.is_a?(Document) && object.respond_to?(association.primary_key)
64
+ primary_key_field.evolve(object.send(association.primary_key))
63
65
  else
64
66
  object.__evolve_object_id__
65
67
  end
@@ -73,7 +75,7 @@ module Mongoid
73
75
  # @example Is the field lazy?
74
76
  # field.lazy?
75
77
  #
76
- # @return [ true, false ] If the field is lazy.
78
+ # @return [ true | false ] If the field is lazy.
77
79
  def lazy?
78
80
  type.resizable?
79
81
  end
@@ -99,7 +101,7 @@ module Mongoid
99
101
  # @example Is the field a BSON::ObjectId?
100
102
  # field.object_id_field?
101
103
  #
102
- # @return [ true, false ] If the field is a BSON::ObjectId.
104
+ # @return [ true | false ] If the field is a BSON::ObjectId.
103
105
  def object_id_field?
104
106
  @object_id_field ||=
105
107
  association.polymorphic? ? true : association.klass.using_object_ids?
@@ -110,7 +112,7 @@ module Mongoid
110
112
  # @example Is the field resizable?
111
113
  # field.resizable?
112
114
  #
113
- # @return [ true, false ] If the field is resizable.
115
+ # @return [ true | false ] If the field is resizable.
114
116
  def resizable?
115
117
  type.resizable?
116
118
  end
@@ -142,6 +144,11 @@ module Mongoid
142
144
  @related_id_field ||= association.klass.fields["_id"]
143
145
  end
144
146
 
147
+ def primary_key_field
148
+ @primary_key_field ||= association.klass.fields[association.primary_key]
149
+ end
150
+
151
+
145
152
  # This is used when default values need to be serialized. Most of the
146
153
  # time just return the object.
147
154
  #
@@ -14,7 +14,9 @@ module Mongoid
14
14
  #
15
15
  # @return [ Object ] The value for the current locale.
16
16
  def demongoize(object)
17
- if object
17
+ return if object.nil?
18
+ case object
19
+ when Hash
18
20
  type.demongoize(lookup(object))
19
21
  end
20
22
  end
@@ -24,7 +26,7 @@ module Mongoid
24
26
  # @example Is the field localized?
25
27
  # field.localized?
26
28
  #
27
- # @return [ true, false ] If the field is localized.
29
+ # @return [ true | false ] If the field is localized.
28
30
  def localized?
29
31
  true
30
32
  end
@@ -50,7 +52,7 @@ module Mongoid
50
52
  # @example Should fallbacks be used.
51
53
  # field.fallbacks?
52
54
  #
53
- # @return [ true, false ] If fallbacks should be used.
55
+ # @return [ true | false ] If fallbacks should be used.
54
56
  def fallbacks?
55
57
  return true if options[:fallbacks].nil?
56
58
  !!options[:fallbacks]
@@ -76,7 +78,10 @@ module Mongoid
76
78
  end
77
79
  return value unless value.nil?
78
80
  if fallbacks? && ::I18n.respond_to?(:fallbacks)
79
- object[::I18n.fallbacks[locale].map(&:to_s).find{ |loc| object.has_key?(loc) }]
81
+ fallback_key = ::I18n.fallbacks[locale].find do |loc|
82
+ object.key?(loc.to_s) || object.key?(loc)
83
+ end
84
+ object[fallback_key.to_s] || object[fallback_key]
80
85
  end
81
86
  end
82
87
  end
@@ -48,7 +48,7 @@ module Mongoid
48
48
  # @example Is the field a foreign key?
49
49
  # field.foreign_key?
50
50
  #
51
- # @return [ true, false ] If the field is a foreign key.
51
+ # @return [ true | false ] If the field is a foreign key.
52
52
  def foreign_key?
53
53
  false
54
54
  end
@@ -82,7 +82,7 @@ module Mongoid
82
82
  # @example Is the field lazy?
83
83
  # field.lazy?
84
84
  #
85
- # @return [ true, false ] If the field is lazy.
85
+ # @return [ true | false ] If the field is lazy.
86
86
  def lazy?
87
87
  false
88
88
  end
@@ -92,7 +92,7 @@ module Mongoid
92
92
  # @example Is the field localized?
93
93
  # field.localized?
94
94
  #
95
- # @return [ true, false ] If the field is localized.
95
+ # @return [ true | false ] If the field is localized.
96
96
  def localized?
97
97
  false
98
98
  end
@@ -112,7 +112,7 @@ module Mongoid
112
112
  # @example Is the field a BSON::ObjectId?
113
113
  # field.object_id_field?
114
114
  #
115
- # @return [ true, false ] If the field is a BSON::ObjectId.
115
+ # @return [ true | false ] If the field is a BSON::ObjectId.
116
116
  def object_id_field?
117
117
  @object_id_field ||= (type == BSON::ObjectId)
118
118
  end
@@ -122,7 +122,7 @@ module Mongoid
122
122
  # @example Does the field pre-process the default?
123
123
  # field.pre_processed?
124
124
  #
125
- # @return [ true, false ] If the field's default is pre-processed.
125
+ # @return [ true | false ] If the field's default is pre-processed.
126
126
  def pre_processed?
127
127
  @pre_processed ||=
128
128
  (options[:pre_processed] || (default_val && !default_val.is_a?(::Proc)))
@@ -161,7 +161,7 @@ module Mongoid
161
161
  #
162
162
  # @note Ruby's instance_exec was just too slow.
163
163
  #
164
- # @param [ Class, Module ] object The class or module the field is
164
+ # @param [ Class | Module ] object The class or module the field is
165
165
  # defined on.
166
166
  def define_default_method(object)
167
167
  object.__send__(:define_method, default_name, default_val)
@@ -177,7 +177,7 @@ module Mongoid
177
177
  #
178
178
  # @param [ Hash ] fields The field limitations.
179
179
  #
180
- # @return [ true, false ] If the field was included.
180
+ # @return [ true | false ] If the field was included.
181
181
  def included?(fields)
182
182
  (fields.values.first == 1 && fields[name.to_s] == 1) ||
183
183
  (fields.values.first == 0 && !fields.has_key?(name.to_s))
@@ -8,9 +8,6 @@ module Mongoid
8
8
  module Macro
9
9
  extend self
10
10
 
11
- # The warning message to give when a field is of type Symbol.
12
- FIELD_TYPE_IS_SYMBOL = 'The BSON symbol type is deprecated; use String instead'.freeze
13
-
14
11
  OPTIONS = [
15
12
  :as,
16
13
  :default,
@@ -69,7 +66,7 @@ module Mongoid
69
66
  def validate_field_name(klass, name)
70
67
  [name, "#{name}?".to_sym, "#{name}=".to_sym].each do |n|
71
68
  if Mongoid.destructive_fields.include?(n)
72
- raise Errors::InvalidField.new(klass, n)
69
+ raise Errors::InvalidField.new(klass, name, n)
73
70
  end
74
71
  end
75
72
  end
@@ -91,7 +88,7 @@ module Mongoid
91
88
  def validate_name_uniqueness(klass, name, options)
92
89
  if !options[:overwrite] && klass.fields.keys.include?(name.to_s)
93
90
  if Mongoid.duplicate_fields_exception
94
- raise Errors::InvalidField.new(klass, name)
91
+ raise Errors::InvalidField.new(klass, name, name)
95
92
  else
96
93
  Mongoid.logger.warn("Overwriting existing field #{name} in class #{klass.name}.") if Mongoid.logger
97
94
  end
@@ -117,10 +114,7 @@ module Mongoid
117
114
  end
118
115
 
119
116
  if option == :type && options[option] == Symbol
120
- @field_type_is_symbol_warned ||= begin
121
- Mongoid.logger.warn(FIELD_TYPE_IS_SYMBOL)
122
- true
123
- end
117
+ Mongoid::Warnings.warn_symbol_type_deprecated
124
118
  end
125
119
  end
126
120
  end