mongoid 7.0.0 → 7.4.0

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 (1046) 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 +129 -70
  8. data/lib/mongoid/association/accessors.rb +143 -80
  9. data/lib/mongoid/association/bindable.rb +7 -26
  10. data/lib/mongoid/association/builders.rb +4 -12
  11. data/lib/mongoid/association/constrainable.rb +5 -6
  12. data/lib/mongoid/association/depending.rb +31 -19
  13. data/lib/mongoid/association/eager_loadable.rb +2 -3
  14. data/lib/mongoid/association/embedded/batchable.rb +19 -45
  15. data/lib/mongoid/association/embedded/cyclic.rb +10 -17
  16. data/lib/mongoid/association/embedded/embedded_in/binding.rb +3 -7
  17. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
  18. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
  19. data/lib/mongoid/association/embedded/embedded_in.rb +6 -26
  20. data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -8
  21. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
  22. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +113 -93
  23. data/lib/mongoid/association/embedded/embeds_many.rb +8 -35
  24. data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
  25. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +9 -6
  26. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +45 -30
  27. data/lib/mongoid/association/embedded/embeds_one.rb +8 -31
  28. data/lib/mongoid/association/embedded.rb +2 -0
  29. data/lib/mongoid/association/macros.rb +44 -41
  30. data/lib/mongoid/association/many.rb +18 -32
  31. data/lib/mongoid/association/marshalable.rb +3 -6
  32. data/lib/mongoid/association/nested/many.rb +18 -27
  33. data/lib/mongoid/association/nested/nested_buildable.rb +5 -11
  34. data/lib/mongoid/association/nested/one.rb +16 -27
  35. data/lib/mongoid/association/nested.rb +3 -3
  36. data/lib/mongoid/association/one.rb +4 -11
  37. data/lib/mongoid/association/options.rb +8 -38
  38. data/lib/mongoid/association/proxy.rb +37 -36
  39. data/lib/mongoid/association/referenced/auto_save.rb +5 -11
  40. data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -9
  41. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
  42. data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
  43. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -27
  44. data/lib/mongoid/association/referenced/belongs_to.rb +14 -36
  45. data/lib/mongoid/association/referenced/counter_cache.rb +4 -15
  46. data/lib/mongoid/association/referenced/eager.rb +40 -36
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +38 -56
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -43
  52. data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
  53. data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
  54. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
  55. data/lib/mongoid/association/referenced/has_many/enumerable.rb +444 -456
  56. data/lib/mongoid/association/referenced/has_many/proxy.rb +78 -111
  57. data/lib/mongoid/association/referenced/has_many.rb +18 -42
  58. data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
  59. data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
  60. data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
  61. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -26
  62. data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -25
  63. data/lib/mongoid/association/referenced/has_one.rb +13 -33
  64. data/lib/mongoid/association/referenced/syncable.rb +7 -22
  65. data/lib/mongoid/association/referenced.rb +2 -0
  66. data/lib/mongoid/association/reflections.rb +7 -6
  67. data/lib/mongoid/association/relatable.rb +118 -78
  68. data/lib/mongoid/association.rb +8 -23
  69. data/lib/mongoid/atomic/modifiers.rb +27 -51
  70. data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
  71. data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
  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 +42 -47
  76. data/lib/mongoid/attributes/dynamic.rb +18 -32
  77. data/lib/mongoid/attributes/nested.rb +21 -13
  78. data/lib/mongoid/attributes/processing.rb +9 -24
  79. data/lib/mongoid/attributes/projector.rb +119 -0
  80. data/lib/mongoid/attributes/readonly.rb +3 -6
  81. data/lib/mongoid/attributes.rb +75 -81
  82. data/lib/mongoid/cacheable.rb +6 -9
  83. data/lib/mongoid/changeable.rb +6 -60
  84. data/lib/mongoid/clients/factory.rb +42 -17
  85. data/lib/mongoid/clients/options.rb +16 -17
  86. data/lib/mongoid/clients/sessions.rb +24 -12
  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 +5 -9
  92. data/lib/mongoid/config/environment.rb +36 -14
  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 +112 -41
  98. data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
  99. data/lib/mongoid/contextual/aggregable/mongo.rb +26 -27
  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 +6 -37
  105. data/lib/mongoid/contextual/map_reduce.rb +9 -37
  106. data/lib/mongoid/contextual/memory.rb +12 -65
  107. data/lib/mongoid/contextual/mongo.rb +163 -85
  108. data/lib/mongoid/contextual/none.rb +44 -28
  109. data/lib/mongoid/contextual/queryable.rb +2 -3
  110. data/lib/mongoid/contextual.rb +7 -9
  111. data/lib/mongoid/copyable.rb +16 -10
  112. data/lib/mongoid/criteria/findable.rb +12 -15
  113. data/lib/mongoid/criteria/includable.rb +8 -15
  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 +15 -21
  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 +4 -27
  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 +3 -26
  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 +3 -18
  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 +184 -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 +5 -15
  144. data/lib/mongoid/criteria/queryable/selectable.rb +436 -158
  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 +86 -73
  151. data/lib/mongoid/document.rb +37 -77
  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 +2 -9
  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 +2 -3
  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 +4 -5
  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 +2 -3
  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 +12 -1
  213. data/lib/mongoid/evolvable.rb +4 -5
  214. data/lib/mongoid/extensions/array.rb +28 -37
  215. data/lib/mongoid/extensions/big_decimal.rb +3 -12
  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 +51 -36
  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 +17 -44
  227. data/lib/mongoid/extensions/object_id.rb +2 -7
  228. data/lib/mongoid/extensions/range.rb +2 -11
  229. data/lib/mongoid/extensions/regexp.rb +4 -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 -3
  237. data/lib/mongoid/factory.rb +52 -13
  238. data/lib/mongoid/fields/foreign_key.rb +3 -22
  239. data/lib/mongoid/fields/localized.rb +2 -11
  240. data/lib/mongoid/fields/standard.rb +6 -36
  241. data/lib/mongoid/fields/validators/macro.rb +36 -18
  242. data/lib/mongoid/fields/validators.rb +2 -1
  243. data/lib/mongoid/fields.rb +115 -64
  244. data/lib/mongoid/findable.rb +59 -23
  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 -25
  248. data/lib/mongoid/inspectable.rb +4 -11
  249. data/lib/mongoid/interceptable.rb +13 -30
  250. data/lib/mongoid/loggable.rb +13 -16
  251. data/lib/mongoid/matchable.rb +3 -150
  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 +6 -23
  285. data/lib/mongoid/persistable/deletable.rb +7 -23
  286. data/lib/mongoid/persistable/destroyable.rb +11 -10
  287. data/lib/mongoid/persistable/incrementable.rb +6 -7
  288. data/lib/mongoid/persistable/logical.rb +4 -6
  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 +61 -19
  295. data/lib/mongoid/persistable/unsettable.rb +8 -8
  296. data/lib/mongoid/persistable/updatable.rb +33 -21
  297. data/lib/mongoid/persistable/upsertable.rb +4 -9
  298. data/lib/mongoid/persistable.rb +134 -39
  299. data/lib/mongoid/persistence_context.rb +51 -45
  300. data/lib/mongoid/positional.rb +3 -6
  301. data/lib/mongoid/query_cache.rb +138 -106
  302. data/lib/mongoid/railtie.rb +20 -16
  303. data/lib/mongoid/railties/controller_runtime.rb +88 -0
  304. data/lib/mongoid/railties/database.rake +9 -0
  305. data/lib/mongoid/reloadable.rb +14 -19
  306. data/lib/mongoid/scopable.rb +11 -38
  307. data/lib/mongoid/selectable.rb +8 -17
  308. data/lib/mongoid/serializable.rb +24 -29
  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 +87 -7
  314. data/lib/mongoid/threaded/lifecycle.rb +2 -21
  315. data/lib/mongoid/threaded.rb +38 -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 +177 -57
  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 +8 -13
  331. data/lib/mongoid/validatable/queryable.rb +2 -3
  332. data/lib/mongoid/validatable/uniqueness.rb +21 -34
  333. data/lib/mongoid/validatable.rb +8 -27
  334. data/lib/mongoid/version.rb +3 -2
  335. data/lib/mongoid.rb +33 -15
  336. data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
  337. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
  338. data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
  339. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
  340. data/lib/rails/generators/mongoid_generator.rb +2 -1
  341. data/lib/rails/mongoid.rb +4 -5
  342. data/spec/README.md +33 -0
  343. data/spec/config/mongoid.yml +13 -3
  344. data/spec/integration/app_spec.rb +343 -0
  345. data/spec/integration/associations/belongs_to_spec.rb +15 -0
  346. data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
  347. data/spec/integration/associations/embedded_spec.rb +268 -0
  348. data/spec/integration/associations/embeds_many_spec.rb +206 -0
  349. data/spec/integration/associations/embeds_one_spec.rb +23 -0
  350. data/spec/integration/associations/foreign_key_spec.rb +98 -0
  351. data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
  352. data/spec/integration/associations/has_many_spec.rb +128 -0
  353. data/spec/integration/associations/has_one_spec.rb +176 -0
  354. data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
  355. data/spec/integration/associations/reverse_population_spec.rb +34 -0
  356. data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
  357. data/spec/integration/associations/scope_option_spec.rb +101 -0
  358. data/spec/integration/atomic/modifiers_spec.rb +116 -0
  359. data/spec/integration/bson_regexp_raw_spec.rb +19 -0
  360. data/spec/integration/callbacks_models.rb +61 -0
  361. data/spec/integration/callbacks_spec.rb +228 -0
  362. data/spec/integration/contextual/empty_spec.rb +141 -0
  363. data/spec/integration/criteria/alias_query_spec.rb +161 -0
  364. data/spec/integration/criteria/date_field_spec.rb +40 -0
  365. data/spec/integration/criteria/default_scope_spec.rb +72 -0
  366. data/spec/integration/criteria/logical_spec.rb +124 -0
  367. data/spec/integration/criteria/range_spec.rb +265 -0
  368. data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
  369. data/spec/integration/discriminator_key_spec.rb +353 -0
  370. data/spec/integration/discriminator_value_spec.rb +206 -0
  371. data/spec/integration/document_spec.rb +51 -0
  372. data/spec/integration/i18n_fallbacks_spec.rb +89 -0
  373. data/spec/integration/matcher_examples_spec.rb +758 -0
  374. data/spec/integration/matcher_operator_data/all.yml +140 -0
  375. data/spec/integration/matcher_operator_data/and.yml +93 -0
  376. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  377. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  378. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  379. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  380. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  381. data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
  382. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  383. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  384. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  385. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  386. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  387. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  388. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  389. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  390. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  391. data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
  392. data/spec/integration/matcher_operator_data/in.yml +210 -0
  393. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  394. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  395. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  396. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  397. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  398. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  399. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  400. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  401. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  402. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  403. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  404. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  405. data/spec/integration/matcher_operator_data/not.yml +196 -0
  406. data/spec/integration/matcher_operator_data/or.yml +137 -0
  407. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  408. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  409. data/spec/integration/matcher_operator_data/size.yml +174 -0
  410. data/spec/integration/matcher_operator_data/type.yml +70 -0
  411. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  412. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  413. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  414. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  415. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  416. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  417. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  418. data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
  419. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  420. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  421. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  422. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  423. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  424. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  425. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  426. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  427. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  428. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  429. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  430. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  431. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  432. data/spec/integration/matcher_operator_spec.rb +124 -0
  433. data/spec/integration/matcher_spec.rb +283 -0
  434. data/spec/integration/server_query_spec.rb +141 -0
  435. data/spec/integration/shardable_spec.rb +148 -0
  436. data/spec/integration/stringified_symbol_field_spec.rb +203 -0
  437. data/spec/lite_spec_helper.rb +83 -0
  438. data/spec/mongoid/association/accessors_spec.rb +323 -77
  439. data/spec/mongoid/association/auto_save_spec.rb +74 -33
  440. data/spec/mongoid/association/builders_spec.rb +3 -1
  441. data/spec/mongoid/association/constrainable_spec.rb +2 -0
  442. data/spec/mongoid/association/counter_cache_spec.rb +34 -32
  443. data/spec/mongoid/association/depending_spec.rb +678 -332
  444. data/spec/mongoid/association/eager_spec.rb +6 -4
  445. data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
  446. data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
  447. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -0
  448. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +2 -0
  449. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +65 -13
  450. data/spec/mongoid/association/embedded/embedded_in_spec.rb +61 -1
  451. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
  452. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +2 -0
  453. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +672 -144
  454. data/spec/mongoid/association/embedded/embeds_many_models.rb +69 -0
  455. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
  456. data/spec/mongoid/association/embedded/embeds_many_spec.rb +13 -1
  457. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
  458. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +2 -0
  459. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
  460. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
  461. data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
  462. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
  463. data/spec/mongoid/association/embedded/embeds_one_spec.rb +49 -1
  464. data/spec/mongoid/association/macros_spec.rb +11 -9
  465. data/spec/mongoid/association/nested/many_spec.rb +2 -0
  466. data/spec/mongoid/association/nested/one_spec.rb +18 -12
  467. data/spec/mongoid/association/options_spec.rb +2 -0
  468. data/spec/mongoid/association/polymorphic_spec.rb +61 -0
  469. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -0
  470. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +57 -16
  471. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +266 -17
  472. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +99 -58
  473. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
  474. data/spec/mongoid/association/referenced/belongs_to_spec.rb +95 -12
  475. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
  476. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
  477. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +67 -4
  478. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
  479. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +351 -164
  480. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +67 -0
  481. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
  482. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +49 -5
  483. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
  484. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +23 -0
  485. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
  486. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +407 -121
  487. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
  488. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +681 -340
  489. data/spec/mongoid/association/referenced/has_many_models.rb +95 -0
  490. data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
  491. data/spec/mongoid/association/referenced/has_many_spec.rb +26 -3
  492. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
  493. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -7
  494. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
  495. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +28 -26
  496. data/spec/mongoid/association/referenced/has_one_models.rb +97 -0
  497. data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
  498. data/spec/mongoid/association/referenced/has_one_spec.rb +144 -5
  499. data/spec/mongoid/association/reflections_spec.rb +2 -0
  500. data/spec/mongoid/association/syncable_spec.rb +33 -31
  501. data/spec/mongoid/association_spec.rb +2 -0
  502. data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
  503. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
  504. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
  505. data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
  506. data/spec/mongoid/atomic/paths_spec.rb +107 -12
  507. data/spec/mongoid/atomic_spec.rb +31 -6
  508. data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
  509. data/spec/mongoid/attributes/nested_spec.rb +87 -69
  510. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  511. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  512. data/spec/mongoid/attributes/projector_spec.rb +44 -0
  513. data/spec/mongoid/attributes/readonly_spec.rb +24 -22
  514. data/spec/mongoid/attributes_spec.rb +382 -35
  515. data/spec/mongoid/cacheable_spec.rb +3 -1
  516. data/spec/mongoid/changeable_spec.rb +60 -35
  517. data/spec/mongoid/clients/factory_spec.rb +148 -34
  518. data/spec/mongoid/clients/options_spec.rb +102 -66
  519. data/spec/mongoid/clients/sessions_spec.rb +39 -29
  520. data/spec/mongoid/clients/transactions_spec.rb +415 -0
  521. data/spec/mongoid/clients_spec.rb +78 -16
  522. data/spec/mongoid/composable_spec.rb +2 -0
  523. data/spec/mongoid/config/environment_spec.rb +88 -8
  524. data/spec/mongoid/config/options_spec.rb +22 -3
  525. data/spec/mongoid/config_spec.rb +280 -2
  526. data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
  527. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
  528. data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
  529. data/spec/mongoid/contextual/atomic_spec.rb +242 -81
  530. data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
  531. data/spec/mongoid/contextual/map_reduce_spec.rb +24 -7
  532. data/spec/mongoid/contextual/memory_spec.rb +25 -23
  533. data/spec/mongoid/contextual/mongo_spec.rb +491 -144
  534. data/spec/mongoid/contextual/none_spec.rb +9 -81
  535. data/spec/mongoid/copyable_spec.rb +261 -30
  536. data/spec/mongoid/copyable_spec_models.rb +47 -0
  537. data/spec/mongoid/criteria/findable_spec.rb +77 -20
  538. data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
  539. data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
  540. data/spec/mongoid/criteria/modifiable_spec.rb +100 -48
  541. data/spec/mongoid/criteria/options_spec.rb +2 -0
  542. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
  543. data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
  544. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
  545. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +5 -3
  546. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
  547. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
  548. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
  549. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
  550. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
  551. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
  552. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
  553. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
  554. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
  555. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +53 -0
  556. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
  557. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
  558. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
  559. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
  560. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
  561. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +3 -1
  562. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
  563. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +42 -23
  564. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +30 -1
  565. data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
  566. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
  567. data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
  568. data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
  569. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
  570. data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
  571. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2069 -0
  572. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
  573. data/spec/mongoid/criteria/queryable/selectable_spec.rb +994 -2900
  574. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
  575. data/spec/mongoid/criteria/queryable/selector_spec.rb +41 -2
  576. data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
  577. data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
  578. data/spec/mongoid/criteria/scopable_spec.rb +210 -0
  579. data/spec/mongoid/criteria_projection_spec.rb +410 -0
  580. data/spec/mongoid/criteria_spec.rb +807 -464
  581. data/spec/mongoid/document_fields_spec.rb +113 -0
  582. data/spec/mongoid/document_persistence_context_spec.rb +32 -0
  583. data/spec/mongoid/document_query_spec.rb +89 -0
  584. data/spec/mongoid/document_spec.rb +182 -28
  585. data/spec/mongoid/equality_spec.rb +144 -41
  586. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
  587. data/spec/mongoid/errors/callback_spec.rb +2 -0
  588. data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
  589. data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
  590. data/spec/mongoid/errors/document_not_found_spec.rb +2 -0
  591. data/spec/mongoid/errors/eager_load_spec.rb +2 -0
  592. data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
  593. data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
  594. data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
  595. data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
  596. data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
  597. data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
  598. data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
  599. data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
  600. data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
  601. data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
  602. data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
  603. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
  604. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
  605. data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
  606. data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
  607. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
  608. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
  609. data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
  610. data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
  611. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
  612. data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
  613. data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
  614. data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
  615. data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
  616. data/spec/mongoid/errors/no_environment_spec.rb +2 -0
  617. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
  618. data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
  619. data/spec/mongoid/errors/no_parent_spec.rb +3 -1
  620. data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
  621. data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
  622. data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
  623. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
  624. data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
  625. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
  626. data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
  627. data/spec/mongoid/errors/validations_spec.rb +2 -0
  628. data/spec/mongoid/extensions/array_spec.rb +25 -43
  629. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -9
  630. data/spec/mongoid/extensions/binary_spec.rb +2 -0
  631. data/spec/mongoid/extensions/boolean_spec.rb +2 -0
  632. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
  633. data/spec/mongoid/extensions/date_spec.rb +8 -160
  634. data/spec/mongoid/extensions/date_time_spec.rb +17 -60
  635. data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
  636. data/spec/mongoid/extensions/false_class_spec.rb +3 -1
  637. data/spec/mongoid/extensions/float_spec.rb +17 -3
  638. data/spec/mongoid/extensions/hash_spec.rb +105 -0
  639. data/spec/mongoid/extensions/integer_spec.rb +14 -2
  640. data/spec/mongoid/extensions/module_spec.rb +2 -0
  641. data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
  642. data/spec/mongoid/extensions/object_id_spec.rb +2 -0
  643. data/spec/mongoid/extensions/object_spec.rb +13 -24
  644. data/spec/mongoid/extensions/range_spec.rb +2 -0
  645. data/spec/mongoid/extensions/regexp_spec.rb +25 -0
  646. data/spec/mongoid/extensions/set_spec.rb +2 -0
  647. data/spec/mongoid/extensions/string_spec.rb +95 -34
  648. data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
  649. data/spec/mongoid/extensions/symbol_spec.rb +2 -0
  650. data/spec/mongoid/extensions/time_spec.rb +29 -0
  651. data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
  652. data/spec/mongoid/extensions/true_class_spec.rb +3 -1
  653. data/spec/mongoid/extensions_spec.rb +16 -2
  654. data/spec/mongoid/factory_spec.rb +287 -27
  655. data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
  656. data/spec/mongoid/fields/localized_spec.rb +6 -4
  657. data/spec/mongoid/fields/standard_spec.rb +2 -0
  658. data/spec/mongoid/fields_spec.rb +419 -37
  659. data/spec/mongoid/findable_spec.rb +54 -20
  660. data/spec/mongoid/indexable/specification_spec.rb +2 -0
  661. data/spec/mongoid/indexable_spec.rb +36 -6
  662. data/spec/mongoid/inspectable_spec.rb +39 -2
  663. data/spec/mongoid/interceptable_spec.rb +168 -96
  664. data/spec/mongoid/interceptable_spec_models.rb +76 -0
  665. data/spec/mongoid/loggable_spec.rb +2 -0
  666. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  667. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
  668. data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
  669. data/spec/mongoid/persistable/creatable_spec.rb +112 -27
  670. data/spec/mongoid/persistable/deletable_spec.rb +273 -11
  671. data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
  672. data/spec/mongoid/persistable/incrementable_spec.rb +29 -13
  673. data/spec/mongoid/persistable/logical_spec.rb +19 -3
  674. data/spec/mongoid/persistable/poppable_spec.rb +19 -3
  675. data/spec/mongoid/persistable/pullable_spec.rb +36 -6
  676. data/spec/mongoid/persistable/pushable_spec.rb +91 -7
  677. data/spec/mongoid/persistable/renamable_spec.rb +18 -2
  678. data/spec/mongoid/persistable/savable_spec.rb +188 -25
  679. data/spec/mongoid/persistable/settable_spec.rb +182 -17
  680. data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
  681. data/spec/mongoid/persistable/updatable_spec.rb +45 -23
  682. data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
  683. data/spec/mongoid/persistable_spec.rb +85 -9
  684. data/spec/mongoid/persistence_context_spec.rb +3 -1
  685. data/spec/mongoid/positional_spec.rb +2 -0
  686. data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
  687. data/spec/mongoid/query_cache_spec.rb +575 -48
  688. data/spec/mongoid/relations/proxy_spec.rb +9 -7
  689. data/spec/mongoid/reloadable_spec.rb +298 -20
  690. data/spec/mongoid/scopable_spec.rb +82 -22
  691. data/spec/mongoid/selectable_spec.rb +8 -6
  692. data/spec/mongoid/serializable_spec.rb +160 -29
  693. data/spec/mongoid/shardable_models.rb +61 -0
  694. data/spec/mongoid/shardable_spec.rb +116 -17
  695. data/spec/mongoid/stateful_spec.rb +3 -1
  696. data/spec/mongoid/tasks/database_rake_spec.rb +15 -13
  697. data/spec/mongoid/tasks/database_spec.rb +3 -1
  698. data/spec/mongoid/threaded_spec.rb +72 -2
  699. data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
  700. data/spec/mongoid/timestamps/created_spec.rb +3 -1
  701. data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
  702. data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
  703. data/spec/mongoid/timestamps/updated_spec.rb +5 -3
  704. data/spec/mongoid/timestamps_spec.rb +8 -6
  705. data/spec/mongoid/{association/touchable_spec.rb → touchable_spec.rb} +206 -38
  706. data/spec/mongoid/touchable_spec_models.rb +53 -0
  707. data/spec/mongoid/traversable_spec.rb +1167 -1
  708. data/spec/mongoid/validatable/associated_spec.rb +2 -0
  709. data/spec/mongoid/validatable/format_spec.rb +2 -0
  710. data/spec/mongoid/validatable/length_spec.rb +2 -0
  711. data/spec/mongoid/validatable/numericality_spec.rb +2 -0
  712. data/spec/mongoid/validatable/presence_spec.rb +28 -22
  713. data/spec/mongoid/validatable/uniqueness_spec.rb +102 -73
  714. data/spec/mongoid/validatable_spec.rb +5 -3
  715. data/spec/mongoid_spec.rb +2 -0
  716. data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
  717. data/spec/rails/mongoid_spec.rb +4 -2
  718. data/spec/shared/LICENSE +20 -0
  719. data/spec/shared/bin/get-mongodb-download-url +17 -0
  720. data/spec/shared/bin/s3-copy +45 -0
  721. data/spec/shared/bin/s3-upload +69 -0
  722. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  723. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  724. data/spec/shared/lib/mrss/constraints.rb +386 -0
  725. data/spec/shared/lib/mrss/docker_runner.rb +271 -0
  726. data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
  727. data/spec/shared/lib/mrss/lite_constraints.rb +199 -0
  728. data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
  729. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  730. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  731. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  732. data/spec/shared/lib/mrss/utils.rb +15 -0
  733. data/spec/shared/share/Dockerfile.erb +339 -0
  734. data/spec/shared/share/haproxy-1.conf +16 -0
  735. data/spec/shared/share/haproxy-2.conf +17 -0
  736. data/spec/shared/shlib/distro.sh +74 -0
  737. data/spec/shared/shlib/server.sh +379 -0
  738. data/spec/shared/shlib/set_env.sh +132 -0
  739. data/spec/spec_helper.rb +69 -80
  740. data/spec/support/authorization.rb +2 -0
  741. data/spec/support/client_registry.rb +9 -0
  742. data/spec/support/constraints.rb +53 -0
  743. data/spec/support/expectations.rb +21 -3
  744. data/spec/support/helpers.rb +11 -0
  745. data/spec/support/macros.rb +42 -0
  746. data/spec/{app → support}/models/account.rb +3 -1
  747. data/spec/{app → support}/models/acolyte.rb +2 -0
  748. data/spec/{app → support}/models/actor.rb +3 -1
  749. data/spec/support/models/actress.rb +4 -0
  750. data/spec/{app → support}/models/address.rb +6 -0
  751. data/spec/{app → support}/models/address_component.rb +2 -0
  752. data/spec/{app → support}/models/address_number.rb +2 -0
  753. data/spec/{app → support}/models/agency.rb +2 -0
  754. data/spec/{app → support}/models/agent.rb +2 -0
  755. data/spec/{app → support}/models/album.rb +2 -0
  756. data/spec/{app → support}/models/alert.rb +2 -0
  757. data/spec/{app → support}/models/animal.rb +2 -0
  758. data/spec/{app → support}/models/answer.rb +2 -0
  759. data/spec/{app → support}/models/appointment.rb +2 -0
  760. data/spec/support/models/armrest.rb +9 -0
  761. data/spec/support/models/array_field.rb +7 -0
  762. data/spec/{app → support}/models/article.rb +2 -0
  763. data/spec/{app → support}/models/artist.rb +4 -0
  764. data/spec/{app → support}/models/artwork.rb +2 -0
  765. data/spec/support/models/audible_sound.rb +3 -0
  766. data/spec/{app → support}/models/audio.rb +2 -0
  767. data/spec/{app → support}/models/augmentation.rb +2 -0
  768. data/spec/{app → support}/models/author.rb +2 -0
  769. data/spec/{app → support}/models/baby.rb +2 -0
  770. data/spec/{app → support}/models/band.rb +6 -0
  771. data/spec/{app → support}/models/bar.rb +2 -0
  772. data/spec/{app → support}/models/basic.rb +2 -0
  773. data/spec/support/models/bed.rb +3 -0
  774. data/spec/{app → support}/models/big_palette.rb +2 -0
  775. data/spec/{app → support}/models/birthday.rb +2 -0
  776. data/spec/support/models/bolt.rb +7 -0
  777. data/spec/{app → support}/models/bomb.rb +2 -0
  778. data/spec/{app → support}/models/book.rb +2 -0
  779. data/spec/{app → support}/models/breed.rb +2 -0
  780. data/spec/{app → support}/models/browser.rb +3 -1
  781. data/spec/{app → support}/models/building.rb +2 -0
  782. data/spec/{app → support}/models/building_address.rb +2 -0
  783. data/spec/{app → support}/models/bus.rb +2 -0
  784. data/spec/{app → support}/models/business.rb +2 -0
  785. data/spec/{app → support}/models/callback_test.rb +2 -0
  786. data/spec/{app → support}/models/canvas.rb +3 -1
  787. data/spec/support/models/car.rb +3 -0
  788. data/spec/{app → support}/models/cat.rb +2 -0
  789. data/spec/{app → support}/models/category.rb +2 -0
  790. data/spec/{app → support}/models/child.rb +2 -0
  791. data/spec/{app → support}/models/child_doc.rb +5 -3
  792. data/spec/{app → support}/models/church.rb +2 -0
  793. data/spec/{app → support}/models/circle.rb +2 -0
  794. data/spec/{app → support}/models/circuit.rb +2 -0
  795. data/spec/{app → support}/models/circus.rb +2 -0
  796. data/spec/{app → support}/models/code.rb +2 -0
  797. data/spec/support/models/coding/pull_request.rb +11 -0
  798. data/spec/support/models/coding.rb +3 -0
  799. data/spec/{app → support}/models/comment.rb +2 -0
  800. data/spec/{app → support}/models/company.rb +2 -0
  801. data/spec/{app → support}/models/consumption_period.rb +2 -0
  802. data/spec/{app → support}/models/contextable_item.rb +2 -0
  803. data/spec/{app → support}/models/contractor.rb +2 -0
  804. data/spec/{app → support}/models/cookie.rb +2 -0
  805. data/spec/{app → support}/models/country_code.rb +4 -0
  806. data/spec/{app → support}/models/courier_job.rb +2 -0
  807. data/spec/support/models/crate.rb +12 -0
  808. data/spec/support/models/customer.rb +10 -0
  809. data/spec/support/models/customer_address.rb +11 -0
  810. data/spec/support/models/deed.rb +7 -0
  811. data/spec/{app → support}/models/definition.rb +2 -0
  812. data/spec/support/models/delegating_patient.rb +15 -0
  813. data/spec/{app → support}/models/description.rb +2 -0
  814. data/spec/{app → support}/models/dictionary.rb +8 -0
  815. data/spec/{app → support}/models/division.rb +2 -0
  816. data/spec/{app → support}/models/doctor.rb +2 -0
  817. data/spec/{app → support}/models/dog.rb +2 -0
  818. data/spec/{app → support}/models/dokument.rb +2 -0
  819. data/spec/{app → support}/models/draft.rb +2 -0
  820. data/spec/{app → support}/models/dragon.rb +2 -0
  821. data/spec/{app → support}/models/driver.rb +3 -1
  822. data/spec/{app → support}/models/drug.rb +2 -0
  823. data/spec/{app → support}/models/dungeon.rb +2 -0
  824. data/spec/{app → support}/models/edit.rb +2 -0
  825. data/spec/{app → support}/models/email.rb +2 -0
  826. data/spec/{app → support}/models/employer.rb +2 -0
  827. data/spec/{app → support}/models/entry.rb +2 -0
  828. data/spec/support/models/eraser.rb +3 -0
  829. data/spec/{app → support}/models/even.rb +2 -0
  830. data/spec/{app → support}/models/event.rb +2 -0
  831. data/spec/{app → support}/models/exhibition.rb +2 -0
  832. data/spec/{app → support}/models/exhibitor.rb +2 -0
  833. data/spec/{app → support}/models/explosion.rb +2 -0
  834. data/spec/{app → support}/models/eye.rb +2 -0
  835. data/spec/{app → support}/models/eye_bowl.rb +2 -0
  836. data/spec/{app → support}/models/face.rb +2 -0
  837. data/spec/{app → support}/models/favorite.rb +2 -0
  838. data/spec/{app → support}/models/filesystem.rb +2 -0
  839. data/spec/{app → support}/models/fire_hydrant.rb +2 -0
  840. data/spec/{app → support}/models/firefox.rb +2 -0
  841. data/spec/{app → support}/models/fish.rb +2 -0
  842. data/spec/{app → support}/models/folder.rb +2 -0
  843. data/spec/{app → support}/models/folder_item.rb +2 -0
  844. data/spec/{app → support}/models/fruits.rb +2 -0
  845. data/spec/{app → support}/models/game.rb +2 -0
  846. data/spec/{app → support}/models/ghost.rb +2 -0
  847. data/spec/support/models/guitar.rb +4 -0
  848. data/spec/support/models/hole.rb +12 -0
  849. data/spec/{app → support}/models/home.rb +2 -0
  850. data/spec/{app → support}/models/house.rb +2 -0
  851. data/spec/{app → support}/models/html_writer.rb +2 -0
  852. data/spec/{app → support}/models/id_key.rb +2 -0
  853. data/spec/support/models/idnodef.rb +7 -0
  854. data/spec/{app → support}/models/image.rb +2 -0
  855. data/spec/{app → support}/models/implant.rb +2 -0
  856. data/spec/support/models/instrument.rb +8 -0
  857. data/spec/{app → support}/models/item.rb +3 -1
  858. data/spec/{app → support}/models/jar.rb +2 -0
  859. data/spec/{app → support}/models/kaleidoscope.rb +2 -0
  860. data/spec/{app → support}/models/kangaroo.rb +3 -1
  861. data/spec/{app → support}/models/label.rb +4 -1
  862. data/spec/{app → support}/models/language.rb +2 -0
  863. data/spec/{app → support}/models/lat_lng.rb +2 -0
  864. data/spec/{app → support}/models/league.rb +2 -0
  865. data/spec/support/models/learner.rb +4 -0
  866. data/spec/{app → support}/models/line_item.rb +2 -0
  867. data/spec/{app → support}/models/location.rb +2 -0
  868. data/spec/{app → support}/models/login.rb +2 -0
  869. data/spec/{app → support}/models/manufacturer.rb +2 -0
  870. data/spec/{app → support}/models/meat.rb +2 -0
  871. data/spec/{app → support}/models/membership.rb +2 -0
  872. data/spec/{app → support}/models/message.rb +2 -0
  873. data/spec/support/models/minim.rb +6 -0
  874. data/spec/{app → support}/models/mixed_drink.rb +2 -0
  875. data/spec/support/models/mop.rb +24 -0
  876. data/spec/{app → support}/models/movie.rb +2 -0
  877. data/spec/support/models/my_hash.rb +4 -0
  878. data/spec/{app → support}/models/name.rb +2 -0
  879. data/spec/support/models/name_only.rb +8 -0
  880. data/spec/{app → support}/models/node.rb +2 -0
  881. data/spec/{app → support}/models/note.rb +2 -0
  882. data/spec/support/models/nut.rb +7 -0
  883. data/spec/{app → support}/models/odd.rb +2 -0
  884. data/spec/support/models/order.rb +12 -0
  885. data/spec/{app → support}/models/ordered_post.rb +3 -1
  886. data/spec/{app → support}/models/ordered_preference.rb +2 -0
  887. data/spec/{app → support}/models/oscar.rb +2 -0
  888. data/spec/support/models/other_owner_object.rb +4 -0
  889. data/spec/{app → support}/models/override.rb +2 -0
  890. data/spec/{app → support}/models/ownable.rb +2 -0
  891. data/spec/{app → support}/models/owner.rb +4 -0
  892. data/spec/{app → support}/models/pack.rb +2 -0
  893. data/spec/{app → support}/models/page.rb +2 -0
  894. data/spec/{app → support}/models/page_question.rb +2 -0
  895. data/spec/{app → support}/models/palette.rb +3 -1
  896. data/spec/{app → support}/models/parent.rb +2 -0
  897. data/spec/{app → support}/models/parent_doc.rb +2 -0
  898. data/spec/support/models/passport.rb +13 -0
  899. data/spec/{app → support}/models/patient.rb +2 -0
  900. data/spec/{app → support}/models/pdf_writer.rb +2 -0
  901. data/spec/support/models/pencil.rb +3 -0
  902. data/spec/{app → support}/models/person.rb +21 -1
  903. data/spec/{app → support}/models/pet.rb +2 -0
  904. data/spec/{app → support}/models/pet_owner.rb +2 -0
  905. data/spec/{app → support}/models/phone.rb +5 -1
  906. data/spec/support/models/piano.rb +4 -0
  907. data/spec/{app → support}/models/pizza.rb +2 -0
  908. data/spec/{app → support}/models/player.rb +2 -0
  909. data/spec/{app → support}/models/post.rb +2 -0
  910. data/spec/{app → support}/models/post_genre.rb +2 -0
  911. data/spec/{app → support}/models/powerup.rb +2 -0
  912. data/spec/{app → support}/models/preference.rb +2 -0
  913. data/spec/{app → support}/models/princess.rb +2 -0
  914. data/spec/{app → support}/models/product.rb +2 -0
  915. data/spec/support/models/profile.rb +17 -0
  916. data/spec/{app → support}/models/pronunciation.rb +2 -0
  917. data/spec/{app → support}/models/pub.rb +2 -0
  918. data/spec/support/models/publication/encyclopedia.rb +11 -0
  919. data/spec/support/models/publication/review.rb +13 -0
  920. data/spec/support/models/publication.rb +4 -0
  921. data/spec/{app → support}/models/purchase.rb +2 -0
  922. data/spec/support/models/purchased_item.rb +10 -0
  923. data/spec/{app → support}/models/question.rb +2 -0
  924. data/spec/{app → support}/models/quiz.rb +2 -0
  925. data/spec/{app → support}/models/rating.rb +2 -0
  926. data/spec/{app → support}/models/record.rb +2 -0
  927. data/spec/{app → support}/models/registry.rb +2 -0
  928. data/spec/{app → support}/models/role.rb +2 -0
  929. data/spec/{app → support}/models/root_category.rb +2 -0
  930. data/spec/{app → support}/models/sandwich.rb +2 -0
  931. data/spec/{app → support}/models/scheduler.rb +2 -0
  932. data/spec/support/models/scribe.rb +7 -0
  933. data/spec/support/models/sealer.rb +7 -0
  934. data/spec/support/models/seat.rb +24 -0
  935. data/spec/{app → support}/models/seo.rb +2 -0
  936. data/spec/support/models/series.rb +7 -0
  937. data/spec/{app → support}/models/server.rb +2 -0
  938. data/spec/{app → support}/models/service.rb +2 -0
  939. data/spec/{app → support}/models/shape.rb +4 -2
  940. data/spec/{app → support}/models/shelf.rb +2 -0
  941. data/spec/{app → support}/models/shipment_address.rb +2 -0
  942. data/spec/{app → support}/models/shipping_container.rb +2 -0
  943. data/spec/{app → support}/models/shipping_pack.rb +2 -0
  944. data/spec/support/models/shirt.rb +11 -0
  945. data/spec/{app → support}/models/shop.rb +2 -0
  946. data/spec/{app → support}/models/short_agent.rb +2 -0
  947. data/spec/{app → support}/models/short_quiz.rb +2 -0
  948. data/spec/{app → support}/models/simple.rb +2 -0
  949. data/spec/{app → support}/models/slave.rb +2 -0
  950. data/spec/{app → support}/models/song.rb +2 -0
  951. data/spec/{app → support}/models/sound.rb +2 -0
  952. data/spec/support/models/spacer.rb +7 -0
  953. data/spec/{app → support}/models/square.rb +2 -0
  954. data/spec/{app → support}/models/staff.rb +2 -0
  955. data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
  956. data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
  957. data/spec/support/models/store_as_dup_test3.rb +7 -0
  958. data/spec/support/models/store_as_dup_test4.rb +7 -0
  959. data/spec/{app → support}/models/strategy.rb +2 -0
  960. data/spec/{app → support}/models/sub_item.rb +2 -0
  961. data/spec/{app → support}/models/subscription.rb +2 -0
  962. data/spec/{app → support}/models/survey.rb +2 -0
  963. data/spec/{app → support}/models/symptom.rb +2 -0
  964. data/spec/support/models/system_role.rb +7 -0
  965. data/spec/{app → support}/models/tag.rb +2 -0
  966. data/spec/{app → support}/models/target.rb +2 -0
  967. data/spec/{app → support}/models/template.rb +2 -0
  968. data/spec/{app → support}/models/thing.rb +2 -0
  969. data/spec/support/models/threadlocker.rb +7 -0
  970. data/spec/{app → support}/models/title.rb +2 -0
  971. data/spec/{app → support}/models/tool.rb +4 -2
  972. data/spec/{app → support}/models/topping.rb +2 -0
  973. data/spec/support/models/toy.rb +9 -0
  974. data/spec/{app → support}/models/track.rb +2 -0
  975. data/spec/{app → support}/models/translation.rb +2 -0
  976. data/spec/{app → support}/models/tree.rb +2 -0
  977. data/spec/support/models/truck.rb +7 -0
  978. data/spec/support/models/updatable.rb +7 -0
  979. data/spec/{app → support}/models/user.rb +2 -0
  980. data/spec/{app → support}/models/user_account.rb +2 -0
  981. data/spec/{app → support}/models/validation_callback.rb +2 -0
  982. data/spec/support/models/vehicle.rb +18 -0
  983. data/spec/{app → support}/models/version.rb +2 -0
  984. data/spec/{app → support}/models/vertex.rb +3 -1
  985. data/spec/{app → support}/models/vet_visit.rb +2 -0
  986. data/spec/{app → support}/models/video.rb +2 -0
  987. data/spec/support/models/video_game.rb +3 -0
  988. data/spec/support/models/washer.rb +7 -0
  989. data/spec/{app → support}/models/weapon.rb +2 -0
  990. data/spec/{app → support}/models/wiki_page.rb +3 -0
  991. data/spec/{app → support}/models/word.rb +2 -0
  992. data/spec/{app → support}/models/word_origin.rb +2 -0
  993. data/spec/{app → support}/models/writer.rb +4 -2
  994. data/spec/support/shared/time.rb +53 -0
  995. data/spec/support/spec_config.rb +60 -0
  996. data.tar.gz.sig +0 -0
  997. metadata +1131 -686
  998. metadata.gz.sig +0 -0
  999. data/lib/mongoid/association/touchable.rb +0 -97
  1000. data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
  1001. data/lib/mongoid/matchable/all.rb +0 -27
  1002. data/lib/mongoid/matchable/and.rb +0 -30
  1003. data/lib/mongoid/matchable/default.rb +0 -72
  1004. data/lib/mongoid/matchable/elem_match.rb +0 -34
  1005. data/lib/mongoid/matchable/exists.rb +0 -23
  1006. data/lib/mongoid/matchable/gt.rb +0 -23
  1007. data/lib/mongoid/matchable/gte.rb +0 -23
  1008. data/lib/mongoid/matchable/in.rb +0 -24
  1009. data/lib/mongoid/matchable/lt.rb +0 -23
  1010. data/lib/mongoid/matchable/lte.rb +0 -23
  1011. data/lib/mongoid/matchable/ne.rb +0 -21
  1012. data/lib/mongoid/matchable/nin.rb +0 -22
  1013. data/lib/mongoid/matchable/or.rb +0 -33
  1014. data/lib/mongoid/matchable/regexp.rb +0 -27
  1015. data/lib/mongoid/matchable/size.rb +0 -21
  1016. data/lib/support/ruby_version.rb +0 -26
  1017. data/spec/app/models/actress.rb +0 -2
  1018. data/spec/app/models/bed.rb +0 -1
  1019. data/spec/app/models/car.rb +0 -1
  1020. data/spec/app/models/eraser.rb +0 -1
  1021. data/spec/app/models/learner.rb +0 -2
  1022. data/spec/app/models/my_hash.rb +0 -2
  1023. data/spec/app/models/passport.rb +0 -5
  1024. data/spec/app/models/pencil.rb +0 -1
  1025. data/spec/app/models/profile.rb +0 -5
  1026. data/spec/app/models/series.rb +0 -4
  1027. data/spec/app/models/truck.rb +0 -3
  1028. data/spec/app/models/vehicle.rb +0 -11
  1029. data/spec/app/models/video_game.rb +0 -1
  1030. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
  1031. data/spec/mongoid/matchable/all_spec.rb +0 -31
  1032. data/spec/mongoid/matchable/and_spec.rb +0 -187
  1033. data/spec/mongoid/matchable/default_spec.rb +0 -130
  1034. data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
  1035. data/spec/mongoid/matchable/exists_spec.rb +0 -57
  1036. data/spec/mongoid/matchable/gt_spec.rb +0 -86
  1037. data/spec/mongoid/matchable/gte_spec.rb +0 -84
  1038. data/spec/mongoid/matchable/in_spec.rb +0 -49
  1039. data/spec/mongoid/matchable/lt_spec.rb +0 -85
  1040. data/spec/mongoid/matchable/lte_spec.rb +0 -85
  1041. data/spec/mongoid/matchable/ne_spec.rb +0 -46
  1042. data/spec/mongoid/matchable/nin_spec.rb +0 -48
  1043. data/spec/mongoid/matchable/or_spec.rb +0 -131
  1044. data/spec/mongoid/matchable/regexp_spec.rb +0 -59
  1045. data/spec/mongoid/matchable/size_spec.rb +0 -25
  1046. data/spec/mongoid/matchable_spec.rb +0 -828
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
@@ -24,7 +26,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
24
26
  context "when the inverse_of is nil" do
