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
@@ -45,7 +45,7 @@ module Mongoid
45
45
  # @example Get the global database override.
46
46
  # Threaded.database_override
47
47
  #
48
- # @return [ String, Symbol ] The override.
48
+ # @return [ String | Symbol ] The override.
49
49
  def database_override
50
50
  Thread.current[DATABASE_OVERRIDE_KEY]
51
51
  end
@@ -55,9 +55,9 @@ module Mongoid
55
55
  # @example Set the global database override.
56
56
  # Threaded.database_override = :testing
57
57
  #
58
- # @param [ String, Symbol ] name The global override name.
58
+ # @param [ String | Symbol ] name The global override name.
59
59
  #
60
- # @return [ String, Symbol ] The override.
60
+ # @return [ String | Symbol ] The override.
61
61
  def database_override=(name)
62
62
  Thread.current[DATABASE_OVERRIDE_KEY] = name
63
63
  end
@@ -167,7 +167,7 @@ module Mongoid
167
167
  # @example Get the global client override.
168
168
  # Threaded.client_override
169
169
  #
170
- # @return [ String, Symbol ] The override.
170
+ # @return [ String | Symbol ] The override.
171
171
  def client_override
172
172
  Thread.current[CLIENT_OVERRIDE_KEY]
173
173
  end
@@ -177,9 +177,9 @@ module Mongoid
177
177
  # @example Set the global client override.
178
178
  # Threaded.client_override = :testing
179
179
  #
180
- # @param [ String, Symbol ] name The global override name.
180
+ # @param [ String | Symbol ] name The global override name.
181
181
  #
182
- # @return [ String, Symbol ] The override.
182
+ # @return [ String | Symbol ] The override.
183
183
  def client_override=(name)
184
184
  Thread.current[CLIENT_OVERRIDE_KEY] = name
185
185
  end
@@ -255,7 +255,7 @@ module Mongoid
255
255
  #
256
256
  # @param [ Document ] document The document to check.
257
257
  #
258
- # @return [ true, false ] If the document is autosaved.
258
+ # @return [ true | false ] If the document is autosaved.
259
259
  def autosaved?(document)
260
260
  autosaves_for(document.class).include?(document._id)
261
261
  end
@@ -267,7 +267,7 @@ module Mongoid
267
267
  #
268
268
  # @param [ Document ] document The document to check.
269
269
  #
270
- # @return [ true, false ] If the document is validated.
270
+ # @return [ true | false ] If the document is validated.
271
271
  def validated?(document)
272
272
  validations_for(document.class).include?(document._id)
273
273
  end
@@ -322,7 +322,7 @@ module Mongoid
322
322
  #
323
323
  # @param [ Mongo::Session ] session The session to save.
324
324
  def set_session(session)
325
- Thread.current[:session] = session
325
+ Thread.current["[mongoid]:session"] = session
326
326
  end
327
327
 
328
328
  # Get the cached session for this thread.
@@ -330,9 +330,9 @@ module Mongoid
330
330
  # @example Get the session for this thread.
331
331
  # Threaded.get_session
332
332
  #
333
- # @return [ Mongo::Session, nil ] The session cached on this thread or nil.
333
+ # @return [ Mongo::Session | nil ] The session cached on this thread or nil.
334
334
  def get_session
335
- Thread.current[:session]
335
+ Thread.current["[mongoid]:session"]
336
336
  end
337
337
 
338
338
  # Clear the cached session for this thread.
@@ -344,7 +344,7 @@ module Mongoid
344
344
  def clear_session
345
345
  session = get_session
346
346
  session.end_session if session
347
- Thread.current[:session] = nil
347
+ Thread.current["[mongoid]:session"] = nil
348
348
  end
349
349
  end
350
350
  end
@@ -23,7 +23,7 @@ module Mongoid
23
23
  # person.set_created_at
24
24
  def set_created_at
25
25
  if !timeless? && !created_at
26
- time = Time.now.utc
26
+ time = Time.configured.now
27
27
  self.updated_at = time if is_a?(Updated) && !updated_at_changed?
28
28
  self.created_at = time
29
29
  end
