mongoid 7.5.4 → 8.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/README.md +6 -6
  4. data/Rakefile +44 -46
  5. data/lib/config/locales/en.yml +92 -43
  6. data/lib/mongoid/association/accessors.rb +44 -11
  7. data/lib/mongoid/association/bindable.rb +50 -2
  8. data/lib/mongoid/association/builders.rb +5 -3
  9. data/lib/mongoid/association/constrainable.rb +0 -1
  10. data/lib/mongoid/association/eager_loadable.rb +32 -7
  11. data/lib/mongoid/association/embedded/batchable.rb +34 -11
  12. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  13. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  14. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  15. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
  16. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  17. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  18. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
  19. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +85 -46
  20. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  21. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
  22. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
  23. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  24. data/lib/mongoid/association/macros.rb +8 -1
  25. data/lib/mongoid/association/many.rb +11 -7
  26. data/lib/mongoid/association/nested/many.rb +5 -4
  27. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  28. data/lib/mongoid/association/nested/one.rb +45 -7
  29. data/lib/mongoid/association/one.rb +2 -2
  30. data/lib/mongoid/association/options.rb +9 -9
  31. data/lib/mongoid/association/proxy.rb +15 -4
  32. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  33. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  34. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  35. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  36. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  37. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  38. data/lib/mongoid/association/referenced/eager.rb +2 -2
  39. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
  40. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  41. data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
  42. data/lib/mongoid/association/referenced/has_many/proxy.rb +40 -21
  43. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  44. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  45. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  46. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  47. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  48. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  49. data/lib/mongoid/association/reflections.rb +4 -4
  50. data/lib/mongoid/association/relatable.rb +44 -10
  51. data/lib/mongoid/association.rb +5 -5
  52. data/lib/mongoid/atomic/modifiers.rb +2 -2
  53. data/lib/mongoid/atomic.rb +16 -7
  54. data/lib/mongoid/attributes/dynamic.rb +4 -4
  55. data/lib/mongoid/attributes/nested.rb +6 -6
  56. data/lib/mongoid/attributes/processing.rb +37 -6
  57. data/lib/mongoid/attributes/projector.rb +2 -2
  58. data/lib/mongoid/attributes/readonly.rb +11 -6
  59. data/lib/mongoid/attributes.rb +51 -42
  60. data/lib/mongoid/changeable.rb +147 -14
  61. data/lib/mongoid/clients/options.rb +5 -1
  62. data/lib/mongoid/clients/sessions.rb +2 -14
  63. data/lib/mongoid/clients/storage_options.rb +2 -5
  64. data/lib/mongoid/clients/validators/storage.rb +3 -15
  65. data/lib/mongoid/collection_configurable.rb +58 -0
  66. data/lib/mongoid/composable.rb +2 -0
  67. data/lib/mongoid/config/defaults.rb +60 -0
  68. data/lib/mongoid/config/options.rb +3 -0
  69. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  70. data/lib/mongoid/config/validators/client.rb +6 -6
  71. data/lib/mongoid/config/validators.rb +1 -0
  72. data/lib/mongoid/config.rb +153 -18
  73. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  74. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  75. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  76. data/lib/mongoid/contextual/atomic.rb +1 -1
  77. data/lib/mongoid/contextual/geo_near.rb +7 -7
  78. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  79. data/lib/mongoid/contextual/memory.rb +285 -58
  80. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  81. data/lib/mongoid/contextual/mongo.rb +540 -346
  82. data/lib/mongoid/contextual/none.rb +193 -20
  83. data/lib/mongoid/contextual/queryable.rb +1 -1
  84. data/lib/mongoid/contextual.rb +14 -2
  85. data/lib/mongoid/copyable.rb +32 -8
  86. data/lib/mongoid/criteria/findable.rb +8 -5
  87. data/lib/mongoid/criteria/includable.rb +27 -22
  88. data/lib/mongoid/criteria/marshalable.rb +10 -2
  89. data/lib/mongoid/criteria/permission.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  91. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
  92. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  93. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  94. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  95. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  96. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
  97. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -9
  98. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  99. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  100. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  101. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  102. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
  103. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
  104. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  105. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  106. data/lib/mongoid/criteria/queryable/key.rb +4 -4
  107. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  108. data/lib/mongoid/criteria/queryable/optional.rb +11 -17
  109. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  110. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  111. data/lib/mongoid/criteria/queryable/selectable.rb +48 -39
  112. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  113. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  114. data/lib/mongoid/criteria/queryable.rb +12 -7
  115. data/lib/mongoid/criteria/scopable.rb +2 -2
  116. data/lib/mongoid/criteria/translator.rb +45 -0
  117. data/lib/mongoid/criteria.rb +20 -40
  118. data/lib/mongoid/deprecable.rb +37 -0
  119. data/lib/mongoid/deprecation.rb +25 -0
  120. data/lib/mongoid/document.rb +135 -36
  121. data/lib/mongoid/equality.rb +9 -8
  122. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  123. data/lib/mongoid/errors/document_not_found.rb +10 -6
  124. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  125. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  126. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  127. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  128. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  129. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  130. data/lib/mongoid/errors/invalid_field.rb +6 -2
  131. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  132. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  133. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  134. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  135. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  136. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  137. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  138. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  139. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  140. data/lib/mongoid/errors/no_client_database.rb +1 -1
  141. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  142. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  143. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  144. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  145. data/lib/mongoid/errors.rb +6 -3
  146. data/lib/mongoid/extensions/array.rb +9 -7
  147. data/lib/mongoid/extensions/big_decimal.rb +33 -10
  148. data/lib/mongoid/extensions/binary.rb +42 -0
  149. data/lib/mongoid/extensions/boolean.rb +8 -2
  150. data/lib/mongoid/extensions/date.rb +26 -20
  151. data/lib/mongoid/extensions/date_time.rb +1 -1
  152. data/lib/mongoid/extensions/false_class.rb +1 -1
  153. data/lib/mongoid/extensions/float.rb +7 -4
  154. data/lib/mongoid/extensions/hash.rb +38 -9
  155. data/lib/mongoid/extensions/integer.rb +7 -4
  156. data/lib/mongoid/extensions/module.rb +1 -1
  157. data/lib/mongoid/extensions/object.rb +10 -8
  158. data/lib/mongoid/extensions/range.rb +41 -10
  159. data/lib/mongoid/extensions/regexp.rb +11 -4
  160. data/lib/mongoid/extensions/set.rb +11 -4
  161. data/lib/mongoid/extensions/string.rb +11 -22
  162. data/lib/mongoid/extensions/symbol.rb +4 -15
  163. data/lib/mongoid/extensions/time.rb +29 -16
  164. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  165. data/lib/mongoid/extensions/true_class.rb +1 -1
  166. data/lib/mongoid/extensions.rb +1 -0
  167. data/lib/mongoid/factory.rb +55 -7
  168. data/lib/mongoid/fields/foreign_key.rb +11 -4
  169. data/lib/mongoid/fields/localized.rb +19 -4
  170. data/lib/mongoid/fields/standard.rb +17 -7
  171. data/lib/mongoid/fields/validators/macro.rb +3 -9
  172. data/lib/mongoid/fields.rb +142 -28
  173. data/lib/mongoid/findable.rb +54 -24
  174. data/lib/mongoid/indexable/specification.rb +2 -2
  175. data/lib/mongoid/indexable/validators/options.rb +6 -2
  176. data/lib/mongoid/interceptable.rb +187 -16
  177. data/lib/mongoid/matchable.rb +1 -1
  178. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  179. data/lib/mongoid/matcher/type.rb +1 -1
  180. data/lib/mongoid/matcher.rb +48 -14
  181. data/lib/mongoid/persistable/creatable.rb +19 -9
  182. data/lib/mongoid/persistable/deletable.rb +2 -2
  183. data/lib/mongoid/persistable/destroyable.rb +1 -1
  184. data/lib/mongoid/persistable/savable.rb +14 -2
  185. data/lib/mongoid/persistable/unsettable.rb +2 -2
  186. data/lib/mongoid/persistable/updatable.rb +69 -12
  187. data/lib/mongoid/persistable/upsertable.rb +21 -2
  188. data/lib/mongoid/persistable.rb +6 -3
  189. data/lib/mongoid/persistence_context.rb +6 -4
  190. data/lib/mongoid/query_cache.rb +13 -261
  191. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  192. data/lib/mongoid/railties/database.rake +7 -2
  193. data/lib/mongoid/reloadable.rb +10 -8
  194. data/lib/mongoid/scopable.rb +15 -13
  195. data/lib/mongoid/selectable.rb +1 -2
  196. data/lib/mongoid/serializable.rb +17 -13
  197. data/lib/mongoid/stateful.rb +57 -10
  198. data/lib/mongoid/tasks/database.rake +12 -0
  199. data/lib/mongoid/tasks/database.rb +20 -2
  200. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  201. data/lib/mongoid/threaded.rb +42 -12
  202. data/lib/mongoid/timestamps/created.rb +9 -2
  203. data/lib/mongoid/timestamps/updated.rb +2 -2
  204. data/lib/mongoid/touchable.rb +3 -4
  205. data/lib/mongoid/traversable.rb +41 -5
  206. data/lib/mongoid/utils.rb +22 -0
  207. data/lib/mongoid/validatable/associated.rb +98 -17
  208. data/lib/mongoid/validatable/localizable.rb +1 -1
  209. data/lib/mongoid/validatable/macros.rb +5 -7
  210. data/lib/mongoid/validatable/presence.rb +2 -2
  211. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  212. data/lib/mongoid/validatable.rb +17 -6
  213. data/lib/mongoid/version.rb +1 -1
  214. data/lib/mongoid/warnings.rb +19 -4
  215. data/lib/mongoid.rb +17 -3
  216. data/spec/config/mongoid.yml +16 -0
  217. data/spec/integration/app_spec.rb +24 -19
  218. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  219. data/spec/integration/associations/embedded_spec.rb +15 -0
  220. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  221. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  222. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  223. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
  224. data/spec/integration/associations/has_one_spec.rb +97 -1
  225. data/spec/integration/associations/scope_option_spec.rb +1 -1
  226. data/spec/integration/callbacks_models.rb +132 -1
  227. data/spec/integration/callbacks_spec.rb +381 -4
  228. data/spec/integration/criteria/range_spec.rb +95 -1
  229. data/spec/integration/discriminator_key_spec.rb +118 -80
  230. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  231. data/spec/integration/i18n_fallbacks_spec.rb +3 -32
  232. data/spec/integration/matcher_examples_spec.rb +20 -13
  233. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  234. data/spec/integration/matcher_operator_spec.rb +3 -5
  235. data/spec/integration/persistence/range_field_spec.rb +350 -0
  236. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  237. data/spec/mongoid/association/depending_spec.rb +9 -9
  238. data/spec/mongoid/association/eager_spec.rb +26 -3
  239. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  240. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  241. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
  242. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  243. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +290 -65
  244. data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
  245. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -0
  246. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  247. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  248. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  249. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  250. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  251. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  252. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  253. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +19 -0
  254. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  255. data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
  256. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
  257. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  258. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  259. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  260. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  261. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +215 -177
  262. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  263. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  264. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  265. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  266. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  267. data/spec/mongoid/association/syncable_spec.rb +15 -1
  268. data/spec/mongoid/association_spec.rb +60 -0
  269. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  270. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  271. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  272. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  273. data/spec/mongoid/attributes/readonly_spec.rb +19 -0
  274. data/spec/mongoid/attributes_spec.rb +526 -33
  275. data/spec/mongoid/changeable_spec.rb +429 -37
  276. data/spec/mongoid/clients/factory_spec.rb +23 -30
  277. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  278. data/spec/mongoid/clients_spec.rb +149 -15
  279. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  280. data/spec/mongoid/config/defaults_spec.rb +160 -0
  281. data/spec/mongoid/config_spec.rb +214 -31
  282. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  283. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  284. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  285. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  286. data/spec/mongoid/contextual/memory_spec.rb +850 -88
  287. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  288. data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
  289. data/spec/mongoid/contextual/none_spec.rb +60 -21
  290. data/spec/mongoid/copyable_spec.rb +453 -11
  291. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  292. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  293. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  294. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  295. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  296. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  297. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  298. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  299. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  300. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  301. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
  302. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
  303. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  304. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  305. data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
  306. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  307. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
  308. data/spec/mongoid/criteria/queryable/selectable_spec.rb +107 -86
  309. data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
  310. data/spec/mongoid/criteria/translator_spec.rb +132 -0
  311. data/spec/mongoid/criteria_projection_spec.rb +1 -5
  312. data/spec/mongoid/criteria_spec.rb +469 -1205
  313. data/spec/mongoid/document_fields_spec.rb +173 -24
  314. data/spec/mongoid/document_spec.rb +59 -41
  315. data/spec/mongoid/equality_spec.rb +6 -0
  316. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  317. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  318. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  319. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  320. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  321. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  322. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  323. data/spec/mongoid/extensions/array_spec.rb +16 -2
  324. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  325. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  326. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  327. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  328. data/spec/mongoid/extensions/date_spec.rb +71 -1
  329. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  330. data/spec/mongoid/extensions/float_spec.rb +53 -74
  331. data/spec/mongoid/extensions/hash_spec.rb +33 -3
  332. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  333. data/spec/mongoid/extensions/range_spec.rb +255 -54
  334. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  335. data/spec/mongoid/extensions/set_spec.rb +106 -0
  336. data/spec/mongoid/extensions/string_spec.rb +53 -25
  337. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  338. data/spec/mongoid/extensions/time_spec.rb +639 -106
  339. data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
  340. data/spec/mongoid/factory_spec.rb +61 -1
  341. data/spec/mongoid/fields/localized_spec.rb +80 -37
  342. data/spec/mongoid/fields_spec.rb +503 -87
  343. data/spec/mongoid/findable_spec.rb +450 -58
  344. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  345. data/spec/mongoid/indexable_spec.rb +55 -30
  346. data/spec/mongoid/interceptable_spec.rb +904 -22
  347. data/spec/mongoid/interceptable_spec_models.rb +189 -22
  348. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  349. data/spec/mongoid/mongoizable_spec.rb +285 -0
  350. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  351. data/spec/mongoid/persistable/deletable_spec.rb +28 -8
  352. data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
  353. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  354. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  355. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  356. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  357. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  358. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  359. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  360. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  361. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  362. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  363. data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
  364. data/spec/mongoid/persistence_context_spec.rb +31 -57
  365. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  366. data/spec/mongoid/query_cache_spec.rb +56 -215
  367. data/spec/mongoid/reloadable_spec.rb +83 -6
  368. data/spec/mongoid/scopable_spec.rb +91 -1
  369. data/spec/mongoid/serializable_spec.rb +25 -39
  370. data/spec/mongoid/shardable_spec.rb +4 -4
  371. data/spec/mongoid/stateful_spec.rb +150 -8
  372. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  373. data/spec/mongoid/tasks/database_spec.rb +127 -0
  374. data/spec/mongoid/timestamps/created_spec.rb +23 -0
  375. data/spec/mongoid/timestamps_spec.rb +392 -4
  376. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  377. data/spec/mongoid/touchable_spec.rb +390 -2
  378. data/spec/mongoid/touchable_spec_models.rb +14 -8
  379. data/spec/mongoid/traversable_spec.rb +13 -35
  380. data/spec/mongoid/validatable/associated_spec.rb +27 -34
  381. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  382. data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
  383. data/spec/mongoid/warnings_spec.rb +35 -0
  384. data/spec/mongoid_spec.rb +34 -16
  385. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  386. data/spec/rails/mongoid_spec.rb +4 -16
  387. data/spec/spec_helper.rb +5 -0
  388. data/spec/support/constraints.rb +24 -0
  389. data/spec/support/immutable_ids.rb +118 -0
  390. data/spec/support/macros.rb +78 -0
  391. data/spec/support/models/artist.rb +0 -1
  392. data/spec/support/models/augmentation.rb +12 -0
  393. data/spec/support/models/band.rb +5 -0
  394. data/spec/support/models/book.rb +1 -0
  395. data/spec/support/models/building.rb +2 -0
  396. data/spec/support/models/catalog.rb +24 -0
  397. data/spec/support/models/circus.rb +3 -0
  398. data/spec/support/models/cover.rb +10 -0
  399. data/spec/support/models/fanatic.rb +8 -0
  400. data/spec/support/models/implant.rb +9 -0
  401. data/spec/support/models/label.rb +2 -0
  402. data/spec/support/models/lat_lng.rb +6 -0
  403. data/spec/support/models/name.rb +10 -0
  404. data/spec/support/models/passport.rb +9 -0
  405. data/spec/support/models/person.rb +2 -0
  406. data/spec/support/models/player.rb +2 -0
  407. data/spec/support/models/powerup.rb +12 -0
  408. data/spec/support/models/product.rb +1 -0
  409. data/spec/support/models/purse.rb +9 -0
  410. data/spec/support/models/registry.rb +1 -0
  411. data/spec/support/models/school.rb +14 -0
  412. data/spec/support/models/shield.rb +18 -0
  413. data/spec/support/models/student.rb +14 -0
  414. data/spec/support/models/weapon.rb +12 -0
  415. metadata +98 -96
  416. checksums.yaml.gz.sig +0 -0
  417. data/lib/mongoid/errors/eager_load.rb +0 -23
  418. data/lib/mongoid/errors/invalid_value.rb +0 -17
  419. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  420. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
  421. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
  422. data/spec/shared/LICENSE +0 -20
  423. data/spec/shared/bin/get-mongodb-download-url +0 -17
  424. data/spec/shared/bin/s3-copy +0 -45
  425. data/spec/shared/bin/s3-upload +0 -69
  426. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  427. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  428. data/spec/shared/lib/mrss/constraints.rb +0 -378
  429. data/spec/shared/lib/mrss/docker_runner.rb +0 -291
  430. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  431. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  432. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  433. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  434. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  435. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  436. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  437. data/spec/shared/lib/mrss/utils.rb +0 -15
  438. data/spec/shared/share/Dockerfile.erb +0 -325
  439. data/spec/shared/share/haproxy-1.conf +0 -16
  440. data/spec/shared/share/haproxy-2.conf +0 -17
  441. data/spec/shared/shlib/config.sh +0 -27
  442. data/spec/shared/shlib/distro.sh +0 -74
  443. data/spec/shared/shlib/server.sh +0 -392
  444. data/spec/shared/shlib/set_env.sh +0 -169
  445. data.tar.gz.sig +0 -0
  446. metadata.gz.sig +0 -3