25
27
 
26
28
  let!(:article) do
27
- Article.create
29
+ Article.create!
28
30
  end
29
31
 
30
32
  context "when the child document is new" do
@@ -45,7 +47,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
45
47
  context "when the child document is not new" do
46
48
 
47
49
  let(:preference) do
48
- Preference.create
50
+ Preference.create!
49
51
  end
50
52
 
51
53
  it "does not persist the child document" do
@@ -77,7 +79,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
77
79
  context "when the parent is not a new record" do
78
80
 
79
81
  let(:person) do
80
- Person.create
82
+ Person.create!
81
83
  end
82
84
 
83
85
  let!(:preference) do
@@ -121,11 +123,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
121
123
  context "when appending in a parent create block" do
122
124
 
123
125
  let!(:preference) do
124
- Preference.create(name: "testing")
126
+ Preference.create!(name: "testing")
125
127
  end
126
128
 
127
129
  let!(:person) do
128
- Person.create do |doc|
130
+ Person.create! do |doc|
129
131
  doc.preferences << preference
130
132
  end
131
133
  end
@@ -210,7 +212,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
210
212
  context "when the child is already persisted" do
211
213
 
212
214
  let!(:persisted) do
213
- Preference.create(name: "testy")
215
+ Preference.create!(name: "testy")
214
216
  end