@@ -24,7 +24,7 @@ module Mongoid
24
24
  # person.set_updated_at
25
25
  def set_updated_at
26
26
  if able_to_set_updated_at?
27
- self.updated_at = Time.now.utc unless updated_at_changed?
27
+ self.updated_at = Time.configured.now unless updated_at_changed?
28
28
  end
29
29
 
30
30
  clear_timeless_option
@@ -35,7 +35,7 @@ module Mongoid
35
35
  # @example Can the timestamp be set?
36
36
  # document.able_to_set_updated_at?
37
37
  #
38
- # @return [ true, false ] If the timestamp can be set.
38
+ # @return [ true | false ] If the timestamp can be set.
39
39
  def able_to_set_updated_at?
40
40
  !frozen? && !timeless? && (new_record? || changed?)
41
41
  end
@@ -19,10 +19,10 @@ module Mongoid
19
19
  #
20
20
  # @param [ Symbol ] field The name of an additional field to update.
21
21
  #
22
- # @return [ true/false ] false if record is new_record otherwise true.
22
+ # @return [ true/false ] false if document is new_record otherwise true.
23
23
  def touch(field = nil)
24
24
  return false if _root.new_record?
25
- current = Time.now
25
+ current = Time.configured.now
26
26
  field = database_field_name(field)
27
27
  write_attribute(:updated_at, current) if respond_to?("updated_at=")
28
28
  write_attribute(field, current) if field
@@ -60,7 +60,6 @@ module Mongoid
60
60
 
61
61
  # Callbacks are invoked on the composition root first and on the
62
62
  # leaf-most embedded document last.
63
- # TODO add tests, see MONGOID-5015.
64
63
  run_callbacks(:touch)
65
64
  true
66
65
  end
@@ -178,7 +178,10 @@ module Mongoid
178
178
  to_expand = []
179
179
  expanding.each do |child|
180
180
  next if expanded[child]
181
- expanded[child] = true
181
+ # Don't mark expanded if _id is nil, since documents are compared by
182
+ # their _ids, multiple embedded documents with nil ids will compare
183
+ # equally, and some documents will not be expanded.
184
+ expanded[child] = true if child._id
182
185
  children << child
183
186
  to_expand += child._children
184
187
  end
@@ -200,7 +203,7 @@ module Mongoid
200
203
  # @example Check if the document is a subclass
201
204
  # Square.new.hereditary?
202
205
  #
203
- # @return [ true, false ] True if hereditary, false if not.
206
+ # @return [ true | false ] True if hereditary, false if not.
204
207
  def hereditary?
205
208
  self.class.hereditary?
206
209
  end
@@ -230,6 +233,7 @@ module Mongoid
230
233
  def remove_child(child)
231
234
  name = child.association_name
232
235
  if child.embedded_one?
236
+ self.attributes.delete(child._association.store_as)
233
237
  remove_ivar(name)
234
238
  else
235
239
  relation = send(name)
@@ -279,7 +283,7 @@ module Mongoid
279
283
  # @example Is the document the root?
280
284
  # document._root?
281
285
  #
282
- # @return [ true, false ] If the document is the root.
286
+ # @return [ true | false ] If the document is the root.
283
287
  def _root?
284
288
  _parent ? false : true
285
289
  end
@@ -291,7 +295,7 @@ module Mongoid
291
295
  # @example Check if the document is a subclass.
292
296
  # Square.hereditary?
293
297
  #
294
- # @return [ true, false ] True if hereditary, false if not.
298
+ # @return [ true | false ] True if hereditary, false if not.
295
299
  def hereditary?
296
300
  !!(Mongoid::Document > superclass)
297
301
  end
@@ -12,7 +12,7 @@ module Mongoid
12
12
  # validator.validate_each(model, :name, "value")
13
13
  #
14
14
  # @param [ Document ] document The document.
15
- # @param [ Symbol, String ] attribute The attribute to validate.
15
+ # @param [ Symbol | String ] attribute The attribute to validate.
16
16
  # @param [ Object ] value The attribute value.
17
17
  def validate_each(document, attribute, value)
18
18
  field = document.fields[document.database_field_name(attribute)]