@@ -40,20 +40,167 @@ describe Mongoid::Document do
40
40
  end
41
41
 
42
42
  it 'assigns as a BSON::Binary object' do
43
- pending 'https://jira.mongodb.org/browse/MONGOID-4823'
44
-
45
43
  registry.data.should be_a(BSON::Binary)
46
44
  end
47
45
 
48
46
  it 'persists' do
49
- pending 'https://jira.mongodb.org/browse/MONGOID-4823'
50
-
51
47
  registry.save!
52
48
 
53
49
  _registry = Registry.find(registry.id)
54
50
  _registry.data.should == BSON::Binary.new(data)
55
51
  end
56
52
  end
53
+
54
+ context 'when assigned nil' do
55
+ let(:data) do
56
+ nil
57
+ end
58
+
59
+ let(:registry) do
60
+ Registry.new(data: data)
61
+ end
62
+
63
+ it 'assigns nil' do
64
+ registry.data.should be nil
65
+ end
66
+
67
+ it 'persists' do
68
+ registry.save!
69
+
70
+ _registry = Registry.find(registry.id)
71
+ _registry.data.should be nil
72
+ end
73
+ end
74
+
75
+ context 'when assigned an invalid type' do
76
+ let(:data) do
77
+ true
78
+ end
79
+
80
+ let(:registry) do
81
+ Registry.new(data: data)
82
+ end
83
+
84
+ it 'assigns nil' do
85
+ registry.data.should be nil
86
+ end
87
+
88
+ it 'persists' do
89
+ registry.save!
90
+
91
+ _registry = Registry.find(registry.id)
92
+ _registry.data.should be nil
93
+ end
94
+ end
95
+ end
96
+
97
+ describe 'BSON::ObjectId field' do
98
+ context 'when assigned a BSON::ObjectId instance' do
99
+ let(:obj_id) do
100
+ BSON::ObjectId.new
101
+ end
102
+
103
+ let(:registry) do
104
+ Registry.new(obj_id: obj_id)
105
+ end
106
+
107
+ it 'does not freeze the specified data' do
108
+ registry
109
+
110
+ obj_id.should_not be_frozen
111
+ end
112
+
113
+ it 'persists' do
114
+ registry.save!
115
+
116
+ _registry = Registry.find(registry.id)
117
+ _registry.obj_id.should == obj_id
118
+ end
119
+ end
120
+
121
+ context 'when assigned a valid string' do
122
+ let(:obj_id) do
123
+ BSON::ObjectId.new.to_s
124
+ end
125
+
126
+ let(:registry) do
127
+ Registry.new(obj_id: obj_id)
128
+ end
129
+
130
+ it 'assigns as a BSON::Binary object' do
131
+ registry.obj_id.should be_a(BSON::ObjectId)
132
+ end
133
+
134
+ it 'persists' do
135
+ registry.save!
136
+
137
+ _registry = Registry.find(registry.id)
138
+ _registry.obj_id.should == BSON::ObjectId.from_string(obj_id)
139
+ end
140
+ end
141
+
142
+ context 'when assigned nil' do
143
+ let(:obj_id) do
144
+ nil
145
+ end
146
+
147
+ let(:registry) do
148
+ Registry.new(obj_id: obj_id)
149
+ end
150
+
151
+ it 'assigns nil' do
152
+ registry.obj_id.should be nil
153
+ end
154
+
155
+ it 'persists' do
156
+ registry.save!
157
+
158
+ _registry = Registry.find(registry.id)
159
+ _registry.obj_id.should be nil
160
+ end
161
+ end
162
+
163
+ context 'when assigned an invalid string' do
164
+ let(:obj_id) do
165
+ "hello"
166
+ end
167
+
168
+ let(:registry) do
169
+ Registry.new(obj_id: obj_id)
170
+ end
171
+
172
+ it 'assigns nil' do
173
+ registry.obj_id.should == "hello"
174
+ end
175
+
176
+ it 'persists' do
177
+ registry.save!
178
+
179
+ _registry = Registry.find(registry.id)
180
+ _registry.obj_id.should == "hello"
181
+ end
182
+ end
183
+
184
+ context 'when assigned an invalid type' do
185
+ let(:obj_id) do
186
+ :sym
187
+ end
188
+
189
+ let(:registry) do
190
+ Registry.new(obj_id: obj_id)
191
+ end
192
+
193
+ it 'assigns nil' do
194
+ registry.obj_id.should == :sym
195
+ end
196
+
197
+ it 'persists' do
198
+ registry.save!
199
+
200
+ _registry = Registry.find(registry.id)
201
+ _registry.obj_id.should == :sym
202
+ end
203
+ end
57
204
  end
