mongoid 6.4.4 → 7.5.1

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 (1369) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +30 -30
  4. data/LICENSE +1 -0
  5. data/README.md +34 -20
  6. data/Rakefile +75 -5
  7. data/lib/config/locales/en.yml +149 -66
  8. data/lib/mongoid/association/accessors.rb +402 -0
  9. data/lib/mongoid/association/bindable.rb +179 -0
  10. data/lib/mongoid/association/builders.rb +84 -0
  11. data/lib/mongoid/association/constrainable.rb +43 -0
  12. data/lib/mongoid/association/depending.rb +128 -0
  13. data/lib/mongoid/association/eager_loadable.rb +35 -0
  14. data/lib/mongoid/association/embedded/batchable.rb +358 -0
  15. data/lib/mongoid/association/embedded/cyclic.rb +102 -0
  16. data/lib/mongoid/association/embedded/embedded_in/binding.rb +52 -0
  17. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +38 -0
  18. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +111 -0
  19. data/lib/mongoid/association/embedded/embedded_in.rb +134 -0
  20. data/lib/mongoid/association/embedded/embeds_many/binding.rb +41 -0
  21. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +45 -0
  22. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +549 -0
  23. data/lib/mongoid/association/embedded/embeds_many.rb +183 -0
  24. data/lib/mongoid/association/embedded/embeds_one/binding.rb +43 -0
  25. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +39 -0
  26. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +145 -0
  27. data/lib/mongoid/association/embedded/embeds_one.rb +150 -0
  28. data/lib/mongoid/association/embedded.rb +6 -0
  29. data/lib/mongoid/association/macros.rb +227 -0
  30. data/lib/mongoid/association/many.rb +198 -0
  31. data/lib/mongoid/association/marshalable.rb +31 -0
  32. data/lib/mongoid/association/nested/many.rb +191 -0
  33. data/lib/mongoid/association/nested/nested_buildable.rb +66 -0
  34. data/lib/mongoid/association/nested/one.rb +116 -0
  35. data/lib/mongoid/association/nested.rb +15 -0
  36. data/lib/mongoid/association/one.rb +53 -0
  37. data/lib/mongoid/association/options.rb +122 -0
  38. data/lib/mongoid/association/proxy.rb +189 -0
  39. data/lib/mongoid/association/referenced/auto_save.rb +73 -0
  40. data/lib/mongoid/association/referenced/belongs_to/binding.rb +82 -0
  41. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +48 -0
  42. data/lib/mongoid/association/referenced/belongs_to/eager.rb +73 -0
  43. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +125 -0
  44. data/lib/mongoid/association/referenced/belongs_to.rb +226 -0
  45. data/lib/mongoid/association/referenced/counter_cache.rb +152 -0
  46. data/lib/mongoid/association/referenced/eager.rb +163 -0
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +72 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +53 -0
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +292 -0
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +270 -0
  52. data/lib/mongoid/association/referenced/has_many/binding.rb +36 -0
  53. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  54. data/lib/mongoid/association/referenced/has_many/eager.rb +44 -0
  55. data/lib/mongoid/association/referenced/has_many/enumerable.rb +502 -0
  56. data/lib/mongoid/association/referenced/has_many/proxy.rb +545 -0
  57. data/lib/mongoid/association/referenced/has_many.rb +251 -0
  58. data/lib/mongoid/association/referenced/has_one/binding.rb +42 -0
  59. data/lib/mongoid/association/referenced/has_one/buildable.rb +74 -0
  60. data/lib/mongoid/association/referenced/has_one/eager.rb +36 -0
  61. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +113 -0
  62. data/lib/mongoid/association/referenced/has_one/proxy.rb +111 -0
  63. data/lib/mongoid/association/referenced/has_one.rb +184 -0
  64. data/lib/mongoid/association/referenced/syncable.rb +155 -0
  65. data/lib/mongoid/association/referenced.rb +9 -0
  66. data/lib/mongoid/association/reflections.rb +69 -0
  67. data/lib/mongoid/association/relatable.rb +455 -0
  68. data/lib/mongoid/association.rb +135 -0
  69. data/lib/mongoid/atomic/modifiers.rb +27 -51
  70. data/lib/mongoid/atomic/paths/embedded/many.rb +5 -8
  71. data/lib/mongoid/atomic/paths/embedded/one.rb +5 -8
  72. data/lib/mongoid/atomic/paths/embedded.rb +3 -4
  73. data/lib/mongoid/atomic/paths/root.rb +4 -7
  74. data/lib/mongoid/atomic/paths.rb +2 -1
  75. data/lib/mongoid/atomic.rb +43 -48
  76. data/lib/mongoid/attributes/dynamic.rb +19 -33
  77. data/lib/mongoid/attributes/nested.rb +29 -21
  78. data/lib/mongoid/attributes/processing.rb +11 -26
  79. data/lib/mongoid/attributes/projector.rb +119 -0
  80. data/lib/mongoid/attributes/readonly.rb +5 -10
  81. data/lib/mongoid/attributes.rb +94 -91
  82. data/lib/mongoid/cacheable.rb +6 -9
  83. data/lib/mongoid/changeable.rb +7 -61
  84. data/lib/mongoid/clients/factory.rb +42 -17
  85. data/lib/mongoid/clients/options.rb +17 -18
  86. data/lib/mongoid/clients/sessions.rb +22 -10
  87. data/lib/mongoid/clients/storage_options.rb +7 -12
  88. data/lib/mongoid/clients/validators/storage.rb +2 -9
  89. data/lib/mongoid/clients/validators.rb +2 -1
  90. data/lib/mongoid/clients.rb +3 -10
  91. data/lib/mongoid/composable.rb +9 -13
  92. data/lib/mongoid/config/environment.rb +51 -13
  93. data/lib/mongoid/config/options.rb +20 -23
  94. data/lib/mongoid/config/validators/client.rb +2 -17
  95. data/lib/mongoid/config/validators/option.rb +2 -3
  96. data/lib/mongoid/config/validators.rb +2 -1
  97. data/lib/mongoid/config.rb +117 -40
  98. data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
  99. data/lib/mongoid/contextual/aggregable/mongo.rb +25 -26
  100. data/lib/mongoid/contextual/aggregable/none.rb +65 -0
  101. data/lib/mongoid/contextual/aggregable.rb +17 -0
  102. data/lib/mongoid/contextual/atomic.rb +29 -31
  103. data/lib/mongoid/contextual/command.rb +2 -5
  104. data/lib/mongoid/contextual/geo_near.rb +7 -38
  105. data/lib/mongoid/contextual/map_reduce.rb +5 -33
  106. data/lib/mongoid/contextual/memory.rb +167 -70
  107. data/lib/mongoid/contextual/mongo.rb +281 -109
  108. data/lib/mongoid/contextual/none.rb +88 -28
  109. data/lib/mongoid/contextual/queryable.rb +2 -3
  110. data/lib/mongoid/contextual.rb +7 -9
  111. data/lib/mongoid/copyable.rb +20 -14
  112. data/lib/mongoid/criteria/findable.rb +12 -15
  113. data/lib/mongoid/criteria/includable.rb +21 -28
  114. data/lib/mongoid/criteria/inspectable.rb +2 -3
  115. data/lib/mongoid/criteria/marshalable.rb +2 -5
  116. data/lib/mongoid/criteria/modifiable.rb +10 -22
  117. data/lib/mongoid/criteria/options.rb +4 -5
  118. data/lib/mongoid/criteria/permission.rb +2 -1
  119. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
  120. data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
  121. data/lib/mongoid/criteria/queryable/extensions/array.rb +5 -26
  122. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
  123. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
  124. data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
  125. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
  126. data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -25
  127. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
  128. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -13
  129. data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
  130. data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
  131. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -16
  132. data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
  133. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -19
  134. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
  135. data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -9
  136. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +13 -6
  137. data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
  138. data/lib/mongoid/criteria/queryable/key.rb +101 -27
  139. data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
  140. data/lib/mongoid/criteria/queryable/mergeable.rb +205 -44
  141. data/lib/mongoid/criteria/queryable/optional.rb +5 -48
  142. data/lib/mongoid/criteria/queryable/options.rb +2 -19
  143. data/lib/mongoid/criteria/queryable/pipeline.rb +14 -19
  144. data/lib/mongoid/criteria/queryable/selectable.rb +436 -166
  145. data/lib/mongoid/criteria/queryable/selector.rb +45 -55
  146. data/lib/mongoid/criteria/queryable/smash.rb +2 -11
  147. data/lib/mongoid/criteria/queryable/storable.rb +237 -0
  148. data/lib/mongoid/criteria/queryable.rb +7 -9
  149. data/lib/mongoid/criteria/scopable.rb +27 -19
  150. data/lib/mongoid/criteria.rb +90 -75
  151. data/lib/mongoid/document.rb +36 -74
  152. data/lib/mongoid/equality.rb +29 -12
  153. data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
  154. data/lib/mongoid/errors/callback.rb +2 -3
  155. data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
  156. data/lib/mongoid/errors/delete_restriction.rb +10 -13
  157. data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
  158. data/lib/mongoid/errors/document_not_found.rb +25 -15
  159. data/lib/mongoid/errors/eager_load.rb +6 -5
  160. data/lib/mongoid/errors/empty_config_file.rb +25 -0
  161. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
  162. data/lib/mongoid/errors/invalid_collection.rb +2 -1
  163. data/lib/mongoid/errors/invalid_config_file.rb +25 -0
  164. data/lib/mongoid/errors/invalid_config_option.rb +2 -3
  165. data/lib/mongoid/errors/invalid_dependent_strategy.rb +31 -0
  166. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
  167. data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
  168. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
  169. data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
  170. data/lib/mongoid/errors/invalid_field.rb +2 -5
  171. data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
  172. data/lib/mongoid/errors/invalid_field_option.rb +2 -3
  173. data/lib/mongoid/errors/invalid_find.rb +2 -3
  174. data/lib/mongoid/errors/invalid_includes.rb +2 -3
  175. data/lib/mongoid/errors/invalid_index.rb +2 -3
  176. data/lib/mongoid/errors/invalid_options.rb +4 -5
  177. data/lib/mongoid/errors/invalid_path.rb +2 -3
  178. data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
  179. data/lib/mongoid/errors/invalid_query.rb +40 -0
  180. data/lib/mongoid/errors/invalid_relation.rb +4 -9
  181. data/lib/mongoid/errors/invalid_relation_option.rb +28 -0
  182. data/lib/mongoid/errors/invalid_scope.rb +2 -3
  183. data/lib/mongoid/errors/invalid_session_use.rb +3 -6
  184. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
  185. data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
  186. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
  187. data/lib/mongoid/errors/invalid_time.rb +2 -3
  188. data/lib/mongoid/errors/invalid_value.rb +2 -1
  189. data/lib/mongoid/errors/inverse_not_found.rb +3 -4
  190. data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
  191. data/lib/mongoid/errors/mixed_relations.rb +2 -3
  192. data/lib/mongoid/errors/mongoid_error.rb +3 -10
  193. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
  194. data/lib/mongoid/errors/no_client_config.rb +4 -5
  195. data/lib/mongoid/errors/no_client_database.rb +2 -3
  196. data/lib/mongoid/errors/no_client_hosts.rb +2 -3
  197. data/lib/mongoid/errors/no_clients_config.rb +2 -3
  198. data/lib/mongoid/errors/no_default_client.rb +3 -4
  199. data/lib/mongoid/errors/no_environment.rb +2 -3
  200. data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
  201. data/lib/mongoid/errors/no_metadata.rb +2 -3
  202. data/lib/mongoid/errors/no_parent.rb +2 -3
  203. data/lib/mongoid/errors/readonly_attribute.rb +2 -3
  204. data/lib/mongoid/errors/readonly_document.rb +3 -6
  205. data/lib/mongoid/errors/scope_overwrite.rb +2 -1
  206. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
  207. data/lib/mongoid/errors/unknown_attribute.rb +2 -3
  208. data/lib/mongoid/errors/unknown_model.rb +24 -0
  209. data/lib/mongoid/errors/unsaved_document.rb +3 -2
  210. data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
  211. data/lib/mongoid/errors/validations.rb +2 -1
  212. data/lib/mongoid/errors.rb +15 -1
  213. data/lib/mongoid/evolvable.rb +4 -5
  214. data/lib/mongoid/extensions/array.rb +33 -42
  215. data/lib/mongoid/extensions/big_decimal.rb +2 -11
  216. data/lib/mongoid/extensions/boolean.rb +3 -5
  217. data/lib/mongoid/extensions/date.rb +13 -12
  218. data/lib/mongoid/extensions/date_time.rb +4 -12
  219. data/lib/mongoid/extensions/decimal128.rb +2 -5
  220. data/lib/mongoid/extensions/false_class.rb +4 -7
  221. data/lib/mongoid/extensions/float.rb +5 -10
  222. data/lib/mongoid/extensions/hash.rb +56 -38
  223. data/lib/mongoid/extensions/integer.rb +5 -12
  224. data/lib/mongoid/extensions/module.rb +2 -3
  225. data/lib/mongoid/extensions/nil_class.rb +2 -5
  226. data/lib/mongoid/extensions/object.rb +21 -48
  227. data/lib/mongoid/extensions/object_id.rb +2 -7
  228. data/lib/mongoid/extensions/range.rb +3 -11
  229. data/lib/mongoid/extensions/regexp.rb +3 -4
  230. data/lib/mongoid/extensions/set.rb +2 -7
  231. data/lib/mongoid/extensions/string.rb +24 -42
  232. data/lib/mongoid/extensions/symbol.rb +2 -7
  233. data/lib/mongoid/extensions/time.rb +12 -9
  234. data/lib/mongoid/extensions/time_with_zone.rb +25 -7
  235. data/lib/mongoid/extensions/true_class.rb +4 -7
  236. data/lib/mongoid/extensions.rb +18 -7
  237. data/lib/mongoid/factory.rb +59 -10
  238. data/lib/mongoid/fields/foreign_key.rb +8 -27
  239. data/lib/mongoid/fields/localized.rb +2 -11
  240. data/lib/mongoid/fields/standard.rb +8 -50
  241. data/lib/mongoid/fields/validators/macro.rb +37 -19
  242. data/lib/mongoid/fields/validators.rb +2 -1
  243. data/lib/mongoid/fields.rb +245 -70
  244. data/lib/mongoid/findable.rb +78 -27
  245. data/lib/mongoid/indexable/specification.rb +3 -16
  246. data/lib/mongoid/indexable/validators/options.rb +2 -7
  247. data/lib/mongoid/indexable.rb +10 -22
  248. data/lib/mongoid/inspectable.rb +4 -11
  249. data/lib/mongoid/interceptable.rb +18 -35
  250. data/lib/mongoid/loggable.rb +13 -16
  251. data/lib/mongoid/matchable.rb +3 -153
  252. data/lib/mongoid/matcher/all.rb +22 -0
  253. data/lib/mongoid/matcher/and.rb +21 -0
  254. data/lib/mongoid/matcher/bits.rb +41 -0
  255. data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
  256. data/lib/mongoid/matcher/bits_all_set.rb +20 -0
  257. data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
  258. data/lib/mongoid/matcher/bits_any_set.rb +20 -0
  259. data/lib/mongoid/matcher/elem_match.rb +36 -0
  260. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  261. data/lib/mongoid/matcher/eq.rb +11 -0
  262. data/lib/mongoid/matcher/eq_impl.rb +67 -0
  263. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
  264. data/lib/mongoid/matcher/exists.rb +15 -0
  265. data/lib/mongoid/matcher/expression.rb +35 -0
  266. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  267. data/lib/mongoid/matcher/field_expression.rb +62 -0
  268. data/lib/mongoid/matcher/field_operator.rb +54 -0
  269. data/lib/mongoid/matcher/gt.rb +17 -0
  270. data/lib/mongoid/matcher/gte.rb +17 -0
  271. data/lib/mongoid/matcher/in.rb +25 -0
  272. data/lib/mongoid/matcher/lt.rb +17 -0
  273. data/lib/mongoid/matcher/lte.rb +17 -0
  274. data/lib/mongoid/matcher/mod.rb +17 -0
  275. data/lib/mongoid/matcher/ne.rb +16 -0
  276. data/lib/mongoid/matcher/nin.rb +11 -0
  277. data/lib/mongoid/matcher/nor.rb +25 -0
  278. data/lib/mongoid/matcher/not.rb +29 -0
  279. data/lib/mongoid/matcher/or.rb +21 -0
  280. data/lib/mongoid/matcher/regex.rb +41 -0
  281. data/lib/mongoid/matcher/size.rb +26 -0
  282. data/lib/mongoid/matcher/type.rb +99 -0
  283. data/lib/mongoid/matcher.rb +110 -0
  284. data/lib/mongoid/persistable/creatable.rb +4 -21
  285. data/lib/mongoid/persistable/deletable.rb +11 -26
  286. data/lib/mongoid/persistable/destroyable.rb +11 -10
  287. data/lib/mongoid/persistable/incrementable.rb +7 -8
  288. data/lib/mongoid/persistable/logical.rb +5 -7
  289. data/lib/mongoid/persistable/poppable.rb +3 -6
  290. data/lib/mongoid/persistable/pullable.rb +3 -8
  291. data/lib/mongoid/persistable/pushable.rb +14 -10
  292. data/lib/mongoid/persistable/renamable.rb +10 -8
  293. data/lib/mongoid/persistable/savable.rb +3 -8
  294. data/lib/mongoid/persistable/settable.rb +60 -18
  295. data/lib/mongoid/persistable/unsettable.rb +8 -8
  296. data/lib/mongoid/persistable/updatable.rb +32 -20
  297. data/lib/mongoid/persistable/upsertable.rb +4 -9
  298. data/lib/mongoid/persistable.rb +136 -42
  299. data/lib/mongoid/persistence_context.rb +49 -47
  300. data/lib/mongoid/positional.rb +3 -6
  301. data/lib/mongoid/query_cache.rb +138 -106
  302. data/lib/mongoid/railtie.rb +3 -16
  303. data/lib/mongoid/railties/controller_runtime.rb +3 -1
  304. data/lib/mongoid/railties/database.rake +9 -0
  305. data/lib/mongoid/reloadable.rb +14 -19
  306. data/lib/mongoid/scopable.rb +19 -44
  307. data/lib/mongoid/selectable.rb +8 -17
  308. data/lib/mongoid/serializable.rb +28 -33
  309. data/lib/mongoid/shardable.rb +80 -17
  310. data/lib/mongoid/stateful.rb +3 -10
  311. data/lib/mongoid/stringified_symbol.rb +52 -0
  312. data/lib/mongoid/tasks/database.rake +12 -5
  313. data/lib/mongoid/tasks/database.rb +85 -5
  314. data/lib/mongoid/threaded/lifecycle.rb +2 -21
  315. data/lib/mongoid/threaded.rb +2 -55
  316. data/lib/mongoid/timestamps/created/short.rb +2 -1
  317. data/lib/mongoid/timestamps/created.rb +3 -2
  318. data/lib/mongoid/timestamps/short.rb +2 -1
  319. data/lib/mongoid/timestamps/timeless.rb +6 -9
  320. data/lib/mongoid/timestamps/updated/short.rb +2 -1
  321. data/lib/mongoid/timestamps/updated.rb +3 -4
  322. data/lib/mongoid/timestamps.rb +3 -2
  323. data/lib/mongoid/touchable.rb +132 -0
  324. data/lib/mongoid/traversable.rb +183 -60
  325. data/lib/mongoid/validatable/associated.rb +5 -6
  326. data/lib/mongoid/validatable/format.rb +2 -1
  327. data/lib/mongoid/validatable/length.rb +2 -1
  328. data/lib/mongoid/validatable/localizable.rb +2 -3
  329. data/lib/mongoid/validatable/macros.rb +3 -8
  330. data/lib/mongoid/validatable/presence.rb +10 -15
  331. data/lib/mongoid/validatable/queryable.rb +2 -3
  332. data/lib/mongoid/validatable/uniqueness.rb +25 -38
  333. data/lib/mongoid/validatable.rb +16 -35
  334. data/lib/mongoid/version.rb +3 -2
  335. data/lib/mongoid/warnings.rb +29 -0
  336. data/lib/mongoid.rb +34 -15
  337. data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
  338. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -29
  339. data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
  340. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
  341. data/lib/rails/generators/mongoid_generator.rb +2 -1
  342. data/lib/rails/mongoid.rb +4 -5
  343. data/spec/README.md +33 -0
  344. data/spec/config/mongoid.yml +14 -3
  345. data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
  346. data/spec/integration/app_spec.rb +349 -0
  347. data/spec/integration/associations/belongs_to_spec.rb +15 -0
  348. data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
  349. data/spec/integration/associations/embedded_spec.rb +268 -0
  350. data/spec/integration/associations/embeds_many_spec.rb +206 -0
  351. data/spec/integration/associations/embeds_one_spec.rb +23 -0
  352. data/spec/integration/associations/foreign_key_spec.rb +98 -0
  353. data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
  354. data/spec/integration/associations/has_many_spec.rb +128 -0
  355. data/spec/integration/associations/has_one_spec.rb +176 -0
  356. data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
  357. data/spec/integration/associations/reverse_population_spec.rb +34 -0
  358. data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
  359. data/spec/integration/associations/scope_option_spec.rb +101 -0
  360. data/spec/integration/atomic/modifiers_spec.rb +116 -0
  361. data/spec/integration/bson_regexp_raw_spec.rb +19 -0
  362. data/spec/integration/callbacks_models.rb +61 -0
  363. data/spec/integration/callbacks_spec.rb +228 -0
  364. data/spec/integration/contextual/empty_spec.rb +141 -0
  365. data/spec/integration/criteria/alias_query_spec.rb +161 -0
  366. data/spec/integration/criteria/date_field_spec.rb +40 -0
  367. data/spec/integration/criteria/default_scope_spec.rb +72 -0
  368. data/spec/integration/criteria/logical_spec.rb +124 -0
  369. data/spec/integration/criteria/range_spec.rb +265 -0
  370. data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
  371. data/spec/integration/discriminator_key_spec.rb +353 -0
  372. data/spec/integration/discriminator_value_spec.rb +206 -0
  373. data/spec/integration/document_spec.rb +51 -0
  374. data/spec/integration/i18n_fallbacks_spec.rb +103 -0
  375. data/spec/integration/matcher_examples_spec.rb +758 -0
  376. data/spec/integration/matcher_operator_data/all.yml +140 -0
  377. data/spec/integration/matcher_operator_data/and.yml +93 -0
  378. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  379. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  380. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  381. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  382. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  383. data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
  384. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  385. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  386. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  387. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  388. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  389. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  390. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  391. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  392. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  393. data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
  394. data/spec/integration/matcher_operator_data/in.yml +210 -0
  395. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  396. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  397. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  398. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  399. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  400. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  401. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  402. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  403. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  404. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  405. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  406. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  407. data/spec/integration/matcher_operator_data/not.yml +196 -0
  408. data/spec/integration/matcher_operator_data/or.yml +137 -0
  409. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  410. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  411. data/spec/integration/matcher_operator_data/size.yml +174 -0
  412. data/spec/integration/matcher_operator_data/type.yml +70 -0
  413. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  414. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  415. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  416. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  417. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  418. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  419. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  420. data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
  421. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  422. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  423. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  424. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  425. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  426. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  427. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  428. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  429. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  430. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  431. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  432. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  433. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  434. data/spec/integration/matcher_operator_spec.rb +124 -0
  435. data/spec/integration/matcher_spec.rb +283 -0
  436. data/spec/integration/server_query_spec.rb +141 -0
  437. data/spec/integration/shardable_spec.rb +148 -0
  438. data/spec/integration/stringified_symbol_field_spec.rb +203 -0
  439. data/spec/lite_spec_helper.rb +83 -0
  440. data/spec/mongoid/association/accessors_spec.rb +1067 -0
  441. data/spec/mongoid/association/auto_save_spec.rb +403 -0
  442. data/spec/mongoid/association/builders_spec.rb +255 -0
  443. data/spec/mongoid/association/constrainable_spec.rb +117 -0
  444. data/spec/mongoid/association/counter_cache_spec.rb +452 -0
  445. data/spec/mongoid/association/depending_spec.rb +959 -0
  446. data/spec/mongoid/association/eager_spec.rb +281 -0
  447. data/spec/mongoid/association/embedded/cyclic_spec.rb +180 -0
  448. data/spec/mongoid/association/embedded/dirty_spec.rb +67 -0
  449. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +173 -0
  450. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +36 -0
  451. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +559 -0
  452. data/spec/mongoid/association/embedded/embedded_in_spec.rb +903 -0
  453. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +56 -0
  454. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +106 -0
  455. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4652 -0
  456. data/spec/mongoid/association/embedded/embeds_many_models.rb +69 -0
  457. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
  458. data/spec/mongoid/association/embedded/embeds_many_spec.rb +864 -0
  459. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +79 -0
  460. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +81 -0
  461. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1025 -0
  462. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
  463. data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
  464. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
  465. data/spec/mongoid/association/embedded/embeds_one_spec.rb +956 -0
  466. data/spec/mongoid/association/macros_spec.rb +1116 -0
  467. data/spec/mongoid/association/nested/many_spec.rb +232 -0
  468. data/spec/mongoid/association/nested/one_spec.rb +253 -0
  469. data/spec/mongoid/association/options_spec.rb +1323 -0
  470. data/spec/mongoid/association/polymorphic_spec.rb +162 -0
  471. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +243 -0
  472. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +238 -0
  473. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +412 -0
  474. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1373 -0
  475. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
  476. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2046 -0
  477. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +180 -0
  478. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +148 -0
  479. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +196 -0
  480. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
  481. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +3773 -0
  482. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +67 -0
  483. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
  484. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1071 -0
  485. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +155 -0
  486. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +142 -0
  487. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +290 -0
  488. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2286 -0
  489. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
  490. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4092 -0
  491. data/spec/mongoid/association/referenced/has_many_models.rb +95 -0
  492. data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
  493. data/spec/mongoid/association/referenced/has_many_spec.rb +1248 -0
  494. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +133 -0
  495. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +159 -0
  496. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +193 -0
  497. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1142 -0
  498. data/spec/mongoid/association/referenced/has_one_models.rb +97 -0
  499. data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
  500. data/spec/mongoid/association/referenced/has_one_spec.rb +1383 -0
  501. data/spec/mongoid/association/reflections_spec.rb +92 -0
  502. data/spec/mongoid/association/syncable_spec.rb +499 -0
  503. data/spec/mongoid/association_spec.rb +191 -0
  504. data/spec/mongoid/atomic/modifiers_spec.rb +51 -2
  505. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
  506. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
  507. data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
  508. data/spec/mongoid/atomic/paths_spec.rb +107 -12
  509. data/spec/mongoid/atomic_spec.rb +57 -10
  510. data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
  511. data/spec/mongoid/attributes/nested_spec.rb +98 -78
  512. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  513. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  514. data/spec/mongoid/attributes/projector_spec.rb +44 -0
  515. data/spec/mongoid/attributes/readonly_spec.rb +84 -127
  516. data/spec/mongoid/attributes_spec.rb +417 -34
  517. data/spec/mongoid/cacheable_spec.rb +3 -1
  518. data/spec/mongoid/changeable_spec.rb +60 -35
  519. data/spec/mongoid/clients/factory_spec.rb +146 -33
  520. data/spec/mongoid/clients/options_spec.rb +93 -60
  521. data/spec/mongoid/clients/sessions_spec.rb +40 -30
  522. data/spec/mongoid/clients/transactions_spec.rb +415 -0
  523. data/spec/mongoid/clients_spec.rb +78 -16
  524. data/spec/mongoid/composable_spec.rb +2 -0
  525. data/spec/mongoid/config/environment_spec.rb +126 -8
  526. data/spec/mongoid/config/options_spec.rb +22 -3
  527. data/spec/mongoid/config_spec.rb +350 -2
  528. data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
  529. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
  530. data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
  531. data/spec/mongoid/contextual/atomic_spec.rb +242 -81
  532. data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
  533. data/spec/mongoid/contextual/map_reduce_spec.rb +24 -7
  534. data/spec/mongoid/contextual/memory_spec.rb +870 -88
  535. data/spec/mongoid/contextual/mongo_spec.rb +1318 -183
  536. data/spec/mongoid/contextual/none_spec.rb +45 -71
  537. data/spec/mongoid/copyable_spec.rb +294 -29
  538. data/spec/mongoid/copyable_spec_models.rb +47 -0
  539. data/spec/mongoid/criteria/findable_spec.rb +77 -20
  540. data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
  541. data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
  542. data/spec/mongoid/criteria/modifiable_spec.rb +215 -40
  543. data/spec/mongoid/criteria/options_spec.rb +2 -0
  544. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
  545. data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
  546. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
  547. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +2 -0
  548. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
  549. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
  550. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
  551. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
  552. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
  553. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
  554. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
  555. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
  556. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
  557. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +53 -0
  558. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
  559. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
  560. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
  561. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
  562. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
  563. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -1
  564. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
  565. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +42 -23
  566. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +30 -1
  567. data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
  568. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
  569. data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
  570. data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
  571. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +14 -0
  572. data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
  573. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2069 -0
  574. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
  575. data/spec/mongoid/criteria/queryable/selectable_spec.rb +1155 -2927
  576. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
  577. data/spec/mongoid/criteria/queryable/selector_spec.rb +39 -0
  578. data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
  579. data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
  580. data/spec/mongoid/criteria/scopable_spec.rb +129 -0
  581. data/spec/mongoid/criteria_projection_spec.rb +410 -0
  582. data/spec/mongoid/criteria_spec.rb +829 -478
  583. data/spec/mongoid/document_fields_spec.rb +113 -0
  584. data/spec/mongoid/document_persistence_context_spec.rb +32 -0
  585. data/spec/mongoid/document_query_spec.rb +89 -0
  586. data/spec/mongoid/document_spec.rb +131 -31
  587. data/spec/mongoid/equality_spec.rb +144 -41
  588. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
  589. data/spec/mongoid/errors/callback_spec.rb +2 -0
  590. data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
  591. data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
  592. data/spec/mongoid/errors/document_not_found_spec.rb +51 -0
  593. data/spec/mongoid/errors/eager_load_spec.rb +2 -0
  594. data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
  595. data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
  596. data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
  597. data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
  598. data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
  599. data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
  600. data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
  601. data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
  602. data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
  603. data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
  604. data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
  605. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
  606. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
  607. data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
  608. data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
  609. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
  610. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
  611. data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
  612. data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
  613. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
  614. data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
  615. data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
  616. data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
  617. data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
  618. data/spec/mongoid/errors/no_environment_spec.rb +2 -0
  619. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
  620. data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
  621. data/spec/mongoid/errors/no_parent_spec.rb +3 -1
  622. data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
  623. data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
  624. data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
  625. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
  626. data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
  627. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
  628. data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
  629. data/spec/mongoid/errors/validations_spec.rb +2 -0
  630. data/spec/mongoid/extensions/array_spec.rb +36 -58
  631. data/spec/mongoid/extensions/big_decimal_spec.rb +2 -0
  632. data/spec/mongoid/extensions/binary_spec.rb +2 -0
  633. data/spec/mongoid/extensions/boolean_spec.rb +2 -0
  634. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
  635. data/spec/mongoid/extensions/date_spec.rb +8 -160
  636. data/spec/mongoid/extensions/date_time_spec.rb +17 -60
  637. data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
  638. data/spec/mongoid/extensions/false_class_spec.rb +3 -1
  639. data/spec/mongoid/extensions/float_spec.rb +17 -3
  640. data/spec/mongoid/extensions/hash_spec.rb +123 -1
  641. data/spec/mongoid/extensions/integer_spec.rb +14 -2
  642. data/spec/mongoid/extensions/module_spec.rb +2 -0
  643. data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
  644. data/spec/mongoid/extensions/object_id_spec.rb +2 -0
  645. data/spec/mongoid/extensions/object_spec.rb +20 -35
  646. data/spec/mongoid/extensions/range_spec.rb +9 -0
  647. data/spec/mongoid/extensions/regexp_spec.rb +2 -0
  648. data/spec/mongoid/extensions/set_spec.rb +2 -0
  649. data/spec/mongoid/extensions/string_spec.rb +95 -34
  650. data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
  651. data/spec/mongoid/extensions/symbol_spec.rb +2 -0
  652. data/spec/mongoid/extensions/time_spec.rb +29 -0
  653. data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
  654. data/spec/mongoid/extensions/true_class_spec.rb +3 -1
  655. data/spec/mongoid/extensions_spec.rb +16 -2
  656. data/spec/mongoid/factory_spec.rb +301 -23
  657. data/spec/mongoid/fields/foreign_key_spec.rb +26 -32
  658. data/spec/mongoid/fields/localized_spec.rb +6 -4
  659. data/spec/mongoid/fields/standard_spec.rb +2 -0
  660. data/spec/mongoid/fields_spec.rb +419 -37
  661. data/spec/mongoid/findable_spec.rb +84 -20
  662. data/spec/mongoid/indexable/specification_spec.rb +2 -0
  663. data/spec/mongoid/indexable_spec.rb +54 -14
  664. data/spec/mongoid/inspectable_spec.rb +39 -2
  665. data/spec/mongoid/interceptable_spec.rb +189 -96
  666. data/spec/mongoid/interceptable_spec_models.rb +76 -0
  667. data/spec/mongoid/loggable_spec.rb +2 -0
  668. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  669. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
  670. data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
  671. data/spec/mongoid/persistable/creatable_spec.rb +112 -27
  672. data/spec/mongoid/persistable/deletable_spec.rb +273 -11
  673. data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
  674. data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
  675. data/spec/mongoid/persistable/logical_spec.rb +19 -3
  676. data/spec/mongoid/persistable/poppable_spec.rb +19 -3
  677. data/spec/mongoid/persistable/pullable_spec.rb +36 -6
  678. data/spec/mongoid/persistable/pushable_spec.rb +91 -7
  679. data/spec/mongoid/persistable/renamable_spec.rb +18 -2
  680. data/spec/mongoid/persistable/savable_spec.rb +189 -26
  681. data/spec/mongoid/persistable/settable_spec.rb +149 -18
  682. data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
  683. data/spec/mongoid/persistable/updatable_spec.rb +45 -23
  684. data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
  685. data/spec/mongoid/persistable_spec.rb +106 -15
  686. data/spec/mongoid/persistence_context_spec.rb +3 -1
  687. data/spec/mongoid/positional_spec.rb +2 -0
  688. data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
  689. data/spec/mongoid/query_cache_spec.rb +577 -64
  690. data/spec/mongoid/relations/proxy_spec.rb +126 -124
  691. data/spec/mongoid/reloadable_spec.rb +298 -20
  692. data/spec/mongoid/scopable_spec.rb +102 -37
  693. data/spec/mongoid/selectable_spec.rb +8 -6
  694. data/spec/mongoid/serializable_spec.rb +160 -29
  695. data/spec/mongoid/shardable_models.rb +61 -0
  696. data/spec/mongoid/shardable_spec.rb +145 -26
  697. data/spec/mongoid/stateful_spec.rb +3 -1
  698. data/spec/mongoid/tasks/database_rake_spec.rb +15 -13
  699. data/spec/mongoid/tasks/database_spec.rb +3 -1
  700. data/spec/mongoid/threaded_spec.rb +4 -2
  701. data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
  702. data/spec/mongoid/timestamps/created_spec.rb +3 -1
  703. data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
  704. data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
  705. data/spec/mongoid/timestamps/updated_spec.rb +5 -3
  706. data/spec/mongoid/timestamps_spec.rb +8 -6
  707. data/spec/mongoid/touchable_spec.rb +588 -0
  708. data/spec/mongoid/touchable_spec_models.rb +53 -0
  709. data/spec/mongoid/traversable_spec.rb +1167 -1
  710. data/spec/mongoid/validatable/associated_spec.rb +3 -1
  711. data/spec/mongoid/validatable/format_spec.rb +2 -0
  712. data/spec/mongoid/validatable/length_spec.rb +2 -0
  713. data/spec/mongoid/validatable/numericality_spec.rb +2 -0
  714. data/spec/mongoid/validatable/presence_spec.rb +33 -26
  715. data/spec/mongoid/validatable/uniqueness_spec.rb +102 -73
  716. data/spec/mongoid/validatable_spec.rb +5 -3
  717. data/spec/mongoid_spec.rb +2 -0
  718. data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -1
  719. data/spec/rails/mongoid_spec.rb +4 -2
  720. data/spec/shared/LICENSE +20 -0
  721. data/spec/shared/bin/get-mongodb-download-url +17 -0
  722. data/spec/shared/bin/s3-copy +45 -0
  723. data/spec/shared/bin/s3-upload +69 -0
  724. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  725. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  726. data/spec/shared/lib/mrss/constraints.rb +378 -0
  727. data/spec/shared/lib/mrss/docker_runner.rb +291 -0
  728. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  729. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  730. data/spec/shared/lib/mrss/lite_constraints.rb +230 -0
  731. data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
  732. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  733. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  734. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  735. data/spec/shared/lib/mrss/utils.rb +15 -0
  736. data/spec/shared/share/Dockerfile.erb +325 -0
  737. data/spec/shared/share/haproxy-1.conf +16 -0
  738. data/spec/shared/share/haproxy-2.conf +17 -0
  739. data/spec/shared/shlib/config.sh +27 -0
  740. data/spec/shared/shlib/distro.sh +74 -0
  741. data/spec/shared/shlib/server.sh +392 -0
  742. data/spec/shared/shlib/set_env.sh +169 -0
  743. data/spec/spec_helper.rb +73 -76
  744. data/spec/support/authorization.rb +2 -0
  745. data/spec/support/client_registry.rb +9 -0
  746. data/spec/support/constraints.rb +53 -0
  747. data/spec/support/expectations.rb +21 -3
  748. data/spec/support/helpers.rb +11 -0
  749. data/spec/support/macros.rb +51 -0
  750. data/spec/support/models/account.rb +38 -0
  751. data/spec/support/models/acolyte.rb +19 -0
  752. data/spec/support/models/actor.rb +20 -0
  753. data/spec/support/models/actress.rb +4 -0
  754. data/spec/support/models/address.rb +85 -0
  755. data/spec/support/models/address_component.rb +7 -0
  756. data/spec/support/models/address_number.rb +8 -0
  757. data/spec/support/models/agency.rb +7 -0
  758. data/spec/support/models/agent.rb +18 -0
  759. data/spec/support/models/album.rb +20 -0
  760. data/spec/support/models/alert.rb +9 -0
  761. data/spec/support/models/animal.rb +28 -0
  762. data/spec/support/models/answer.rb +8 -0
  763. data/spec/support/models/appointment.rb +9 -0
  764. data/spec/support/models/armrest.rb +9 -0
  765. data/spec/{app → support}/models/array_field.rb +0 -0
  766. data/spec/support/models/article.rb +14 -0
  767. data/spec/support/models/artist.rb +91 -0
  768. data/spec/support/models/artwork.rb +6 -0
  769. data/spec/support/models/audible_sound.rb +3 -0
  770. data/spec/support/models/audio.rb +7 -0
  771. data/spec/support/models/augmentation.rb +13 -0
  772. data/spec/support/models/author.rb +8 -0
  773. data/spec/support/models/baby.rb +6 -0
  774. data/spec/support/models/band.rb +37 -0
  775. data/spec/support/models/bar.rb +12 -0
  776. data/spec/support/models/basic.rb +8 -0
  777. data/spec/support/models/bed.rb +3 -0
  778. data/spec/support/models/big_palette.rb +4 -0
  779. data/spec/support/models/birthday.rb +15 -0
  780. data/spec/support/models/bolt.rb +7 -0
  781. data/spec/support/models/bomb.rb +6 -0
  782. data/spec/support/models/book.rb +18 -0
  783. data/spec/support/models/breed.rb +6 -0
  784. data/spec/support/models/browser.rb +8 -0
  785. data/spec/support/models/building.rb +8 -0
  786. data/spec/support/models/building_address.rb +9 -0
  787. data/spec/support/models/bus.rb +9 -0
  788. data/spec/support/models/business.rb +7 -0
  789. data/spec/support/models/callback_test.rb +11 -0
  790. data/spec/support/models/canvas.rb +27 -0
  791. data/spec/support/models/car.rb +3 -0
  792. data/spec/support/models/cat.rb +10 -0
  793. data/spec/support/models/category.rb +10 -0
  794. data/spec/support/models/child.rb +6 -0
  795. data/spec/support/models/child_doc.rb +24 -0
  796. data/spec/support/models/church.rb +8 -0
  797. data/spec/support/models/circle.rb +5 -0
  798. data/spec/support/models/circuit.rb +6 -0
  799. data/spec/support/models/circus.rb +9 -0
  800. data/spec/support/models/code.rb +15 -0
  801. data/spec/support/models/coding/pull_request.rb +11 -0
  802. data/spec/support/models/coding.rb +3 -0
  803. data/spec/support/models/comment.rb +18 -0
  804. data/spec/support/models/company.rb +7 -0
  805. data/spec/support/models/consumption_period.rb +9 -0
  806. data/spec/support/models/contextable_item.rb +7 -0
  807. data/spec/support/models/contractor.rb +7 -0
  808. data/spec/support/models/cookie.rb +8 -0
  809. data/spec/support/models/country_code.rb +12 -0
  810. data/spec/support/models/courier_job.rb +6 -0
  811. data/spec/support/models/crate.rb +12 -0
  812. data/spec/support/models/customer.rb +10 -0
  813. data/spec/support/models/customer_address.rb +11 -0
  814. data/spec/support/models/deed.rb +7 -0
  815. data/spec/support/models/definition.rb +11 -0
  816. data/spec/support/models/delegating_patient.rb +15 -0
  817. data/spec/support/models/description.rb +13 -0
  818. data/spec/support/models/dictionary.rb +18 -0
  819. data/spec/support/models/division.rb +12 -0
  820. data/spec/support/models/doctor.rb +14 -0
  821. data/spec/support/models/dog.rb +9 -0
  822. data/spec/support/models/dokument.rb +8 -0
  823. data/spec/support/models/draft.rb +11 -0
  824. data/spec/support/models/dragon.rb +6 -0
  825. data/spec/support/models/driver.rb +9 -0
  826. data/spec/support/models/drug.rb +8 -0
  827. data/spec/support/models/dungeon.rb +6 -0
  828. data/spec/support/models/edit.rb +7 -0
  829. data/spec/support/models/email.rb +8 -0
  830. data/spec/support/models/employer.rb +7 -0
  831. data/spec/support/models/entry.rb +8 -0
  832. data/spec/support/models/eraser.rb +3 -0
  833. data/spec/support/models/even.rb +9 -0
  834. data/spec/support/models/event.rb +24 -0
  835. data/spec/support/models/exhibition.rb +6 -0
  836. data/spec/support/models/exhibitor.rb +8 -0
  837. data/spec/support/models/explosion.rb +6 -0
  838. data/spec/support/models/eye.rb +11 -0
  839. data/spec/support/models/eye_bowl.rb +11 -0
  840. data/spec/support/models/face.rb +10 -0
  841. data/spec/support/models/favorite.rb +8 -0
  842. data/spec/support/models/filesystem.rb +7 -0
  843. data/spec/support/models/fire_hydrant.rb +8 -0
  844. data/spec/support/models/firefox.rb +6 -0
  845. data/spec/support/models/fish.rb +9 -0
  846. data/spec/support/models/folder.rb +9 -0
  847. data/spec/support/models/folder_item.rb +11 -0
  848. data/spec/support/models/fruits.rb +36 -0
  849. data/spec/support/models/game.rb +21 -0
  850. data/spec/support/models/ghost.rb +9 -0
  851. data/spec/support/models/guitar.rb +4 -0
  852. data/spec/support/models/hole.rb +12 -0
  853. data/spec/support/models/home.rb +6 -0
  854. data/spec/support/models/house.rb +8 -0
  855. data/spec/support/models/html_writer.rb +5 -0
  856. data/spec/support/models/id_key.rb +8 -0
  857. data/spec/support/models/idnodef.rb +7 -0
  858. data/spec/support/models/image.rb +24 -0
  859. data/spec/support/models/implant.rb +18 -0
  860. data/spec/support/models/instrument.rb +8 -0
  861. data/spec/support/models/item.rb +10 -0
  862. data/spec/support/models/jar.rb +9 -0
  863. data/spec/support/models/kaleidoscope.rb +8 -0
  864. data/spec/support/models/kangaroo.rb +6 -0
  865. data/spec/support/models/label.rb +50 -0
  866. data/spec/support/models/language.rb +7 -0
  867. data/spec/support/models/lat_lng.rb +17 -0
  868. data/spec/support/models/league.rb +13 -0
  869. data/spec/support/models/learner.rb +4 -0
  870. data/spec/support/models/line_item.rb +8 -0
  871. data/spec/support/models/location.rb +10 -0
  872. data/spec/support/models/login.rb +10 -0
  873. data/spec/support/models/manufacturer.rb +9 -0
  874. data/spec/support/models/meat.rb +6 -0
  875. data/spec/support/models/membership.rb +7 -0
  876. data/spec/support/models/message.rb +13 -0
  877. data/spec/support/models/minim.rb +6 -0
  878. data/spec/support/models/mixed_drink.rb +6 -0
  879. data/spec/support/models/mop.rb +24 -0
  880. data/spec/support/models/movie.rb +15 -0
  881. data/spec/support/models/my_hash.rb +4 -0
  882. data/spec/support/models/name.rb +26 -0
  883. data/spec/support/models/name_only.rb +8 -0
  884. data/spec/support/models/node.rb +7 -0
  885. data/spec/support/models/note.rb +19 -0
  886. data/spec/support/models/nut.rb +7 -0
  887. data/spec/support/models/odd.rb +9 -0
  888. data/spec/support/models/order.rb +12 -0
  889. data/spec/support/models/ordered_post.rb +13 -0
  890. data/spec/support/models/ordered_preference.rb +8 -0
  891. data/spec/support/models/oscar.rb +16 -0
  892. data/spec/support/models/other_owner_object.rb +4 -0
  893. data/spec/support/models/override.rb +18 -0
  894. data/spec/support/models/ownable.rb +8 -0
  895. data/spec/support/models/owner.rb +10 -0
  896. data/spec/support/models/pack.rb +5 -0
  897. data/spec/support/models/page.rb +18 -0
  898. data/spec/support/models/page_question.rb +6 -0
  899. data/spec/support/models/palette.rb +9 -0
  900. data/spec/support/models/parent.rb +7 -0
  901. data/spec/support/models/parent_doc.rb +8 -0
  902. data/spec/support/models/passport.rb +13 -0
  903. data/spec/support/models/patient.rb +11 -0
  904. data/spec/support/models/pdf_writer.rb +5 -0
  905. data/spec/support/models/pencil.rb +3 -0
  906. data/spec/support/models/person.rb +230 -0
  907. data/spec/support/models/pet.rb +25 -0
  908. data/spec/support/models/pet_owner.rb +8 -0
  909. data/spec/support/models/phone.rb +13 -0
  910. data/spec/support/models/piano.rb +4 -0
  911. data/spec/support/models/pizza.rb +9 -0
  912. data/spec/support/models/player.rb +37 -0
  913. data/spec/support/models/post.rb +52 -0
  914. data/spec/support/models/post_genre.rb +8 -0
  915. data/spec/support/models/powerup.rb +13 -0
  916. data/spec/support/models/preference.rb +11 -0
  917. data/spec/support/models/princess.rb +12 -0
  918. data/spec/support/models/product.rb +19 -0
  919. data/spec/support/models/profile.rb +17 -0
  920. data/spec/support/models/pronunciation.rb +7 -0
  921. data/spec/support/models/pub.rb +8 -0
  922. data/spec/support/models/publication/encyclopedia.rb +11 -0
  923. data/spec/support/models/publication/review.rb +13 -0
  924. data/spec/support/models/publication.rb +4 -0
  925. data/spec/support/models/purchase.rb +6 -0
  926. data/spec/support/models/purchased_item.rb +10 -0
  927. data/spec/support/models/question.rb +10 -0
  928. data/spec/support/models/quiz.rb +9 -0
  929. data/spec/support/models/rating.rb +10 -0
  930. data/spec/support/models/record.rb +54 -0
  931. data/spec/support/models/registry.rb +6 -0
  932. data/spec/support/models/role.rb +9 -0
  933. data/spec/support/models/root_category.rb +6 -0
  934. data/spec/support/models/sandwich.rb +11 -0
  935. data/spec/support/models/scheduler.rb +9 -0
  936. data/spec/support/models/scribe.rb +7 -0
  937. data/spec/support/models/sealer.rb +7 -0
  938. data/spec/support/models/seat.rb +24 -0
  939. data/spec/support/models/seo.rb +9 -0
  940. data/spec/support/models/series.rb +7 -0
  941. data/spec/support/models/server.rb +15 -0
  942. data/spec/support/models/service.rb +24 -0
  943. data/spec/support/models/shape.rb +14 -0
  944. data/spec/support/models/shelf.rb +7 -0
  945. data/spec/support/models/shipment_address.rb +5 -0
  946. data/spec/support/models/shipping_container.rb +7 -0
  947. data/spec/support/models/shipping_pack.rb +5 -0
  948. data/spec/support/models/shirt.rb +11 -0
  949. data/spec/support/models/shop.rb +8 -0
  950. data/spec/support/models/short_agent.rb +6 -0
  951. data/spec/support/models/short_quiz.rb +7 -0
  952. data/spec/support/models/simple.rb +7 -0
  953. data/spec/support/models/slave.rb +8 -0
  954. data/spec/support/models/song.rb +10 -0
  955. data/spec/support/models/sound.rb +7 -0
  956. data/spec/support/models/spacer.rb +7 -0
  957. data/spec/support/models/square.rb +6 -0
  958. data/spec/support/models/staff.rb +9 -0
  959. data/spec/support/models/store_as_dup_test1.rb +7 -0
  960. data/spec/support/models/store_as_dup_test2.rb +7 -0
  961. data/spec/support/models/store_as_dup_test3.rb +7 -0
  962. data/spec/support/models/store_as_dup_test4.rb +7 -0
  963. data/spec/support/models/strategy.rb +5 -0
  964. data/spec/support/models/sub_item.rb +5 -0
  965. data/spec/support/models/subscription.rb +7 -0
  966. data/spec/support/models/survey.rb +7 -0
  967. data/spec/support/models/symptom.rb +8 -0
  968. data/spec/support/models/system_role.rb +7 -0
  969. data/spec/support/models/tag.rb +10 -0
  970. data/spec/support/models/target.rb +7 -0
  971. data/spec/support/models/template.rb +7 -0
  972. data/spec/support/models/thing.rb +11 -0
  973. data/spec/support/models/threadlocker.rb +7 -0
  974. data/spec/support/models/title.rb +5 -0
  975. data/spec/support/models/tool.rb +10 -0
  976. data/spec/support/models/topping.rb +7 -0
  977. data/spec/support/models/toy.rb +9 -0
  978. data/spec/support/models/track.rb +40 -0
  979. data/spec/support/models/translation.rb +7 -0
  980. data/spec/support/models/tree.rb +11 -0
  981. data/spec/support/models/truck.rb +7 -0
  982. data/spec/support/models/updatable.rb +7 -0
  983. data/spec/support/models/user.rb +23 -0
  984. data/spec/support/models/user_account.rb +12 -0
  985. data/spec/support/models/validation_callback.rb +12 -0
  986. data/spec/support/models/vehicle.rb +18 -0
  987. data/spec/support/models/version.rb +7 -0
  988. data/spec/support/models/vertex.rb +8 -0
  989. data/spec/support/models/vet_visit.rb +7 -0
  990. data/spec/support/models/video.rb +15 -0
  991. data/spec/support/models/video_game.rb +3 -0
  992. data/spec/support/models/washer.rb +7 -0
  993. data/spec/support/models/weapon.rb +13 -0
  994. data/spec/support/models/wiki_page.rb +17 -0
  995. data/spec/support/models/word.rb +17 -0
  996. data/spec/support/models/word_origin.rb +13 -0
  997. data/spec/support/models/writer.rb +13 -0
  998. data/spec/support/schema_maps/schema_map_aws.json +17 -0
  999. data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  1000. data/spec/support/schema_maps/schema_map_azure.json +17 -0
  1001. data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1002. data/spec/support/schema_maps/schema_map_gcp.json +17 -0
  1003. data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1004. data/spec/support/schema_maps/schema_map_kmip.json +17 -0
  1005. data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1006. data/spec/support/schema_maps/schema_map_local.json +18 -0
  1007. data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
  1008. data/spec/support/shared/time.rb +53 -0
  1009. data/spec/support/spec_config.rb +64 -0
  1010. data.tar.gz.sig +3 -1
  1011. metadata +1301 -830
  1012. metadata.gz.sig +0 -0
  1013. data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
  1014. data/lib/mongoid/matchable/all.rb +0 -27
  1015. data/lib/mongoid/matchable/and.rb +0 -30
  1016. data/lib/mongoid/matchable/default.rb +0 -72
  1017. data/lib/mongoid/matchable/elem_match.rb +0 -28
  1018. data/lib/mongoid/matchable/exists.rb +0 -23
  1019. data/lib/mongoid/matchable/gt.rb +0 -23
  1020. data/lib/mongoid/matchable/gte.rb +0 -23
  1021. data/lib/mongoid/matchable/in.rb +0 -24
  1022. data/lib/mongoid/matchable/lt.rb +0 -23
  1023. data/lib/mongoid/matchable/lte.rb +0 -23
  1024. data/lib/mongoid/matchable/ne.rb +0 -21
  1025. data/lib/mongoid/matchable/nin.rb +0 -22
  1026. data/lib/mongoid/matchable/nor.rb +0 -37
  1027. data/lib/mongoid/matchable/or.rb +0 -33
  1028. data/lib/mongoid/matchable/regexp.rb +0 -27
  1029. data/lib/mongoid/matchable/size.rb +0 -21
  1030. data/lib/mongoid/relations/accessors.rb +0 -267
  1031. data/lib/mongoid/relations/auto_save.rb +0 -94
  1032. data/lib/mongoid/relations/binding.rb +0 -218
  1033. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  1034. data/lib/mongoid/relations/bindings/embedded/many.rb +0 -43
  1035. data/lib/mongoid/relations/bindings/embedded/one.rb +0 -45
  1036. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  1037. data/lib/mongoid/relations/bindings/referenced/many.rb +0 -38
  1038. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  1039. data/lib/mongoid/relations/bindings/referenced/one.rb +0 -44
  1040. data/lib/mongoid/relations/bindings.rb +0 -9
  1041. data/lib/mongoid/relations/builder.rb +0 -57
  1042. data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
  1043. data/lib/mongoid/relations/builders/embedded/many.rb +0 -36
  1044. data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
  1045. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  1046. data/lib/mongoid/relations/builders/nested_attributes/one.rb +0 -126
  1047. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  1048. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  1049. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  1050. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  1051. data/lib/mongoid/relations/builders.rb +0 -106
  1052. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  1053. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  1054. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  1055. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  1056. data/lib/mongoid/relations/cascading.rb +0 -56
  1057. data/lib/mongoid/relations/constraint.rb +0 -55
  1058. data/lib/mongoid/relations/conversions.rb +0 -34
  1059. data/lib/mongoid/relations/counter_cache.rb +0 -160
  1060. data/lib/mongoid/relations/cyclic.rb +0 -107
  1061. data/lib/mongoid/relations/eager/base.rb +0 -153
  1062. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  1063. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  1064. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  1065. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  1066. data/lib/mongoid/relations/eager.rb +0 -36
  1067. data/lib/mongoid/relations/embedded/batchable.rb +0 -384
  1068. data/lib/mongoid/relations/embedded/in.rb +0 -241
  1069. data/lib/mongoid/relations/embedded/many.rb +0 -683
  1070. data/lib/mongoid/relations/embedded/one.rb +0 -235
  1071. data/lib/mongoid/relations/macros.rb +0 -367
  1072. data/lib/mongoid/relations/many.rb +0 -242
  1073. data/lib/mongoid/relations/marshalable.rb +0 -32
  1074. data/lib/mongoid/relations/metadata.rb +0 -1179
  1075. data/lib/mongoid/relations/nested_builder.rb +0 -74
  1076. data/lib/mongoid/relations/one.rb +0 -60
  1077. data/lib/mongoid/relations/options.rb +0 -49
  1078. data/lib/mongoid/relations/polymorphic.rb +0 -39
  1079. data/lib/mongoid/relations/proxy.rb +0 -215
  1080. data/lib/mongoid/relations/referenced/in.rb +0 -304
  1081. data/lib/mongoid/relations/referenced/many.rb +0 -812
  1082. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  1083. data/lib/mongoid/relations/referenced/one.rb +0 -290
  1084. data/lib/mongoid/relations/reflections.rb +0 -64
  1085. data/lib/mongoid/relations/synchronization.rb +0 -169
  1086. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  1087. data/lib/mongoid/relations/targets.rb +0 -2
  1088. data/lib/mongoid/relations/touchable.rb +0 -97
  1089. data/lib/mongoid/relations.rb +0 -148
  1090. data/lib/support/ruby_version.rb +0 -26
  1091. data/spec/app/models/account.rb +0 -36
  1092. data/spec/app/models/acolyte.rb +0 -17
  1093. data/spec/app/models/actor.rb +0 -18
  1094. data/spec/app/models/actress.rb +0 -2
  1095. data/spec/app/models/address.rb +0 -79
  1096. data/spec/app/models/address_component.rb +0 -5
  1097. data/spec/app/models/address_number.rb +0 -6
  1098. data/spec/app/models/agency.rb +0 -5
  1099. data/spec/app/models/agent.rb +0 -16
  1100. data/spec/app/models/album.rb +0 -18
  1101. data/spec/app/models/alert.rb +0 -7
  1102. data/spec/app/models/animal.rb +0 -25
  1103. data/spec/app/models/answer.rb +0 -6
  1104. data/spec/app/models/appointment.rb +0 -7
  1105. data/spec/app/models/article.rb +0 -12
  1106. data/spec/app/models/artist.rb +0 -87
  1107. data/spec/app/models/artwork.rb +0 -4
  1108. data/spec/app/models/audio.rb +0 -5
  1109. data/spec/app/models/augmentation.rb +0 -11
  1110. data/spec/app/models/author.rb +0 -6
  1111. data/spec/app/models/baby.rb +0 -4
  1112. data/spec/app/models/band.rb +0 -31
  1113. data/spec/app/models/bar.rb +0 -10
  1114. data/spec/app/models/basic.rb +0 -6
  1115. data/spec/app/models/bed.rb +0 -1
  1116. data/spec/app/models/big_palette.rb +0 -2
  1117. data/spec/app/models/birthday.rb +0 -13
  1118. data/spec/app/models/bomb.rb +0 -4
  1119. data/spec/app/models/book.rb +0 -16
  1120. data/spec/app/models/breed.rb +0 -4
  1121. data/spec/app/models/browser.rb +0 -6
  1122. data/spec/app/models/building.rb +0 -6
  1123. data/spec/app/models/building_address.rb +0 -7
  1124. data/spec/app/models/bus.rb +0 -7
  1125. data/spec/app/models/business.rb +0 -5
  1126. data/spec/app/models/callback_test.rb +0 -9
  1127. data/spec/app/models/canvas.rb +0 -25
  1128. data/spec/app/models/car.rb +0 -1
  1129. data/spec/app/models/cat.rb +0 -8
  1130. data/spec/app/models/category.rb +0 -8
  1131. data/spec/app/models/child.rb +0 -4
  1132. data/spec/app/models/child_doc.rb +0 -22
  1133. data/spec/app/models/church.rb +0 -6
  1134. data/spec/app/models/circle.rb +0 -3
  1135. data/spec/app/models/circuit.rb +0 -4
  1136. data/spec/app/models/circus.rb +0 -7
  1137. data/spec/app/models/code.rb +0 -11
  1138. data/spec/app/models/comment.rb +0 -16
  1139. data/spec/app/models/company.rb +0 -5
  1140. data/spec/app/models/consumption_period.rb +0 -7
  1141. data/spec/app/models/contextable_item.rb +0 -5
  1142. data/spec/app/models/contractor.rb +0 -5
  1143. data/spec/app/models/cookie.rb +0 -6
  1144. data/spec/app/models/country_code.rb +0 -8
  1145. data/spec/app/models/courier_job.rb +0 -4
  1146. data/spec/app/models/definition.rb +0 -9
  1147. data/spec/app/models/description.rb +0 -11
  1148. data/spec/app/models/dictionary.rb +0 -10
  1149. data/spec/app/models/division.rb +0 -10
  1150. data/spec/app/models/doctor.rb +0 -12
  1151. data/spec/app/models/dog.rb +0 -7
  1152. data/spec/app/models/dokument.rb +0 -6
  1153. data/spec/app/models/draft.rb +0 -9
  1154. data/spec/app/models/dragon.rb +0 -4
  1155. data/spec/app/models/driver.rb +0 -7
  1156. data/spec/app/models/drug.rb +0 -6
  1157. data/spec/app/models/dungeon.rb +0 -4
  1158. data/spec/app/models/edit.rb +0 -5
  1159. data/spec/app/models/email.rb +0 -6
  1160. data/spec/app/models/employer.rb +0 -5
  1161. data/spec/app/models/entry.rb +0 -6
  1162. data/spec/app/models/eraser.rb +0 -1
  1163. data/spec/app/models/even.rb +0 -7
  1164. data/spec/app/models/event.rb +0 -22
  1165. data/spec/app/models/exhibition.rb +0 -4
  1166. data/spec/app/models/exhibitor.rb +0 -6
  1167. data/spec/app/models/explosion.rb +0 -4
  1168. data/spec/app/models/eye.rb +0 -9
  1169. data/spec/app/models/eye_bowl.rb +0 -9
  1170. data/spec/app/models/face.rb +0 -8
  1171. data/spec/app/models/favorite.rb +0 -6
  1172. data/spec/app/models/filesystem.rb +0 -5
  1173. data/spec/app/models/fire_hydrant.rb +0 -6
  1174. data/spec/app/models/firefox.rb +0 -4
  1175. data/spec/app/models/fish.rb +0 -7
  1176. data/spec/app/models/folder.rb +0 -7
  1177. data/spec/app/models/folder_item.rb +0 -9
  1178. data/spec/app/models/fruits.rb +0 -34
  1179. data/spec/app/models/game.rb +0 -19
  1180. data/spec/app/models/ghost.rb +0 -7
  1181. data/spec/app/models/home.rb +0 -4
  1182. data/spec/app/models/house.rb +0 -6
  1183. data/spec/app/models/html_writer.rb +0 -3
  1184. data/spec/app/models/id_key.rb +0 -6
  1185. data/spec/app/models/image.rb +0 -22
  1186. data/spec/app/models/implant.rb +0 -16
  1187. data/spec/app/models/item.rb +0 -8
  1188. data/spec/app/models/jar.rb +0 -7
  1189. data/spec/app/models/kaleidoscope.rb +0 -6
  1190. data/spec/app/models/kangaroo.rb +0 -4
  1191. data/spec/app/models/label.rb +0 -47
  1192. data/spec/app/models/language.rb +0 -5
  1193. data/spec/app/models/lat_lng.rb +0 -15
  1194. data/spec/app/models/league.rb +0 -11
  1195. data/spec/app/models/learner.rb +0 -2
  1196. data/spec/app/models/line_item.rb +0 -6
  1197. data/spec/app/models/location.rb +0 -8
  1198. data/spec/app/models/login.rb +0 -8
  1199. data/spec/app/models/manufacturer.rb +0 -7
  1200. data/spec/app/models/meat.rb +0 -4
  1201. data/spec/app/models/membership.rb +0 -4
  1202. data/spec/app/models/message.rb +0 -11
  1203. data/spec/app/models/mixed_drink.rb +0 -4
  1204. data/spec/app/models/movie.rb +0 -13
  1205. data/spec/app/models/my_hash.rb +0 -2
  1206. data/spec/app/models/name.rb +0 -24
  1207. data/spec/app/models/node.rb +0 -5
  1208. data/spec/app/models/note.rb +0 -17
  1209. data/spec/app/models/odd.rb +0 -7
  1210. data/spec/app/models/ordered_post.rb +0 -11
  1211. data/spec/app/models/ordered_preference.rb +0 -6
  1212. data/spec/app/models/oscar.rb +0 -14
  1213. data/spec/app/models/override.rb +0 -16
  1214. data/spec/app/models/ownable.rb +0 -6
  1215. data/spec/app/models/owner.rb +0 -6
  1216. data/spec/app/models/pack.rb +0 -3
  1217. data/spec/app/models/page.rb +0 -16
  1218. data/spec/app/models/page_question.rb +0 -4
  1219. data/spec/app/models/palette.rb +0 -7
  1220. data/spec/app/models/parent.rb +0 -5
  1221. data/spec/app/models/parent_doc.rb +0 -6
  1222. data/spec/app/models/passport.rb +0 -5
  1223. data/spec/app/models/patient.rb +0 -9
  1224. data/spec/app/models/pdf_writer.rb +0 -3
  1225. data/spec/app/models/pencil.rb +0 -1
  1226. data/spec/app/models/person.rb +0 -207
  1227. data/spec/app/models/pet.rb +0 -23
  1228. data/spec/app/models/pet_owner.rb +0 -6
  1229. data/spec/app/models/phone.rb +0 -9
  1230. data/spec/app/models/pizza.rb +0 -7
  1231. data/spec/app/models/player.rb +0 -35
  1232. data/spec/app/models/post.rb +0 -50
  1233. data/spec/app/models/post_genre.rb +0 -6
  1234. data/spec/app/models/powerup.rb +0 -11
  1235. data/spec/app/models/preference.rb +0 -9
  1236. data/spec/app/models/princess.rb +0 -10
  1237. data/spec/app/models/product.rb +0 -17
  1238. data/spec/app/models/profile.rb +0 -5
  1239. data/spec/app/models/pronunciation.rb +0 -5
  1240. data/spec/app/models/pub.rb +0 -6
  1241. data/spec/app/models/purchase.rb +0 -4
  1242. data/spec/app/models/question.rb +0 -8
  1243. data/spec/app/models/quiz.rb +0 -7
  1244. data/spec/app/models/rating.rb +0 -8
  1245. data/spec/app/models/record.rb +0 -52
  1246. data/spec/app/models/registry.rb +0 -4
  1247. data/spec/app/models/role.rb +0 -7
  1248. data/spec/app/models/root_category.rb +0 -4
  1249. data/spec/app/models/sandwich.rb +0 -9
  1250. data/spec/app/models/scheduler.rb +0 -7
  1251. data/spec/app/models/seo.rb +0 -7
  1252. data/spec/app/models/series.rb +0 -4
  1253. data/spec/app/models/server.rb +0 -13
  1254. data/spec/app/models/service.rb +0 -22
  1255. data/spec/app/models/shape.rb +0 -12
  1256. data/spec/app/models/shelf.rb +0 -5
  1257. data/spec/app/models/shipment_address.rb +0 -2
  1258. data/spec/app/models/shipping_container.rb +0 -5
  1259. data/spec/app/models/shipping_pack.rb +0 -3
  1260. data/spec/app/models/shop.rb +0 -6
  1261. data/spec/app/models/short_agent.rb +0 -4
  1262. data/spec/app/models/short_quiz.rb +0 -5
  1263. data/spec/app/models/simple.rb +0 -5
  1264. data/spec/app/models/slave.rb +0 -6
  1265. data/spec/app/models/song.rb +0 -8
  1266. data/spec/app/models/sound.rb +0 -5
  1267. data/spec/app/models/square.rb +0 -4
  1268. data/spec/app/models/staff.rb +0 -7
  1269. data/spec/app/models/store_as_dup_test1.rb +0 -5
  1270. data/spec/app/models/store_as_dup_test2.rb +0 -5
  1271. data/spec/app/models/strategy.rb +0 -3
  1272. data/spec/app/models/sub_item.rb +0 -3
  1273. data/spec/app/models/subscription.rb +0 -5
  1274. data/spec/app/models/survey.rb +0 -5
  1275. data/spec/app/models/symptom.rb +0 -6
  1276. data/spec/app/models/tag.rb +0 -8
  1277. data/spec/app/models/target.rb +0 -5
  1278. data/spec/app/models/template.rb +0 -5
  1279. data/spec/app/models/thing.rb +0 -9
  1280. data/spec/app/models/title.rb +0 -3
  1281. data/spec/app/models/tool.rb +0 -8
  1282. data/spec/app/models/topping.rb +0 -5
  1283. data/spec/app/models/track.rb +0 -38
  1284. data/spec/app/models/translation.rb +0 -5
  1285. data/spec/app/models/tree.rb +0 -9
  1286. data/spec/app/models/truck.rb +0 -3
  1287. data/spec/app/models/user.rb +0 -21
  1288. data/spec/app/models/user_account.rb +0 -10
  1289. data/spec/app/models/validation_callback.rb +0 -10
  1290. data/spec/app/models/vehicle.rb +0 -11
  1291. data/spec/app/models/version.rb +0 -5
  1292. data/spec/app/models/vet_visit.rb +0 -5
  1293. data/spec/app/models/video.rb +0 -13
  1294. data/spec/app/models/video_game.rb +0 -1
  1295. data/spec/app/models/weapon.rb +0 -11
  1296. data/spec/app/models/wiki_page.rb +0 -14
  1297. data/spec/app/models/word.rb +0 -15
  1298. data/spec/app/models/word_origin.rb +0 -11
  1299. data/spec/app/models/writer.rb +0 -11
  1300. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
  1301. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  1302. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  1303. data/spec/mongoid/matchable/all_spec.rb +0 -31
  1304. data/spec/mongoid/matchable/and_spec.rb +0 -187
  1305. data/spec/mongoid/matchable/default_spec.rb +0 -130
  1306. data/spec/mongoid/matchable/elem_match_spec.rb +0 -86
  1307. data/spec/mongoid/matchable/exists_spec.rb +0 -57
  1308. data/spec/mongoid/matchable/gt_spec.rb +0 -86
  1309. data/spec/mongoid/matchable/gte_spec.rb +0 -84
  1310. data/spec/mongoid/matchable/in_spec.rb +0 -49
  1311. data/spec/mongoid/matchable/lt_spec.rb +0 -85
  1312. data/spec/mongoid/matchable/lte_spec.rb +0 -85
  1313. data/spec/mongoid/matchable/ne_spec.rb +0 -46
  1314. data/spec/mongoid/matchable/nin_spec.rb +0 -48
  1315. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  1316. data/spec/mongoid/matchable/or_spec.rb +0 -131
  1317. data/spec/mongoid/matchable/regexp_spec.rb +0 -59
  1318. data/spec/mongoid/matchable/size_spec.rb +0 -25
  1319. data/spec/mongoid/matchable_spec.rb +0 -853
  1320. data/spec/mongoid/relations/accessors_spec.rb +0 -821
  1321. data/spec/mongoid/relations/auto_save_spec.rb +0 -314
  1322. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +0 -171
  1323. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +0 -54
  1324. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +0 -77
  1325. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +0 -241
  1326. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +0 -153
  1327. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +0 -178
  1328. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +0 -131
  1329. data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
  1330. data/spec/mongoid/relations/builders/embedded/many_spec.rb +0 -132
  1331. data/spec/mongoid/relations/builders/embedded/one_spec.rb +0 -99
  1332. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +0 -233
  1333. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +0 -250
  1334. data/spec/mongoid/relations/builders/referenced/in_spec.rb +0 -230
  1335. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  1336. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  1337. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  1338. data/spec/mongoid/relations/builders_spec.rb +0 -253
  1339. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  1340. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  1341. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  1342. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  1343. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  1344. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  1345. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  1346. data/spec/mongoid/relations/counter_cache_spec.rb +0 -450
  1347. data/spec/mongoid/relations/cyclic_spec.rb +0 -178
  1348. data/spec/mongoid/relations/eager/belongs_to_spec.rb +0 -163
  1349. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +0 -133
  1350. data/spec/mongoid/relations/eager/has_many_spec.rb +0 -244
  1351. data/spec/mongoid/relations/eager/has_one_spec.rb +0 -163
  1352. data/spec/mongoid/relations/eager_spec.rb +0 -279
  1353. data/spec/mongoid/relations/embedded/dirty_spec.rb +0 -65
  1354. data/spec/mongoid/relations/embedded/in_spec.rb +0 -579
  1355. data/spec/mongoid/relations/embedded/many_spec.rb +0 -4412
  1356. data/spec/mongoid/relations/embedded/one_spec.rb +0 -1068
  1357. data/spec/mongoid/relations/macros_spec.rb +0 -1039
  1358. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  1359. data/spec/mongoid/relations/options_spec.rb +0 -35
  1360. data/spec/mongoid/relations/polymorphic_spec.rb +0 -128
  1361. data/spec/mongoid/relations/referenced/in_spec.rb +0 -1366
  1362. data/spec/mongoid/relations/referenced/many_spec.rb +0 -3816
  1363. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +0 -3577
  1364. data/spec/mongoid/relations/referenced/one_spec.rb +0 -1240
  1365. data/spec/mongoid/relations/reflections_spec.rb +0 -101
  1366. data/spec/mongoid/relations/synchronization_spec.rb +0 -495
  1367. data/spec/mongoid/relations/targets/enumerable_spec.rb +0 -1825
  1368. data/spec/mongoid/relations/touchable_spec.rb +0 -402
  1369. data/spec/mongoid/relations_spec.rb +0 -189
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Mongoid::Cacheable do
@@ -35,7 +37,7 @@ describe Mongoid::Cacheable do
35
37
  context "when persisted" do
