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::HasMany::Proxy do
@@ -18,26 +20,26 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
18
20
 
19
21
  describe "##{method}" do
20
22
 
21
- context "when providing the base class in child contructor" do
23
+ context "when providing the base class in child constructor" do
22
24
 
23
25
  let(:person) do
24
- Person.create
26
+ Person.create!
25
27
  end
26
28
 
27
29
  let!(:post) do
28
30
  person.posts.send(method, Post.new(person: person))
29
31
  end
30
32
 
31
- it "only adds the relation once" do
33
+ it "only adds the association once" do
32
34
  expect(person.posts.size).to eq(1)
33
35
  end
34
36
 
35
- it "only persists the relation once" do
37
+ it "only persists the association once" do
36
38
  expect(person.reload.posts.size).to eq(1)
37
39
  end
38
40
  end
39
41
 
40
- context "when the relations are not polymorphic" do
42
+ context "when the associations are not polymorphic" do
41
43
 
42
44
  context "when the parent is a new record" do
43
45
 
@@ -55,15 +57,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
55
57
  person.posts.send(method, post)
56
58
  end
57
59
 
58
- it "sets the foreign key on the relation" do
60
+ it "sets the foreign key on the association" do
59
61
  expect(post.person_id).to eq(person.id)
60
62
  end
61
63
 
62
- it "sets the base on the inverse relation" do
64
+ it "sets the base on the inverse association" do
63
65
  expect(post.person).to eq(person)
64
66
  end
65
67
 
66
- it "sets the same instance on the inverse relation" do
68
+ it "sets the same instance on the inverse association" do
67
69
  expect(post.person).to eql(person)
68
70
  end
69
71
 
@@ -75,7 +77,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
75
77
  expect(person.posts.size).to eq(1)
76
78
  end
77
79
 
78
- it "returns the relation" do
80
+ it "returns the association" do
79
81
  expect(added).to eq(person.posts)
80
82
  end
81
83
  end
@@ -83,22 +85,22 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
83
85
  context "when the child is persisted" do
84
86
 
85
87
  let(:post) do
86
- Post.create
88
+ Post.create!
87
89
  end
88
90
 
89
91
  before do
90
92
  person.posts.send(method, post)
91
93
  end
92
94
 
93
- it "sets the foreign key on the relation" do
95
+ it "sets the foreign key on the association" do
94
96
  expect(post.person_id).to eq(person.id)
95
97
  end
96
98
 
97
- it "sets the base on the inverse relation" do
99
+ it "sets the base on the inverse association" do
98
100
  expect(post.person).to eq(person)
99
101
  end
100
102
 
101
- it "sets the same instance on the inverse relation" do
103
+ it "sets the same instance on the inverse association" do
102
104
  expect(post.person).to eql(person)
103
105
  end
104
106
 
@@ -113,11 +115,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
113
115
  context "when subsequently saving the parent" do
114
116
 
115
117
  before do
116
- person.save
117
- post.save
118
+ person.save!
119
+ post.save!
118
120
  end
119
121
 
120
- it "returns the correct count of the relation" do
122
+ it "returns the correct count of the association" do
121
123
  expect(person.posts.count).to eq(1)
122
124
  end
123
125
  end
@@ -127,20 +129,20 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
127
129
  context "when appending in a parent create block" do
128
130
 
129
131
  let!(:post) do
130
- Post.create(title: "testing")
132
+ Post.create!(title: "testing")
131
133
  end
132
134
 
133
135
  let!(:person) do
134
- Person.create do |doc|
136
+ Person.create! do |doc|
135
137
  doc.posts << post
136
138
  end
137
139
  end
138
140
 
139
- it "adds the documents to the relation" do
141
+ it "adds the documents to the association" do
140
142
  expect(person.posts).to eq([ post ])
141
143
  end
142
144
 
143
- it "sets the foreign key on the inverse relation" do
145
+ it "sets the foreign key on the inverse association" do
144
146
  expect(post.person_id).to eq(person.id)
145
147
  end
146
148
 
@@ -160,7 +162,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
160
162
  context "when the parent is not a new record" do
161
163
 
162
164
  let(:person) do
163
- Person.create
165
+ Person.create!
164
166
  end
165
167
 
166
168
  let(:post) do
@@ -171,15 +173,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
171
173
  person.posts.send(method, post)
172
174
  end
173
175
 
174
- it "sets the foreign key on the relation" do
176
+ it "sets the foreign key on the association" do
175
177
  expect(post.person_id).to eq(person.id)
176
178
  end
177
179
 
178
- it "sets the base on the inverse relation" do
180
+ it "sets the base on the inverse association" do
179
181
  expect(post.person).to eq(person)
180
182
  end
181
183
 
182
- it "sets the same instance on the inverse relation" do
184
+ it "sets the same instance on the inverse association" do
183
185
  expect(post.person).to eql(person)
184
186
  end
185
187
 
@@ -200,16 +202,16 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
200
202
  expect(person.changed).to eq([])
201
203
  end
202
204
 
203
- context "when the related item has embedded relations" do
205
+ context "when the related item has embedded associations" do
204
206
 
205
207
  let!(:user) do
206
- User.create
208
+ User.create!
207
209
  end
208
210
 
209
211
  before do
210
- p = Post.create(roles: [ Role.create ])
212
+ p = Post.create!(roles: [ Role.create! ])
211
213
  user.posts = [ p ]
212
- user.save
214
+ user.save!
213
215
  end
214
216
 
215
217
  it "add the document to the target" do
@@ -229,7 +231,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
229
231
  end
230
232
  end
231
233
 
232
- context "when documents already exist on the relation" do
234
+ context "when documents already exist on the association" do
233
235
 
234
236
  let(:post_two) do
235
237
  Post.new(title: "Test")
@@ -239,15 +241,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
239
241
  person.posts.send(method, post_two)
240
242
  end
241
243
 
242
- it "sets the foreign key on the relation" do
244
+ it "sets the foreign key on the association" do
243
245
  expect(post_two.person_id).to eq(person.id)
244
246
  end
245
247
 
246
- it "sets the base on the inverse relation" do
248
+ it "sets the base on the inverse association" do
247
249
  expect(post_two.person).to eq(person)
248
250
  end
249
251
 
250
- it "sets the same instance on the inverse relation" do
252
+ it "sets the same instance on the inverse association" do
251
253
  expect(post_two.person).to eql(person)
252
254
  end
253
255
 
@@ -274,10 +276,10 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
274
276
  end
275
277
  end
276
278
 
277
- context "when.adding to the relation" do
279
+ context "when.adding to the association" do
278
280
 
279
281
  let(:person) do
280
- Person.create
282
+ Person.create!
281
283
  end
282
284
 
283
285
  context "when the operation succeeds" do
@@ -290,7 +292,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
290
292
  person.posts.send(method, post)
291
293
  end
292
294
 
293
- it "adds the document to the relation" do
295
+ it "adds the document to the association" do
294
296
  expect(person.posts).to eq([ post ])
295
297
  end
296
298
  end
@@ -298,7 +300,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
298
300
  context "when the operation fails" do
299
301
 
300
302
  let!(:existing) do
301
- Post.create
303
+ Post.create!
302
304
  end
303
305
 
304
306
  let(:post) do
@@ -315,7 +317,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
315
317
  end
316
318
  end
317
319
 
318
- context "when the relations are polymorphic" do
320
+ context "when the associations are polymorphic" do
319
321
 
320
322
  context "when the parent is a new record" do
321
323
 
@@ -331,11 +333,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
331
333
  movie.ratings.send(method, rating)
332
334
  end
333
335
 
334
- it "sets the foreign key on the relation" do
336
+ it "sets the foreign key on the association" do
335
337
  expect(rating.ratable_id).to eq(movie.id)
336
338
  end
337
339
 
338
- it "sets the base on the inverse relation" do
340
+ it "sets the base on the inverse association" do
339
341
  expect(rating.ratable).to eq(movie)
340
342
  end
341
343
 
@@ -351,7 +353,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
351
353
  context "when the parent is not a new record" do
352
354
 
353
355
  let(:movie) do
354
- Movie.create
356
+ Movie.create!
355
357
  end
356
358
 
357
359
  let(:rating) do
@@ -362,11 +364,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
362
364
  movie.ratings.send(method, rating)
363
365
  end
364
366
 
365
- it "sets the foreign key on the relation" do
367
+ it "sets the foreign key on the association" do
366
368
  expect(rating.ratable_id).to eq(movie.id)
367
369
  end
368
370
 
369
- it "sets the base on the inverse relation" do
371
+ it "sets the base on the inverse association" do
370
372
  expect(rating.ratable).to eq(movie)
371
373
  end
372
374
 
@@ -384,7 +386,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
384
386
 
385
387
  describe "#=" do
386
388
 
387
- context "when the relation is not polymorphic" do
389
+ context "when the association is not polymorphic" do
388
390
 
389
391
  context "when the parent is a new record" do
390
392
 
@@ -400,15 +402,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
400
402
  person.posts = [ post ]
401
403
  end
402
404
 
403
- it "sets the target of the relation" do
405
+ it "sets the target of the association" do
404
406
  expect(person.posts._target).to eq([ post ])
405
407
  end
406
408
 
407
- it "sets the foreign key on the relation" do
409
+ it "sets the foreign key on the association" do
408
410
  expect(post.person_id).to eq(person.id)
409
411
  end
410
412
 
411
- it "sets the base on the inverse relation" do
413
+ it "sets the base on the inverse association" do
412
414
  expect(post.person).to eq(person)
413
415
  end
414
416
 
@@ -420,7 +422,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
420
422
  context "when the parent is not a new record" do
421
423
 
422
424
  let(:person) do
423
- Person.create
425
+ Person.create!
424
426
  end
425
427
 
426
428
  let(:post) do
@@ -431,15 +433,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
431
433
  person.posts = [ post ]
432
434
  end
433
435
 
434
- it "sets the target of the relation" do
436
+ it "sets the target of the association" do
435
437
  expect(person.posts._target).to eq([ post ])
436
438
  end
437
439
 
438
- it "sets the foreign key of the relation" do
440
+ it "sets the foreign key of the association" do
439
441
  expect(post.person_id).to eq(person.id)
440
442
  end
441
443
 
442
- it "sets the base on the inverse relation" do
444
+ it "sets the base on the inverse association" do
443
445
  expect(post.person).to eq(person)
444
446
  end
445
447
 
@@ -447,7 +449,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
447
449
  expect(post).to be_persisted
448
450
  end
449
451
 
450
- context "when replacing the relation with the same documents" do
452
+ context "when replacing the association with the same documents" do
451
453
 
452
454
  context "when using the same in memory instance" do
453
455
 
@@ -455,11 +457,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
455
457
  person.posts = [ post ]
456
458
  end
457
459
 
458
- it "keeps the relation intact" do
460
+ it "keeps the association intact" do
459
461
  expect(person.posts).to eq([ post ])
460
462
  end
461
463
 
462
- it "does not delete the relation" do
464
+ it "does not delete the association" do
463
465
  expect(person.reload.posts).to eq([ post ])
464
466
  end