215
217
 
216
218
  let(:preference) do
@@ -219,7 +221,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
219
221
 
220
222
  before do
221
223
  person.preferences.send(method, preference)
222
- person.save
224
+ person.save!
223
225
  end
224
226
 
225
227
  it "adds the documents to the relation" do
@@ -250,7 +252,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
250
252
  context "when setting via the associated ids" do
251
253
 
252
254
  let!(:persisted) do
253
- Preference.create(name: "testy")
255
+ Preference.create!(name: "testy")
254
256
  end
255
257
 
256
258
  let(:preference) do
@@ -262,7 +264,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
262
264
  end
263
265
 
264
266
  before do
265
- person.save
267
+ person.save!
266
268
  end
267
269
 
268
270
  it "adds the documents to the relation" do
@@ -290,7 +292,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
290
292
  context "when the parent is not a new record" do
291
293
 
292
294
  let(:person) do
293
- Person.create
295
+ Person.create!
294
296
  end
295
297
 
296
298
  let(:preference) do
@@ -372,11 +374,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
372
374
  context "when both sides have been persisted" do
373
375
 
374
376
  let(:person) do
375
- Person.create
377
+ Person.create!
376
378
  end
377
379
 
378
380
  let(:event) do
379
- Event.create
381
+ Event.create!
380
382
  end