58
205
 
59
206
  describe 'Hash field' do
@@ -86,28 +233,30 @@ describe Mongoid::Document do
86
233
  end
87
234
 
88
235
  context 'Regexp field' do
89
- shared_examples "persists strings as regexp" do |type|
90
- it 'persists strings as regexp' do
91
- mop = Mop.create!(regexp_field: 'foo')
92
- expect(mop.regexp_field).to be_a Regexp
93
- expect(Mop.find(mop.id).regexp_field).to be_a BSON::Regexp::Raw
94
- expect(
95
- Mop.collection.find(
96
- "_id" => mop.id,
97
- "regexp_field" => { "$type" => type }
98
- ).count
99
- ).to be == 1
100
- end
101
- end
102
-
103
- context "< 3.2" do
104
- max_server_version("3.1")
105
- include_examples "persists strings as regexp", 11
236
+ it 'persists strings as regexp' do
237
+ mop = Mop.create!(regexp_field: 'foo')
238
+ expect(mop.regexp_field).to be_a Regexp
239
+ expect(Mop.find(mop.id).regexp_field).to be_a Regexp
240
+ expect(
241
+ Mop.collection.find(
242
+ "_id" => mop.id,
243
+ "regexp_field" => { "$type" => 'regex' }
244
+ ).count
245
+ ).to be == 1
106
246
  end