465
467
  end
@@ -474,11 +476,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
474
476
  from_db.posts = [ post ]
475
477
  end
476
478
 
477
- it "keeps the relation intact" do
479
+ it "keeps the association intact" do
478
480
  expect(from_db.posts).to eq([ post ])
479
481
  end
480
482
 
481
- it "does not delete the relation" do
483
+ it "does not delete the association" do
482
484
  expect(from_db.reload.posts).to eq([ post ])
483
485
  end
484
486
  end
@@ -487,7 +489,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
487
489
  context "when replacing the with a combination of old and new docs" do
488
490
 
489
491
  let(:new_post) do
490
- Post.create(title: "new post")
492
+ Post.create!(title: "new post")
491
493
  end
492
494
 
493
495
  context "when using the same in memory instance" do
@@ -496,7 +498,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
496
498
  person.posts = [ post, new_post ]
497
499
  end
498
500
 
499
- it "keeps the relation intact" do
501
+ it "keeps the association intact" do
500
502
  expect(person.posts.size).to eq(2)
501
503
  end
502
504
 
@@ -508,7 +510,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
508
510
  expect(person.posts).to include(new_post)
509
511
  end
510
512
 
511
- it "does not delete the relation" do
513
+ it "does not delete the association" do
512
514
  expect(person.reload.posts).to eq([ post, new_post ])
513
515
  end
514
516
  end
@@ -523,11 +525,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
523
525
  from_db.posts = [ post, new_post ]
524
526
  end
525
527
 
526
- it "keeps the relation intact" do
528
+ it "keeps the association intact" do
527
529
  expect(from_db.posts).to eq([ post, new_post ])
528
530
  end
529
531
 
530
- it "does not delete the relation" do
532
+ it "does not delete the association" do
531
533
  expect(from_db.reload.posts).to eq([ post, new_post ])
532
534
  end
533
535
  end
@@ -536,7 +538,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
536
538
  context "when replacing the with a combination of only new docs" do
537
539
 
538
540
  let(:new_post) do
539
- Post.create(title: "new post")
541
+ Post.create!(title: "new post")
540
542
  end
541
543
 
542
544
  context "when using the same in memory instance" do
@@ -545,11 +547,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
545
547
  person.posts = [ new_post ]
546
548
  end
547
549
 
548
- it "keeps the relation intact" do
550
+ it "keeps the association intact" do
549
551
  expect(person.posts).to eq([ new_post ])
550
552
  end
551
553
 
552
- it "does not delete the relation" do
554
+ it "does not delete the association" do
553
555
  expect(person.reload.posts).to eq([ new_post ])
554
556
  end
555
557
  end
@@ -564,11 +566,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
564
566
  from_db.posts = [ new_post ]
565
567
  end
566
568
 
567
- it "keeps the relation intact" do
569
+ it "keeps the association intact" do
568
570
  expect(from_db.posts).to eq([ new_post ])
569
571
  end
570
572
 
571
- it "does not delete the relation" do
573
+ it "does not delete the association" do
572
574
  expect(from_db.reload.posts).to eq([ new_post ])
573
575
  end
574
576
  end
@@ -576,7 +578,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
576
578
  end
577
579
  end
578
580
 
579
- context "when the relation is polymorphic" do
581
+ context "when the association is polymorphic" do
580
582
 
581
583
  context "when the parent is a new record" do
582
584
 
@@ -592,15 +594,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
592
594
  movie.ratings = [ rating ]
593
595
  end
594
596
 
595
- it "sets the target of the relation" do
597
+ it "sets the target of the association" do
596
598
  expect(movie.ratings._target).to eq([ rating ])
597
599
  end
598
600
 
599
- it "sets the foreign key on the relation" do
601
+ it "sets the foreign key on the association" do
600
602
  expect(rating.ratable_id).to eq(movie.id)
601
603
  end
602
604
 
603
- it "sets the base on the inverse relation" do
605
+ it "sets the base on the inverse association" do
604
606
  expect(rating.ratable).to eq(movie)
605
607
  end
606
608
 
@@ -612,7 +614,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
612
614
  context "when the parent is not a new record" do
613
615
 
614
616
  let(:movie) do
615
- Movie.create
617
+ Movie.create!
616
618
  end
617
619
 
618
620
  let(:rating) do
@@ -623,15 +625,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
623
625
  movie.ratings = [ rating ]
624
626
  end
625
627
 
626
- it "sets the target of the relation" do
628
+ it "sets the target of the association" do
627
629
  expect(movie.ratings._target).to eq([ rating ])
628
630
  end
629
631
 
630
- it "sets the foreign key of the relation" do
632
+ it "sets the foreign key of the association" do
631
633
  expect(rating.ratable_id).to eq(movie.id)
632
634
  end
633
635
 
634
- it "sets the base on the inverse relation" do
636
+ it "sets the base on the inverse association" do
635
637
  expect(rating.ratable).to eq(movie)
636
638
  end
637
639
 
@@ -647,11 +649,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
647
649
  context "when the parent is persisted" do
648
650
 
649
651
  let(:posts) do
650
- [ Post.create(title: "1"), Post.create(title: "2") ]
652
+ [ Post.create!(title: "1"), Post.create!(title: "2") ]
651
653
  end
652
654
 
653
655
  let(:person) do
654
- Person.create(posts: posts)
656
+ Person.create!(posts: posts)
655
657
  end
656
658
 
657
659
  context "when the parent has multiple children" do
@@ -673,7 +675,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
673
675
 
674
676
  describe "#= nil" do
675
677
 
676
- context "when the relation is not polymorphic" do
678
+ context "when the association is not polymorphic" do
677
679
 
678
680
  context "when the parent is a new record" do
679
681
 
@@ -690,11 +692,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
690
692
  person.posts = nil
691
693
  end
692
694
 
693
- it "sets the relation to an empty array" do
695
+ it "sets the association to an empty array" do
694
696
  expect(person.posts).to be_empty
695
697
  end
696
698
 
697
- it "removed the inverse relation" do
699
+ it "removed the inverse association" do
698
700
  expect(post.person).to be_nil
699
701
  end
700
702
 
@@ -706,7 +708,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
706
708
  context "when the parent is not a new record" do
707
709
 
708
710
  let(:person) do
709
- Person.create
711
+ Person.create!
710
712
  end
711
713
 
712
714
  context "when dependent is destructive" do
@@ -720,11 +722,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
720
722
  person.posts = nil
721
723
  end
722
724
 
723
- it "sets the relation to empty" do
725
+ it "sets the association to empty" do
724
726
  expect(person.posts).to be_empty
725
727
  end
726
728
 
727
- it "removed the inverse relation" do
729
+ it "removed the inverse association" do
728
730
  expect(post.person).to be_nil
729
731
  end
730
732
 
@@ -748,11 +750,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
748
750
  person.drugs = nil
749
751
  end
750
752
 
751
- it "sets the relation to empty" do
753
+ it "sets the association to empty" do
752
754
  expect(person.drugs).to be_empty
753
755
  end
754
756
 
755
- it "removed the inverse relation" do
757
+ it "removed the inverse association" do
756
758
  expect(drug.person).to be_nil
757
759
  end
758
760
 
@@ -760,14 +762,14 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
760
762
  expect(drug.person_id).to be_nil
761
763
  end
762
764
 
763
- it "nullifies the relation" do
765
+ it "nullifies the association" do
764
766
  expect(drug).to_not be_destroyed
765
767
  end
766
768
  end
767
769
  end
768
770
  end
769
771
 
770
- context "when the relation is polymorphic" do
772
+ context "when the association is polymorphic" do
771
773
 
772
774
  context "when the parent is a new record" do
773
775
 
@@ -784,11 +786,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
784
786
  movie.ratings = nil
785
787
  end
786
788
 
787
- it "sets the relation to an empty array" do
789
+ it "sets the association to an empty array" do
788
790
  expect(movie.ratings).to be_empty
789
791
  end
790
792
 
791
- it "removed the inverse relation" do
793
+ it "removed the inverse association" do
792
794
  expect(rating.ratable).to be_nil
793
795
  end
794
796
 
@@ -800,7 +802,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
800
802
  context "when the parent is not a new record" do
801
803
 
802
804
  let(:movie) do
803
- Movie.create
805
+ Movie.create!
804
806
  end
805
807
 
806
808
  let(:rating) do
@@ -812,11 +814,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
812
814
  movie.ratings = nil
813
815
  end
814
816
 
815
- it "sets the relation to empty" do
817
+ it "sets the association to empty" do
816
818
  expect(movie.ratings).to be_empty
817
819
  end
818
820
 
819
- it "removed the inverse relation" do
821
+ it "removed the inverse association" do
820
822
  expect(rating.ratable).to be_nil
821
823
  end
822
824
 
@@ -841,11 +843,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
841
843
  end
842
844
 
843
845
  let(:post_one) do
844
- Post.create
846
+ Post.create!
845
847
  end
846
848
 
847
849
  let(:post_two) do
848
- Post.create
850
+ Post.create!
849
851
  end
850
852
 
851
853
  before do
@@ -860,14 +862,14 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
860
862
  describe "#\{name}_ids" do
861
863
 
862
864
  let(:posts) do
863
- [ Post.create, Post.create ]
865
+ [ Post.create!, Post.create! ]
864
866
  end
865
867
 
866
868
  let(:person) do
867
- Person.create(posts: posts)
869
+ Person.create!(posts: posts)
868
870
  end
869
871
 
870
- it "returns ids of documents that are in the relation" do
872
+ it "returns ids of documents that are in the association" do
871
873
  expect(person.post_ids).to eq(posts.map(&:id))
872
874
  end
873
875
  end
@@ -876,7 +878,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
876
878
 
877
879
  describe "##{method}" do
878
880
 
879
- context "when the relation is not polymorphic" do
881
+ context "when the association is not polymorphic" do
880
882
 
881
883
  context "when the parent is a new record" do
882
884
 
@@ -888,11 +890,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
888
890
  person.posts.send(method, title: "$$$")
889
891
  end
890
892
 
891
- it "sets the foreign key on the relation" do
893
+ it "sets the foreign key on the association" do
892
894
  expect(post.person_id).to eq(person.id)
893
895
  end
894
896
 
895
- it "sets the base on the inverse relation" do
897
+ it "sets the base on the inverse association" do
896
898
  expect(post.person).to eq(person)
897
899
  end
898
900
 
@@ -920,18 +922,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
920
922
  context "when the parent is not a new record" do
921
923
 
922
924
  let(:person) do
923
- Person.create
925
+ Person.create!
924
926
  end
925
927
 
926
928
  let!(:post) do
927
929
  person.posts.send(method, text: "Testing")
928
930
  end
929
931
 
930
- it "sets the foreign key on the relation" do
932
+ it "sets the foreign key on the association" do
931
933
  expect(post.person_id).to eq(person.id)
932
934
  end
933
935
 
934
- it "sets the base on the inverse relation" do
936
+ it "sets the base on the inverse association" do
935
937
  expect(post.person).to eq(person)
936
938
  end
937
939
 
@@ -949,12 +951,12 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
949
951
  end