381
383
 
382
384
  before do
@@ -425,15 +427,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
425
427
  context "when the relation also includes a has_many relation" do
426
428
 
427
429
  let(:artwork) do
428
- Artwork.create
430
+ Artwork.create!
429
431
  end
430
432
 
431
433
  let(:exhibition) do
432
- Exhibition.create
434
+ Exhibition.create!
433
435
  end
434
436
 
435
437
  let(:exhibitor) do
436
- Exhibitor.create(exhibition: exhibition)
438
+ Exhibitor.create!(exhibition: exhibition)
437
439
  end
438
440
 
439
441
  before do
@@ -448,11 +450,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
448
450
  context "when the relation is self referencing" do
449
451
 
450
452
  let(:tag_one) do
451
- Tag.create(text: "one")
453
+ Tag.create!(text: "one")
452
454
  end
453
455
 
454
456
  let(:tag_two) do
455
- Tag.create(text: "two")
457
+ Tag.create!(text: "two")
456
458
  end
457
459
 
458
460
  before do
@@ -561,7 +563,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
561
563
  end
562
564
 
563
565
  let(:preference) do
564
- Preference.create(name: "one")
566
+ Preference.create!(name: "one")
565
567
  end
566
568
 
567
569
  before do
@@ -582,7 +584,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
582
584
  context "when the document is persisted" do