247
+ end
107
248
 
108
- context ">= 3.2" do
109
- min_server_version("3.2")
110
- it_behaves_like "persists strings as regexp", "regex"
249
+ context 'BSON::Regexp::Raw field' do
250
+ it 'round-trips BSON::Regexp::Raws' do
251
+ mop = Mop.create!(bson_regexp_field: BSON::Regexp::Raw.new('foo'))
252
+ expect(mop.bson_regexp_field).to be_a BSON::Regexp::Raw
253
+ expect(Mop.find(mop.id).bson_regexp_field).to be_a BSON::Regexp::Raw
254
+ expect(
255
+ Mop.collection.find(
256
+ "_id" => mop.id,
257
+ "bson_regexp_field" => { "$type" => 'regex' }
258
+ ).count
259
+ ).to be == 1
111
260
  end
112
261
  end
113
262
  end
@@ -165,13 +165,40 @@ describe Mongoid::Document do
165
165
 
166
166
  describe "#attributes" do
167
167
 
168
- let(:person) do
169
- Person.new(title: "Sir")
168
+ let!(:person) do
169
+ Person.create!(title: "Sir")
170
170
  end
171
171
 
172
172
  it "returns the attributes with indifferent access" do
173
173
  expect(person[:title]).to eq("Sir")