950
952
  end
951
953
 
952
- context "when the relation is polymorphic" do
954
+ context "when the association is polymorphic" do
953
955
 
954
956
  context "when the parent is a subclass" do
955
957
 
956
958
  let(:video_game) do
957
- VideoGame.create
959
+ VideoGame.create!
958
960
  end
959
961
 
960
962
  let(:rating) do
@@ -980,11 +982,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
980
982
  movie.ratings.send(method, value: 3)
981
983
  end
982
984
 
983
- it "sets the foreign key on the relation" do
985
+ it "sets the foreign key on the association" do
984
986
  expect(rating.ratable_id).to eq(movie.id)
985
987
  end
986
988
 
987
- it "sets the base on the inverse relation" do
989
+ it "sets the base on the inverse association" do
988
990
  expect(rating.ratable).to eq(movie)
989
991
  end
990
992
 
@@ -1008,18 +1010,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1008
1010
  context "when the parent is not a new record" do
1009
1011
 
1010
1012
  let(:movie) do
1011
- Movie.create
1013
+ Movie.create!
1012
1014
  end
1013
1015
 
1014
1016
  let!(:rating) do
1015
1017
  movie.ratings.send(method, value: 4)
1016
1018
  end
1017
1019
 
1018
- it "sets the foreign key on the relation" do
1020
+ it "sets the foreign key on the association" do
1019
1021
  expect(rating.ratable_id).to eq(movie.id)
1020
1022
  end
1021
1023
 
1022
- it "sets the base on the inverse relation" do
1024
+ it "sets the base on the inverse association" do
1023
1025
  expect(rating.ratable).to eq(movie)
1024
1026
  end
1025
1027
 
@@ -1041,25 +1043,25 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1041
1043
 
1042
1044
  describe "#clear" do
1043
1045
 
1044
- context "when the relation is not polymorphic" do
1046
+ context "when the association is not polymorphic" do
1045
1047
 
1046
1048
  context "when the parent has been persisted" do
1047
1049
 
1048
1050
  let!(:person) do
1049
- Person.create
1051
+ Person.create!
1050
1052
  end
1051
1053
 
1052
1054
  context "when the children are persisted" do
1053
1055
 
1054
1056
  let!(:post) do
1055
- person.posts.create(title: "Testing")
1057
+ person.posts.create!(title: "Testing")
1056
1058
  end
1057
1059
 
1058
- let!(:relation) do
1060
+ let!(:association) do
1059
1061
  person.posts.clear
1060
1062
  end
1061
1063
 
1062
- it "clears out the relation" do
1064
+ it "clears out the association" do
1063
1065
  expect(person.posts).to be_empty
1064
1066
  end
1065
1067
 
@@ -1071,8 +1073,8 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1071
1073
  expect(person.reload.posts).to be_empty
1072
1074
  end
1073
1075
 
1074
- it "returns the relation" do
1075
- expect(relation).to be_empty
1076
+ it "returns the association" do
1077
+ expect(association).to be_empty
1076
1078
  end
1077
1079
  end
1078
1080
 
@@ -1082,11 +1084,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1082
1084
  person.posts.build(title: "Testing")
1083
1085
  end
1084
1086
 
1085
- let!(:relation) do
1087
+ let!(:association) do
1086
1088
  person.posts.clear
1087
1089
  end
1088
1090
 
1089
- it "clears out the relation" do
1091
+ it "clears out the association" do
1090
1092
  expect(person.posts).to be_empty
1091
1093
  end
1092
1094
  end
@@ -1102,35 +1104,35 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1102
1104
  person.posts.build(title: "Testing")
1103
1105
  end
1104
1106
 
1105
- let!(:relation) do
1107
+ let!(:association) do
1106
1108
  person.posts.clear
1107
1109
  end
1108
1110
 
1109
- it "clears out the relation" do
1111
+ it "clears out the association" do
1110
1112
  expect(person.posts).to be_empty
1111
1113
  end
1112
1114
  end
1113
1115
  end
1114
1116
 
1115
- context "when the relation is polymorphic" do
1117
+ context "when the association is polymorphic" do
1116
1118
 
1117
1119
  context "when the parent has been persisted" do
1118
1120
 
1119
1121
  let!(:movie) do
1120
- Movie.create
1122
+ Movie.create!
1121
1123
  end
1122
1124
 
1123
1125
  context "when the children are persisted" do
1124
1126
 
1125
1127
  let!(:rating) do
1126
- movie.ratings.create(value: 1)
1128
+ movie.ratings.create!(value: 1)
1127
1129
  end
1128
1130
 
1129
- let!(:relation) do
1131
+ let!(:association) do
1130
1132
  movie.ratings.clear
1131
1133
  end
1132
1134
 
1133
- it "clears out the relation" do
1135
+ it "clears out the association" do
1134
1136
  expect(movie.ratings).to be_empty
1135
1137
  end
1136
1138
 
@@ -1142,8 +1144,8 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1142
1144
  expect(movie.reload.ratings).to be_empty
1143
1145
  end
1144
1146
 
1145
- it "returns the relation" do
1146
- expect(relation).to be_empty
1147
+ it "returns the association" do
1148
+ expect(association).to be_empty
1147
1149
  end
1148
1150
  end
1149
1151
 
@@ -1153,11 +1155,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1153
1155
  movie.ratings.build(value: 3)
1154
1156
  end
1155
1157
 
1156
- let!(:relation) do
1158
+ let!(:association) do
1157
1159
  movie.ratings.clear
1158
1160
  end
1159
1161
 
1160
- it "clears out the relation" do
1162
+ it "clears out the association" do
1161
1163
  expect(movie.ratings).to be_empty
1162
1164
  end
1163
1165
  end
@@ -1173,11 +1175,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1173
1175
  movie.ratings.build(value: 2)
1174
1176
  end
1175
1177
 
1176
- let!(:relation) do
1178
+ let!(:association) do
1177
1179
  movie.ratings.clear
1178
1180
  end
1179
1181
 
1180
- it "clears out the relation" do
1182
+ it "clears out the association" do
1181
1183
  expect(movie.ratings).to be_empty
1182
1184
  end
1183
1185
  end
@@ -1186,7 +1188,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1186
1188
 
1187
1189
  describe "#concat" do
1188
1190
 
1189
- context "when the relations are not polymorphic" do
1191
+ context "when the associations are not polymorphic" do
1190
1192
 
1191
1193
  context "when the parent is a new record" do
1192
1194
 
@@ -1202,15 +1204,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1202
1204
  person.posts.concat([ post ])
1203
1205
  end
1204
1206
 
1205
- it "sets the foreign key on the relation" do
1207
+ it "sets the foreign key on the association" do
1206
1208
  expect(post.person_id).to eq(person.id)
1207
1209
  end
1208
1210
 
1209
- it "sets the base on the inverse relation" do
1211
+ it "sets the base on the inverse association" do
1210
1212
  expect(post.person).to eq(person)
1211
1213
  end
1212
1214
 
1213
- it "sets the same instance on the inverse relation" do
1215
+ it "sets the same instance on the inverse association" do
1214
1216
  expect(post.person).to eql(person)
1215
1217
  end
1216
1218
 
@@ -1226,20 +1228,20 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1226
1228
  context "when appending in a parent create block" do
1227
1229
 
1228
1230
  let!(:post) do
1229
- Post.create(title: "testing")
1231
+ Post.create!(title: "testing")
1230
1232
  end
1231
1233
 
1232
1234
  let!(:person) do
1233
- Person.create do |doc|
1235
+ Person.create! do |doc|
1234
1236
  doc.posts.concat([ post ])
1235
1237
  end
1236
1238
  end
1237
1239
 
1238
- it "adds the documents to the relation" do
1240
+ it "adds the documents to the association" do
1239
1241
  expect(person.posts).to eq([ post ])
1240
1242
  end
1241
1243
 
1242
- it "sets the foreign key on the inverse relation" do
1244
+ it "sets the foreign key on the inverse association" do
1243
1245
  expect(post.person_id).to eq(person.id)
1244
1246
  end
1245
1247
 
@@ -1259,7 +1261,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1259
1261
  context "when the parent is not a new record" do
1260
1262
 
1261
1263
  let(:person) do
1262
- Person.create
1264
+ Person.create!
1263
1265
  end
1264
1266
 
1265
1267
  let(:post) do
@@ -1274,15 +1276,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1274
1276
  person.posts.concat([ post, post_three ])
1275
1277
  end
1276
1278
 
1277
- it "sets the foreign key on the relation" do
1279
+ it "sets the foreign key on the association" do
1278
1280
  expect(post.person_id).to eq(person.id)
1279
1281
  end
1280
1282
 
1281
- it "sets the base on the inverse relation" do
1283
+ it "sets the base on the inverse association" do
1282
1284
  expect(post.person).to eq(person)
1283
1285
  end
1284
1286
 
1285
- it "sets the same instance on the inverse relation" do
1287
+ it "sets the same instance on the inverse association" do
1286
1288
  expect(post.person).to eql(person)
1287
1289
  end
1288
1290
 
@@ -1294,7 +1296,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1294
1296
  expect(person.posts.count).to eq(2)
1295
1297
  end
1296
1298
 
1297
- context "when documents already exist on the relation" do
1299
+ context "when documents already exist on the association" do
1298
1300
 
1299
1301
  let(:post_two) do
1300
1302
  Post.new(title: "Test")
@@ -1304,15 +1306,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1304
1306
  person.posts.concat([ post_two ])
1305
1307
  end
1306
1308
 
1307
- it "sets the foreign key on the relation" do
1309
+ it "sets the foreign key on the association" do
1308
1310
  expect(post_two.person_id).to eq(person.id)
1309
1311
  end
1310
1312
 
1311
- it "sets the base on the inverse relation" do
1313
+ it "sets the base on the inverse association" do
1312
1314
  expect(post_two.person).to eq(person)
1313
1315
  end
1314
1316
 
1315
- it "sets the same instance on the inverse relation" do
1317
+ it "sets the same instance on the inverse association" do
1316
1318
  expect(post_two.person).to eql(person)
1317
1319
  end
1318
1320
 
@@ -1336,7 +1338,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1336
1338
  end
1337
1339
  end
1338
1340
 
1339
- context "when the relations are polymorphic" do
1341
+ context "when the associations are polymorphic" do
1340
1342
 
1341
1343
  context "when the parent is a new record" do
1342
1344
 
@@ -1352,11 +1354,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1352
1354
  movie.ratings.concat([ rating ])
1353
1355
  end
1354
1356
 
1355
- it "sets the foreign key on the relation" do
1357
+ it "sets the foreign key on the association" do
1356
1358
  expect(rating.ratable_id).to eq(movie.id)
1357
1359
  end
1358
1360
 
1359
- it "sets the base on the inverse relation" do
1361
+ it "sets the base on the inverse association" do
1360
1362
  expect(rating.ratable).to eq(movie)
1361
1363
  end
1362
1364
 
@@ -1372,7 +1374,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1372
1374
  context "when the parent is not a new record" do
1373
1375
 
1374
1376
  let(:movie) do