583
585
 
584
586
  before do
585
- person.save
587
+ person.save!
586
588
  end
587
589
 
588
590
  it "does not add the duplicates" do
@@ -653,7 +655,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
653
655
  end
654
656
 
655
657
  let!(:preference) do
656
- Preference.create
658
+ Preference.create!
657
659
  end
658
660
 
659
661
  before do
@@ -700,7 +702,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
700
702
  context "when the parent is not a new record" do
701
703
 
702
704
  let(:person) do
703
- Person.create
705
+ Person.create!
704
706
  end
705
707
 
706
708
  let(:preference) do
@@ -784,7 +786,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
784
786
  expect(person.preferences).to eq([ another_preference ])
785
787
  end
786
788
 
787
- it "persists the relation between another_prefrence and person" do
789
+ it "persists the relation between another_preference and person" do
788
790
  expect(another_preference.people).to eq([ person ])
789
791
  end
790
792
 
@@ -796,7 +798,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
796
798
  context "and person is saved" do
797
799
 
798
800
  before do
799
- person.save
801
+ person.save!
800
802
  person.reload
801
803
  another_preference.reload
802
804
  end
@@ -805,7 +807,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
805
807
  expect(person.preferences).to eq([ another_preference ])
806
808
  end
807
809
 
808
- it "persists the relation between another_prefrence and person" do
810
+ it "persists the relation between another_preference and person" do
809
811
  expect(another_preference.people).to eq([ person ])
810
812
  end
811
813
 
@@ -820,11 +822,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
820
822
 
821
823
  describe "when self-referencing" do
822
824
  let!(:parent) do
823
- Vertex.create
825
+ Vertex.create!
824
826
  end
825
827
 
826
828
  let!(:child) do
827
- Vertex.create(parents: [parent])
829
+ Vertex.create!(parents: [parent])
828
830
  end
829
831
 
830
832
  before do
@@ -961,7 +963,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
961
963
  context "when the relation has been loaded" do
962
964
 
963
965
  let(:person) do
964
- Person.create
966
+ Person.create!
965
967
  end
966
968
 
967
969
  let(:preference) do
@@ -1001,7 +1003,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1001
1003
  end
1002
1004
 
1003
1005
  let(:person) do
1004
- Person.create.tap do |p|
1006
+ Person.create!.tap do |p|
1005
1007
  p.preferences = [ preference ]
1006
1008
  end
1007
1009
  end
@@ -1071,7 +1073,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1071
1073
  context "when the parent is not a new record" do
1072
1074
 
1073
1075
  let(:person) do
1074
- Person.create
1076
+ Person.create!
1075
1077
  end
1076
1078
 
1077
1079
  let!(:preference) do
@@ -1109,7 +1111,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1109
1111
  context "when saving the target" do
1110
1112
 
1111
1113
  before do
1112
- preference.save
1114
+ preference.save!
1113
1115
  end
1114
1116
 
1115
1117
  it "persists the parent keys" do
@@ -1128,13 +1130,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1128
1130
  context "when the parent has been persisted" do
1129
1131
 
1130
1132
  let!(:person) do
1131
- Person.create
1133
+ Person.create!
1132
1134
  end
1133
1135
 
1134
1136
  context "when the children are persisted" do
1135
1137
 
1136
1138
  let!(:preference) do
1137
- person.preferences.create(name: "settings")
1139
+ person.preferences.create!(name: "settings")
1138
1140
  end
1139
1141
 
1140
1142
  let!(:relation) do
@@ -1306,7 +1308,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1306
1308
  context "when the parent is not a new record" do
1307
1309
 
1308
1310
  let(:person) do
1309
- Person.create
1311
+ Person.create!
1310
1312
  end
1311
1313
 
1312
1314
  let!(:preference) do
@@ -1350,11 +1352,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1350
1352
  context "when appending in a parent create block" do
1351
1353
 
1352
1354
  let!(:preference) do
1353
- Preference.create(name: "testing")
1355
+ Preference.create!(name: "testing")
1354
1356
  end
1355
1357
 
1356
1358
  let!(:person) do
1357
- Person.create do |doc|
1359
+ Person.create! do |doc|
1358
1360
  doc.preferences.concat([ preference ])
1359
1361
  end
1360
1362
  end
@@ -1439,7 +1441,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1439
1441
  context "when the child is already persisted" do
1440
1442
 
1441
1443
  let!(:persisted) do
1442
- Preference.create(name: "testy")
1444
+ Preference.create!(name: "testy")
1443
1445
  end
1444
1446
 
1445
1447
  let(:preference) do
@@ -1448,7 +1450,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1448
1450
 
1449
1451
  before do
1450
1452
  person.preferences.concat([ preference ])
1451
- person.save
1453
+ person.save!
1452
1454
  end
1453
1455
 
1454
1456
  it "adds the documents to the relation" do
@@ -1479,7 +1481,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1479
1481
  context "when setting via the associated ids" do
1480
1482
 
1481
1483
  let!(:persisted) do
1482
- Preference.create(name: "testy")
1484
+ Preference.create!(name: "testy")
1483
1485
  end
1484
1486
 
1485
1487
  let(:preference) do
@@ -1491,7 +1493,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1491
1493
  end
1492
1494
 
1493
1495
  before do
1494
- person.save
1496
+ person.save!
1495
1497
  end
1496
1498
 
1497
1499
  it "adds the documents to the relation" do
@@ -1519,7 +1521,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1519
1521
  context "when the parent is not a new record" do
1520
1522
 
1521
1523
  let(:person) do
1522
- Person.create
1524
+ Person.create!
1523
1525
  end
1524
1526
 
1525
1527
  let(:preference) do
@@ -1601,11 +1603,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1601
1603
  context "when both sides have been persisted" do
1602
1604
 
1603
1605
  let(:person) do
1604
- Person.create
1606
+ Person.create!
1605
1607
  end
1606
1608
 