36
38
 
37
39
  before do
38
- document.save
40
+ document.save!
39
41
  end
40
42
 
41
43
  context "with updated_at" do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Mongoid::Changeable do
@@ -695,7 +697,7 @@ describe Mongoid::Changeable do
695
697
  context "when the document is embedded" do
696
698
 
697
699
  let(:person) do
698
- Person.create
700
+ Person.create!
699
701
  end
700
702
 
701
703
  let!(:name) do
@@ -737,7 +739,7 @@ describe Mongoid::Changeable do
737
739
  context "when the field has not changed" do
738
740
 
739
741
  let(:person) do
740
- Person.create(map: { name: "value" })
742
+ Person.create!(map: { name: "value" })
741
743
  end
742
744
 
743
745
  before do
@@ -752,7 +754,7 @@ describe Mongoid::Changeable do
752
754
  context "when the field is changed" do
753
755
 
754
756
  let(:person) do
755
- Person.create(map: { name: "value" })
757
+ Person.create!(map: { name: "value" })
756
758
  end
757
759
 
758
760
  before do
@@ -767,7 +769,7 @@ describe Mongoid::Changeable do
767
769
  context "when a dynamic field is changed in place" do
768
770
 
769
771
  let(:person) do
770
- Person.create(other_name: { full: {first: 'first', last: 'last'} })
772
+ Person.create!(other_name: { full: {first: 'first', last: 'last'} })
771
773
  end