1375
- Movie.create
1377
+ Movie.create!
1376
1378
  end
1377
1379
 
1378
1380
  let(:rating) do
@@ -1383,11 +1385,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1383
1385
  movie.ratings.concat([ rating ])
1384
1386
  end
1385
1387
 
1386
- it "sets the foreign key on the relation" do
1388
+ it "sets the foreign key on the association" do
1387
1389
  expect(rating.ratable_id).to eq(movie.id)
1388
1390
  end
1389
1391
 
1390
- it "sets the base on the inverse relation" do
1392
+ it "sets the base on the inverse association" do
1391
1393
  expect(rating.ratable).to eq(movie)
1392
1394
  end
1393
1395
 
@@ -1404,18 +1406,23 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1404
1406
  describe "#count" do
1405
1407
 
1406
1408
  let(:movie) do
1407
- Movie.create
1409
+ Movie.create!
1408
1410
  end
1409
1411
 
1410
1412
  context "when documents have been persisted" do
1411
1413
 
1412
1414
  let!(:rating) do
1413
- movie.ratings.create(value: 1)
1415
+ movie.ratings.create!(value: 1)
1414
1416
  end
1415
1417
 
1416
1418
  it "returns the number of persisted documents" do
1417
1419
  expect(movie.ratings.count).to eq(1)
1418
1420
  end
1421
+
1422
+ it "block form includes persisted results" do
1423
+ expect(movie.ratings.count {|r| r.value >= 1 }).to eq(1)
1424
+ expect(movie.ratings.count {|r| r.value >= 2 }).to eq(0)
1425
+ end
1419
1426
  end
1420
1427
 
1421
1428
  context "when documents have not been persisted" do
@@ -1427,14 +1434,42 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1427
1434
  it "returns 0" do
1428
1435
  expect(movie.ratings.count).to eq(0)
1429
1436
  end
1437
+
1438
+ it "block form does not include unpersisted results" do
1439
+ expect(movie.ratings.count {|r| r.value == 1 }).to eq(0)
1440
+ end
1441
+ end
1442
+
1443
+ context "when mixed persisted and unpersisted documents" do
1444
+
1445
+ before do
1446
+ movie.ratings.create(value: 1)
1447
+ movie.ratings.build(value: 2)
1448
+ end
1449
+
1450
+ it "returns 1" do
1451
+ expect(movie.ratings.count).to eq(1)
1452
+ end
1453
+
1454
+ it "block form includes only persisted results" do
1455
+ expect(movie.ratings.count {|r| r.value >= 1 }).to eq(1)
1456
+ expect(movie.ratings.count {|r| r.value == 2 }).to eq(0)
1457
+ end
1458
+ end
1459
+
1460
+ context "when no document is added" do
1461
+
1462
+ it "returns false" do
1463
+ expect(movie.ratings.any?).to be false
1464
+ end
1430
1465
  end
1431
1466
 
1432
1467
  context "when new documents exist in the database" do
1433
1468
 
1434
- context "when the documents are part of the relation" do
1469
+ context "when the documents are part of the association" do
1435
1470
 
1436
1471
  before do
1437
- Rating.create(ratable: movie)
1472
+ Rating.create!(ratable: movie)
1438
1473
  end
1439
1474
 
1440
1475
  it "returns the count from the db" do
@@ -1442,10 +1477,10 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1442
1477
  end
1443
1478
  end
1444
1479
 
1445
- context "when the documents are not part of the relation" do
1480
+ context "when the documents are not part of the association" do
1446
1481
 
1447
1482
  before do
1448
- Rating.create
1483
+ Rating.create!
1449
1484
  end
1450
1485
 
1451
1486
  it "returns the count from the db" do
@@ -1455,16 +1490,198 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1455
1490
  end
1456
1491
  end
1457
1492
 
1493
+ describe "#any?" do
1494
+
1495
+ shared_examples 'does not query database when association is loaded' do
1496
+
1497
+ let(:fresh_movie) { Movie.find(movie.id) }
1498
+
1499
+ context 'when association is not loaded' do
1500
+ it 'queries database on each call' do
1501
+ fresh_movie
1502
+
1503
+ expect_query(1) do
1504
+ fresh_movie.ratings.any?.should be expected_result
1505
+ end
1506
+
1507
+ expect_query(1) do
1508
+ fresh_movie.ratings.any?.should be expected_result
1509
+ end
1510
+ end
1511
+
1512
+ context 'when using a block' do
1513
+ it 'queries database on first call only' do
1514
+ fresh_movie
1515
+
1516
+ expect_query(1) do
1517
+ fresh_movie.ratings.any? { false }.should be false
1518
+ end
1519
+
1520
+ expect_no_queries do
1521
+ fresh_movie.ratings.any? { false }.should be false
1522
+ end
1523
+ end
1524
+ end
1525
+ end
1526
+
1527
+ context 'when association is loaded' do
1528
+ it 'does not query database' do
1529
+ fresh_movie
1530
+
1531
+ expect_query(1) do
1532
+ fresh_movie.ratings.any?.should be expected_result
1533
+ end
1534
+
1535
+ fresh_movie.ratings.to_a
1536
+
1537
+ expect_no_queries do
1538
+ fresh_movie.ratings.any?.should be expected_result
1539
+ end
1540
+ end
1541
+ end
1542
+ end
1543
+
1544
+ let(:movie) do
1545
+ Movie.create!
1546
+ end
1547
+
1548
+ context "when nothing exists on the association" do
1549
+
1550
+ context "when no document is added" do
1551
+
1552
+ let!(:movie) do
1553
+ Movie.create!
1554
+ end
1555
+
1556
+ it "returns false" do
1557
+ expect(movie.ratings.any?).to be false
1558
+ end
1559
+
1560
+ let(:expected_result) { false }
1561
+ include_examples 'does not query database when association is loaded'
1562
+ end
1563
+
1564
+ context "when the document is destroyed" do
1565
+
1566
+ before do
1567
+ Rating.create!
1568
+ end
1569
+
1570
+ let!(:movie) do
1571
+ Movie.create!
1572
+ end
1573
+
1574
+ it "returns false" do
1575
+ movie.destroy
1576
+ expect(movie.ratings.any?).to be false
1577
+ end
1578
+ end
1579
+ end
1580
+
1581
+ context "when appending to a association and _loaded/_unloaded are empty" do
1582
+
1583
+ let!(:movie) do
1584
+ Movie.create!
1585
+ end
1586
+
1587
+ before do
1588
+ movie.ratings << Rating.new
1589
+ end
1590
+
1591
+ it "returns true" do
1592
+ expect(movie.ratings.any?).to be true
1593
+ end
1594
+
1595
+ context 'when association is not loaded' do
1596
+ before do
1597
+ movie.ratings._loaded?.should be false
1598
+ end
1599
+
1600
+ it 'does not query the database because it knows about the added models' do
1601
+ expect_no_queries do
1602
+ movie.ratings.any?.should be true
1603
+ end
1604
+ end
1605
+ end
1606
+
1607
+ context 'when association is loaded' do
1608
+ it 'does not query database' do
1609
+ expect_no_queries do
1610
+ movie.ratings.any?.should be true
1611
+ end
1612
+
1613
+ movie.ratings.to_a
1614
+
1615
+ expect_no_queries do
1616
+ movie.ratings.any?.should be true
1617
+ end
1618
+ end
1619
+ end
1620
+ end
1621
+
1622
+ context "when appending to a association in a transaction" do
1623
+ require_transaction_support
1624
+
1625
+ let!(:movie) do
1626
+ Movie.create!
1627
+ end
1628
+
1629
+ it "returns true" do
1630
+ movie.with_session do |session|
1631
+ session.with_transaction do
1632
+ expect{ movie.ratings << Rating.new }.to_not raise_error
1633
+ expect(movie.ratings.any?).to be true
1634
+ end
1635
+ end
1636
+ end
1637
+ end
1638
+
1639
+ context "when documents have been persisted" do
1640
+
1641
+ let!(:rating) do
1642
+ movie.ratings.create!(value: 1)
1643
+ end
1644
+
1645
+ it "returns true" do
1646
+ expect(movie.ratings.any?).to be true
1647
+ end
1648
+
1649
+ let(:expected_result) { true }
1650
+ include_examples 'does not query database when association is loaded'
1651
+ end
1652
+
1653
+ context "when documents have not been persisted" do
1654
+
1655
+ let!(:rating) do
1656
+ movie.ratings.build(value: 1)
1657
+ end
1658
+
1659
+ it "returns false" do
1660
+ expect(movie.ratings.any?).to be true
1661
+ end
1662
+ end
1663
+
1664
+ context "when new documents exist in the database" do
1665
+ before do
1666
+ Rating.create!(ratable: movie)
1667
+ end
1668
+
1669
+ it "returns true" do
1670
+ expect(movie.ratings.any?).to be true
1671
+ end
1672
+ end
1673
+ end
1674
+
1458
1675
  describe "#create" do
1459
1676
 
1460
1677
  context "when providing multiple attributes" do
1461
1678
 
1462
1679
  let(:person) do
1463
- Person.create
1680
+ Person.create!
1464
1681
  end
1465
1682
 
1466
1683
  let!(:posts) do
1467
- person.posts.create([{ text: "Test1" }, { text: "Test2" }])
1684
+ person.posts.create!([{ text: "Test1" }, { text: "Test2" }])
1468
1685
  end
1469
1686
 
1470
1687
  it "creates multiple documents" do
@@ -1484,7 +1701,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1484
1701
  end
1485
1702
  end
1486
1703
 
1487
- context "when the relation is not polymorphic" do
1704
+ context "when the association is not polymorphic" do
1488
1705
 
1489
1706
  context "when the parent is a new record" do
1490
1707
 
@@ -1493,7 +1710,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1493
1710
  end
1494
1711
 
1495
1712
  let(:post) do
1496
- person.posts.create(text: "Testing")
1713
+ person.posts.create!(text: "Testing")
1497
1714
  end
1498
1715
 
1499
1716
  it "raises an unsaved document error" do
@@ -1506,11 +1723,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1506
1723
  context "when the operation is successful" do
1507
1724
 
1508
1725
  let(:person) do
1509
- Person.create
1726
+ Person.create!
1510
1727
  end
1511
1728
 
1512
1729
  let!(:post) do
1513
- person.posts.create(text: "Testing")
1730
+ person.posts.create!(text: "Testing")
1514
1731
  end
1515
1732
 
1516
1733
  it "creates the document" do
@@ -1521,16 +1738,16 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1521
1738
  context "when the operation fails" do
1522
1739
 
1523
1740
  let(:person) do
1524
- Person.create
1741
+ Person.create!
1525
1742
  end
1526
1743
 
1527
1744
  let!(:existing) do
1528
- Post.create
1745
+ Post.create!
1529
1746
  end
1530
1747
 
1531
1748
  it "raises an error" do
1532
1749
  expect {
1533
- person.posts.create do |doc|
1750
+ person.posts.create! do |doc|
1534
1751
  doc._id = existing.id
1535
1752
  end
1536
1753
  }.to raise_error(Mongo::Error::OperationFailure)