1607
1609
  let(:event) do
1608
- Event.create
1610
+ Event.create!
1609
1611
  end
1610
1612
 
1611
1613
  before do
@@ -1654,15 +1656,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1654
1656
  context "when the relation also includes a has_many relation" do
1655
1657
 
1656
1658
  let(:artwork) do
1657
- Artwork.create
1659
+ Artwork.create!
1658
1660
  end
1659
1661
 
1660
1662
  let(:exhibition) do
1661
- Exhibition.create
1663
+ Exhibition.create!
1662
1664
  end
1663
1665
 
1664
1666
  let(:exhibitor) do
1665
- Exhibitor.create(exhibition: exhibition)
1667
+ Exhibitor.create!(exhibition: exhibition)
1666
1668
  end
1667
1669
 
1668
1670
  before do
@@ -1677,11 +1679,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1677
1679
  context "when the relation is self referencing" do
1678
1680
 
1679
1681
  let(:tag_one) do
1680
- Tag.create(text: "one")
1682
+ Tag.create!(text: "one")
1681
1683
  end
1682
1684
 
1683
1685
  let(:tag_two) do
1684
- Tag.create(text: "two")
1686
+ Tag.create!(text: "two")
1685
1687
  end
1686
1688
 
1687
1689
  before do
@@ -1732,7 +1734,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1732
1734
  describe "#count" do
1733
1735
 
1734
1736
  let(:person) do
1735
- Person.create
1737
+ Person.create!
1736
1738
  end
1737
1739
 
1738
1740
  context "when nothing exists on the relation" do
@@ -1754,10 +1756,47 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1754
1756
  end
1755
1757
  end
1756
1758
 
1759
+ describe "#any?" do
1760
+
1761
+ let(:person) do
1762
+ Person.create!
1763
+ end
1764
+
1765
+ context "when nothing exists on the relation" do
1766
+
1767
+ context "when no document is added" do
1768
+
1769
+ let!(:sandwich) do
1770
+ Sandwich.create!
1771
+ end
1772
+
1773
+ it "returns false" do
1774
+ expect(sandwich.meats.any?).to be false
1775
+ end
1776
+ end
1777
+
1778
+ context "when the document is destroyed" do
1779
+
1780
+ before do
1781
+ Meat.create!
1782
+ end
1783
+
1784
+ let!(:sandwich) do
1785
+ Sandwich.create!
1786
+ end
1787
+
1788
+ it "returns false" do
1789
+ sandwich.destroy
1790
+ expect(sandwich.meats.any?).to be false
1791
+ end
1792
+ end
1793
+ end
1794
+ end
1795
+
1757
1796
  context "when documents have been persisted" do
1758
1797
 
1759
1798
  let!(:preference) do
1760
- person.preferences.create(name: "setting")
1799
+ person.preferences.create!(name: "setting")
1761
1800
  end
1762
1801
 
1763
1802
  it "returns the number of persisted documents" do
@@ -1768,12 +1807,12 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1768
1807
  context "when appending to a loaded relation" do
1769
1808
 
1770
1809
  let!(:preference) do
1771
- person.preferences.create(name: "setting")
1810
+ person.preferences.create!(name: "setting")
1772
1811
  end
1773
1812
 
1774
1813
  before do
1775
1814
  person.preferences.count
1776
- person.preferences << Preference.create(name: "two")
1815
+ person.preferences << Preference.create!(name: "two")
1777
1816
  end
1778
1817
 
1779
1818
  it "returns the number of persisted documents" do
@@ -1797,7 +1836,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1797
1836
  context "when the documents are part of the relation" do
1798
1837
 
1799
1838
  before do
1800
- Preference.create(person_ids: [ person.id ])
1839
+ Preference.create!(person_ids: [ person.id ])
1801
1840
  end
1802
1841
 
1803
1842
  it "returns the count from the db" do
@@ -1808,7 +1847,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1808
1847
  context "when the documents are not part of the relation" do
1809
1848
 
1810
1849
  before do
1811
- Preference.create
1850
+ Preference.create!
1812
1851
  end
1813
1852
 
1814
1853
  it "returns the count from the db" do
@@ -1822,7 +1861,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1822
1861
  context "when documents have been persisted" do
1823
1862
 
1824
1863
  let!(:house) do
1825
- person.houses.create(name: "Wayne Manor")
1864
+ person.houses.create!(name: "Wayne Manor")
1826
1865
  end
1827
1866
 
1828
1867
  it "returns the number of persisted documents" do
@@ -1843,6 +1882,107 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1843
1882
  end
1844
1883
  end
1845
1884
 
1885
+ describe "#any?" do
1886
+
1887
+ let(:sandwich) do
1888
+ Sandwich.create!
1889
+ end
1890
+
1891
+ context "when nothing exists on the relation" do
1892
+
1893
+ context "when no document is added" do
1894
+
1895
+ let!(:sandwich) do
1896
+ Sandwich.create!
1897
+ end
1898
+
1899
+ it "returns false" do
1900
+ expect(sandwich.meats.any?).to be false
1901
+ end
1902
+ end
1903
+
1904
+ context "when the document is destroyed" do
1905
+
1906
+ before do
1907
+ Meat.create!
1908
+ end
1909
+
1910
+ let!(:sandwich) do
1911
+ Sandwich.create!
1912
+ end
1913
+
1914
+ it "returns false" do
1915
+ sandwich.destroy
1916
+ expect(sandwich.meats.any?).to be false
1917
+ end
1918
+ end
1919
+ end
1920
+
1921
+ context "when appending to a relation and _loaded/_unloaded are empty" do
1922
+
1923
+ let!(:sandwich) do
1924
+ Sandwich.create!
1925
+ end
1926
+
1927
+ before do
1928
+ sandwich.meats << Meat.new
1929
+ end
1930
+
1931
+ it "returns true" do
1932
+ expect(sandwich.meats.any?).to be true
1933
+ end
1934
+ end
1935
+
1936
+ context "when appending to a relation in a transaction" do
1937
+ require_transaction_support
1938
+
1939
+ let!(:sandwich) do
1940
+ Sandwich.create!
1941
+ end
1942
+
1943
+ it "returns true" do
1944
+ sandwich.with_session do |session|
1945
+ session.with_transaction do
1946
+ expect{ sandwich.meats << Meat.new }.to_not raise_error
1947
+ expect(sandwich.meats.any?).to be true
1948
+ end
1949
+ end
1950
+ end
1951
+ end
1952
+
1953
+ context "when documents have been persisted" do
1954
+
1955
+ let!(:meat) do
1956
+ sandwich.meats.create!
1957
+ end
1958
+
1959
+ it "returns true" do
1960
+ expect(sandwich.meats.any?).to be true
1961
+ end
1962
+ end
1963
+
1964
+ context "when documents have not been persisted" do
1965
+
1966
+ let!(:meat) do
1967
+ sandwich.meats.build
1968
+ end
1969
+
1970
+ it "returns false" do
1971
+ expect(sandwich.meats.any?).to be true
1972
+ end
1973
+ end
1974
+
1975
+ context "when new documents exist in the database" do
1976
+ before do
1977
+ Meat.create!(sandwiches: [sandwich])
1978
+ end
1979
+
1980
+ it "returns true" do
1981
+ expect(sandwich.meats.any?).to be true
1982
+ end
1983
+ end
1984
+ end
1985
+
1846
1986
  [ :create, :create! ].each do |method|
1847
1987
 
1848
1988
  describe "##{method}" do
@@ -1852,15 +1992,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1852
1992
  context "when using string keys" do
1853
1993
 
1854
1994
  let(:agent) do
1855
- Agent.create(number: "007")
1995
+ Agent.create!(number: "007")
1856
1996
  end
1857
1997
 
1858
1998
  before do
1859
- agent.accounts.create(name: "testing again")
1999
+ agent.accounts.send(method, name: "test again")
1860
2000
  end
1861
2001
 
1862
2002
  it "does not convert the string key to an object id" do
1863
- expect(agent.account_ids).to eq([ "testing-again" ])
2003
+ expect(agent.account_ids).to eq([ "test-again" ])
1864
2004
  end
1865
2005
  end
1866
2006
 
@@ -1932,7 +2072,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1932
2072
  context "when validation fails" do
1933
2073
 
1934
2074
  let(:person) do
1935
- Person.create
2075
+ Person.create!
1936
2076
  end
1937
2077
 
1938
2078
  context "when the relation is not polymorphic" do
@@ -1949,15 +2089,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1949
2089
  describe "#delete" do
1950
2090
 
1951
2091
  let(:person) do
1952
- Person.create
2092
+ Person.create!
1953
2093
  end
1954
2094
 
1955
2095
  let(:preference_one) do
1956
- Preference.create(name: "Testing")
2096
+ Preference.create!(name: "Testing")
1957
2097
  end
1958
2098
 
1959
2099
  let(:preference_two) do
1960
- Preference.create(name: "Test")
2100
+ Preference.create!(name: "Test")
1961
2101
  end
1962
2102
 
1963
2103
  before do
@@ -2032,7 +2172,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2032
2172
  context "when :inverse_of is set" do
2033
2173
 
2034
2174
  let(:event) do
2035
- Event.create
2175
+ Event.create!
2036
2176
  end
2037
2177
 
2038
2178
  before do
@@ -2048,11 +2188,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2048
2188
  context "when the relationships are self referencing" do
2049
2189
 
2050
2190
  let(:tag_one) do
2051
- Tag.create(text: "one")
2191
+ Tag.create!(text: "one")
2052
2192
  end
2053
2193
 
2054
2194
  let(:tag_two) do
2055
- Tag.create(text: "two")
2195
+ Tag.create!(text: "two")
2056
2196
  end
2057
2197
 
2058
2198
  before do
@@ -2221,15 +2361,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2221
2361
  context "when conditions are provided" do
2222
2362
 
2223
2363
  let(:person) do
2224
- Person.create
2364
+ Person.create!
2225
2365
  end
2226
2366
 
2227
2367
  let!(:preference_one) do
2228
- person.preferences.create(name: "Testing")
2368
+ person.preferences.create!(name: "Testing")
2229
2369
  end
2230
2370
 
2231
2371
  let!(:preference_two) do
2232
- person.preferences.create(name: "Test")
2372
+ person.preferences.create!(name: "Test")
2233
2373
  end
2234
2374
 
2235
2375
  let!(:deleted) do
@@ -2259,9 +2399,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2259
2399
  context "when conditions are not provided" do
2260
2400
 
2261
2401
  let(:person) do
2262
- Person.create.tap do |person|
2263
- person.preferences.create(name: "Testing")
2264
- person.preferences.create(name: "Test")
2402
+ Person.create!.tap do |person|
2403
+ person.preferences.create!(name: "Testing")
2404
+ person.preferences.create!(name: "Test")
2265
2405
  end
2266
2406
  end
2267
2407
 
@@ -2295,13 +2435,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2295
2435
  describe "#exists?" do
2296
2436
 
2297
2437
  let!(:person) do
2298
- Person.create
2438
+ Person.create!
2299
2439
  end
2300
2440
 