@@ -19,7 +19,6 @@ module Mongoid
19
19
  # end
20
20
  #
21
21
  # @param [ Array ] args The arguments to pass to the validator.
22
- #
23
22
  def validates_associated(*args)
24
23
  validates_with(AssociatedValidator, _merge_attributes(args))
25
24
  end
@@ -37,7 +36,6 @@ module Mongoid
37
36
  # end
38
37
  #
39
38
  # @param [ Array ] args The arguments to pass to the validator.
40
- #
41
39
  def validates_uniqueness_of(*args)
42
40
  validates_with(UniquenessValidator, _merge_attributes(args))
43
41
  end
@@ -56,7 +56,7 @@ module Mongoid
56
56
  # @param [ Symbol ] attr The attribute.
57
57
  # @param [ Object ] value The value.
58
58
  #
59
- # @return [ true, false ] If the doc is missing.
59
+ # @return [ true | false ] If the doc is missing.
60
60
  def relation_or_fk_missing?(doc, attr, value)
61
61
  return true if value.blank? && doc.send(attr).blank?
62
62
  association = doc.relations[attr.to_s]
@@ -72,7 +72,7 @@ module Mongoid
72
72
  #
73
73
  # @param [ Object ] value The value.
74
74
  #
75
- # @return [ true, false ] If the value is not present.
75
+ # @return [ true | false ] If the value is not present.
76
76
  def not_present?(value)
77
77
  value.blank? && value != false
78
78
  end
@@ -16,7 +16,7 @@ module Mongoid
16
16
  # end
17
17
  #
18
18
  # It is also possible to limit the uniqueness constraint to a set of
19
- # records matching certain conditions:
19
+ # documents matching certain conditions:
20
20
  # class Person
21
21
  # include Mongoid::Document
22
22
  # field :title
@@ -74,7 +74,7 @@ module Mongoid
74
74
  # @example Is the validation case sensitive?
75
75
  # validator.case_sensitive?
76
76
  #
77
- # @return [ true, false ] If the validation is case sensitive.
77
+ # @return [ true | false ] If the validation is case sensitive.
78
78
  def case_sensitive?
79
79
  !(options[:case_sensitive] == false)
80
80
  end
@@ -86,7 +86,7 @@ module Mongoid
86
86
  # @example Create the criteria.
87
87
  # validator.create_criteria(User, user, :name, "syd")
88
88
  #
89
- # @param [ Class, Proxy ] base The base to execute the criteria from.
89
+ # @param [ Class | Proxy ] base The base to execute the criteria from.
90
90
  # @param [ Document ] document The document to validate.
91
91
  # @param [ Symbol ] attribute The name of the attribute.
92
92
  # @param [ Object ] value The value of the object.
@@ -149,7 +149,7 @@ module Mongoid
149
149
  #
150
150
  # @param [ Object ] value The value to filter.
151
151
  #
152
- # @return [ Object, Regexp ] The value, filtered or not.
152
+ # @return [ Object | Regexp ] The value, filtered or not.
153
153
  def filter(value)
154
154
  !case_sensitive? && value ? /\A#{Regexp.escape(value.to_s)}\z/i : value
155
155
  end
@@ -182,7 +182,7 @@ module Mongoid
182
182
  #
183
183
  # @param [ Document ] document The embedded document.
184
184
  #
185
- # @return [ true, false ] If the validation should be skipped.
185
+ # @return [ true | false ] If the validation should be skipped.
186
186
  def skip_validation?(document)
187
187
  !document._parent || document.embedded_one?
188
188
  end
@@ -196,7 +196,7 @@ module Mongoid
196
196
  #
197
197
  # @param [ Document ] document The embedded document.
198
198
  #
199
- # @return [ true, false ] If the scope reference has changed.
199
+ # @return [ true | false ] If the scope reference has changed.
200
200
  def scope_value_changed?(document)
201
201
  Array.wrap(options[:scope]).any? do |item|
202
202
  document.send("attribute_changed?", item.to_s)
@@ -242,6 +242,7 @@ module Mongoid
242
242
  relation = document._parent.send(document.association_name)