@@ -1541,20 +1758,20 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1541
1758
  context "when the parent is not a new record" do
1542
1759
 
1543
1760
  let(:person) do
1544
- Person.create
1761
+ Person.create!
1545
1762
  end
1546
1763
 
1547
1764
  let!(:post) do
1548
- person.posts.create(text: "Testing") do |post|
1765
+ person.posts.create!(text: "Testing") do |post|
1549
1766
  post.content = "The Content"
1550
1767
  end
1551
1768
  end
1552
1769
 
1553
- it "sets the foreign key on the relation" do
1770
+ it "sets the foreign key on the association" do
1554
1771
  expect(post.person_id).to eq(person.id)
1555
1772
  end
1556
1773
 
1557
- it "sets the base on the inverse relation" do
1774
+ it "sets the base on the inverse association" do
1558
1775
  expect(post.person).to eq(person)
1559
1776
  end
1560
1777
 
@@ -1578,11 +1795,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1578
1795
  context "when passing a new object" do
1579
1796
 
1580
1797
  let!(:odd) do
1581
- Odd.create(name: 'one')
1798
+ Odd.create!(name: 'one')
1582
1799
  end
1583
1800
 
1584
1801
  let!(:even) do
1585
- odd.evens.create(name: 'two', odds: [Odd.new(name: 'three')])
1802
+ odd.evens.create!(name: 'two', odds: [Odd.new(name: 'three')])
1586
1803
  end
1587
1804
 
1588
1805
  it "only push one even to the list" do
@@ -1603,7 +1820,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1603
1820
  end
1604
1821
  end
1605
1822
 
1606
- context "when the relation is polymorphic" do
1823
+ context "when the association is polymorphic" do
1607
1824
 
1608
1825
  context "when the parent is a new record" do
1609
1826
 
@@ -1612,7 +1829,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1612
1829
  end
1613
1830
 
1614
1831
  let(:rating) do
1615
- movie.ratings.create(value: 1)
1832
+ movie.ratings.create!(value: 1)
1616
1833
  end
1617
1834
 
1618
1835
  it "raises an unsaved document error" do
@@ -1623,18 +1840,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1623
1840
  context "when the parent is not a new record" do
1624
1841
 
1625
1842
  let(:movie) do
1626
- Movie.create
1843
+ Movie.create!
1627
1844
  end
1628
1845
 
1629
1846
  let!(:rating) do
1630
- movie.ratings.create(value: 3)
1847
+ movie.ratings.create!(value: 3)
1631
1848
  end
1632
1849
 
1633
- it "sets the foreign key on the relation" do
1850
+ it "sets the foreign key on the association" do
1634
1851
  expect(rating.ratable_id).to eq(movie.id)
1635
1852
  end
1636
1853
 
1637
- it "sets the base on the inverse relation" do
1854
+ it "sets the base on the inverse association" do
1638
1855
  expect(rating.ratable).to eq(movie)
1639
1856
  end
1640
1857
 
@@ -1652,7 +1869,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1652
1869
  end
1653
1870
  end
1654
1871
 
1655
- context "when using a diferent primary_key" do
1872
+ context "when using a different primary_key" do
1656
1873
 
1657
1874
  let(:person) do
1658
1875
  Person.create!(username: 'arthurnn')
@@ -1673,7 +1890,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1673
1890
  context "when providing multiple attributes" do
1674
1891
 
1675
1892
  let(:person) do
1676
- Person.create
1893
+ Person.create!
1677
1894
  end
1678
1895
 
1679
1896
  let!(:posts) do
@@ -1697,7 +1914,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1697
1914
  end
1698
1915
  end
1699
1916
 
1700
- context "when the relation is not polymorphic" do
1917
+ context "when the association is not polymorphic" do
1701
1918
 
1702
1919
  context "when the parent is a new record" do
1703
1920
 
@@ -1717,18 +1934,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1717
1934
  context "when the parent is not a new record" do
1718
1935
 
1719
1936
  let(:person) do
1720
- Person.create
1937
+ Person.create!
1721
1938
  end
1722
1939
 
1723
1940
  let!(:post) do
1724
1941
  person.posts.create!(title: "Testing")
1725
1942
  end
1726
1943
 
1727
- it "sets the foreign key on the relation" do
1944
+ it "sets the foreign key on the association" do
1728
1945
  expect(post.person_id).to eq(person.id)
1729
1946
  end
1730
1947
 
1731
- it "sets the base on the inverse relation" do
1948
+ it "sets the base on the inverse association" do
1732
1949
  expect(post.person).to eq(person)
1733
1950
  end
1734
1951
 
@@ -1755,7 +1972,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1755
1972
  end
1756
1973
  end
1757
1974
 
1758
- context "when the relation is polymorphic" do
1975
+ context "when the association is polymorphic" do
1759
1976
 
1760
1977
  context "when the parent is a new record" do
1761
1978
 
@@ -1775,18 +1992,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1775
1992
  context "when the parent is not a new record" do
1776
1993
 
1777
1994
  let(:movie) do
1778
- Movie.create
1995
+ Movie.create!
1779
1996
  end
1780
1997
 
1781
1998
  let!(:rating) do
1782
1999
  movie.ratings.create!(value: 4)
1783
2000
  end
1784
2001
 
1785
- it "sets the foreign key on the relation" do
2002
+ it "sets the foreign key on the association" do
1786
2003
  expect(rating.ratable_id).to eq(movie.id)
1787
2004
  end
1788
2005
 
1789
- it "sets the base on the inverse relation" do
2006
+ it "sets the base on the inverse association" do
1790
2007
  expect(rating.ratable).to eq(movie)
1791
2008
  end
1792
2009
 
@@ -1820,7 +2037,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1820
2037
  Movie.new
1821
2038
  end
1822
2039
 
1823
- context "when the relation is polymorphic" do
2040
+ context "when the association is polymorphic" do
1824
2041
 
1825
2042
  let(:association) do
1826
2043
  Movie.relations["ratings"]
@@ -1840,7 +2057,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1840
2057
  end
1841
2058
  end
1842
2059
 
1843
- context "when the relation is not polymorphic" do
2060
+ context "when the association is not polymorphic" do
1844
2061
 
1845
2062
  let(:association) do
1846
2063
  Person.relations["posts"]
@@ -1863,7 +2080,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1863
2080
  describe "#delete" do
1864
2081
 
1865
2082
  let!(:person) do
1866
- Person.create(username: 'arthurnn')
2083
+ Person.create!(username: 'arthurnn')
1867
2084
  end
1868
2085
 
1869
2086
  context "when the document is found" do
@@ -1873,7 +2090,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1873
2090
  context "when we are assigning attributes" do
1874
2091
 
1875
2092
  let!(:drug) do
1876
- person.drugs.create
2093
+ person.drugs.create!
1877
2094
  end
1878
2095
 
1879
2096
  before do
@@ -1896,7 +2113,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1896
2113
  context "when the document is loaded" do
1897
2114
 
1898
2115
  let!(:drug) do
1899
- person.drugs.create
2116
+ person.drugs.create!
1900
2117
  end
1901
2118
 
1902
2119
  let!(:deleted) do
@@ -1911,7 +2128,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1911
2128
  expect(drug.person_id).to be_nil
1912
2129
  end
1913
2130
 
1914
- it "removes the document from the relation" do
2131
+ it "removes the document from the association" do
1915
2132
  expect(person.drugs).to_not include(drug)
1916
2133
  end
1917
2134
  end
@@ -1919,7 +2136,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1919
2136
  context "when the document is not loaded" do
1920
2137
 
1921
2138
  let!(:drug) do
1922
- Drug.create(person_id: person.username)
2139
+ Drug.create!(person_id: person.username)
1923
2140
  end
1924
2141
 
1925
2142
  let!(:deleted) do
@@ -1934,7 +2151,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1934
2151
  expect(drug.person_id).to be_nil
1935
2152
  end
1936
2153
 
1937
- it "removes the document from the relation" do
2154
+ it "removes the document from the association" do
1938
2155
  expect(person.drugs).to_not include(drug)
1939
2156
  end
1940
2157
  end
@@ -1945,7 +2162,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1945
2162
  context "when the document is loaded" do
1946
2163
 
1947
2164
  let!(:post) do
1948
- person.posts.create(title: "test")
2165
+ person.posts.create!(title: "test")
1949
2166
  end
1950
2167
 
1951
2168
  let!(:deleted) do
@@ -1960,7 +2177,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1960
2177
  expect(post).to be_destroyed
1961
2178
  end
1962
2179
 
1963
- it "removes the document from the relation" do
2180
+ it "removes the document from the association" do
1964
2181
  expect(person.posts).to_not include(post)
1965
2182
  end
1966
2183
  end
@@ -1968,7 +2185,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1968
2185
  context "when the document is not loaded" do
1969
2186
 
1970
2187
  let!(:post) do
1971
- Post.create(title: "foo", person_id: person.id)
2188
+ Post.create!(title: "foo", person_id: person.id)
1972
2189
  end
1973
2190
 
1974
2191
  let!(:deleted) do
@@ -1983,7 +2200,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1983
2200
  expect(post).to be_destroyed
1984
2201
  end
1985
2202
 
1986
- it "removes the document from the relation" do
2203
+ it "removes the document from the association" do
1987
2204
  expect(person.posts).to_not include(post)
1988
2205
  end
1989
2206
  end
@@ -1993,7 +2210,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
1993
2210
  context "when the document is not found" do
1994
2211
 
1995
2212
  let!(:post) do
1996
- Post.create(title: "foo")
2213
+ Post.create!(title: "foo")
1997
2214
  end
1998
2215
 
1999
2216
  let!(:deleted) do
@@ -2014,17 +2231,17 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2014
2231
 
2015
2232
  describe "##{method}" do
2016
2233
 
2017
- context "when the relation is not polymorphic" do
2234
+ context "when the association is not polymorphic" do
2018
2235
 
2019
2236
  context "when conditions are provided" do
2020
2237
 
2021
2238
  let(:person) do
2022
- Person.create(username: 'durran')
2239
+ Person.create!(username: 'durran')
2023
2240
  end
2024
2241
 
2025
2242
  before do
2026
- person.posts.create(title: "Testing")
2027
- person.posts.create(title: "Test")
2243
+ person.posts.create!(title: "Testing")
2244
+ person.posts.create!(title: "Test")
2028
2245
  end
2029
2246
 
2030
2247
  it "removes the correct posts" do
@@ -2046,12 +2263,12 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2046
2263
  context "when conditions are not provided" do
2047
2264
 
2048
2265
  let(:person) do
2049
- Person.create
2266
+ Person.create!
2050
2267
  end
2051
2268
 
2052
2269
  before do
2053
- person.posts.create(title: "Testing")
2054
- person.posts.create(title: "Test")
2270
+ person.posts.create!(title: "Testing")
2271
+ person.posts.create!(title: "Test")
2055
2272
  end
2056
2273
 
2057
2274
  it "removes the correct posts" do
@@ -2070,17 +2287,17 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2070
2287
  end
2071
2288
  end
2072
2289
 