2301
2441
  context "when documents exist in the database" do
2302
2442
 
2303
2443
  before do
2304
- person.preferences.create
2444
+ person.preferences.create!
2305
2445
  end
2306
2446
 
2307
2447
  it "returns true" do
@@ -2326,23 +2466,23 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2326
2466
  context "when the relation is not polymorphic" do
2327
2467
 
2328
2468
  let(:person) do
2329
- Person.create
2469
+ Person.create!
2330
2470
  end
2331
2471
 
2332
2472
  let!(:preference_one) do
2333
- person.preferences.create(name: "Test")
2473
+ person.preferences.create!(name: "Test")
2334
2474
  end
2335
2475
 
2336
2476
  let!(:preference_two) do
2337
- person.preferences.create(name: "OMG I has relations")
2477
+ person.preferences.create!(name: "OMG I has relations")
2338
2478
  end
2339
2479
 
2340
2480
  let!(:unrelated_pref) do
2341
- Preference.create(name: "orphan annie")
2481
+ Preference.create!(name: "orphan annie")
2342
2482
  end
2343
2483
 
2344
2484
  let!(:unrelated_pref_two) do
2345
- Preference.create(name: "orphan two")
2485
+ Preference.create!(name: "orphan two")
2346
2486
  end
2347
2487
 
2348
2488
  context "when providing an id" do
@@ -2420,7 +2560,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2420
2560
  end
2421
2561
  end
2422
2562
 
2423
- context "when the ids matche unreferenced documents" do
2563
+ context "when the ids match unreferenced documents" do
2424
2564
 
2425
2565
  let(:preferences) do