772
774
 
773
775
  before do
@@ -795,11 +797,11 @@ describe Mongoid::Changeable do
795
797
  context "when a child has changed" do
796
798
 
797
799
  let(:person) do
798
- Person.create
800
+ Person.create!
799
801
  end
800
802
 
801
803
  let!(:address) do
802
- person.addresses.create(street: "hobrecht")
804
+ person.addresses.create!(street: "hobrecht")
803
805
  end
804
806
 
805
807
  before do
@@ -814,15 +816,15 @@ describe Mongoid::Changeable do
814
816
  context "when changed? has been called before child elements size change" do
815
817
 
816
818
  let(:person) do
817
- Person.create
819
+ Person.create!
818
820
  end
819
821
 
820
822
  let(:address) do
821
- person.addresses.create(street: "hobrecht")
823
+ person.addresses.create!(street: "hobrecht")
822
824
  end
823
825
 
824
826
  let!(:location) do
825
- address.locations.create(name: "home")
827
+ address.locations.create!(name: "home")
826
828
  end
827
829
 
828
830
  before do
@@ -854,7 +856,7 @@ describe Mongoid::Changeable do
854
856
  context "when adding via create" do
855
857
 
856
858
  before do
857
- address.locations.create
859
+ address.locations.create!
858
860
  end