2073
- context "when the relation is polymorphic" do
2290
+ context "when the association is polymorphic" do
2074
2291
 
2075
2292
  context "when conditions are provided" do
2076
2293
 
2077
2294
  let(:movie) do
2078
- Movie.create(title: "Bladerunner")
2295
+ Movie.create!(title: "Bladerunner")
2079
2296
  end
2080
2297
 
2081
2298
  before do
2082
- movie.ratings.create(value: 1)
2083
- movie.ratings.create(value: 2)
2299
+ movie.ratings.create!(value: 1)
2300
+ movie.ratings.create!(value: 2)
2084
2301
  end
2085
2302
 
2086
2303
  it "removes the correct ratings" do
@@ -2101,12 +2318,12 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2101
2318
  context "when conditions are not provided" do
2102
2319
 
2103
2320
  let(:movie) do
2104
- Movie.create(title: "Bladerunner")
2321
+ Movie.create!(title: "Bladerunner")
2105
2322
  end
2106
2323
 
2107
2324
  before do
2108
- movie.ratings.create(value: 1)
2109
- movie.ratings.create(value: 2)
2325
+ movie.ratings.create!(value: 1)
2326
+ movie.ratings.create!(value: 2)
2110
2327
  end
2111
2328
 
2112
2329
  it "removes the correct ratings" do
@@ -2137,21 +2354,47 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2137
2354
  describe "#exists?" do
2138
2355
 
2139
2356
  let!(:person) do
2140
- Person.create
2357
+ Person.create!
2141
2358
  end
2142
2359
 
2143
2360
  context "when documents exist in the database" do
2144
2361
 
2145
2362
  before do
2146
- person.posts.create
2363
+ person.posts.create!
2147
2364
  end
2148
2365
 
2149
2366
  it "returns true" do
2150
2367
  expect(person.posts.exists?).to be true
2151
2368
  end
2369
+
2370
+ context 'when association is not loaded' do
2371
+ it 'queries database on each call' do
2372
+ expect_query(1) do
2373
+ person.posts.exists?.should be true
2374
+ end
2375
+
2376
+ expect_query(1) do
2377
+ person.posts.exists?.should be true
2378
+ end
2379
+ end
2380
+ end
2381
+
2382
+ context 'when association is loaded' do
2383
+ it 'queries database on each call' do
2384
+ expect_query(1) do
2385
+ person.posts.exists?.should be true
2386
+ end
2387
+
2388
+ person.posts.to_a
2389
+
2390
+ expect_query(1) do
2391
+ person.posts.exists?.should be true
2392
+ end
2393
+ end
2394
+ end
2152
2395
  end
2153
2396
 
2154
- context "when no documents exist in the database" do
2397
+ context "when documents exist in application but not in database" do
2155
2398
 
2156
2399
  before do
2157
2400
  person.posts.build
@@ -2160,6 +2403,65 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2160
2403
  it "returns false" do
2161
2404
  expect(person.posts.exists?).to be false
2162
2405
  end
2406
+
2407
+ context 'when association is not loaded' do
2408
+ it 'queries database on each call' do
2409
+ expect_query(1) do
2410
+ person.posts.exists?.should be false
2411
+ end
2412
+
2413
+ expect_query(1) do
2414
+ person.posts.exists?.should be false
2415
+ end
2416
+ end
2417
+ end
2418
+
2419
+ context 'when association is loaded' do
2420
+ it 'queries database on each call' do
2421
+ expect_query(1) do
2422
+ person.posts.exists?.should be false
2423
+ end
2424
+
2425
+ person.posts.to_a
2426
+
2427
+ expect_query(1) do
2428
+ person.posts.exists?.should be false
2429
+ end
2430
+ end
2431
+ end
2432
+ end
2433
+
2434
+ context "when no documents exist" do
2435
+
2436
+ it "returns false" do
2437
+ expect(person.posts.exists?).to be false
2438
+ end
2439
+
2440
+ context 'when association is not loaded' do
2441
+ it 'queries database on each call' do
2442
+ expect_query(1) do
2443
+ person.posts.exists?.should be false
2444
+ end
2445
+
2446
+ expect_query(1) do
2447
+ person.posts.exists?.should be false
2448
+ end
2449
+ end
2450
+ end
2451
+
2452
+ context 'when association is loaded' do
2453
+ it 'queries database on each call' do
2454
+ expect_query(1) do
2455
+ person.posts.exists?.should be false
2456
+ end
2457
+
2458
+ person.posts.to_a
2459
+
2460
+ expect_query(1) do
2461
+ person.posts.exists?.should be false
2462
+ end
2463
+ end
2464
+ end
2163
2465
  end
2164
2466
  end
2165
2467
 
@@ -2186,18 +2488,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2186
2488
  end
2187
2489
  end
2188
2490
 
2189
- context "when the relation is not polymorphic" do
2491
+ context "when the association is not polymorphic" do
2190
2492
 
2191
2493
  let(:person) do
2192
- Person.create
2494
+ Person.create!
2193
2495
  end
2194
2496
 
2195
2497
  let!(:post_one) do
2196
- person.posts.create(title: "Test")
2498
+ person.posts.create!(title: "Test")
2197
2499
  end
2198
2500
 
2199
2501
  let!(:post_two) do
2200
- person.posts.create(title: "OMG I has relations")
2502
+ person.posts.create!(title: "OMG I has associations")
2201
2503
  end
2202
2504
 
2203
2505
  context "when providing an id" do
@@ -2213,10 +2515,10 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2213
2515
  end
2214
2516
  end
2215
2517
 
2216
- context "when the id matches but is not scoped to the relation" do
2518
+ context "when the id matches but is not scoped to the association" do
2217
2519
 
2218
2520
  let(:post) do
2219
- Post.create(title: "Unscoped")
2521
+ Post.create!(title: "Unscoped")
2220
2522
  end
2221
2523
 
2222
2524
  it "raises an error" do
@@ -2312,18 +2614,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2312
2614
  end
2313
2615
  end
2314
2616
 
2315
- context "when the relation is polymorphic" do
2617
+ context "when the association is polymorphic" do
2316
2618
 
2317
2619
  let(:movie) do
2318
- Movie.create
2620
+ Movie.create!
2319
2621
  end
2320
2622
 
2321
2623
  let!(:rating_one) do
2322
- movie.ratings.create(value: 1)
2624
+ movie.ratings.create!(value: 1)
2323
2625
  end
2324
2626
 
2325
2627
  let!(:rating_two) do
2326
- movie.ratings.create(value: 5)
2628
+ movie.ratings.create!(value: 5)
2327
2629
  end
2328
2630
 
2329
2631
  context "when providing an id" do
@@ -2432,18 +2734,56 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2432
2734
  end
2433
2735
  end
2434
2736
  end
2737
+
2738
+ context "with block" do
2739
+ let!(:author) do
2740
+ Person.create!(title: 'Person')
2741
+ end
2742
+
2743
+ let!(:post_one) do
2744
+ author.posts.create!(title: 'post one')
2745
+ end
2746
+
2747
+ let!(:post_two) do
2748
+ author.posts.create!(title: 'post two')
2749
+ end
2750
+
2751
+ it "finds one" do
2752
+ expect(
2753
+ author.posts.find do |post|
2754
+ post.title == 'post one'
2755
+ end
2756
+ ).to be_a(Post)
2757
+ end
2758
+
2759
+ it "returns first match of multiple" do
2760
+ expect(
2761
+ author.posts.find do |post|
2762
+ ['post one', 'post two'].include?(post.title)
2763
+ end
2764
+ ).to eq(post_one)
2765
+ end
2766
+
2767
+ it "returns nil when not found" do
2768
+ expect(
2769
+ author.posts.find do |post|
2770
+ post.title == 'non exiting one'
2771
+ end
2772
+ ).to be_nil
2773
+ end
2774
+ end
2435
2775
  end
2436
2776
 
2437
2777
  describe "#find_or_create_by" do
2438
2778
 
2439
- context "when the relation is not polymorphic" do
2779
+ context "when the association is not polymorphic" do
2440
2780
 
2441
2781
  let(:person) do
2442
- Person.create
2782
+ Person.create!
2443
2783
  end
2444
2784
 
2445
2785
  let!(:post) do
2446
- person.posts.create(title: "Testing")
2786
+ person.posts.create!(title: "Testing")
2447
2787
  end
2448
2788
 
2449
2789
  context "when the document exists" do
@@ -2456,7 +2796,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2456
2796
  expect(found).to eq(post)
2457
2797
  end
2458
2798
 
2459
- it "keeps the document in the relation" do
2799
+ it "keeps the document in the association" do
2460
2800
  expect(found.person).to eq(person)
2461
2801
  end
2462
2802
  end
@@ -2483,7 +2823,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2483
2823
  expect(found.content).to eq("The Content")
2484
2824
  end
2485
2825
 
2486
- it "keeps the document in the relation" do
2826
+ it "keeps the document in the association" do
2487
2827
  expect(found.person).to eq(person)
2488
2828
  end
2489
2829
  end
@@ -2502,21 +2842,21 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2502
2842
  expect(found).to be_persisted
2503
2843
  end
2504
2844
 
2505
- it "keeps the document in the relation" do
2845
+ it "keeps the document in the association" do
2506
2846
  expect(found.person).to eq(person)
2507
2847
  end
2508
2848
  end
2509
2849
  end
2510
2850
  end
2511
2851
 
2512
- context "when the relation is polymorphic" do
2852
+ context "when the association is polymorphic" do
2513
2853
 
2514
2854
  let(:movie) do
2515
- Movie.create
2855
+ Movie.create!
2516
2856
  end
2517
2857
 
2518
2858
  let!(:rating) do
2519
- movie.ratings.create(value: 1)
2859
+ movie.ratings.create!(value: 1)
2520
2860
  end
2521
2861
 
2522
2862
  context "when the document exists" do
@@ -2529,7 +2869,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2529
2869
  expect(found).to eq(rating)
2530
2870
  end
2531
2871
 
2532
- it "keeps the document in the relation" do
2872
+ it "keeps the document in the association" do
2533
2873
  expect(found.ratable).to eq(movie)
2534
2874
  end
2535
2875
  end
@@ -2548,7 +2888,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2548
2888
  expect(found).to be_persisted
2549
2889
  end
2550
2890
 
2551
- it "keeps the document in the relation" do
2891
+ it "keeps the document in the association" do
2552
2892
  expect(found.ratable).to eq(movie)
2553
2893
  end
2554
2894
  end
@@ -2557,14 +2897,14 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2557
2897
 
2558
2898
  describe "#find_or_create_by!" do
2559
2899
 
2560
- context "when the relation is not polymorphic" do
2900
+ context "when the association is not polymorphic" do
2561
2901
 
2562
2902
  let(:person) do
2563
- Person.create
2903
+ Person.create!
2564
2904
  end
2565
2905
 
2566
2906
  let!(:post) do
2567
- person.posts.create(title: "Testing")
2907
+ person.posts.create!(title: "Testing")
2568
2908
  end
2569
2909
 
2570
2910
  context "when the document exists" do
@@ -2577,7 +2917,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2577
2917
  expect(found).to eq(post)