174
174
  end
175
+
176
+ context "when instantiating a new document" do
177
+ it "returns a Hash" do
178
+ expect(person.attributes.class).to eq(Hash)
179
+ end
180
+ end
181
+
182
+ context "when retrieving a document from the database" do
183
+
184
+ let(:from_db) { Person.first }
185
+
186
+ context "when legacy_attributes is false" do
187
+ config_override :legacy_attributes, false
188
+
189
+ it "returns a Hash" do
190
+ expect(from_db.attributes.class).to eq(Hash)
191
+ end
192
+ end
193
+
194
+ context "when legacy_attributes is true" do
195
+ config_override :legacy_attributes, true
196
+
197
+ it "returns a BSON::Document" do
198
+ expect(from_db.attributes.class).to eq(BSON::Document)
199
+ end
200
+ end
201
+ end
175
202
  end
176
203
 
177
204
  describe "#identity" do
@@ -293,27 +320,6 @@ describe Mongoid::Document do
293
320
  expect(person.game.name).to eq("Ms. Pacman")
294
321
  end
295
322
  end
296
-
297
- context "when instantiating model" do
298
-
299
- let(:person) do
300
- Person.instantiate("_id" => BSON::ObjectId.new, "title" => "Sir")
301
- end
302
-
303
- before do
304
- Person.set_callback :initialize, :after do |doc|
305
- doc.title = "Madam"
306
- end
307
- end
308
-
309
- after do
310
- Person.reset_callbacks(:initialize)
311
- end
312
-
313
- it "runs the callbacks" do
314
- expect(person.title).to eq("Madam")
315
- end
316
- end
317
323
  end