859
861
 
860
862
  it "returns false" do
@@ -866,15 +868,15 @@ describe Mongoid::Changeable do
866
868
  context "when a deeply embedded child has changed" do
867
869
 
868
870
  let(:person) do
869
- Person.create
871
+ Person.create!
870
872
  end
871
873
 
872
874
  let(:address) do
873
- person.addresses.create(street: "hobrecht")
875
+ person.addresses.create!(street: "hobrecht")
874
876
  end
875
877
 
876
878
  let!(:location) do
877
- address.locations.create(name: "home")
879
+ address.locations.create!(name: "home")
878
880
  end
879
881
 
880
882
  before do
@@ -889,7 +891,7 @@ describe Mongoid::Changeable do
889
891
  context "when a child is new" do
890
892
 
891
893
  let(:person) do
892
- Person.create
894
+ Person.create!
893
895
  end
894
896
 
895
897
  let!(:address) do
@@ -904,11 +906,11 @@ describe Mongoid::Changeable do
904
906
  context "when a deeply embedded child is new" do
905
907
 
906
908
  let(:person) do
907
- Person.create
909
+ Person.create!
908
910
  end
909
911
 
910
912
  let(:address) do
911
- person.addresses.create(street: "hobrecht")
913
+ person.addresses.create!(street: "hobrecht")
912
914
  end