2578
2918
  end
2579
2919
 
2580
- it "keeps the document in the relation" do
2920
+ it "keeps the document in the association" do
2581
2921
  expect(found.person).to eq(person)
2582
2922
  end
2583
2923
  end
@@ -2604,7 +2944,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2604
2944
  expect(found.content).to eq("The Content")
2605
2945
  end
2606
2946
 
2607
- it "keeps the document in the relation" do
2947
+ it "keeps the document in the association" do
2608
2948
  expect(found.person).to eq(person)
2609
2949
  end
2610
2950
  end
@@ -2623,21 +2963,21 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2623
2963
  expect(found).to be_persisted
2624
2964
  end
2625
2965
 
2626
- it "keeps the document in the relation" do
2966
+ it "keeps the document in the association" do
2627
2967
  expect(found.person).to eq(person)
2628
2968
  end
2629
2969
  end
2630
2970
  end
2631
2971
  end
2632
2972
 
2633
- context "when the relation is polymorphic" do
2973
+ context "when the association is polymorphic" do
2634
2974
 
2635
2975
  let(:movie) do
2636
- Movie.create
2976
+ Movie.create!
2637
2977
  end
2638
2978
 
2639
2979
  let!(:rating) do
2640
- movie.ratings.create(value: 1)
2980
+ movie.ratings.create!(value: 1)
2641
2981
  end
2642
2982
 
2643
2983
  context "when the document exists" do
@@ -2650,7 +2990,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2650
2990
  expect(found).to eq(rating)
2651
2991
  end
2652
2992
 
2653
- it "keeps the document in the relation" do
2993
+ it "keeps the document in the association" do
2654
2994
  expect(found.ratable).to eq(movie)
2655
2995
  end
2656
2996
  end
@@ -2669,7 +3009,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2669
3009
  expect(found).to be_persisted
2670
3010
  end
2671
3011
 
2672
- it "keeps the document in the relation" do
3012
+ it "keeps the document in the association" do
2673
3013
  expect(found.ratable).to eq(movie)
2674
3014
  end
2675
3015
 
@@ -2687,14 +3027,14 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2687
3027
 
2688
3028
  describe "#find_or_initialize_by" do
2689
3029
 
2690
- context "when the relation is not polymorphic" do
3030
+ context "when the association is not polymorphic" do
2691
3031
 
2692
3032
  let(:person) do
2693
- Person.create
3033
+ Person.create!
2694
3034
  end
2695
3035
 
2696
3036
  let!(:post) do
2697
- person.posts.create(title: "Testing")
3037
+ person.posts.create!(title: "Testing")
2698
3038
  end
2699
3039
 
2700
3040
  context "when the document exists" do
@@ -2730,14 +3070,14 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2730
3070
  end
2731
3071
  end
2732
3072
 
2733
- context "when the relation is polymorphic" do
3073
+ context "when the association is polymorphic" do
2734
3074
 
2735
3075
  let(:movie) do
2736
- Movie.create
3076
+ Movie.create!
2737
3077
  end
2738
3078
 
2739
3079
  let!(:rating) do
2740
- movie.ratings.create(value: 1)
3080
+ movie.ratings.create!(value: 1)
2741
3081
  end
2742
3082
 
2743
3083
  context "when the document exists" do
@@ -2770,7 +3110,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2770
3110
 
2771
3111
  describe "#initialize" do
2772
3112
 
2773
- context "when an illegal mixed relation exists" do
3113
+ context "when an illegal mixed association exists" do
2774
3114
 
2775
3115
  let(:post) do
2776
3116
  Post.new
@@ -2783,7 +3123,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2783
3123
  end
2784
3124
  end
2785
3125
 
2786
- context "when a cyclic relation exists" do
3126
+ context "when a cyclic association exists" do
2787
3127
 
2788
3128
  let(:post) do
2789
3129
  Post.new
@@ -2827,15 +3167,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2827
3167
  describe "#max" do
2828
3168
 
2829
3169
  let(:person) do
2830
- Person.create
3170
+ Person.create!
2831
3171
  end
2832
3172
 
2833
3173
  let(:post_one) do
2834
- Post.create(rating: 5)
3174
+ Post.create!(rating: 5)
2835
3175
  end
2836
3176
 
2837
3177
  let(:post_two) do
2838
- Post.create(rating: 10)
3178
+ Post.create!(rating: 10)
2839
3179
  end
2840
3180
 
2841
3181
  before do
@@ -2856,15 +3196,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2856
3196
  describe "#max_by" do
2857
3197
 
2858
3198
  let(:person) do
2859
- Person.create
3199
+ Person.create!
2860
3200
  end
2861
3201
 
2862
3202
  let(:post_one) do
2863
- Post.create(rating: 5)
3203
+ Post.create!(rating: 5)
2864
3204
  end
2865
3205
 
2866
3206
  let(:post_two) do
2867
- Post.create(rating: 10)
3207
+ Post.create!(rating: 10)
2868
3208
  end
2869
3209
 
2870
3210
  before do
@@ -2883,15 +3223,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2883
3223
  describe "#method_missing" do
2884
3224
 
2885
3225
  let!(:person) do
2886
- Person.create
3226
+ Person.create!
2887
3227
  end
2888
3228
 
2889
3229
  let!(:post_one) do
2890
- person.posts.create(title: "First", content: "Posting")
3230
+ person.posts.create!(title: "First", content: "Posting")
2891
3231
  end
2892
3232
 
2893
3233
  let!(:post_two) do
2894
- person.posts.create(title: "Second", content: "Testing")
3234
+ person.posts.create!(title: "Second", content: "Testing")
2895
3235
  end
2896
3236
 
2897
3237
  context "when providing a single criteria" do
@@ -2904,7 +3244,8 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2904
3244
  expect(posts).to eq([ post_one ])
2905
3245
  end
2906
3246
 
2907
- context 'when providing a collation', if: collation_supported? do
3247
+ context 'when providing a collation' do
3248
+ min_server_version '3.4'
2908
3249
 
2909
3250
  let(:posts) do
2910
3251
  person.posts.where(title: "FIRST").collation(locale: 'en_US', strength: 2)
@@ -2957,15 +3298,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2957
3298
  describe "#min" do
2958
3299
 
2959
3300
  let(:person) do
2960
- Person.create
3301
+ Person.create!
2961
3302
  end
2962
3303
 
2963
3304
  let(:post_one) do
2964
- Post.create(rating: 5)
3305
+ Post.create!(rating: 5)
2965
3306
  end
2966
3307
 
2967
3308
  let(:post_two) do
2968
- Post.create(rating: 10)
3309
+ Post.create!(rating: 10)
2969
3310
  end
2970
3311
 
2971
3312
  before do
@@ -2986,15 +3327,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
2986
3327
  describe "#min_by" do
2987
3328
 
2988
3329
  let(:person) do
2989
- Person.create
3330
+ Person.create!
2990
3331
  end
2991
3332
 
2992
3333
  let(:post_one) do
2993
- Post.create(rating: 5)
3334
+ Post.create!(rating: 5)
2994
3335
  end
2995
3336
 
2996
3337
  let(:post_two) do
2997
- Post.create(rating: 10)
3338
+ Post.create!(rating: 10)
2998
3339
  end
2999
3340
 
3000
3341
  before do
@@ -3015,15 +3356,15 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3015
3356
  context "when the inverse has not been loaded" do
3016
3357
 
3017
3358
  let(:person) do
3018
- Person.create
3359
+ Person.create!
3019
3360
  end
3020
3361
 
3021
3362
  let!(:post_one) do
3022
- person.posts.create(title: "One")
3363
+ person.posts.create!(title: "One")
3023
3364
  end
3024
3365
 
3025
3366
  let!(:post_two) do
3026
- person.posts.create(title: "Two")
3367
+ person.posts.create!(title: "Two")
3027
3368
  end
3028
3369
 
3029
3370
  let(:from_db) do
@@ -3049,18 +3390,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3049
3390
  end
3050
3391
  end
3051
3392
 
3052
- context "when the relation is not polymorphic" do
3393
+ context "when the association is not polymorphic" do
3053
3394
 
3054
3395
  let(:person) do
3055
- Person.create
3396
+ Person.create!
3056
3397
  end
3057
3398
 
3058
3399
  let!(:post_one) do
3059
- person.posts.create(title: "One")
3400
+ person.posts.create!(title: "One")
3060
3401
  end
3061
3402
 
3062
3403
  let!(:post_two) do
3063
- person.posts.create(title: "Two")
3404
+ person.posts.create!(title: "Two")
3064
3405
  end
3065
3406
 
3066
3407
  before do
@@ -3083,30 +3424,30 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3083
3424
  expect(post_one.reload.person).to be_nil
3084
3425
  end
3085
3426
 
3086
- context "when adding a nullified document back to the relation" do
3427
+ context "when adding a nullified document back to the association" do
3087
3428
 
3088
3429
  before do
3089
3430
  person.posts.push(post_one)
3090
3431
  end
3091
3432
 
3092
- it "persists the relation" do
3433
+ it "persists the association" do
3093
3434
  expect(person.posts(true)).to eq([ post_one ])
3094
3435
  end
3095
3436
  end
3096
3437
  end
3097
3438
 
3098
- context "when the relation is polymorphic" do
3439
+ context "when the association is polymorphic" do
3099
3440
 
3100
3441
  let(:movie) do
3101
- Movie.create(title: "Oldboy")
3442
+ Movie.create!(title: "Oldboy")
3102
3443
  end
3103
3444
 
3104
3445
  let!(:rating_one) do
3105
- movie.ratings.create(value: 10)
3446
+ movie.ratings.create!(value: 10)
3106
3447
  end
3107
3448
 
3108
3449
  let!(:rating_two) do
3109
- movie.ratings.create(value: 9)
3450
+ movie.ratings.create!(value: 9)
3110
3451
  end
3111
3452
 
3112
3453
  before do
@@ -3178,7 +3519,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3178
3519
  person.posts.scoped
3179
3520
  end
3180
3521
 
3181
- it "returns the relation criteria" do
3522
+ it "returns the association criteria" do
3182
3523
  expect(scoped).to be_a(Mongoid::Criteria)
3183
3524
  end
3184
3525
 
@@ -3192,13 +3533,13 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3192
3533
  describe "##{method}" do
3193
3534
 
3194
3535
  let(:movie) do
3195
- Movie.create
3536
+ Movie.create!
3196
3537
  end
3197
3538
 
3198
3539
  context "when documents have been persisted" do
3199
3540
 
3200
3541
  let!(:rating) do
3201
- movie.ratings.create(value: 1)
3542
+ movie.ratings.create!(value: 1)
3202
3543
  end
3203
3544
 
3204
3545
  it "returns 1" do
@@ -3210,7 +3551,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3210
3551
 
3211
3552
  before do
3212
3553
  movie.ratings.build(value: 1)
3213
- movie.ratings.create(value: 2)
3554
+ movie.ratings.create!(value: 2)
3214
3555
  end
3215
3556
 
3216
3557
  it "returns the total number of documents" do
@@ -3222,18 +3563,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3222
3563
 