318
324
 
319
325
  context "when defaults are defined" do
@@ -409,21 +415,6 @@ describe Mongoid::Document do
409
415
  end
410
416
  end
411
417
 
412
- describe "#to_a" do
413
-
414
- let(:person) do
415
- Person.new
416
- end
417
-
418
- let(:people) do
419
- person.to_a
420
- end
421
-
422
- it "returns the document in an array" do
423
- expect(people).to eq([ person ])
424
- end
425
- end
426
-
427
418
  describe "#as_json" do
428
419
 
429
420
  let!(:person) do
@@ -501,12 +492,12 @@ describe Mongoid::Document do
501
492
  end
502
493
 
503
494
  it 'logs a deprecation warning when :compact is given' do
504
- expect_any_instance_of(Logger).to receive(:warn).with(message)
495
+ expect(Mongoid::Warnings).to receive(:warn_as_json_compact_deprecated)
505
496
  church.as_json(compact: true)
506
497
  end
507
498
 
508
499
  it 'does not log a deprecation warning when :compact is not given' do
509
- expect_any_instance_of(Logger).to_not receive(:warn).with(message)
500
+ expect(Mongoid::Warnings).to_not receive(:warn_as_json_compact_deprecated)
510
501
  church.as_json
511
502
  end
512
503
  end