913
915
 
914
916
  let!(:location) do
@@ -946,6 +948,29 @@ describe Mongoid::Changeable do
946
948
  end
947
949
  end
948
950
 
951
+ context 'when habtm association changes' do
952
+
953
+ let(:person) do
954
+ Person.create!(title: "Grand Poobah")
955
+ end
956
+
957
+ let(:user_account) do
958
+ UserAccount.create!
959
+ end
960
+
961
+ before do
962
+ person.user_accounts << user_account
963
+ end
964
+
965
+ it 'returns a hash of changes' do
966
+ pending 'https://jira.mongodb.org/browse/MONGOID-4843'
967
+
968
+ person.changes.should == {
969
+ user_account_ids: [[], [user_account.id]]
970
+ }
971
+ end
972
+ end
973
+
949
974
  context "when the document has not changed" do
950
975
 
951
976
  let(:acolyte) do
@@ -1234,7 +1259,7 @@ describe Mongoid::Changeable do
1234
1259
  context "when the document is persisted" do
1235
1260
 
1236
1261
  let(:person) do
1237
- Person.create(pets: true)
1262
+ Person.create!(pets: true)
1238
1263
  end
1239
1264
 
1240
1265
  before do
@@ -1271,7 +1296,7 @@ describe Mongoid::Changeable do
1271
1296
  context "when the document is persisted" do