3223
3564
  describe "#unscoped" do
3224
3565
 
3225
- context "when the relation has no default scope" do
3566
+ context "when the association has no default scope" do
3226
3567
 
3227
3568
  let!(:person) do
3228
- Person.create
3569
+ Person.create!
3229
3570
  end
3230
3571
 
3231
3572
  let!(:post_one) do
3232
- person.posts.create(title: "first")
3573
+ person.posts.create!(title: "first")
3233
3574
  end
3234
3575
 
3235
3576
  let!(:post_two) do
3236
- Post.create(title: "second")
3577
+ Post.create!(title: "second")
3237
3578
  end
3238
3579
 
3239
3580
  let(:unscoped) do
@@ -3245,18 +3586,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3245
3586
  end
3246
3587
  end
3247
3588
 
3248
- context "when the relation has a default scope" do
3589
+ context "when the association has a default scope" do
3249
3590
 
3250
3591
  let!(:church) do
3251
- Church.create
3592
+ Church.create!
3252
3593
  end
3253
3594
 
3254
3595
  let!(:acolyte_one) do
3255
- church.acolytes.create(name: "first")
3596
+ church.acolytes.create!(name: "first")
3256
3597
  end
3257
3598
 
3258
3599
  let!(:acolyte_two) do
3259
- Acolyte.create(name: "second")
3600
+ Acolyte.create!(name: "second")
3260
3601
  end
3261
3602
 
3262
3603
  let(:unscoped) do
@@ -3276,19 +3617,19 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3276
3617
  context "when the association has an order defined" do
3277
3618
 
3278
3619
  let(:person) do
3279
- Person.create
3620
+ Person.create!
3280
3621
  end
3281
3622
 
3282
3623
  let(:post_one) do
3283
- OrderedPost.create(rating: 10, title: '1')
3624
+ OrderedPost.create!(rating: 10, title: '1')
3284
3625
  end
3285
3626
 
3286
3627
  let(:post_two) do
3287
- OrderedPost.create(rating: 20, title: '2')
3628
+ OrderedPost.create!(rating: 20, title: '2')
3288
3629
  end
3289
3630
 
3290
3631
  let(:post_three) do
3291
- OrderedPost.create(rating: 20, title: '3')
3632
+ OrderedPost.create!(rating: 20, title: '3')
3292
3633
  end
3293
3634
 
3294
3635
  before do
@@ -3302,32 +3643,32 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3302
3643
  )
3303
3644
  end
3304
3645
 
3305
- it "chaining order criterias" do
3646
+ it "chaining order criteria" do
3306
3647
  expect(person.ordered_posts.order_by(:title.desc).to_a).to eq(
3307
3648
  [post_three, post_two, post_one]
3308
3649
  )
3309
3650
  end
3310
3651
  end
3311
3652
 
3312
- context "when reloading the relation" do
3653
+ context "when reloading the association" do
3313
3654
 
3314
3655
  let!(:person) do
3315
- Person.create
3656
+ Person.create!
3316
3657
  end
3317
3658
 
3318
3659
  let!(:post_one) do
3319
- Post.create(title: "one")
3660
+ Post.create!(title: "one")
3320
3661
  end
3321
3662
 
3322
3663
  let!(:post_two) do
3323
- Post.create(title: "two")
3664
+ Post.create!(title: "two")
3324
3665
  end
3325
3666
 
3326
3667
  before do
3327
3668
  person.posts << post_one
3328
3669
  end
3329
3670
 
3330
- context "when the relation references the same documents" do
3671
+ context "when the association references the same documents" do
3331
3672
 
3332
3673
  before do
3333
3674
  Post.collection.find({ _id: post_one.id }).
@@ -3343,7 +3684,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3343
3684
  end
3344
3685
  end
3345
3686
 
3346
- context "when the relation references different documents" do
3687
+ context "when the association references different documents" do
3347
3688
 
3348
3689
  before do
3349
3690
  person.posts << post_two
@@ -3366,7 +3707,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3366
3707
  context "when the parent is using integer ids" do
3367
3708
 
3368
3709
  let(:jar) do
3369
- Jar.create do |doc|
3710
+ Jar.create! do |doc|
3370
3711
  doc._id = 1
3371
3712
  end
3372
3713
  end
@@ -3430,7 +3771,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3430
3771
  expect(album.before_add_called).to be true
3431
3772
  end
3432
3773
 
3433
- it "adds the document to the relation" do
3774
+ it "adds the document to the association" do
3434
3775
  expect(artist.albums).to eq([ album ])
3435
3776
  end
3436
3777
  end
@@ -3442,7 +3783,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3442
3783
  begin; artist.albums << album; rescue; end
3443
3784
  end
3444
3785
 
3445
- it "does not add the document to the relation" do
3786
+ it "does not add the document to the association" do
3446
3787
  expect(artist.albums).to be_empty
3447
3788
  end
3448
3789
  end
@@ -3470,17 +3811,17 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3470
3811
  begin; artist.albums << album; rescue; end
3471
3812
  end
3472
3813
 
3473
- it "adds the document to the relation" do
3814
+ it "adds the document to the association" do
3474
3815
  expect(artist.albums).to eq([ album ])
3475
3816
  end
3476
3817
  end
3477
3818
 
3478
- context 'when the relation already exists' do
3819
+ context 'when the association already exists' do
3479
3820
 
3480
3821
  before do
3481
3822
  artist.albums << album
3482
- album.save
3483
- artist.save
3823
+ album.save!
3824
+ artist.save!
3484
3825
  expect(artist).not_to receive(:after_add_album)
3485
3826
  end
3486
3827
 
@@ -3488,7 +3829,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3488
3829
  Album.where(artist_id: artist.id).first
3489
3830
  end
3490
3831
 
3491
- it 'does not execute the callback when the relation is accessed' do
3832
+ it 'does not execute the callback when the association is accessed' do
3492
3833
  expect(reloaded_album.artist.after_add_referenced_called).to be(nil)
3493
3834
  end
3494
3835
  end
@@ -3520,7 +3861,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3520
3861
  expect(artist.before_remove_referenced_called).to be true
3521
3862
  end
3522
3863
 
3523
- it "removes the document from the relation" do
3864
+ it "removes the document from the association" do
3524
3865
  expect(artist.albums).to be_empty
3525
3866
  end
3526
3867
  end
@@ -3535,7 +3876,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3535
3876
  expect(artist.before_remove_referenced_called).to be true
3536
3877
  end
3537
3878
 
3538
- it "clears the relation" do
3879
+ it "clears the association" do
3539
3880
  expect(artist.albums).to be_empty
3540
3881
  end
3541
3882
  end
@@ -3552,7 +3893,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3552
3893
  begin; artist.albums.delete(album); rescue; end
3553
3894
  end
3554
3895
 
3555
- it "does not remove the document from the relation" do
3896
+ it "does not remove the document from the association" do
3556
3897
  expect(artist.albums).to eq([ album ])
3557
3898
  end
3558
3899
  end
@@ -3563,7 +3904,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3563
3904
  begin; artist.albums.clear; rescue; end
3564
3905
  end
3565
3906
 
3566
- it "does not clear the relation" do
3907
+ it "does not clear the association" do
3567
3908
  expect(artist.albums).to eq([ album ])
3568
3909
  end
3569
3910
  end
@@ -3623,7 +3964,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3623
3964
  begin; artist.albums.delete(album); rescue; end
3624
3965
  end
3625
3966
 
3626
- it "removes the documents from the relation" do
3967
+ it "removes the documents from the association" do
3627
3968
  expect(artist.albums).to be_empty
3628
3969
  end
3629
3970
  end
@@ -3634,25 +3975,25 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3634
3975
  begin; artist.albums.clear; rescue; end
3635
3976
  end
3636
3977
 
3637
- it "removes the documents from the relation" do
3978
+ it "removes the documents from the association" do
3638
3979
  expect(artist.albums).to be_empty
3639
3980
  end
3640
3981
  end
3641
3982
  end
3642
3983
  end
3643
3984
 
3644
- context "when executing a criteria call on an ordered relation" do
3985
+ context "when executing a criteria call on an ordered association" do
3645
3986
 
3646
3987
  let(:person) do
3647
- Person.create
3988
+ Person.create!
3648
3989
  end
3649
3990
 
3650
3991
  let!(:post_one) do
3651
- person.ordered_posts.create(rating: 1)
3992
+ person.ordered_posts.create!(rating: 1)
3652
3993
  end
3653
3994
 
3654
3995
  let!(:post_two) do
3655
- person.ordered_posts.create(rating: 5)
3996
+ person.ordered_posts.create!(rating: 5)
3656
3997
  end
3657
3998
 
3658
3999
  let(:criteria) do
@@ -3667,11 +4008,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3667
4008
  context "when accessing a scope named open" do
3668
4009
 
3669
4010
  let(:person) do
3670
- Person.create
4011
+ Person.create!
3671
4012
  end
3672
4013
 
3673
4014
  let!(:post) do
3674
- person.posts.create(title: "open")
4015
+ person.posts.create!(title: "open")
3675
4016
  end
3676
4017
 
3677
4018
  it "returns the appropriate documents" do
@@ -3679,18 +4020,18 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3679
4020
  end
3680
4021
  end
3681
4022
 
3682
- context "when accessing a relation named parent" do
4023
+ context "when accessing a association named parent" do
3683
4024
 
3684
4025
  let!(:parent) do
3685
- Odd.create(name: "odd parent")
4026
+ Odd.create!(name: "odd parent")
3686
4027
  end
3687
4028
 
3688
4029
  let(:child) do
3689
- Even.create(parent_id: parent.id, name: "original even child")
4030
+ Even.create!(parent_id: parent.id, name: "original even child")
3690
4031
  end
3691
4032
 
3692
4033
  it "updates the child after accessing the parent" do
3693
- # Access parent relation on the child to make sure it is loaded
4034
+ # Access parent association on the child to make sure it is loaded
3694
4035
  child.parent
3695
4036
 
3696
4037
  new_child_name = "updated even child"
@@ -3703,7 +4044,7 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3703
4044
  end
3704
4045
  end
3705
4046
 
3706
- context 'when a document has referenced and embedded relations' do
4047
+ context 'when a document has referenced and embedded associations' do
3707
4048
 
3708
4049
  let(:agent) do
3709
4050
  Agent.new
@@ -3723,11 +4064,11 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3723
4064
  end
3724
4065
 
3725
4066
  it 'saves the document correctly' do
3726
- expect(agent.save).to be(true)
4067
+ expect(agent.save!).to be(true)
3727
4068
  end
3728
4069
  end
3729
4070
 
3730
- context 'when the two models use the same name to refer to the relation' do
4071
+ context 'when the two models use the same name to refer to the association' do
3731
4072
 
3732
4073
  let(:agent) do
3733
4074
  Agent.new
@@ -3739,8 +4080,8 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
3739
4080
 
3740
4081
  before do
3741
4082
  agent.same_name = band
3742
- agent.save
3743
- band.save
4083
+ agent.save!
4084
+ band.save!
3744
4085
  band.reload
3745
4086
  end
3746
4087