243
243
  criteria = create_criteria(relation, document, attribute, value)
244
244
  criteria = criteria.merge(options[:conditions].call) if options[:conditions]
245
+ criteria = criteria.limit(2)
245
246
  add_error(document, attribute, value) if criteria.count > 1
246
247
  end
247
248
 
@@ -277,7 +278,7 @@ module Mongoid
277
278
  # @param [ Document ] document The document getting validated.
278
279
  # @param [ Symbol ] attribute The attribute to validate.
279
280
  #
280
- # @return [ true, false ] If we need to validate.
281
+ # @return [ true | false ] If we need to validate.
281
282
  def validation_required?(document, attribute)
282
283
  document.new_record? ||
283
284
  document.send("attribute_changed?", attribute.to_s) ||
@@ -294,7 +295,7 @@ module Mongoid
294
295
  # @param [ Document ] document The document getting validated.
295
296
  # @param [ Symbol ] attribute The attribute to validate.
296
297
  #
297
- # @return [ true, false ] If the attribute is localized.
298
+ # @return [ true | false ] If the attribute is localized.
298
299
  def localized?(document, attribute)
299
300
  document.fields[document.database_field_name(attribute)].try(:localized?)
300
301
  end
@@ -44,7 +44,7 @@ module Mongoid
44
44
  #
45
45
  # @param [ Hash ] options The options to check.
46
46
  #
47
- # @return [ true, false ] If we are validating.
47
+ # @return [ true | false ] If we are validating.
48
48
  def performing_validations?(options = {})
49
49
  options[:validate].nil? ? true : options[:validate]
50
50
  end
@@ -83,7 +83,7 @@ module Mongoid
83
83
  #
84
84
  # @param [ Symbol ] context The optional validation context.
85
85
  #
86
- # @return [ true, false ] True if valid, false if not.
86
+ # @return [ true | false ] True if valid, false if not.
87
87
  def valid?(context = nil)
88
88
  super context ? context : (new_record? ? :create : :update)
89
89
  end
@@ -93,7 +93,7 @@ module Mongoid
93
93
  # @example Is the document validated?
94
94
  # document.validated?
95
95
  #
96
- # @return [ true, false ] Has the document already been validated?
96
+ # @return [ true | false ] Has the document already been validated?
97
97
  def validated?
98
98
  Threaded.validated?(self)
99
99
  end
@@ -103,7 +103,7 @@ module Mongoid
103
103
  # @example Are we validating with a query?
104
104
  # document.validating_with_query?
105
105
  #
106
- # @return [ true, false ] If we are validating with a query.
106
+ # @return [ true | false ] If we are validating with a query.
107
107
  def validating_with_query?
108
108
  self.class.validating_with_query?
109
109
  end
@@ -129,7 +129,7 @@ module Mongoid
129
129
  # @example Validate with a specific validator.
130
130
  # validates_with MyValidator, on: :create
131
131
  #
132
- # @param [ Class<Array>, Hash ] args The validator classes and options.
132
+ # @param [ Class<Array> | Hash ] args The validator classes and options.
133
133
  #
134
134
  # @note See ActiveModel::Validations::With for full options. This is
135
135
  # overridden to add autosave functionality when presence validation is
@@ -151,7 +151,7 @@ module Mongoid
151
151
  # @example Are we validating with a query?
152
152
  # Model.validating_with_query?
153
153
  #
154
- # @return [ true, false ] If we are validating with a query.
154
+ # @return [ true | false ] If we are validating with a query.
155
155
  def validating_with_query?
156
156
  Threaded.executing?("#{name}-validate-with-query")