1272
1297
 
1273
1298
  let(:person) do
1274
- Person.create(title: "test")
1299
+ Person.create!(title: "test")
1275
1300
  end
1276
1301
 
1277
1302
  before do
@@ -1369,7 +1394,7 @@ describe Mongoid::Changeable do
1369
1394
  context "when only embedded documents change" do
1370
1395
 
1371
1396
  let!(:person) do
1372
- Person.create
1397
+ Person.create!
1373
1398
  end
1374
1399
 
1375
1400
  context "when the child is an embeds one" do
@@ -1428,7 +1453,7 @@ describe Mongoid::Changeable do
1428
1453
  context "when a child is modified" do
1429
1454
 
1430
1455
  let!(:address) do
1431
- person.addresses.create(street: "jakobstr.")
1456
+ person.addresses.create!(street: "jakobstr.")
1432
1457
  end
1433
1458
 
1434
1459
  before do
@@ -1443,7 +1468,7 @@ describe Mongoid::Changeable do
1443
1468
  context "when no child is modified" do
1444
1469
 
1445
1470
  let!(:address) do
1446
- person.addresses.create(street: "skalitzerstr.")
1471
+ person.addresses.create!(street: "skalitzerstr.")
1447
1472
  end
1448
1473
 
1449
1474
  it "does not flag the parent as changed" do