@@ -600,6 +591,33 @@ describe Mongoid::Document do
600
591
  expect(person.as_document["addresses"].first).to have_key(:locations)
601
592
  end
602
593
 
594
+ context 'when modifying the returned object' do
595
+ let(:record) do
596
+ RootCategory.create(categories: [{ name: 'tests' }]).reload
597
+ end
598
+
599
+ shared_examples_for 'an object with protected internal state' do
600
+ it 'does not expose internal state' do
601
+ before_change = record.as_document.dup
602
+ record.categories.first.name = 'things'
603
+ after_change = record.as_document
604
+ expect(before_change['categories'].first['name']).not_to eq('things')
605
+ end
606
+ end
607
+
608
+ context 'when legacy_attributes is true' do
609
+ config_override :legacy_attributes, true
610
+
611
+ it_behaves_like 'an object with protected internal state'
612
+ end
613
+
614
+ context 'when legacy_attributes is false' do
615
+ config_override :legacy_attributes, false
616
+
617
+ it_behaves_like 'an object with protected internal state'
618
+ end
619
+ end
620
+
603
621
  context "with relation define store_as option in embeded_many" do
604
622
 
605
623
  let!(:phone) do
@@ -627,7 +645,7 @@ describe Mongoid::Document do
627
645
  end
628
646
 
629
647
  it "does not include the document in the hash" do
630
- expect(person.as_document["addresses"]).to be_empty
648
+ expect(person.as_document).to_not have_key("addresses")
631
649
  end
632
650
  end
633
651
 
@@ -291,6 +291,12 @@ describe Mongoid::Equality do
291
291
  it "compares based on the document id" do
292
292
  expect(first <=> second).to eq(-1)
293
293
  end
294
+
295
+ it "doesn't break if one isn't a document" do
296
+ expect do
297
+ first <=> "Foo"
298
+ end.to_not raise_error
299
+ end
294
300
  end
295
301
 
296
302
  describe "#eql?" do
@@ -81,10 +81,37 @@ describe Mongoid::Errors::DocumentNotFound do
81
81
  end
82
82
  end
83
83
 
84
+ context "when providing an _id and a shard key" do
85
+
86
+ let(:id) { BSON::ObjectId.new }
87
+ let(:doc) { { _id: id, a: "syd" } }
88
+ let(:error) do
89
+ described_class.new(Person, id, doc)
90
+ end
91
+
92
+ it "contains the problem in the message" do
93
+ expect(error.message).to include(
94
+ "Document not found for class Person with id #{id.to_s} and shard key a: syd."
95
+ )
96
+ end
97
+
98
+ it "contains the summary in the message" do
99
+ expect(error.message).to include(
100
+ "When calling Person.find with an id and a shard key"
101
+ )
102
+ end
103
+
104
+ it "contains the resolution in the message" do
105
+ expect(error.message).to include(
106
+ "Search for an id/shard key that is in the database or set"
107
+ )
108
+ end
109
+ end
110
+
84
111
  context "when providing an id in a hash without a shard key" do
85
112
 
86
113
  let(:error) do
87
- described_class.new(Person, 1, 1)
114
+ described_class.new(Person, 1, { _id: 1 })
88
115
  end
89
116
 
90
117
  it "contains the problem in the message" do
@@ -125,7 +152,7 @@ describe Mongoid::Errors::DocumentNotFound do
125
152
 
126
153
  it "contains the resolution in the message" do
127
154
  expect(error.message).to include(
128
- "Create a document of class Person or use a finder method that returns nil when no documents are found instead of raising an exception."
155
+ "Create a document of class Person or use a finder method that does not raise an exception when no documents are found."
129
156
  )
130
157
  end
131
158
  end
@@ -15,7 +15,7 @@ describe Mongoid::Errors::InvalidField do
15
15
  end
16
16
 
17
17
  let(:error) do
18
- described_class.new(Person, :crazy_method)
18
+ described_class.new(Person, :crazy_method, :crazy_method)
19
19
  end
20
20
 