157
157
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mongoid
4
- VERSION = "7.4.0"
4
+ VERSION = "8.0.3"
5
5
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid
4
+
5
+ # Encapsulates behavior around logging and caching warnings so they are only
6
+ # logged once.
7
+ #
8
+ # @api private
9
+ module Warnings
10
+
11
+ class << self
12
+ def warning(id, message)
13
+ singleton_class.class_eval do
14
+ define_method("warn_#{id}") do
15
+ unless instance_variable_get("@#{id}")
16
+ Mongoid.logger.warn(message)
17
+ instance_variable_set("@#{id}", true)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ warning :geo_haystack_deprecated, 'The geoHaystack type is deprecated.'
25
+ warning :as_json_compact_deprecated, '#as_json :compact option is deprecated. Please call #compact on the returned Hash object instead.'
26
+ warning :symbol_type_deprecated, 'The BSON Symbol type is deprecated by MongoDB. Please use String or StringifiedSymbol field types instead of the Symbol field type'
27
+ end
28
+ end
data/lib/mongoid.rb CHANGED
@@ -16,6 +16,7 @@ require "mongo"
16
16
  require 'mongo/active_support'
17
17
 
18
18
  require "mongoid/version"
19
+ require "mongoid/deprecable"
19
20
  require "mongoid/config"
20
21
  require "mongoid/persistence_context"
21
22
  require "mongoid/loggable"
@@ -23,6 +24,7 @@ require "mongoid/clients"
23
24
  require "mongoid/document"
24
25
  require "mongoid/tasks/database"
25
26
  require "mongoid/query_cache"
27
+ require "mongoid/warnings"
26
28
 
27
29
  # If we are using Rails then we will include the Mongoid railtie. This has all
28
30
  # the nifty initializers that Mongoid needs.
@@ -80,8 +80,13 @@ development:
80
80
  # (default: 10)
81
81
  # connect_timeout: 10
82
82
 
83
- # The timeout to wait to execute operations on a socket before raising an error.
84
- # (default: 5)
83
+ # How long to wait for a response for each operation sent to the
84
+ # server. This timeout should be set to a value larger than the
85
+ # processing time for the longest operation that will be executed
86
+ # by the application. Note that this is a client-side timeout;
87
+ # the server may continue executing an operation after the client
88
+ # aborts it with the SocketTimeout exception.
89
+ # (default: nil, meaning no timeout)
85
90
  # socket_timeout: 5
86
91
 
87
92
  # The name of the replica set to connect to. Servers provided as seeds that do
@@ -120,9 +125,6 @@ development:
120
125
  # database name is not explicitly defined. (default: nil)
121
126
  # app_name: MyApplicationName
122
127
 
123
- # Create indexes in background by default. (default: false)
124
- # background_indexing: false
125
-
126
128
  # Mark belongs_to associations as required by default, so that saving a
127
129
  # model with a missing belongs_to association will trigger a validation
128
130
  # error. (default: true)
@@ -167,6 +169,10 @@ development:
167
169
  # (default: false)
168
170
  # use_utc: false
169
171
 
172
+ # (Deprecated) In MongoDB 4.0 and earlier, set whether to create
173
+ # indexes in the background by default. (default: false)
174
+ # background_indexing: false
175
+
170
176
  test:
171
177
  clients:
172
178
  default:
@@ -40,6 +40,22 @@ test:
40
40
  app_name: 'testing'
41
41
  background_indexing: false
42
42
  join_contexts: false
43
+ driver_options:
44
+ broken_view_options: false
45
+ # Don't set validate_update_replace here, as it is used to check if the
46
+ # default driver options are kept in Mongoid.
47
+ test_nil:
48
+ clients:
49
+ default:
50
+ database: mongoid_test
51
+ hosts:
52
+ <% SpecConfig.instance.addresses.each do |address| %>
53
+ - <%= address %>
54
+ <% end %>
55
+ driver_options:
56
+ broken_view_options:
57
+ validate_update_replace: false
58
+
43
59
  test_with_max_staleness:
44
60
  clients:
45
61
  default:
@@ -0,0 +1,27 @@
1
+ test:
2
+ clients:
3
+ default:
4
+ database: mongoid_test
5
+ hosts:
6
+ <% SpecConfig.instance.addresses.each do |address| %>
7
+ - <%= address %>
8
+ <% end %>
9
+ options:
10
+ auto_encryption_options:
11
+ key_vault_namespace: 'admin.datakeys'
12
+ kms_providers:
13
+ local:
14
+ key: "z7iYiYKLuYymEWtk4kfny1ESBwwFdA58qMqff96A8ghiOcIK75lJGPUIocku8LOFjQuEgeIP4xlln3s7r93FV9J5sAE7zg8U"
15
+ schema_map:
16
+ blog_development.comments:
17
+ properties:
18
+ message:
19
+ encrypt:
20
+ keyId:
21
+ - !ruby/object:BSON::Binary
22
+ data: !binary |-
23
+ R/AgNcxASFiiJWKXqWGo5w==
24
+ type: :uuid
25
+ bsonType: "string"
26
+ algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
27
+ bsonType: "object"
@@ -5,6 +5,11 @@ require 'spec_helper'
5
5
  BASE = File.join(File.dirname(__FILE__), '../..')
6
6
  TMP_BASE = File.join(BASE, 'tmp')
7
7
 
8
+ def check_call(cmd, **opts)
9
+ puts "Executing #{cmd.join(' ')}"
10
+ Mrss::ChildProcessHelper.check_call(cmd, **opts)
11
+ end
12
+
8
13
  describe 'Mongoid application tests' do
9
14
  before(:all) do
10
15
  unless SpecConfig.instance.app_tests?
@@ -87,14 +92,14 @@ describe 'Mongoid application tests' do
87
92
 
88
93
  Dir.chdir(TMP_BASE) do
89
94
  FileUtils.rm_rf('mongoid-test')
90
- Mrss::ChildProcessHelper.check_call(%w(rails new mongoid-test --skip-spring --skip-active-record), env: clean_env)
95
+ check_call(%w(rails new mongoid-test --skip-spring --skip-active-record), env: clean_env)
91
96
 
92
97
  Dir.chdir('mongoid-test') do
93
98
  adjust_app_gemfile
94
- Mrss::ChildProcessHelper.check_call(%w(bundle install), env: clean_env)
99
+ check_call(%w(bundle install), env: clean_env)
95
100
 
96
- Mrss::ChildProcessHelper.check_call(%w(rails g model post), env: clean_env)
97
- Mrss::ChildProcessHelper.check_call(%w(rails g model comment post:belongs_to), env: clean_env)
101
+ check_call(%w(rails g model post), env: clean_env)
102
+ check_call(%w(rails g model comment post:belongs_to), env: clean_env)
98
103
 
99
104
  # https://jira.mongodb.org/browse/MONGOID-4885
100
105
  comment_text = File.read('app/models/comment.rb')
@@ -109,16 +114,16 @@ describe 'Mongoid application tests' do
109
114
 
110
115
  Dir.chdir(TMP_BASE) do
111
116
  FileUtils.rm_rf('mongoid-test-config')
112
- Mrss::ChildProcessHelper.check_call(%w(rails new mongoid-test-config --skip-spring --skip-active-record), env: clean_env)
117
+ check_call(%w(rails new mongoid-test-config --skip-spring --skip-active-record), env: clean_env)
113
118
 
114
119
  Dir.chdir('mongoid-test-config') do
115
120
  adjust_app_gemfile
116
- Mrss::ChildProcessHelper.check_call(%w(bundle install), env: clean_env)
121
+ check_call(%w(bundle install), env: clean_env)
117
122
 
118
123
  mongoid_config_file = File.join(TMP_BASE,'mongoid-test-config/config/mongoid.yml')
119
124
 
120
125
  File.exist?(mongoid_config_file).should be false
121
- Mrss::ChildProcessHelper.check_call(%w(rails g mongoid:config), env: clean_env)
126
+ check_call(%w(rails g mongoid:config), env: clean_env)
122
127
  File.exist?(mongoid_config_file).should be true
123
128
 
124
129
  config_text = File.read(mongoid_config_file)
@@ -130,10 +135,11 @@ describe 'Mongoid application tests' do
130
135
  end
131
136
 
132
137
  def install_rails
133
- Mrss::ChildProcessHelper.check_call(%w(gem uni rails -a))
138
+ check_call(%w(gem uni rails -a))
134
139
  if (rails_version = SpecConfig.instance.rails_version) == 'master'
135
140
  else