@@ -1456,7 +1481,7 @@ describe Mongoid::Changeable do
1456
1481
  context "when changing a hash of hashes" do
1457
1482
 
1458
1483
  let!(:person) do
1459
- Person.create(map: { "test" => {}})
1484
+ Person.create!(map: { "test" => {}})
1460
1485
  end
1461
1486
 
1462
1487
  before do
@@ -1473,15 +1498,15 @@ describe Mongoid::Changeable do
1473
1498
  context "when modifying a many to many key" do
1474
1499
 
1475
1500
  let!(:person) do
1476
- Person.create
1501
+ Person.create!
1477
1502
  end
1478
1503
 
1479
1504
  let!(:preference) do
1480
- Preference.create(name: "dirty")
1505
+ Preference.create!(name: "dirty")
1481
1506
  end
1482
1507
 
1483
1508
  before do
1484
- person.update_attributes(preference_ids: [ preference.id ])
1509
+ person.update_attributes!(preference_ids: [ preference.id ])
1485
1510
  end
1486
1511
 
1487
1512
  it "records the foreign key dirty changes" do
@@ -1494,7 +1519,7 @@ describe Mongoid::Changeable do
1494
1519
  context "when accessing an array field" do
1495
1520
 
1496
1521
  let!(:person) do
1497
- Person.create
1522
+ Person.create!
1498
1523
  end
1499
1524
 
1500
1525
  let(:from_db) do
@@ -1520,7 +1545,7 @@ describe Mongoid::Changeable do
1520
1545
  context "when reloading an unchanged document" do
1521
1546
 
1522
1547
  let!(:person) do
1523
- Person.create
1548
+ Person.create!
1524
1549
  end
1525
1550
 
1526
1551
  let(:from_db) do
@@ -1539,7 +1564,7 @@ describe Mongoid::Changeable do
1539
1564
  context "when fields are getting changed" do
1540
1565
 
1541
1566
  let(:person) do