21
21
  it "contains the problem in the message" do
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe Mongoid::Errors::InvalidFieldType do
6
+
7
+ describe "#message" do
8
+
9
+ let(:error) do
10
+ described_class.new(Person, :first_name, :stringgy)
11
+ end
12
+
13
+ context 'when type is a symbol' do
14
+ let(:error) do
15
+ described_class.new(Person, :first_name, :stringgy)
16
+ end
17
+
18
+ it "contains the problem in the message" do
19
+ expect(error.message).to include(
20
+ "Invalid field type :stringgy for field 'first_name' on model 'Person'."
21
+ )
22
+ end
23
+
24
+ it "contains the summary in the message" do
25
+ expect(error.message).to include(
26
+ "Model 'Person' defines a field 'first_name' with an unknown type value :stringgy."
27
+ )
28
+ end
29
+ end
30
+
31
+ context 'when type is a string' do
32
+ let(:error) do
33
+ described_class.new(Person, :first_name, 'stringgy')
34
+ end
35
+
36
+ it "contains the problem in the message" do
37
+ expect(error.message).to include(
38
+ %q,Invalid field type "stringgy" for field 'first_name' on model 'Person'.,
39
+ )
40
+ end
41
+
42
+ it "contains the summary in the message" do
43
+ expect(error.message).to include(
44
+ %q,Model 'Person' defines a field 'first_name' with an unknown type value "stringgy".,
45
+ )
46
+ end
47
+ end
48
+
49
+ it "contains the resolution in the message" do
50
+ expect(error.message).to include(
51
+ 'Please provide a valid type value for the field.'
52
+ )
53
+ end
54
+ end
55
+ end
@@ -9,7 +9,9 @@ describe Mongoid::Errors::MongoidError do
9
9
  let(:options) { {} }
10
10
 
11
11
  before do
12
- if RUBY_VERSION >= '2.7'
12
+ # JRuby 9.3 RUBY_VERSION is set to 2.6.8, but the behavior matches Ruby 2.7.
13
+ # See https://github.com/jruby/jruby/issues/7184
14
+ if RUBY_VERSION >= '2.7' || (BSON::Environment.jruby? && JRUBY_VERSION >= '9.3')
13
15
  {"message_title" => "message", "summary_title" => "summary", "resolution_title" => "resolution"}.each do |key, name|
14
16
  expect(::I18n).to receive(:translate).with("mongoid.errors.messages.#{key}", **{}).and_return(name)
15
17
  end
@@ -12,19 +12,19 @@ describe Mongoid::Errors::NoEnvironment do
12
12
 
13
13
  it "contains the problem in the message" do
14
14
  expect(error.message).to include(
15
- "Could not load the configuration since no environment was defined."
15
+ "Mongoid could not determine the environment"
16
16
  )
17
17
  end
18
18
 
19
19
  it "contains the summary in the message" do
20
20
  expect(error.message).to include(
21
- "Mongoid attempted to find the appropriate environment but no Rails.env"
21
+ "it was not specified in any of the following locations"
22
22
  )
23
23
  end
24
24
 
25
25
  it "contains the resolution in the message" do
26
26
  expect(error.message).to include(
27
- "Make sure some environment is set from the mentioned options"
27
+ "Please ensure an environment is set"
28
28
  )
29
29
  end
30
30
  end
@@ -12,13 +12,13 @@ describe Mongoid::Errors::ReadonlyDocument do
12
12
 
13
13
  it "contains the problem in the message" do
14
14
  expect(error.message).to include(
15
- "Attempted to persist the readonly document 'Band'."
15
+ "Attempted to persist a readonly document of class 'Band'."
16
16
  )
17
17
  end
18
18
 
19
19
  it "contains the summary in the message" do
20
20
  expect(error.message).to include(
21
- "Documents loaded from the database using #only"
21
+ "Documents that are marked readonly cannot be persisted"
22
22
  )
23
23
  end
24
24
 
@@ -12,7 +12,7 @@ describe Mongoid::Errors::TooManyNestedAttributeRecords do
12
12
 
13
13
  it "contains the problem in the message" do
14
14
  expect(error.message).to include(
15
- "Accepting nested attributes for favorites is limited to 5 records."
15
+ "Accepting nested attributes for favorites is limited to 5 documents."
16
16
  )
17
17
  end
18
18
 
@@ -488,12 +488,12 @@ describe Mongoid::Extensions::Array do
488
488
  Date.new(2012, 1, 1)
489
489
  end
490
490
 
491
- let(:array) do
491
+ let(:input) do
492
492
  [ date ]
493
493
  end
494
494
 
495
495
  let(:mongoized) do
496
- Array.mongoize(array)
496
+ Array.mongoize(input)
497
497
  end
498
498
 
499
499
  it "mongoizes each element in the array" do
@@ -503,6 +503,20 @@ describe Mongoid::Extensions::Array do
503
503
  it "converts the elements properly" do
504
504
  expect(mongoized.first).to eq(Time.utc(2012, 1, 1, 0, 0, 0))
505
505
  end
506
+
507
+ context "when passing in a set" do
508
+ let(:input) do
509
+ [ date ].to_set
510
+ end
511
+
512
+ it "mongoizes to an array" do
513
+ expect(mongoized).to be_a(Array)
514
+ end
515
+
516
+ it "converts the elements properly" do
517
+ expect(mongoized.first).to eq(Time.utc(2012, 1, 1, 0, 0, 0))
518
+ end
519
+ end
506
520
  end
507
521
 
508
522
  describe "#mongoize" do