136
- Mrss::ChildProcessHelper.check_call(%w(gem install rails --no-document -v) + [rails_version])
141
+ check_call(%w(gem list))
142
+ check_call(%w(gem install rails --no-document -v) + ["~> #{rails_version}.0"])
137
143
  end
138
144
  end
139
145
 
@@ -157,7 +163,15 @@ describe 'Mongoid application tests' do
157
163
  before do
158
164
  Dir.chdir(APP_PATH) do
159
165
  remove_bundler_req
160
- Mrss::ChildProcessHelper.check_call(%w(bundle install), env: env)
166
+
167
+ if BSON::Environment.jruby?
168
+ # Remove existing Gemfile.lock - see
169
+ # https://github.com/rubygems/rubygems/issues/3231
170
+ require 'fileutils'
171
+ FileUtils.rm_f('Gemfile.lock')
172
+ end
173
+
174
+ check_call(%w(bundle install), env: env)
161
175
  write_mongoid_yml
162
176
  end
163
177
 
@@ -171,7 +185,7 @@ describe 'Mongoid application tests' do
171
185
  end
172
186
  index.should be nil
173
187
 
174
- Mrss::ChildProcessHelper.check_call(%w(bundle exec rake db:mongoid:create_indexes),
188
+ check_call(%w(bundle exec rake db:mongoid:create_indexes -t),
175
189
  cwd: APP_PATH, env: env)
176
190
 
177
191
  index = client['posts'].indexes.detect do |index|
@@ -189,11 +203,11 @@ describe 'Mongoid application tests' do
189
203
  def clone_application(repo_url, subdir: nil)
190
204
  Dir.chdir(TMP_BASE) do
191
205
  FileUtils.rm_rf(File.basename(repo_url))
192
- Mrss::ChildProcessHelper.check_call(%w(git clone) + [repo_url])
206
+ check_call(%w(git clone) + [repo_url])
193
207
  Dir.chdir(File.join(*[File.basename(repo_url), subdir].compact)) do
194
208
  adjust_app_gemfile
195
209
  adjust_rails_defaults
196
- Mrss::ChildProcessHelper.check_call(%w(bundle install), env: clean_env)
210
+ check_call(%w(bundle install), env: clean_env)
197
211
  puts `git diff`
198
212
 
199
213
  write_mongoid_yml
@@ -281,18 +295,6 @@ describe 'Mongoid application tests' do
281
295
  f << lines.join
282
296
  end
283
297
  end
284
-
285
- if rails_version == '5.1'
286
- secrets = {
287
- 'development' => {
288
- 'secret_key_base' => 'abracadabra',
289
- 'my_secret_token' => 'very_secret',
290
- },
291
- }
292
- File.open('config/secrets.yml', 'w') do |f|
293
- f << YAML.dump(secrets)
294
- end
295
- end
296
298
  end
297
299
 
298
300
  def remove_bundler_req
@@ -316,7 +318,7 @@ describe 'Mongoid application tests' do
316
318
  # in `initialize': too long unix socket path (126bytes given but 108bytes max) (ArgumentError)
317
319
  # Is it trying to create unix sockets in current directory?
318
320
  # https://stackoverflow.com/questions/30302021/rails-runner-without-spring
319
- Mrss::ChildProcessHelper.check_call(%w(bin/spring binstub --remove --all), env: clean_env)
321
+ check_call(%w(bin/spring binstub --remove --all), env: clean_env)
320
322
  end
321
323
 
322
324
  def clean_env
@@ -12,4 +12,22 @@ describe 'belongs_to associations' do
12
12
  expect(child).to be_valid
13
13
  end
14
14
  end
15
+
16
+ context 'when an anonymous class defines a belongs_to association' do
17
+ let(:klass) do
18
+ Class.new do
19
+ include Mongoid::Document
20
+ belongs_to :movie
21
+ end
22
+ end
23
+
24
+ it 'loads the association correctly' do
25
+ expect { klass }.to_not raise_error
26
+ expect { klass.new.movie }.to_not raise_error
27
+ instance = klass.new
28
+ movie = Movie.new
29
+ instance.movie = movie
30
+ expect(instance.movie).to eq movie
31
+ end
32
+ end
15
33
  end