1542
- Person.create(
1567
+ Person.create!(
1543
1568
  title: "MC",
1544
1569
  some_dynamic_field: 'blah'
1545
1570
  )
@@ -1619,7 +1644,7 @@ describe Mongoid::Changeable do
1619
1644
  context "when the document is persisted" do
1620
1645
 
1621
1646
  let!(:acolyte) do
1622
- Acolyte.create(name: "callback-test")
1647
+ Acolyte.create!(name: "callback-test")
1623
1648
  end
1624
1649
 
1625
1650
  before do
@@ -1663,7 +1688,7 @@ describe Mongoid::Changeable do
1663
1688
  end
1664
1689
 
1665
1690
  it "retains the changes until after all callbacks" do
1666
- acolyte.save
1691
+ acolyte.save!
1667
1692
  expect(acolyte.changed_in_callback["name"]).to eq([ nil, "callback-test" ])
1668
1693
  end
1669
1694
  end
@@ -1672,7 +1697,7 @@ describe Mongoid::Changeable do
1672
1697
  context "when associations are getting changed" do
1673
1698
 
1674
1699
  let(:person) do
1675
- Person.create(addresses: [ Address.new ])
1700
+ Person.create!(addresses: [ Address.new ])
1676
1701
  end
1677
1702
 
1678
1703
  before do
@@ -1689,7 +1714,7 @@ describe Mongoid::Changeable do
1689
1714
  context 'when persisting the root document' do
1690
1715
 
1691
1716
  let!(:person) do
1692
- Person.create
1717
+ Person.create!
1693
1718
  end
1694
1719
 
1695
1720
  it 'is not marked as changed' do
@@ -1713,7 +1738,7 @@ describe Mongoid::Changeable do
1713
1738
  context 'when building the lowest level document' do
1714
1739
 
1715
1740
  before do
1716
- person.save
1741
+ person.save!
1717
1742
  end
1718
1743
 
1719
1744
  let!(:code) do
@@ -1735,7 +1760,7 @@ describe Mongoid::Changeable do
1735
1760
  context 'when saving the hierarchy' do
1736
1761
 
1737
1762
  before do
1738
- person.save
1763
+ person.save!
1739
1764
  end
1740
1765
 
1741
1766
  let(:reloaded) do
@@ -1757,7 +1782,7 @@ describe Mongoid::Changeable do
1757
1782
  end
1758
1783
 
1759
1784
  before do
1760
- reloaded.save
1785
+ reloaded.save!
1761
1786
  end
1762
1787
 
1763
1788
  it 'saves the deepest embedded document' do
@@ -1,7 +1,34 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Mongoid::Clients::Factory do
4
6
 
7
+ shared_examples_for 'includes seed address' do
8
+ let(:configured_address) do
9
+ address = SpecConfig.instance.addresses.first
10
+ unless address.include?(':')
11
+ address = "#{address}:27017"
12
+ end
13
+ address
14
+ end
15
+
16
+ let(:expected_addresses) do
17
+ [
18
+ configured_address,
19
+ configured_address.sub(/\Alocalhost:/, '127.0.0.1:'),
20
+ configured_address.sub(/\A127\.0\.0\.1:/, 'localhost:'),
21
+ ].uniq
22
+ end
23
+
24
+ it 'includes seed address' do
25
+ ok = cluster_addresses.any? do |address|
26
+ expected_addresses.include?(address)
27
+ end
28
+ expect(ok).to be true
29
+ end
30
+ end
31
+
5
32
  describe ".create" do
6
33
 
7
34
  context "when provided a name" do
@@ -9,11 +36,12 @@ describe Mongoid::Clients::Factory do
9
36
  context "when the configuration exists" do
10
37
 
11
38
  context "when the configuration is standard" do
39
+ restore_config_clients
12
40
 
13
41
  let(:config) do
14
42
  {
15
- default: { hosts: [ "127.0.0.1:27017" ], database: database_id },
16
- secondary: { hosts: [ "127.0.0.1:27017" ], database: database_id }
43
+ default: { hosts: SpecConfig.instance.addresses, database: database_id },
44
+ analytics: { hosts: SpecConfig.instance.addresses, database: database_id }
17
45
  }
18
46
  end
19
47
 
@@ -26,7 +54,7 @@ describe Mongoid::Clients::Factory do
26
54
  end
27
55
 
28
56
  let(:client) do
29
- described_class.create(:secondary)
57
+ described_class.create(:analytics)
30
58
  end
31
59
 
32
60
  let(:cluster) do
@@ -37,21 +65,67 @@ describe Mongoid::Clients::Factory do
37
65
  expect(client).to be_a(Mongo::Client)
38
66
  end
39
67
 
40
- it "sets the cluster's seeds" do
41
- expect(cluster.addresses.first.to_s).to eq("127.0.0.1:27017")
68
+ context 'not JRuby' do
69
+ # Run this test on JRuby when driver 2.16.0 is released -
70
+ # see RUBY-2771.
71
+ fails_on_jruby
72
+
73
+ it 'does not produce driver warnings' do
74
+ Mongo::Logger.logger.should_not receive(:warn)
75
+ client
76
+ end
42
77
  end
43
78
 
79
+ let(:cluster_addresses) do
80
+ cluster.addresses.map(&:to_s)
81
+ end
82
+
83
+ it_behaves_like 'includes seed address'
84
+
44
85
  it "sets the platform to Mongoid's platform constant" do
45
86
  expect(client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
46
87
  end
88
+
89
+ context 'driver 2.13+' do
90
+ min_driver_version '2.13'
91
+
92
+ it 'sets Mongoid as a wrapping library' do
93
+ client.options[:wrapping_libraries].should == [BSON::Document.new(
94
+ Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY)]
95
+ end
96
+
97
+ context 'when configuration specifies a wrapping library' do
98
+
99
+ let(:config) do
100
+ {
101
+ default: { hosts: SpecConfig.instance.addresses, database: database_id },
102
+ analytics: {
103
+ hosts: SpecConfig.instance.addresses,
104
+ database: database_id,
105
+ options: {
106
+ wrapping_libraries: [{name: 'Foo'}],
107
+ },
108
+ }
109
+ }
110
+ end
111
+
112
+ it 'adds Mongoid as another wrapping library' do
113
+ client.options[:wrapping_libraries].should == [
114
+ BSON::Document.new(Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY),
115
+ {'name' => 'Foo'},
116
+ ]
117
+ end
118
+ end
119
+ end
47
120
  end
48
121
 
49
122
  context "when the configuration has no ports" do
123
+ restore_config_clients
50
124
 
51
125
  let(:config) do
52
126
  {
53
127
  default: { hosts: [ "127.0.0.1" ], database: database_id },
54
- secondary: { hosts: [ "127.0.0.1" ], database: database_id }
128
+ analytics: { hosts: [ "127.0.0.1" ], database: database_id }
55
129
  }
56
130
  end
57
131
 
@@ -64,7 +138,7 @@ describe Mongoid::Clients::Factory do
64
138
  end
65
139
 
66
140
  let(:client) do
67
- described_class.create(:secondary)
141
+ described_class.create(:analytics)
68
142
  end
69
143
 
70
144
  let(:default) do
@@ -80,22 +154,23 @@ describe Mongoid::Clients::Factory do
80
154
  end
81
155
 
82
156
  it "sets the cluster's seed ports to 27017" do
83
- expect(cluster.addresses.first.to_s).to eq("127.0.0.1:27017")
157
+ expect(%w(127.0.0.1:27017 localhost:27017)).to include(cluster.addresses.first.to_s)
84
158
  end
85
159
 
86
160
  it "sets ips with no ports to 27017" do
87
- expect(default.cluster.addresses.first.to_s).to eq("127.0.0.1:27017")
161
+ expect(%w(127.0.0.1:27017 localhost:27017)).to include(cluster.addresses.first.to_s)
88
162
  end
89
163
  end
90
164
 
91
165
  context "when configured via a uri" do
92
166
 
93
167
  context "when the uri has a single host:port" do
168
+ restore_config_clients
94
169
 
95
170
  let(:config) do
96
171
  {
97
172
  default: { hosts: [ "127.0.0.1:27017" ], database: database_id },
98
- secondary: { uri: "mongodb://127.0.0.1:27017/mongoid_test" }
173
+ analytics: { uri: "mongodb://127.0.0.1:27017/mongoid_test" }
99
174
  }
100
175
  end
101
176
 
@@ -108,7 +183,7 @@ describe Mongoid::Clients::Factory do
108
183
  end
109
184
 
110
185
  let(:client) do
111
- described_class.create(:secondary)
186
+ described_class.create(:analytics)
112
187
  end
113
188
 
114
189
  let(:cluster) do
@@ -120,7 +195,7 @@ describe Mongoid::Clients::Factory do
120
195
  end
121
196
 
122
197
  it "sets the cluster's seeds" do
123
- expect(cluster.addresses.first.to_s).to eq("127.0.0.1:27017")
198
+ expect(%w(127.0.0.1:27017 localhost:27017)).to include(cluster.addresses.first.to_s)
124
199
  end
125
200
 
126
201
  it "sets the database" do
@@ -129,11 +204,12 @@ describe Mongoid::Clients::Factory do
129
204
  end
130
205
 
131
206
  context "when the uri has multiple host:port pairs" do
207
+ restore_config_clients
132
208
 
133
209
  let(:config) do
134
210
  {
135
- default: { hosts: [ "127.0.0.1:1234" ], database: database_id },
136
- secondary: { uri: "mongodb://127.0.0.1:1234,127.0.0.1:5678/mongoid_test" }
211
+ default: { hosts: [ "127.0.0.1:1234" ], database: database_id, server_selection_timeout: 1 },
212
+ analytics: { uri: "mongodb://127.0.0.1:1234,127.0.0.1:5678/mongoid_test?serverSelectionTimeoutMS=1000" }
137
213
  }
138
214
  end
139
215
 
@@ -146,7 +222,7 @@ describe Mongoid::Clients::Factory do
146
222
  end
147
223
 
148
224
  let(:client) do
149
- described_class.create(:secondary)
225
+ described_class.create(:analytics)
150
226
  end
151
227
 
152
228
  let(:cluster) do
@@ -179,9 +255,10 @@ describe Mongoid::Clients::Factory do
179
255
  end
180
256
 
181
257
  context "when no name is provided" do
258
+ restore_config_clients
182
259
 
183
260
  let(:config) do
184
- { default: { hosts: ["127.0.0.1:27017"], database: database_id }}
261
+ { default: { hosts: SpecConfig.instance.addresses, database: database_id }}
185
262
  end
186
263
 
187
264
  before do
@@ -200,20 +277,19 @@ describe Mongoid::Clients::Factory do
200
277
  client.cluster
201
278
  end
202
279
 
203
- let(:seeds) do
204
- cluster.addresses.map{ |address| address.to_s }
280
+ let(:cluster_addresses) do
281
+ cluster.addresses.map(&:to_s)
205
282
  end
206
283
 
207
284
  it "returns the default client" do
208
285
  expect(client).to be_a(Mongo::Client)
209
286
  end
210
287
 
211
- it "sets the cluster's seeds" do
212
- expect(seeds).to eq([ "127.0.0.1:27017" ])
213
- end
288
+ it_behaves_like 'includes seed address'
214
289
  end
215
290
 
216
291
  context "when nil is provided and no default config" do
292
+ restore_config_clients
217
293
 
218
294
  let(:config) { nil }
219
295
 
@@ -228,9 +304,10 @@ describe Mongoid::Clients::Factory do
228
304
  end
229
305
 
230
306
  describe ".default" do
307
+ restore_config_clients
231
308
 
232
309
  let(:config) do
233
- { default: { hosts: ["127.0.0.1:27017"], database: database_id }}
310
+ { default: { hosts: SpecConfig.instance.addresses, database: database_id }}
234
311
  end
235
312
 
236
313
  before do
@@ -249,25 +326,24 @@ describe Mongoid::Clients::Factory do
249
326
  client.cluster
250
327
  end
251
328
 
252
- let(:seeds) do
253
- cluster.addresses.map{ |address| address.to_s }
329
+ let(:cluster_addresses) do
330
+ cluster.addresses.map(&:to_s)
254
331
  end
255
332
 
256
333
  it "returns the default client" do
257
334
  expect(client).to be_a(Mongo::Client)
258
335
  end
259
336
 
260
- it "sets the cluster's seeds" do
261
- expect(seeds).to eq([ "127.0.0.1:27017" ])
262
- end
337
+ it_behaves_like 'includes seed address'
263
338
  end
264
339
 
265
340
  context "when options are provided with string keys" do
341
+ restore_config_clients
266
342
 
267
343
  let(:config) do
268
344
  {
269
345
  default: {
270
- hosts: [ "127.0.0.1:27017" ],
346
+ hosts: SpecConfig.instance.addresses,
271
347
  database: database_id,
272
348
  options: {
273
349
  "server_selection_timeout" => 10,
@@ -293,17 +369,15 @@ describe Mongoid::Clients::Factory do
293
369
  client.cluster
294
370
  end
295
371
 
296
- let(:seeds) do
297
- cluster.addresses.map{ |address| address.to_s }
372
+ let(:cluster_addresses) do
373
+ cluster.addresses.map(&:to_s)
298
374
  end
299
375
 
300
376
  it "returns the default client" do
301
377
  expect(client).to be_a(Mongo::Client)
302
378
  end
303
379
 
304
- it "sets the cluster's seeds" do
305
- expect(seeds).to eq([ "127.0.0.1:27017" ])
306
- end
380
+ it_behaves_like 'includes seed address'
307
381
 
308
382
  it "sets the server selection timeout" do
309
383
  expect(cluster.options[:server_selection_timeout]).to eq(10)
@@ -317,4 +391,43 @@ describe Mongoid::Clients::Factory do
317
391
  expect(client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
318
392
  end
319
393
  end
394
+
395
+ context "unexpected config options" do
396
+ restore_config_clients
397
+
398
+ let(:unknown_opts) do
399
+ {
400
+ bad_one: 1,
401
+ another_one: "here"
402
+ }
403
+ end
404
+
405
+ let(:config) do
406
+ {
407
+ default: { hosts: SpecConfig.instance.addresses, database: database_id },
408
+ good_one: { hosts: [ "127.0.0.1:1234" ], database: database_id},
409
+ bad_one: { hosts: [ "127.0.0.1:1234" ], database: database_id}.merge(unknown_opts),
410
+ good_two: { uri: "mongodb://127.0.0.1:1234,127.0.0.1:5678/#{database_id}" },
411
+ bad_two: { uri: "mongodb://127.0.0.1:1234,127.0.0.1:5678/#{database_id}" }.merge(unknown_opts)
412
+ }
413
+ end
414
+
415
+ before do
416
+ Mongoid::Config.send(:clients=, config)
417
+ end
418
+
419
+ [:bad_one, :bad_two].each do |env|
420
+ it 'does not log a warning if none' do
421
+ expect(described_class.send(:default_logger)).not_to receive(:warn)
422
+ described_class.create(env).close
423
+ end
424
+ end
425
+
426
+ [:bad_one, :bad_two].each do |env|
427
+ it 'logs a warning if some' do
428
+ expect(described_class.send(:default_logger)).not_to receive(:warn)
429
+ described_class.create(env).close
430
+ end
431
+ end
432
+ end
320
433
  end