2426
2566
  person.preferences.find(
@@ -2478,11 +2618,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2478
2618
  context "when the relation is not polymorphic" do
2479
2619
 
2480
2620
  let(:person) do
2481
- Person.create
2621
+ Person.create!
2482
2622
  end
2483
2623
 
2484
2624
  let!(:preference) do
2485
- person.preferences.create(name: "Testing")
2625
+ person.preferences.create!(name: "Testing")
2486
2626
  end
2487
2627
 
2488
2628
  context "when the document exists" do
@@ -2518,11 +2658,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2518
2658
  context "when the relation is not polymorphic" do
2519
2659
 
2520
2660
  let(:person) do
2521
- Person.create
2661
+ Person.create!
2522
2662
  end
2523
2663
 
2524
2664
  let!(:preference) do
2525
- person.preferences.create(name: "Testing")
2665
+ person.preferences.create!(name: "Testing")
2526
2666
  end
2527
2667
 
2528
2668
  context "when the document exists" do
@@ -2567,11 +2707,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2567
2707
  context "when the relation is not polymorphic" do
2568
2708
 
2569
2709
  let(:person) do
2570
- Person.create
2710
+ Person.create!
2571
2711
  end
2572
2712
 
2573
2713
  let!(:preference) do
2574
- person.preferences.create(name: "Testing")
2714
+ person.preferences.create!(name: "Testing")
2575
2715
  end
2576
2716
 
2577
2717
  context "when the document exists" do
@@ -2605,15 +2745,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2605
2745
  describe "#max" do
2606
2746
 
2607
2747
  let(:person) do
2608
- Person.create
2748
+ Person.create!
2609
2749
  end
2610
2750
 
2611
2751
  let(:preference_one) do
2612
- Preference.create(ranking: 5)
2752
+ Preference.create!(ranking: 5)
2613
2753
  end
2614
2754
 
2615
2755
  let(:preference_two) do
2616
- Preference.create(ranking: 10)
2756
+ Preference.create!(ranking: 10)
2617
2757
  end
2618
2758
 
2619
2759
  before do
@@ -2634,15 +2774,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2634
2774
  describe "#max_by" do
2635
2775
 
2636
2776
  let(:person) do
2637
- Person.create
2777
+ Person.create!
2638
2778
  end
2639
2779
 
2640
2780
  let(:preference_one) do
2641
- Preference.create(ranking: 5)
2781
+ Preference.create!(ranking: 5)
2642
2782
  end
2643
2783
 
2644
2784
  let(:preference_two) do
2645
- Preference.create(ranking: 10)
2785
+ Preference.create!(ranking: 10)
2646
2786
  end
2647
2787
 
2648
2788
  before do
@@ -2661,19 +2801,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2661
2801
  describe "#method_missing" do
2662
2802
 
2663
2803
  let!(:person) do
2664
- Person.create
2804
+ Person.create!
2665
2805
  end
2666
2806
 
2667
2807
  let!(:preference_one) do
2668
- person.preferences.create(name: "First", value: "Posting")
2808
+ person.preferences.create!(name: "First", value: "Posting")
2669
2809
  end
2670
2810
 
2671
2811
  let!(:preference_two) do
2672
- person.preferences.create(name: "Second", value: "Testing")
2812
+ person.preferences.create!(name: "Second", value: "Testing")
2673
2813
  end
2674
2814
 
2675
2815
  let!(:unrelated) do
2676
- Preference.create(name: "Third")
2816
+ Preference.create!(name: "Third")
2677
2817
  end
2678
2818
 
2679
2819
  context "when providing a single criteria" do
@@ -2686,7 +2826,8 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2686
2826
  expect(preferences).to eq([ preference_one ])
2687
2827
  end
2688
2828
 
2689
- context 'when providing a collation', if: collation_supported? do
2829
+ context 'when providing a collation' do
2830
+ min_server_version '3.4'
2690
2831
 
2691
2832
  let(:preferences) do
2692
2833
  person.preferences.where(name: "FIRST").collation(locale: 'en_US', strength: 2).to_a
@@ -2747,7 +2888,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2747
2888
  context "when the inverse relation is not defined" do
2748
2889
 
2749
2890
  let!(:house) do
2750
- person.houses.create(name: "Wayne Manor")
2891
+ person.houses.create!(name: "Wayne Manor")
2751
2892
  end
2752
2893
 
2753
2894
  it "returns the distinct values for the fields" do
@@ -2761,15 +2902,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2761
2902
  describe "#min" do
2762
2903
 
2763
2904
  let(:person) do
2764
- Person.create
2905
+ Person.create!
2765
2906
  end
2766
2907
 
2767
2908
  let(:preference_one) do
2768
- Preference.create(ranking: 5)
2909
+ Preference.create!(ranking: 5)
2769
2910
  end
2770
2911
 
2771
2912
  let(:preference_two) do
2772
- Preference.create(ranking: 10)
2913
+ Preference.create!(ranking: 10)
2773
2914
  end
2774
2915
 
2775
2916
  before do
@@ -2790,15 +2931,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2790
2931
  describe "#min_by" do
2791
2932
 
2792
2933
  let(:person) do
2793
- Person.create
2934
+ Person.create!
2794
2935
  end
2795
2936
 
2796
2937
  let(:preference_one) do
2797
- Preference.create(ranking: 5)
2938
+ Preference.create!(ranking: 5)
2798
2939
  end
2799
2940
 
2800
2941
  let(:preference_two) do
2801
- Preference.create(ranking: 10)
2942
+ Preference.create!(ranking: 10)
2802
2943
  end
2803
2944
 
2804
2945
  before do
@@ -2824,15 +2965,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2824
2965
  describe "#nullify_all" do
2825
2966
 
2826
2967
  let(:person) do
2827
- Person.create
2968
+ Person.create!
2828
2969
  end
2829
2970
 
2830
2971
  let!(:preference_one) do
2831
- person.preferences.create(name: "One")
2972
+ person.preferences.create!(name: "One")
2832
2973
  end
2833
2974
 
2834
2975
  let!(:preference_two) do
2835
- person.preferences.create(name: "Two")
2976
+ person.preferences.create!(name: "Two")
2836
2977
  end
2837
2978
 
2838
2979
  before do
@@ -2878,9 +3019,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2878
3019
  person.preferences
2879
3020
  end
2880
3021
 
2881
- Array.public_instance_methods.each do |method|
3022
+ Array.public_instance_methods.sort.each do |method|
3023
+
3024
+ context "when checking Array##{method}" do
2882
3025
 
2883
- context "when checking #{method}" do
3026
+ before do
3027
+ expect([].respond_to?(method)).to be true
3028
+ end
2884
3029
 
2885
3030
  it "returns true" do
2886
3031
  expect(preferences.respond_to?(method)).to be true
@@ -2888,9 +3033,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2888
3033
  end
2889
3034
  end
2890
3035
 
2891
- Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy.public_instance_methods.each do |method|
3036
+ Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy.public_instance_methods.sort.each do |method|
2892
3037
 
2893
- context "when checking #{method}" do
3038
+ context "when checking Proxy##{method}" do
2894
3039
 
2895
3040
  it "returns true" do
2896
3041
  expect(preferences.respond_to?(method)).to be true
@@ -2898,9 +3043,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2898
3043
  end
2899
3044
  end
2900
3045
 
2901
- Preference.scopes.keys.each do |method|
3046
+ Preference.scopes.keys.sort.each do |method|
2902
3047
 
2903
- context "when checking #{method}" do
3048
+ context "when checking scope #{method}" do
2904
3049
 
2905
3050
  it "returns true" do
2906
3051
  expect(preferences.respond_to?(method)).to be true
@@ -2911,20 +3056,36 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2911
3056
 
2912
3057
  describe "#scoped" do
2913
3058
 
2914
- let(:person) do
2915
- Person.new
2916
- end
2917
-
2918
3059
  let(:scoped) do
2919
3060
  person.preferences.scoped
2920
3061
  end
2921
3062
 
2922
- it "returns the relation criteria" do
2923
- expect(scoped).to be_a(Mongoid::Criteria)
3063
+ context 'when association is empty' do
3064
+
3065
+ let(:person) do
3066
+ Person.new
3067
+ end
3068
+
3069
+ it "returns the relation criteria" do
3070
+ expect(scoped).to be_a(Mongoid::Criteria)
3071
+ end
3072
+
3073
+ it "returns with an empty selector" do
3074
+ expect(scoped.selector).to eq("_id" => { "$in" => [] })
3075
+ end
2924
3076
  end
2925
3077
 
2926
- it "returns with an empty selector" do
2927
- expect(scoped.selector).to eq({ "$and" => [{ "_id" => { "$in" => [] }}]})
3078
+ context 'when association is not empty' do
3079
+
3080
+ let(:person) do
3081
+ Person.create!(preferences: [
3082
+ Preference.new(id: 123),
3083
+ ])
3084
+ end
3085
+
3086
+ it "returns with a selector including association element ids" do
3087
+ expect(scoped.selector).to eq("_id" => { "$in" => [123] })
3088
+ end
2928
3089
  end
2929
3090
  end
2930
3091
 
@@ -2933,13 +3094,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2933
3094
  describe "##{method}" do
2934
3095
 
2935
3096
  let(:person) do
2936
- Person.create
3097
+ Person.create!
2937
3098
  end
2938
3099
 
2939
3100
  context "when documents have been persisted" do
2940
3101
 
2941
3102
  let!(:preference) do
2942
- person.preferences.create(name: "Testing")
3103
+ person.preferences.create!(name: "Testing")
2943
3104
  end
2944
3105
 
2945
3106
  it "returns the number of documents" do
@@ -2951,7 +3112,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2951
3112
 
2952
3113
  before do
2953
3114
  person.preferences.build(name: "Test")
2954
- person.preferences.create(name: "Test 2")
3115
+ person.preferences.create!(name: "Test 2")
2955
3116
  end
2956
3117
 
2957
3118
  it "returns the total number of documents" do
@@ -2966,15 +3127,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2966
3127
  context "when the relation has no default scope" do
2967
3128
 
2968
3129
  let!(:person) do
2969
- Person.create
3130
+ Person.create!
2970
3131
  end
2971
3132
 
2972
3133
  let!(:preference_one) do
2973
- person.preferences.create(name: "first")
3134
+ person.preferences.create!(name: "first")
2974
3135
  end
2975
3136
 
2976
3137
  let!(:preference_two) do
2977
- Preference.create(name: "second")
3138
+ Preference.create!(name: "second")
2978
3139
  end
2979
3140
 
2980
3141
  let(:unscoped) do
@@ -2989,15 +3150,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2989
3150
  context "when the relation has a default scope" do
2990
3151
 
2991
3152
  let!(:person) do
2992
- Person.create
3153
+ Person.create!
2993
3154
  end
2994
3155
 
2995
3156
  let!(:house_one) do
2996
- person.houses.create(name: "first")
3157
+ person.houses.create!(name: "first")
2997
3158
  end
2998
3159
 
2999
3160
  let!(:house_two) do
3000
- House.create(name: "second")
3161
+ House.create!(name: "second")
3001
3162
  end
3002
3163
 
3003
3164
  let(:unscoped) do
@@ -3033,10 +3194,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3033
3194
  end
3034
3195
 
3035
3196
  before do
3036
- person.update_attributes(
3197
+ person.update_attributes!(
3037
3198
  houses: [ wife_house, exwife_house, girlfriend_house ]
3038
3199
  )
3039
- person.update_attributes(house_ids: [ girlfriend_house.id ])
3200
+ person.update_attributes!(house_ids: [ girlfriend_house.id ])
3040
3201
  end
3041
3202
 
3042
3203
  context "when reloading" do
@@ -3083,7 +3244,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3083
3244
  end
3084
3245
 
3085
3246
  let!(:business) do
3086
- Business.create(name: "serious", owners: [ user ])
3247
+ Business.create!(name: "serious", owners: [ user ])
3087
3248
  end
3088
3249
 
3089
3250
  before do
@@ -3126,11 +3287,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3126
3287
  context "when the documents are persisted" do
3127
3288
 
3128
3289
  let(:user) do
3129
- User.create(name: "tst")
3290
+ User.create!(name: "tst")
3130
3291
  end
3131
3292
 
3132
3293
  let(:business) do
3133
- Business.create(name: "srs", owners: [ user ])
3294
+ Business.create!(name: "srs", owners: [ user ])
3134
3295
  end
3135
3296
 
3136
3297
  before do
@@ -3174,11 +3335,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3174
3335
  context "when binding the relation multiple times" do
3175
3336
 
3176
3337
  let(:person) do
3177
- Person.create
3338
+ Person.create!
3178
3339
  end
3179
3340
 
3180
3341
  let(:preference) do
3181
- person.preferences.create(name: "testing")
3342
+ person.preferences.create!(name: "testing")
3182
3343
  end
3183
3344
 
3184
3345
  before do
@@ -3197,19 +3358,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3197
3358
  context "when the association has order criteria" do
3198
3359
 
3199
3360
  let(:person) do
3200
- Person.create
3361
+ Person.create!
3201
3362
  end
3202
3363
 
3203
3364
  let(:preference_one) do
3204
- OrderedPreference.create(name: 'preference-1', value: 10)
3365
+ OrderedPreference.create!(name: 'preference-1', value: 10)
3205
3366
  end
3206
3367
 
3207
3368
  let(:preference_two) do
3208
- OrderedPreference.create(name: 'preference-2', value: 20)
3369
+ OrderedPreference.create!(name: 'preference-2', value: 20)
3209
3370
  end
3210
3371
 
3211
3372
  let(:preference_three) do
3212
- OrderedPreference.create(name: 'preference-3', value: 20)
3373
+ OrderedPreference.create!(name: 'preference-3', value: 20)
3213
3374
  end
3214
3375
 
3215
3376
  before do
@@ -3233,7 +3394,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3233
3394
  context "when the parent is not a new record and freshly loaded" do
3234
3395
 
3235
3396
  let(:person) do
3236
- Person.create
3397
+ Person.create!
3237
3398
  end
3238
3399
 
3239
3400
  let(:preference) do
@@ -3242,7 +3403,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3242
3403
 
3243
3404
  before do
3244
3405
  person.preferences = [ preference ]
3245
- person.save
3406
+ person.save!
3246
3407
  person.reload
3247
3408
  person.preferences = nil
3248
3409
  end
@@ -3265,15 +3426,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3265
3426
  context "when reloading the relation" do
3266
3427
 
3267
3428
  let!(:person) do
3268
- Person.create
3429
+ Person.create!
3269
3430
  end
3270
3431
 
3271
3432
  let!(:preference_one) do
3272
- Preference.create(name: "one")
3433
+ Preference.create!(name: "one")
3273
3434
  end
3274
3435
 
3275
3436
  let!(:preference_two) do
3276
- Preference.create(name: "two")
3437
+ Preference.create!(name: "two")
3277
3438
  end
3278
3439
 
3279
3440
  before do
@@ -3317,7 +3478,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3317
3478
  context "when the document is new" do
3318
3479
 
3319
3480
  let!(:person) do
3320
- Person.create(preference_names: "one, two")
3481
+ Person.create!(preference_names: "one, two")
3321
3482
  end
3322
3483
 
3323
3484
  let(:preference_one) do
@@ -3353,23 +3514,23 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3353
3514
  end
3354
3515
 
3355
3516
  let(:preference_one) do
3356
- Preference.create(name: "one")
3517
+ Preference.create!(name: "one")
3357
3518
  end
3358
3519
 
3359
3520
  let(:preference_two) do
3360
- Preference.create(name: "two")
3521
+ Preference.create!(name: "two")
3361
3522
  end
3362
3523
 
3363
3524
  before do
3364
3525
  person.preference_ids = [ preference_one.id, preference_two.id ]
3365
- person.save
3526
+ person.save!
3366
3527
  end
3367
3528
 
3368
3529
  context "and the order is changed" do
3369
3530
 
3370
3531
  before do
3371
3532
  person.preference_ids = [ preference_two.id, preference_one.id ]
3372
- person.save
3533
+ person.save!
3373
3534
  end
3374
3535
 
3375
3536
  let(:reloaded) do
@@ -3386,13 +3547,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3386
3547
  context "and the order is changed and an element is added" do
3387
3548
 
3388
3549
  let(:preference_three) do
3389
- Preference.create(name: "three")
3550
+ Preference.create!(name: "three")
3390
3551
  end
3391
3552
 
3392
3553
  before do
3393
3554
  person.preference_ids =
3394
3555
  [ preference_two.id, preference_one.id, preference_three.id ]
3395
- person.save
3556
+ person.save!
3396
3557
  end
3397
3558
 
3398
3559
  let(:reloaded) do
@@ -3409,16 +3570,16 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3409
3570
  context "and the order is changed and an element is removed" do
3410
3571
 
3411
3572
  let(:preference_three) do
3412
- Preference.create(name: "three")
3573
+ Preference.create!(name: "three")
3413
3574
  end
3414
3575
 
3415
3576
  before do
3416
3577
  person.preference_ids =
3417
3578
  [ preference_one.id, preference_two.id, preference_three.id ]
3418
- person.save
3579
+ person.save!
3419
3580
  person.preference_ids =
3420
3581
  [ preference_three.id, preference_two.id ]
3421
- person.save
3582
+ person.save!
3422
3583
  end
3423
3584
 
3424
3585
  let(:reloaded) do
@@ -3468,15 +3629,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3468
3629
  context "when the relation exists" do
3469
3630
 
3470
3631
  let!(:person) do
3471
- Person.create
3632
+ Person.create!
3472
3633
  end
3473
3634
 
3474
3635
  let!(:pref_one) do
3475
- person.preferences.create
3636
+ person.preferences.create!
3476
3637
  end
3477
3638
 
3478
3639
  let!(:pref_two) do
3479
- Preference.create
3640
+ Preference.create!
3480
3641
  end
3481
3642
 
3482
3643
  before do
@@ -3492,15 +3653,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3492
3653
  context "when using a different primary key" do
3493
3654
 
3494
3655
  let(:dog) do
3495
- Dog.create(name: 'Doggie')
3656
+ Dog.create!(name: 'Doggie')
3496
3657
  end
3497
3658
 
3498
3659
  let(:cat) do
3499
- Cat.create(name: 'Kitty')
3660
+ Cat.create!(name: 'Kitty')
3661
+ end
3662
+
3663
+ let(:another_cat) do
3664
+ Cat.create!(name: 'Kitten')
3500
3665
  end
3501
3666
 
3502
3667
  let(:fire_hydrant) do
3503
- FireHydrant.create(location: '221B Baker Street')
3668
+ FireHydrant.create!(location: '221B Baker Street')
3504
3669
  end
3505
3670
 
3506
3671
  context "when adding to a one-way many to many" do
@@ -3514,6 +3679,28 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3514
3679
  end
3515
3680
  end
3516
3681
 
3682
+ context "when adding multiple documents to a one-way many to many" do
3683
+
3684
+ before do
3685
+ fire_hydrant.cats.push([cat, another_cat])
3686
+ end
3687
+
3688
+ it "adds the pk values to the fk set" do
3689
+ expect(fire_hydrant.cat_ids).to eq([cat.name, another_cat.name])
3690
+ end
3691
+ end
3692
+
3693
+ context "when adding a new document to a one-way many to many" do
3694
+
3695
+ before do
3696
+ fire_hydrant.cats.build name: 'Kitten'
3697
+ end
3698
+
3699
+ it "adds the pk values to the fk set" do
3700
+ expect(fire_hydrant.cat_ids).to eq(['Kitten'])
3701
+ end
3702
+ end
3703
+
3517
3704
  context "when adding to a two-way many to many" do
3518
3705
 
3519
3706
  before do
@@ -3570,10 +3757,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3570
3757
  end
3571
3758
 
3572
3759
  it "should assign relation from both sides" do
3573
- p1 = Project.create name: 'Foo'
3574
- p2 = Project.create name: 'Bar'
3575
- d1 = Distributor.create name: 'Rock'
3576
- d2 = Distributor.create name: 'Soul'
3760
+ p1 = Project.create! name: 'Foo'
3761
+ p2 = Project.create! name: 'Bar'
3762
+ d1 = Distributor.create! name: 'Rock'
3763
+ d2 = Distributor.create! name: 'Soul'
3577
3764
 
3578
3765
  p1.distributors << d1
3579
3766
  expect(p1.d_ids).to match_array([d1.id])