mongoid 7.0.10 → 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 (1049) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +30 -30
  4. data/README.md +32 -19
  5. data/Rakefile +51 -7
  6. data/lib/config/locales/en.yml +129 -70
  7. data/lib/mongoid/association/accessors.rb +143 -80
  8. data/lib/mongoid/association/bindable.rb +7 -26
  9. data/lib/mongoid/association/builders.rb +4 -12
  10. data/lib/mongoid/association/constrainable.rb +5 -6
  11. data/lib/mongoid/association/depending.rb +9 -18
  12. data/lib/mongoid/association/eager_loadable.rb +2 -3
  13. data/lib/mongoid/association/embedded/batchable.rb +16 -42
  14. data/lib/mongoid/association/embedded/cyclic.rb +10 -17
  15. data/lib/mongoid/association/embedded/embedded_in/binding.rb +3 -7
  16. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
  17. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
  18. data/lib/mongoid/association/embedded/embedded_in.rb +6 -26
  19. data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -8
  20. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
  21. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +90 -93
  22. data/lib/mongoid/association/embedded/embeds_many.rb +6 -34
  23. data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
  24. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +9 -6
  25. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +42 -27
  26. data/lib/mongoid/association/embedded/embeds_one.rb +6 -30
  27. data/lib/mongoid/association/embedded.rb +2 -0
  28. data/lib/mongoid/association/macros.rb +44 -41
  29. data/lib/mongoid/association/many.rb +16 -30
  30. data/lib/mongoid/association/marshalable.rb +3 -6
  31. data/lib/mongoid/association/nested/many.rb +18 -27
  32. data/lib/mongoid/association/nested/nested_buildable.rb +5 -11
  33. data/lib/mongoid/association/nested/one.rb +16 -27
  34. data/lib/mongoid/association/nested.rb +3 -3
  35. data/lib/mongoid/association/one.rb +4 -11
  36. data/lib/mongoid/association/options.rb +8 -38
  37. data/lib/mongoid/association/proxy.rb +37 -36
  38. data/lib/mongoid/association/referenced/auto_save.rb +5 -11
  39. data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -9
  40. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
  41. data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
  42. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -27
  43. data/lib/mongoid/association/referenced/belongs_to.rb +14 -36
  44. data/lib/mongoid/association/referenced/counter_cache.rb +4 -15
  45. data/lib/mongoid/association/referenced/eager.rb +39 -38
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +37 -57
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -43
  51. data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
  52. data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
  53. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
  54. data/lib/mongoid/association/referenced/has_many/enumerable.rb +444 -456
  55. data/lib/mongoid/association/referenced/has_many/proxy.rb +74 -107
  56. data/lib/mongoid/association/referenced/has_many.rb +18 -42
  57. data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
  58. data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
  59. data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
  60. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -26
  61. data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -25
  62. data/lib/mongoid/association/referenced/has_one.rb +13 -33
  63. data/lib/mongoid/association/referenced/syncable.rb +7 -22
  64. data/lib/mongoid/association/referenced.rb +2 -0
  65. data/lib/mongoid/association/reflections.rb +7 -6
  66. data/lib/mongoid/association/relatable.rb +18 -74
  67. data/lib/mongoid/association.rb +8 -22
  68. data/lib/mongoid/atomic/modifiers.rb +27 -51
  69. data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
  70. data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
  71. data/lib/mongoid/atomic/paths/embedded.rb +2 -3
  72. data/lib/mongoid/atomic/paths/root.rb +4 -7
  73. data/lib/mongoid/atomic/paths.rb +2 -1
  74. data/lib/mongoid/atomic.rb +29 -44
  75. data/lib/mongoid/attributes/dynamic.rb +3 -18
  76. data/lib/mongoid/attributes/nested.rb +7 -10
  77. data/lib/mongoid/attributes/processing.rb +9 -24
  78. data/lib/mongoid/attributes/projector.rb +119 -0
  79. data/lib/mongoid/attributes/readonly.rb +3 -6
  80. data/lib/mongoid/attributes.rb +46 -60
  81. data/lib/mongoid/cacheable.rb +6 -9
  82. data/lib/mongoid/changeable.rb +6 -60
  83. data/lib/mongoid/clients/factory.rb +42 -17
  84. data/lib/mongoid/clients/options.rb +10 -13
  85. data/lib/mongoid/clients/sessions.rb +2 -6
  86. data/lib/mongoid/clients/storage_options.rb +7 -12
  87. data/lib/mongoid/clients/validators/storage.rb +2 -9
  88. data/lib/mongoid/clients/validators.rb +2 -1
  89. data/lib/mongoid/clients.rb +3 -10
  90. data/lib/mongoid/composable.rb +5 -9
  91. data/lib/mongoid/config/environment.rb +15 -6
  92. data/lib/mongoid/config/options.rb +20 -23
  93. data/lib/mongoid/config/validators/client.rb +2 -17
  94. data/lib/mongoid/config/validators/option.rb +2 -3
  95. data/lib/mongoid/config/validators.rb +2 -1
  96. data/lib/mongoid/config.rb +112 -41
  97. data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
  98. data/lib/mongoid/contextual/aggregable/mongo.rb +25 -26
  99. data/lib/mongoid/contextual/aggregable/none.rb +65 -0
  100. data/lib/mongoid/contextual/aggregable.rb +17 -0
  101. data/lib/mongoid/contextual/atomic.rb +29 -31
  102. data/lib/mongoid/contextual/command.rb +2 -5
  103. data/lib/mongoid/contextual/geo_near.rb +6 -37
  104. data/lib/mongoid/contextual/map_reduce.rb +5 -33
  105. data/lib/mongoid/contextual/memory.rb +8 -61
  106. data/lib/mongoid/contextual/mongo.rb +160 -82
  107. data/lib/mongoid/contextual/none.rb +44 -28
  108. data/lib/mongoid/contextual/queryable.rb +2 -3
  109. data/lib/mongoid/contextual.rb +7 -9
  110. data/lib/mongoid/copyable.rb +11 -10
  111. data/lib/mongoid/criteria/findable.rb +12 -15
  112. data/lib/mongoid/criteria/includable.rb +8 -15
  113. data/lib/mongoid/criteria/inspectable.rb +2 -3
  114. data/lib/mongoid/criteria/marshalable.rb +2 -5
  115. data/lib/mongoid/criteria/modifiable.rb +2 -19
  116. data/lib/mongoid/criteria/options.rb +2 -3
  117. data/lib/mongoid/criteria/permission.rb +2 -1
  118. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
  119. data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
  120. data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -27
  121. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
  122. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
  123. data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
  124. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
  125. data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -26
  126. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
  127. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -12
  128. data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
  129. data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
  130. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -13
  131. data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
  132. data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -18
  133. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
  134. data/lib/mongoid/criteria/queryable/extensions/time.rb +3 -8
  135. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -8
  136. data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
  137. data/lib/mongoid/criteria/queryable/key.rb +36 -21
  138. data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
  139. data/lib/mongoid/criteria/queryable/mergeable.rb +179 -40
  140. data/lib/mongoid/criteria/queryable/optional.rb +5 -48
  141. data/lib/mongoid/criteria/queryable/options.rb +2 -19
  142. data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
  143. data/lib/mongoid/criteria/queryable/selectable.rb +414 -162
  144. data/lib/mongoid/criteria/queryable/selector.rb +36 -24
  145. data/lib/mongoid/criteria/queryable/smash.rb +2 -11
  146. data/lib/mongoid/criteria/queryable/storable.rb +237 -0
  147. data/lib/mongoid/criteria/queryable.rb +7 -9
  148. data/lib/mongoid/criteria/scopable.rb +27 -19
  149. data/lib/mongoid/criteria.rb +79 -72
  150. data/lib/mongoid/document.rb +24 -73
  151. data/lib/mongoid/equality.rb +29 -12
  152. data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
  153. data/lib/mongoid/errors/callback.rb +2 -3
  154. data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
  155. data/lib/mongoid/errors/delete_restriction.rb +10 -13
  156. data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
  157. data/lib/mongoid/errors/document_not_found.rb +2 -9
  158. data/lib/mongoid/errors/eager_load.rb +6 -5
  159. data/lib/mongoid/errors/empty_config_file.rb +25 -0
  160. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
  161. data/lib/mongoid/errors/invalid_collection.rb +2 -1
  162. data/lib/mongoid/errors/invalid_config_file.rb +25 -0
  163. data/lib/mongoid/errors/invalid_config_option.rb +2 -3
  164. data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -3
  165. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
  166. data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
  167. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
  168. data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
  169. data/lib/mongoid/errors/invalid_field.rb +2 -5
  170. data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
  171. data/lib/mongoid/errors/invalid_field_option.rb +2 -3
  172. data/lib/mongoid/errors/invalid_find.rb +2 -3
  173. data/lib/mongoid/errors/invalid_includes.rb +2 -3
  174. data/lib/mongoid/errors/invalid_index.rb +2 -3
  175. data/lib/mongoid/errors/invalid_options.rb +4 -5
  176. data/lib/mongoid/errors/invalid_path.rb +2 -3
  177. data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
  178. data/lib/mongoid/errors/invalid_query.rb +40 -0
  179. data/lib/mongoid/errors/invalid_relation.rb +4 -9
  180. data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
  181. data/lib/mongoid/errors/invalid_scope.rb +2 -3
  182. data/lib/mongoid/errors/invalid_session_use.rb +3 -6
  183. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
  184. data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
  185. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
  186. data/lib/mongoid/errors/invalid_time.rb +2 -3
  187. data/lib/mongoid/errors/invalid_value.rb +2 -1
  188. data/lib/mongoid/errors/inverse_not_found.rb +3 -4
  189. data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
  190. data/lib/mongoid/errors/mixed_relations.rb +2 -3
  191. data/lib/mongoid/errors/mongoid_error.rb +3 -10
  192. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
  193. data/lib/mongoid/errors/no_client_config.rb +4 -5
  194. data/lib/mongoid/errors/no_client_database.rb +2 -3
  195. data/lib/mongoid/errors/no_client_hosts.rb +2 -3
  196. data/lib/mongoid/errors/no_clients_config.rb +2 -3
  197. data/lib/mongoid/errors/no_default_client.rb +3 -4
  198. data/lib/mongoid/errors/no_environment.rb +2 -3
  199. data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
  200. data/lib/mongoid/errors/no_metadata.rb +2 -3
  201. data/lib/mongoid/errors/no_parent.rb +2 -3
  202. data/lib/mongoid/errors/readonly_attribute.rb +2 -3
  203. data/lib/mongoid/errors/readonly_document.rb +3 -6
  204. data/lib/mongoid/errors/scope_overwrite.rb +2 -1
  205. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
  206. data/lib/mongoid/errors/unknown_attribute.rb +2 -3
  207. data/lib/mongoid/errors/unknown_model.rb +2 -3
  208. data/lib/mongoid/errors/unsaved_document.rb +3 -2
  209. data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
  210. data/lib/mongoid/errors/validations.rb +2 -1
  211. data/lib/mongoid/errors.rb +12 -1
  212. data/lib/mongoid/evolvable.rb +4 -5
  213. data/lib/mongoid/extensions/array.rb +28 -37
  214. data/lib/mongoid/extensions/big_decimal.rb +2 -11
  215. data/lib/mongoid/extensions/boolean.rb +3 -5
  216. data/lib/mongoid/extensions/date.rb +13 -12
  217. data/lib/mongoid/extensions/date_time.rb +4 -12
  218. data/lib/mongoid/extensions/decimal128.rb +2 -5
  219. data/lib/mongoid/extensions/false_class.rb +4 -7
  220. data/lib/mongoid/extensions/float.rb +5 -10
  221. data/lib/mongoid/extensions/hash.rb +47 -34
  222. data/lib/mongoid/extensions/integer.rb +5 -12
  223. data/lib/mongoid/extensions/module.rb +2 -3
  224. data/lib/mongoid/extensions/nil_class.rb +2 -5
  225. data/lib/mongoid/extensions/object.rb +17 -44
  226. data/lib/mongoid/extensions/object_id.rb +2 -7
  227. data/lib/mongoid/extensions/range.rb +2 -11
  228. data/lib/mongoid/extensions/regexp.rb +2 -3
  229. data/lib/mongoid/extensions/set.rb +2 -7
  230. data/lib/mongoid/extensions/string.rb +19 -39
  231. data/lib/mongoid/extensions/symbol.rb +2 -7
  232. data/lib/mongoid/extensions/time.rb +12 -9
  233. data/lib/mongoid/extensions/time_with_zone.rb +25 -7
  234. data/lib/mongoid/extensions/true_class.rb +4 -7
  235. data/lib/mongoid/extensions.rb +18 -3
  236. data/lib/mongoid/factory.rb +52 -13
  237. data/lib/mongoid/fields/foreign_key.rb +3 -22
  238. data/lib/mongoid/fields/localized.rb +2 -11
  239. data/lib/mongoid/fields/standard.rb +6 -36
  240. data/lib/mongoid/fields/validators/macro.rb +36 -18
  241. data/lib/mongoid/fields/validators.rb +2 -1
  242. data/lib/mongoid/fields.rb +113 -63
  243. data/lib/mongoid/findable.rb +59 -23
  244. data/lib/mongoid/indexable/specification.rb +3 -16
  245. data/lib/mongoid/indexable/validators/options.rb +2 -7
  246. data/lib/mongoid/indexable.rb +6 -21
  247. data/lib/mongoid/inspectable.rb +4 -11
  248. data/lib/mongoid/interceptable.rb +13 -30
  249. data/lib/mongoid/loggable.rb +13 -16
  250. data/lib/mongoid/matchable.rb +2 -153
  251. data/lib/mongoid/matcher/all.rb +22 -0
  252. data/lib/mongoid/matcher/and.rb +21 -0
  253. data/lib/mongoid/matcher/bits.rb +41 -0
  254. data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
  255. data/lib/mongoid/matcher/bits_all_set.rb +20 -0
  256. data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
  257. data/lib/mongoid/matcher/bits_any_set.rb +20 -0
  258. data/lib/mongoid/matcher/elem_match.rb +36 -0
  259. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  260. data/lib/mongoid/matcher/eq.rb +11 -0
  261. data/lib/mongoid/matcher/eq_impl.rb +67 -0
  262. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
  263. data/lib/mongoid/matcher/exists.rb +15 -0
  264. data/lib/mongoid/matcher/expression.rb +35 -0
  265. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  266. data/lib/mongoid/matcher/field_expression.rb +62 -0
  267. data/lib/mongoid/matcher/field_operator.rb +54 -0
  268. data/lib/mongoid/matcher/gt.rb +17 -0
  269. data/lib/mongoid/matcher/gte.rb +17 -0
  270. data/lib/mongoid/matcher/in.rb +25 -0
  271. data/lib/mongoid/matcher/lt.rb +17 -0
  272. data/lib/mongoid/matcher/lte.rb +17 -0
  273. data/lib/mongoid/matcher/mod.rb +17 -0
  274. data/lib/mongoid/matcher/ne.rb +16 -0
  275. data/lib/mongoid/matcher/nin.rb +11 -0
  276. data/lib/mongoid/matcher/nor.rb +25 -0
  277. data/lib/mongoid/matcher/not.rb +29 -0
  278. data/lib/mongoid/matcher/or.rb +21 -0
  279. data/lib/mongoid/matcher/regex.rb +41 -0
  280. data/lib/mongoid/matcher/size.rb +26 -0
  281. data/lib/mongoid/matcher/type.rb +99 -0
  282. data/lib/mongoid/matcher.rb +110 -0
  283. data/lib/mongoid/persistable/creatable.rb +4 -21
  284. data/lib/mongoid/persistable/deletable.rb +5 -21
  285. data/lib/mongoid/persistable/destroyable.rb +11 -10
  286. data/lib/mongoid/persistable/incrementable.rb +6 -7
  287. data/lib/mongoid/persistable/logical.rb +4 -6
  288. data/lib/mongoid/persistable/poppable.rb +3 -6
  289. data/lib/mongoid/persistable/pullable.rb +3 -8
  290. data/lib/mongoid/persistable/pushable.rb +3 -8
  291. data/lib/mongoid/persistable/renamable.rb +10 -8
  292. data/lib/mongoid/persistable/savable.rb +3 -8
  293. data/lib/mongoid/persistable/settable.rb +3 -6
  294. data/lib/mongoid/persistable/unsettable.rb +8 -8
  295. data/lib/mongoid/persistable/updatable.rb +32 -20
  296. data/lib/mongoid/persistable/upsertable.rb +3 -8
  297. data/lib/mongoid/persistable.rb +133 -38
  298. data/lib/mongoid/persistence_context.rb +23 -36
  299. data/lib/mongoid/positional.rb +2 -5
  300. data/lib/mongoid/query_cache.rb +118 -103
  301. data/lib/mongoid/railtie.rb +3 -16
  302. data/lib/mongoid/railties/controller_runtime.rb +3 -1
  303. data/lib/mongoid/railties/database.rake +9 -0
  304. data/lib/mongoid/reloadable.rb +14 -19
  305. data/lib/mongoid/scopable.rb +8 -35
  306. data/lib/mongoid/selectable.rb +8 -17
  307. data/lib/mongoid/serializable.rb +24 -29
  308. data/lib/mongoid/shardable.rb +80 -17
  309. data/lib/mongoid/stateful.rb +3 -10
  310. data/lib/mongoid/stringified_symbol.rb +52 -0
  311. data/lib/mongoid/tasks/database.rake +12 -5
  312. data/lib/mongoid/tasks/database.rb +85 -5
  313. data/lib/mongoid/threaded/lifecycle.rb +2 -21
  314. data/lib/mongoid/threaded.rb +2 -55
  315. data/lib/mongoid/timestamps/created/short.rb +2 -1
  316. data/lib/mongoid/timestamps/created.rb +3 -2
  317. data/lib/mongoid/timestamps/short.rb +2 -1
  318. data/lib/mongoid/timestamps/timeless.rb +6 -9
  319. data/lib/mongoid/timestamps/updated/short.rb +2 -1
  320. data/lib/mongoid/timestamps/updated.rb +3 -4
  321. data/lib/mongoid/timestamps.rb +3 -2
  322. data/lib/mongoid/touchable.rb +53 -23
  323. data/lib/mongoid/traversable.rb +177 -57
  324. data/lib/mongoid/validatable/associated.rb +5 -6
  325. data/lib/mongoid/validatable/format.rb +2 -1
  326. data/lib/mongoid/validatable/length.rb +2 -1
  327. data/lib/mongoid/validatable/localizable.rb +2 -3
  328. data/lib/mongoid/validatable/macros.rb +2 -7
  329. data/lib/mongoid/validatable/presence.rb +8 -13
  330. data/lib/mongoid/validatable/queryable.rb +2 -3
  331. data/lib/mongoid/validatable/uniqueness.rb +20 -33
  332. data/lib/mongoid/validatable.rb +8 -27
  333. data/lib/mongoid/version.rb +2 -2
  334. data/lib/mongoid.rb +32 -15
  335. data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
  336. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
  337. data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
  338. data/lib/rails/generators/mongoid_generator.rb +2 -1
  339. data/lib/rails/mongoid.rb +4 -5
  340. data/spec/README.md +19 -4
  341. data/spec/config/mongoid.yml +1 -0
  342. data/spec/integration/app_spec.rb +246 -95
  343. data/spec/integration/associations/belongs_to_spec.rb +2 -0
  344. data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
  345. data/spec/integration/associations/embedded_spec.rb +207 -1
  346. data/spec/integration/associations/embeds_many_spec.rb +206 -0
  347. data/spec/integration/associations/embeds_one_spec.rb +23 -0
  348. data/spec/integration/associations/foreign_key_spec.rb +98 -0
  349. data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
  350. data/spec/integration/associations/has_many_spec.rb +128 -0
  351. data/spec/integration/associations/has_one_spec.rb +176 -0
  352. data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
  353. data/spec/integration/associations/reverse_population_spec.rb +34 -0
  354. data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
  355. data/spec/integration/associations/scope_option_spec.rb +101 -0
  356. data/spec/integration/atomic/modifiers_spec.rb +116 -0
  357. data/spec/integration/bson_regexp_raw_spec.rb +19 -0
  358. data/spec/integration/callbacks_models.rb +61 -0
  359. data/spec/integration/callbacks_spec.rb +228 -0
  360. data/spec/integration/contextual/empty_spec.rb +141 -0
  361. data/spec/integration/criteria/alias_query_spec.rb +161 -0
  362. data/spec/integration/criteria/date_field_spec.rb +1 -2
  363. data/spec/integration/criteria/default_scope_spec.rb +72 -0
  364. data/spec/integration/criteria/logical_spec.rb +124 -0
  365. data/spec/integration/criteria/range_spec.rb +265 -0
  366. data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
  367. data/spec/integration/discriminator_key_spec.rb +353 -0
  368. data/spec/integration/discriminator_value_spec.rb +206 -0
  369. data/spec/integration/document_spec.rb +30 -1
  370. data/spec/integration/i18n_fallbacks_spec.rb +89 -0
  371. data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -42
  372. data/spec/integration/matcher_operator_data/all.yml +140 -0
  373. data/spec/integration/matcher_operator_data/and.yml +93 -0
  374. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  375. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  376. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  377. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  378. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  379. data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
  380. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  381. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  382. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  383. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  384. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  385. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  386. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  387. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  388. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  389. data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
  390. data/spec/integration/matcher_operator_data/in.yml +210 -0
  391. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  392. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  393. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  394. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  395. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  396. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  397. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  398. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  399. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  400. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  401. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  402. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  403. data/spec/integration/matcher_operator_data/not.yml +196 -0
  404. data/spec/integration/matcher_operator_data/or.yml +137 -0
  405. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  406. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  407. data/spec/integration/matcher_operator_data/size.yml +174 -0
  408. data/spec/integration/matcher_operator_data/type.yml +70 -0
  409. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  410. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  411. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  412. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  413. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  414. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  415. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  416. data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
  417. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  418. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  419. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  420. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  421. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  422. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  423. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  424. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  425. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  426. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  427. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  428. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  429. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  430. data/spec/integration/matcher_operator_spec.rb +124 -0
  431. data/spec/integration/matcher_spec.rb +283 -0
  432. data/spec/integration/server_query_spec.rb +141 -0
  433. data/spec/integration/shardable_spec.rb +148 -0
  434. data/spec/integration/stringified_symbol_field_spec.rb +203 -0
  435. data/spec/lite_spec_helper.rb +22 -5
  436. data/spec/mongoid/association/accessors_spec.rb +284 -77
  437. data/spec/mongoid/association/auto_save_spec.rb +74 -33
  438. data/spec/mongoid/association/builders_spec.rb +3 -1
  439. data/spec/mongoid/association/constrainable_spec.rb +2 -0
  440. data/spec/mongoid/association/counter_cache_spec.rb +34 -32
  441. data/spec/mongoid/association/depending_spec.rb +426 -333
  442. data/spec/mongoid/association/eager_spec.rb +6 -4
  443. data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
  444. data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
  445. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -0
  446. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +2 -0
  447. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +65 -13
  448. data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -1
  449. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
  450. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +2 -0
  451. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +431 -133
  452. data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -1
  453. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
  454. data/spec/mongoid/association/embedded/embeds_many_spec.rb +3 -1
  455. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
  456. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +2 -0
  457. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
  458. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
  459. data/spec/mongoid/association/embedded/embeds_one_models.rb +3 -0
  460. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
  461. data/spec/mongoid/association/embedded/embeds_one_spec.rb +3 -1
  462. data/spec/mongoid/association/macros_spec.rb +11 -9
  463. data/spec/mongoid/association/nested/many_spec.rb +2 -0
  464. data/spec/mongoid/association/nested/one_spec.rb +18 -12
  465. data/spec/mongoid/association/options_spec.rb +2 -0
  466. data/spec/mongoid/association/polymorphic_spec.rb +2 -0
  467. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -0
  468. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +57 -16
  469. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
  470. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +99 -58
  471. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
  472. data/spec/mongoid/association/referenced/belongs_to_spec.rb +24 -1
  473. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
  474. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
  475. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +46 -2
  476. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
  477. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +215 -167
  478. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -2
  479. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
  480. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +46 -2
  481. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
  482. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +23 -0
  483. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
  484. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +306 -125
  485. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +679 -339
  486. data/spec/mongoid/association/referenced/has_many_models.rb +58 -0
  487. data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
  488. data/spec/mongoid/association/referenced/has_many_spec.rb +23 -0
  489. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
  490. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -7
  491. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
  492. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +28 -26
  493. data/spec/mongoid/association/referenced/has_one_models.rb +49 -0
  494. data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
  495. data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
  496. data/spec/mongoid/association/reflections_spec.rb +2 -0
  497. data/spec/mongoid/association/syncable_spec.rb +33 -31
  498. data/spec/mongoid/association_spec.rb +2 -0
  499. data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
  500. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
  501. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
  502. data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
  503. data/spec/mongoid/atomic/paths_spec.rb +107 -12
  504. data/spec/mongoid/atomic_spec.rb +31 -6
  505. data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
  506. data/spec/mongoid/attributes/nested_spec.rb +69 -67
  507. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  508. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  509. data/spec/mongoid/attributes/projector_spec.rb +44 -0
  510. data/spec/mongoid/attributes/readonly_spec.rb +24 -22
  511. data/spec/mongoid/attributes_spec.rb +363 -28
  512. data/spec/mongoid/cacheable_spec.rb +3 -1
  513. data/spec/mongoid/changeable_spec.rb +60 -35
  514. data/spec/mongoid/clients/factory_spec.rb +136 -28
  515. data/spec/mongoid/clients/options_spec.rb +44 -26
  516. data/spec/mongoid/clients/sessions_spec.rb +25 -28
  517. data/spec/mongoid/clients/transactions_spec.rb +54 -29
  518. data/spec/mongoid/clients_spec.rb +8 -6
  519. data/spec/mongoid/composable_spec.rb +2 -0
  520. data/spec/mongoid/config/environment_spec.rb +88 -8
  521. data/spec/mongoid/config/options_spec.rb +22 -3
  522. data/spec/mongoid/config_spec.rb +277 -1
  523. data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
  524. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
  525. data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
  526. data/spec/mongoid/contextual/atomic_spec.rb +222 -71
  527. data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
  528. data/spec/mongoid/contextual/map_reduce_spec.rb +4 -2
  529. data/spec/mongoid/contextual/memory_spec.rb +25 -23
  530. data/spec/mongoid/contextual/mongo_spec.rb +413 -92
  531. data/spec/mongoid/contextual/none_spec.rb +9 -81
  532. data/spec/mongoid/copyable_spec.rb +207 -26
  533. data/spec/mongoid/copyable_spec_models.rb +30 -0
  534. data/spec/mongoid/criteria/findable_spec.rb +77 -20
  535. data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
  536. data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
  537. data/spec/mongoid/criteria/modifiable_spec.rb +43 -40
  538. data/spec/mongoid/criteria/options_spec.rb +2 -0
  539. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
  540. data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
  541. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
  542. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +2 -0
  543. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
  544. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
  545. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
  546. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
  547. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
  548. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
  549. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
  550. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
  551. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
  552. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
  553. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
  554. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
  555. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
  556. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +2 -0
  557. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
  558. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -0
  559. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
  560. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +23 -16
  561. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +2 -0
  562. data/spec/mongoid/criteria/queryable/key_spec.rb +2 -0
  563. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
  564. data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
  565. data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
  566. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
  567. data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
  568. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1593 -286
  569. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
  570. data/spec/mongoid/criteria/queryable/selectable_spec.rb +1010 -2736
  571. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
  572. data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -0
  573. data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
  574. data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
  575. data/spec/mongoid/criteria/scopable_spec.rb +129 -0
  576. data/spec/mongoid/criteria_projection_spec.rb +410 -0
  577. data/spec/mongoid/criteria_spec.rb +782 -459
  578. data/spec/mongoid/document_fields_spec.rb +26 -1
  579. data/spec/mongoid/document_persistence_context_spec.rb +0 -1
  580. data/spec/mongoid/document_query_spec.rb +89 -0
  581. data/spec/mongoid/document_spec.rb +123 -48
  582. data/spec/mongoid/equality_spec.rb +144 -41
  583. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
  584. data/spec/mongoid/errors/callback_spec.rb +2 -0
  585. data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
  586. data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
  587. data/spec/mongoid/errors/document_not_found_spec.rb +2 -0
  588. data/spec/mongoid/errors/eager_load_spec.rb +2 -0
  589. data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
  590. data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
  591. data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
  592. data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
  593. data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
  594. data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
  595. data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
  596. data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
  597. data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
  598. data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
  599. data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
  600. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
  601. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
  602. data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
  603. data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
  604. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
  605. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
  606. data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
  607. data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
  608. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
  609. data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
  610. data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
  611. data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
  612. data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
  613. data/spec/mongoid/errors/no_environment_spec.rb +2 -0
  614. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
  615. data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
  616. data/spec/mongoid/errors/no_parent_spec.rb +3 -1
  617. data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
  618. data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
  619. data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
  620. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
  621. data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
  622. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
  623. data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
  624. data/spec/mongoid/errors/validations_spec.rb +2 -0
  625. data/spec/mongoid/extensions/array_spec.rb +25 -43
  626. data/spec/mongoid/extensions/big_decimal_spec.rb +2 -0
  627. data/spec/mongoid/extensions/binary_spec.rb +2 -0
  628. data/spec/mongoid/extensions/boolean_spec.rb +2 -0
  629. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
  630. data/spec/mongoid/extensions/date_spec.rb +8 -160
  631. data/spec/mongoid/extensions/date_time_spec.rb +17 -60
  632. data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
  633. data/spec/mongoid/extensions/false_class_spec.rb +3 -1
  634. data/spec/mongoid/extensions/float_spec.rb +17 -3
  635. data/spec/mongoid/extensions/hash_spec.rb +105 -0
  636. data/spec/mongoid/extensions/integer_spec.rb +14 -2
  637. data/spec/mongoid/extensions/module_spec.rb +2 -0
  638. data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
  639. data/spec/mongoid/extensions/object_id_spec.rb +2 -0
  640. data/spec/mongoid/extensions/object_spec.rb +13 -24
  641. data/spec/mongoid/extensions/range_spec.rb +2 -0
  642. data/spec/mongoid/extensions/regexp_spec.rb +2 -0
  643. data/spec/mongoid/extensions/set_spec.rb +2 -0
  644. data/spec/mongoid/extensions/string_spec.rb +60 -27
  645. data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
  646. data/spec/mongoid/extensions/symbol_spec.rb +2 -0
  647. data/spec/mongoid/extensions/time_spec.rb +29 -0
  648. data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
  649. data/spec/mongoid/extensions/true_class_spec.rb +3 -1
  650. data/spec/mongoid/extensions_spec.rb +16 -2
  651. data/spec/mongoid/factory_spec.rb +287 -27
  652. data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
  653. data/spec/mongoid/fields/localized_spec.rb +6 -4
  654. data/spec/mongoid/fields/standard_spec.rb +2 -0
  655. data/spec/mongoid/fields_spec.rb +418 -36
  656. data/spec/mongoid/findable_spec.rb +53 -19
  657. data/spec/mongoid/indexable/specification_spec.rb +2 -0
  658. data/spec/mongoid/indexable_spec.rb +30 -2
  659. data/spec/mongoid/inspectable_spec.rb +39 -2
  660. data/spec/mongoid/interceptable_spec.rb +168 -96
  661. data/spec/mongoid/interceptable_spec_models.rb +76 -0
  662. data/spec/mongoid/loggable_spec.rb +2 -0
  663. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  664. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
  665. data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
  666. data/spec/mongoid/persistable/creatable_spec.rb +112 -27
  667. data/spec/mongoid/persistable/deletable_spec.rb +273 -11
  668. data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
  669. data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
  670. data/spec/mongoid/persistable/logical_spec.rb +19 -3
  671. data/spec/mongoid/persistable/poppable_spec.rb +19 -3
  672. data/spec/mongoid/persistable/pullable_spec.rb +36 -6
  673. data/spec/mongoid/persistable/pushable_spec.rb +36 -6
  674. data/spec/mongoid/persistable/renamable_spec.rb +18 -2
  675. data/spec/mongoid/persistable/savable_spec.rb +188 -25
  676. data/spec/mongoid/persistable/settable_spec.rb +54 -8
  677. data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
  678. data/spec/mongoid/persistable/updatable_spec.rb +45 -23
  679. data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
  680. data/spec/mongoid/persistable_spec.rb +85 -9
  681. data/spec/mongoid/persistence_context_spec.rb +2 -0
  682. data/spec/mongoid/positional_spec.rb +2 -0
  683. data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
  684. data/spec/mongoid/query_cache_spec.rb +501 -81
  685. data/spec/mongoid/relations/proxy_spec.rb +8 -6
  686. data/spec/mongoid/reloadable_spec.rb +298 -20
  687. data/spec/mongoid/scopable_spec.rb +67 -21
  688. data/spec/mongoid/selectable_spec.rb +8 -6
  689. data/spec/mongoid/serializable_spec.rb +160 -29
  690. data/spec/mongoid/shardable_models.rb +61 -0
  691. data/spec/mongoid/shardable_spec.rb +116 -17
  692. data/spec/mongoid/stateful_spec.rb +3 -1
  693. data/spec/mongoid/tasks/database_rake_spec.rb +2 -0
  694. data/spec/mongoid/tasks/database_spec.rb +2 -0
  695. data/spec/mongoid/threaded_spec.rb +4 -2
  696. data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
  697. data/spec/mongoid/timestamps/created_spec.rb +3 -1
  698. data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
  699. data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
  700. data/spec/mongoid/timestamps/updated_spec.rb +5 -3
  701. data/spec/mongoid/timestamps_spec.rb +8 -6
  702. data/spec/mongoid/touchable_spec.rb +180 -33
  703. data/spec/mongoid/touchable_spec_models.rb +53 -0
  704. data/spec/mongoid/traversable_spec.rb +1167 -1
  705. data/spec/mongoid/validatable/associated_spec.rb +2 -0
  706. data/spec/mongoid/validatable/format_spec.rb +2 -0
  707. data/spec/mongoid/validatable/length_spec.rb +2 -0
  708. data/spec/mongoid/validatable/numericality_spec.rb +2 -0
  709. data/spec/mongoid/validatable/presence_spec.rb +28 -22
  710. data/spec/mongoid/validatable/uniqueness_spec.rb +69 -67
  711. data/spec/mongoid/validatable_spec.rb +5 -3
  712. data/spec/mongoid_spec.rb +2 -0
  713. data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -1
  714. data/spec/rails/mongoid_spec.rb +4 -2
  715. data/spec/shared/LICENSE +20 -0
  716. data/spec/shared/bin/get-mongodb-download-url +17 -0
  717. data/spec/shared/bin/s3-copy +45 -0
  718. data/spec/shared/bin/s3-upload +69 -0
  719. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  720. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  721. data/spec/shared/lib/mrss/constraints.rb +386 -0
  722. data/spec/shared/lib/mrss/docker_runner.rb +271 -0
  723. data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
  724. data/spec/shared/lib/mrss/lite_constraints.rb +199 -0
  725. data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
  726. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  727. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  728. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  729. data/spec/shared/lib/mrss/utils.rb +15 -0
  730. data/spec/shared/share/Dockerfile.erb +339 -0
  731. data/spec/shared/share/haproxy-1.conf +16 -0
  732. data/spec/shared/share/haproxy-2.conf +17 -0
  733. data/spec/shared/shlib/distro.sh +74 -0
  734. data/spec/shared/shlib/server.sh +379 -0
  735. data/spec/shared/shlib/set_env.sh +132 -0
  736. data/spec/spec_helper.rb +39 -35
  737. data/spec/support/authorization.rb +2 -0
  738. data/spec/support/client_registry.rb +9 -0
  739. data/spec/support/constraints.rb +15 -234
  740. data/spec/support/expectations.rb +5 -1
  741. data/spec/support/helpers.rb +11 -0
  742. data/spec/support/macros.rb +22 -0
  743. data/spec/{app → support}/models/account.rb +3 -1
  744. data/spec/{app → support}/models/acolyte.rb +2 -0
  745. data/spec/{app → support}/models/actor.rb +3 -1
  746. data/spec/support/models/actress.rb +4 -0
  747. data/spec/{app → support}/models/address.rb +6 -0
  748. data/spec/{app → support}/models/address_component.rb +2 -0
  749. data/spec/{app → support}/models/address_number.rb +2 -0
  750. data/spec/{app → support}/models/agency.rb +2 -0
  751. data/spec/{app → support}/models/agent.rb +2 -0
  752. data/spec/{app → support}/models/album.rb +2 -0
  753. data/spec/{app → support}/models/alert.rb +2 -0
  754. data/spec/{app → support}/models/animal.rb +2 -0
  755. data/spec/{app → support}/models/answer.rb +2 -0
  756. data/spec/{app → support}/models/appointment.rb +2 -0
  757. data/spec/support/models/armrest.rb +9 -0
  758. data/spec/{app → support}/models/article.rb +2 -0
  759. data/spec/{app → support}/models/artist.rb +4 -0
  760. data/spec/{app → support}/models/artwork.rb +2 -0
  761. data/spec/support/models/audible_sound.rb +3 -0
  762. data/spec/{app → support}/models/audio.rb +2 -0
  763. data/spec/{app → support}/models/augmentation.rb +2 -0
  764. data/spec/{app → support}/models/author.rb +2 -0
  765. data/spec/{app → support}/models/baby.rb +2 -0
  766. data/spec/{app → support}/models/band.rb +6 -0
  767. data/spec/{app → support}/models/bar.rb +2 -0
  768. data/spec/{app → support}/models/basic.rb +2 -0
  769. data/spec/support/models/bed.rb +3 -0
  770. data/spec/{app → support}/models/big_palette.rb +2 -0
  771. data/spec/{app → support}/models/birthday.rb +2 -0
  772. data/spec/support/models/bolt.rb +7 -0
  773. data/spec/{app → support}/models/bomb.rb +2 -0
  774. data/spec/{app → support}/models/book.rb +2 -0
  775. data/spec/{app → support}/models/breed.rb +2 -0
  776. data/spec/{app → support}/models/browser.rb +3 -1
  777. data/spec/{app → support}/models/building.rb +2 -0
  778. data/spec/{app → support}/models/building_address.rb +2 -0
  779. data/spec/{app → support}/models/bus.rb +2 -0
  780. data/spec/{app → support}/models/business.rb +2 -0
  781. data/spec/{app → support}/models/callback_test.rb +2 -0
  782. data/spec/{app → support}/models/canvas.rb +3 -1
  783. data/spec/support/models/car.rb +3 -0
  784. data/spec/{app → support}/models/cat.rb +2 -0
  785. data/spec/{app → support}/models/category.rb +2 -0
  786. data/spec/{app → support}/models/child.rb +2 -0
  787. data/spec/{app → support}/models/child_doc.rb +5 -3
  788. data/spec/{app → support}/models/church.rb +2 -0
  789. data/spec/{app → support}/models/circle.rb +2 -0
  790. data/spec/{app → support}/models/circuit.rb +2 -0
  791. data/spec/{app → support}/models/circus.rb +2 -0
  792. data/spec/{app → support}/models/code.rb +2 -0
  793. data/spec/support/models/coding/pull_request.rb +11 -0
  794. data/spec/support/models/coding.rb +3 -0
  795. data/spec/{app → support}/models/comment.rb +2 -0
  796. data/spec/{app → support}/models/company.rb +2 -0
  797. data/spec/{app → support}/models/consumption_period.rb +2 -0
  798. data/spec/{app → support}/models/contextable_item.rb +2 -0
  799. data/spec/{app → support}/models/contractor.rb +2 -0
  800. data/spec/{app → support}/models/cookie.rb +2 -0
  801. data/spec/{app → support}/models/country_code.rb +4 -0
  802. data/spec/{app → support}/models/courier_job.rb +2 -0
  803. data/spec/support/models/crate.rb +12 -0
  804. data/spec/support/models/customer.rb +10 -0
  805. data/spec/support/models/customer_address.rb +11 -0
  806. data/spec/support/models/deed.rb +7 -0
  807. data/spec/{app → support}/models/definition.rb +2 -0
  808. data/spec/{app → support}/models/delegating_patient.rb +0 -1
  809. data/spec/{app → support}/models/description.rb +2 -0
  810. data/spec/{app → support}/models/dictionary.rb +8 -0
  811. data/spec/{app → support}/models/division.rb +2 -0
  812. data/spec/{app → support}/models/doctor.rb +2 -0
  813. data/spec/{app → support}/models/dog.rb +2 -0
  814. data/spec/{app → support}/models/dokument.rb +2 -0
  815. data/spec/{app → support}/models/draft.rb +2 -0
  816. data/spec/{app → support}/models/dragon.rb +2 -0
  817. data/spec/{app → support}/models/driver.rb +3 -1
  818. data/spec/{app → support}/models/drug.rb +2 -0
  819. data/spec/{app → support}/models/dungeon.rb +2 -0
  820. data/spec/{app → support}/models/edit.rb +2 -0
  821. data/spec/{app → support}/models/email.rb +2 -0
  822. data/spec/{app → support}/models/employer.rb +2 -0
  823. data/spec/{app → support}/models/entry.rb +2 -0
  824. data/spec/support/models/eraser.rb +3 -0
  825. data/spec/{app → support}/models/even.rb +2 -0
  826. data/spec/{app → support}/models/event.rb +2 -0
  827. data/spec/{app → support}/models/exhibition.rb +2 -0
  828. data/spec/{app → support}/models/exhibitor.rb +2 -0
  829. data/spec/{app → support}/models/explosion.rb +2 -0
  830. data/spec/{app → support}/models/eye.rb +2 -0
  831. data/spec/{app → support}/models/eye_bowl.rb +2 -0
  832. data/spec/{app → support}/models/face.rb +2 -0
  833. data/spec/{app → support}/models/favorite.rb +2 -0
  834. data/spec/{app → support}/models/filesystem.rb +2 -0
  835. data/spec/{app → support}/models/fire_hydrant.rb +2 -0
  836. data/spec/{app → support}/models/firefox.rb +2 -0
  837. data/spec/{app → support}/models/fish.rb +2 -0
  838. data/spec/{app → support}/models/folder.rb +2 -0
  839. data/spec/{app → support}/models/folder_item.rb +2 -0
  840. data/spec/{app → support}/models/fruits.rb +2 -0
  841. data/spec/{app → support}/models/game.rb +2 -0
  842. data/spec/{app → support}/models/ghost.rb +2 -0
  843. data/spec/support/models/guitar.rb +4 -0
  844. data/spec/support/models/hole.rb +12 -0
  845. data/spec/{app → support}/models/home.rb +2 -0
  846. data/spec/{app → support}/models/house.rb +2 -0
  847. data/spec/{app → support}/models/html_writer.rb +2 -0
  848. data/spec/{app → support}/models/id_key.rb +2 -0
  849. data/spec/support/models/idnodef.rb +7 -0
  850. data/spec/{app → support}/models/image.rb +2 -0
  851. data/spec/{app → support}/models/implant.rb +2 -0
  852. data/spec/support/models/instrument.rb +8 -0
  853. data/spec/{app → support}/models/item.rb +3 -1
  854. data/spec/{app → support}/models/jar.rb +2 -0
  855. data/spec/{app → support}/models/kaleidoscope.rb +2 -0
  856. data/spec/{app → support}/models/kangaroo.rb +3 -1
  857. data/spec/{app → support}/models/label.rb +4 -1
  858. data/spec/{app → support}/models/language.rb +2 -0
  859. data/spec/{app → support}/models/lat_lng.rb +2 -0
  860. data/spec/{app → support}/models/league.rb +2 -0
  861. data/spec/support/models/learner.rb +4 -0
  862. data/spec/{app → support}/models/line_item.rb +2 -0
  863. data/spec/{app → support}/models/location.rb +2 -0
  864. data/spec/{app → support}/models/login.rb +2 -0
  865. data/spec/{app → support}/models/manufacturer.rb +2 -0
  866. data/spec/{app → support}/models/meat.rb +2 -0
  867. data/spec/{app → support}/models/membership.rb +2 -0
  868. data/spec/{app → support}/models/message.rb +2 -0
  869. data/spec/{app → support}/models/minim.rb +0 -1
  870. data/spec/{app → support}/models/mixed_drink.rb +2 -0
  871. data/spec/support/models/mop.rb +24 -0
  872. data/spec/{app → support}/models/movie.rb +2 -0
  873. data/spec/support/models/my_hash.rb +4 -0
  874. data/spec/{app → support}/models/name.rb +2 -0
  875. data/spec/support/models/name_only.rb +8 -0
  876. data/spec/{app → support}/models/node.rb +2 -0
  877. data/spec/{app → support}/models/note.rb +2 -0
  878. data/spec/support/models/nut.rb +7 -0
  879. data/spec/{app → support}/models/odd.rb +2 -0
  880. data/spec/support/models/order.rb +12 -0
  881. data/spec/{app → support}/models/ordered_post.rb +3 -1
  882. data/spec/{app → support}/models/ordered_preference.rb +2 -0
  883. data/spec/{app → support}/models/oscar.rb +2 -0
  884. data/spec/support/models/other_owner_object.rb +4 -0
  885. data/spec/{app → support}/models/override.rb +2 -0
  886. data/spec/{app → support}/models/ownable.rb +2 -0
  887. data/spec/{app → support}/models/owner.rb +4 -0
  888. data/spec/{app → support}/models/pack.rb +2 -0
  889. data/spec/{app → support}/models/page.rb +2 -0
  890. data/spec/{app → support}/models/page_question.rb +2 -0
  891. data/spec/{app → support}/models/palette.rb +3 -1
  892. data/spec/{app → support}/models/parent.rb +2 -0
  893. data/spec/{app → support}/models/parent_doc.rb +2 -0
  894. data/spec/support/models/passport.rb +13 -0
  895. data/spec/{app → support}/models/patient.rb +2 -0
  896. data/spec/{app → support}/models/pdf_writer.rb +2 -0
  897. data/spec/support/models/pencil.rb +3 -0
  898. data/spec/{app → support}/models/person.rb +21 -1
  899. data/spec/{app → support}/models/pet.rb +2 -0
  900. data/spec/{app → support}/models/pet_owner.rb +2 -0
  901. data/spec/{app → support}/models/phone.rb +5 -1
  902. data/spec/support/models/piano.rb +4 -0
  903. data/spec/{app → support}/models/pizza.rb +2 -0
  904. data/spec/{app → support}/models/player.rb +2 -0
  905. data/spec/{app → support}/models/post.rb +2 -0
  906. data/spec/{app → support}/models/post_genre.rb +2 -0
  907. data/spec/{app → support}/models/powerup.rb +2 -0
  908. data/spec/{app → support}/models/preference.rb +2 -0
  909. data/spec/{app → support}/models/princess.rb +2 -0
  910. data/spec/{app → support}/models/product.rb +2 -0
  911. data/spec/support/models/profile.rb +17 -0
  912. data/spec/{app → support}/models/pronunciation.rb +2 -0
  913. data/spec/{app → support}/models/pub.rb +2 -0
  914. data/spec/support/models/publication/encyclopedia.rb +11 -0
  915. data/spec/support/models/publication/review.rb +13 -0
  916. data/spec/support/models/publication.rb +4 -0
  917. data/spec/{app → support}/models/purchase.rb +2 -0
  918. data/spec/support/models/purchased_item.rb +10 -0
  919. data/spec/{app → support}/models/question.rb +2 -0
  920. data/spec/{app → support}/models/quiz.rb +2 -0
  921. data/spec/{app → support}/models/rating.rb +2 -0
  922. data/spec/{app → support}/models/record.rb +2 -0
  923. data/spec/{app → support}/models/registry.rb +2 -0
  924. data/spec/{app → support}/models/role.rb +2 -0
  925. data/spec/{app → support}/models/root_category.rb +2 -0
  926. data/spec/{app → support}/models/sandwich.rb +2 -0
  927. data/spec/{app → support}/models/scheduler.rb +2 -0
  928. data/spec/support/models/scribe.rb +7 -0
  929. data/spec/support/models/sealer.rb +7 -0
  930. data/spec/support/models/seat.rb +24 -0
  931. data/spec/{app → support}/models/seo.rb +2 -0
  932. data/spec/support/models/series.rb +7 -0
  933. data/spec/{app → support}/models/server.rb +2 -0
  934. data/spec/{app → support}/models/service.rb +2 -0
  935. data/spec/{app → support}/models/shape.rb +4 -2
  936. data/spec/{app → support}/models/shelf.rb +2 -0
  937. data/spec/{app → support}/models/shipment_address.rb +2 -0
  938. data/spec/{app → support}/models/shipping_container.rb +2 -0
  939. data/spec/{app → support}/models/shipping_pack.rb +2 -0
  940. data/spec/support/models/shirt.rb +11 -0
  941. data/spec/{app → support}/models/shop.rb +2 -0
  942. data/spec/{app → support}/models/short_agent.rb +2 -0
  943. data/spec/{app → support}/models/short_quiz.rb +2 -0
  944. data/spec/{app → support}/models/simple.rb +2 -0
  945. data/spec/{app → support}/models/slave.rb +2 -0
  946. data/spec/{app → support}/models/song.rb +2 -0
  947. data/spec/{app → support}/models/sound.rb +2 -0
  948. data/spec/support/models/spacer.rb +7 -0
  949. data/spec/{app → support}/models/square.rb +2 -0
  950. data/spec/{app → support}/models/staff.rb +2 -0
  951. data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
  952. data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
  953. data/spec/{app → support}/models/strategy.rb +2 -0
  954. data/spec/{app → support}/models/sub_item.rb +2 -0
  955. data/spec/{app → support}/models/subscription.rb +2 -0
  956. data/spec/{app → support}/models/survey.rb +2 -0
  957. data/spec/{app → support}/models/symptom.rb +2 -0
  958. data/spec/support/models/system_role.rb +7 -0
  959. data/spec/{app → support}/models/tag.rb +2 -0
  960. data/spec/{app → support}/models/target.rb +2 -0
  961. data/spec/{app → support}/models/template.rb +2 -0
  962. data/spec/{app → support}/models/thing.rb +2 -0
  963. data/spec/support/models/threadlocker.rb +7 -0
  964. data/spec/{app → support}/models/title.rb +2 -0
  965. data/spec/{app → support}/models/tool.rb +4 -2
  966. data/spec/{app → support}/models/topping.rb +2 -0
  967. data/spec/support/models/toy.rb +9 -0
  968. data/spec/{app → support}/models/track.rb +2 -0
  969. data/spec/{app → support}/models/translation.rb +2 -0
  970. data/spec/{app → support}/models/tree.rb +2 -0
  971. data/spec/support/models/truck.rb +7 -0
  972. data/spec/{app → support}/models/user.rb +2 -0
  973. data/spec/{app → support}/models/user_account.rb +2 -0
  974. data/spec/{app → support}/models/validation_callback.rb +2 -0
  975. data/spec/support/models/vehicle.rb +18 -0
  976. data/spec/{app → support}/models/version.rb +2 -0
  977. data/spec/{app → support}/models/vertex.rb +3 -1
  978. data/spec/{app → support}/models/vet_visit.rb +2 -0
  979. data/spec/{app → support}/models/video.rb +2 -0
  980. data/spec/support/models/video_game.rb +3 -0
  981. data/spec/support/models/washer.rb +7 -0
  982. data/spec/{app → support}/models/weapon.rb +2 -0
  983. data/spec/{app → support}/models/wiki_page.rb +3 -0
  984. data/spec/{app → support}/models/word.rb +2 -0
  985. data/spec/{app → support}/models/word_origin.rb +2 -0
  986. data/spec/{app → support}/models/writer.rb +4 -2
  987. data/spec/support/shared/time.rb +53 -0
  988. data/spec/support/spec_config.rb +16 -3
  989. data.tar.gz.sig +0 -0
  990. metadata +1100 -738
  991. metadata.gz.sig +0 -0
  992. data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
  993. data/lib/mongoid/matchable/all.rb +0 -28
  994. data/lib/mongoid/matchable/and.rb +0 -30
  995. data/lib/mongoid/matchable/default.rb +0 -119
  996. data/lib/mongoid/matchable/elem_match.rb +0 -34
  997. data/lib/mongoid/matchable/eq.rb +0 -22
  998. data/lib/mongoid/matchable/exists.rb +0 -23
  999. data/lib/mongoid/matchable/gt.rb +0 -23
  1000. data/lib/mongoid/matchable/gte.rb +0 -23
  1001. data/lib/mongoid/matchable/in.rb +0 -24
  1002. data/lib/mongoid/matchable/lt.rb +0 -23
  1003. data/lib/mongoid/matchable/lte.rb +0 -23
  1004. data/lib/mongoid/matchable/ne.rb +0 -21
  1005. data/lib/mongoid/matchable/nin.rb +0 -22
  1006. data/lib/mongoid/matchable/nor.rb +0 -37
  1007. data/lib/mongoid/matchable/or.rb +0 -33
  1008. data/lib/mongoid/matchable/regexp.rb +0 -27
  1009. data/lib/mongoid/matchable/size.rb +0 -21
  1010. data/lib/support/ruby_version.rb +0 -26
  1011. data/spec/app/models/actress.rb +0 -2
  1012. data/spec/app/models/bed.rb +0 -1
  1013. data/spec/app/models/car.rb +0 -1
  1014. data/spec/app/models/eraser.rb +0 -1
  1015. data/spec/app/models/learner.rb +0 -2
  1016. data/spec/app/models/my_hash.rb +0 -2
  1017. data/spec/app/models/other_owner_object.rb +0 -2
  1018. data/spec/app/models/passport.rb +0 -5
  1019. data/spec/app/models/pencil.rb +0 -1
  1020. data/spec/app/models/profile.rb +0 -5
  1021. data/spec/app/models/series.rb +0 -4
  1022. data/spec/app/models/truck.rb +0 -3
  1023. data/spec/app/models/vehicle.rb +0 -11
  1024. data/spec/app/models/video_game.rb +0 -1
  1025. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
  1026. data/spec/mongoid/matchable/all_spec.rb +0 -31
  1027. data/spec/mongoid/matchable/and_spec.rb +0 -187
  1028. data/spec/mongoid/matchable/default_spec.rb +0 -137
  1029. data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
  1030. data/spec/mongoid/matchable/eq_spec.rb +0 -48
  1031. data/spec/mongoid/matchable/exists_spec.rb +0 -57
  1032. data/spec/mongoid/matchable/gt_spec.rb +0 -86
  1033. data/spec/mongoid/matchable/gte_spec.rb +0 -84
  1034. data/spec/mongoid/matchable/in_spec.rb +0 -49
  1035. data/spec/mongoid/matchable/lt_spec.rb +0 -85
  1036. data/spec/mongoid/matchable/lte_spec.rb +0 -85
  1037. data/spec/mongoid/matchable/ne_spec.rb +0 -46
  1038. data/spec/mongoid/matchable/nin_spec.rb +0 -48
  1039. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  1040. data/spec/mongoid/matchable/or_spec.rb +0 -131
  1041. data/spec/mongoid/matchable/regexp_spec.rb +0 -59
  1042. data/spec/mongoid/matchable/size_spec.rb +0 -25
  1043. data/spec/mongoid/matchable_spec.rb +0 -853
  1044. data/spec/support/child_process_helper.rb +0 -76
  1045. data/spec/support/cluster_config.rb +0 -158
  1046. /data/spec/{app → support}/models/array_field.rb +0 -0
  1047. /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
  1048. /data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
  1049. /data/spec/{app → support}/models/updatable.rb +0 -0
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
@@ -112,7 +114,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
112
114
  context "when the parent is not a new record" do
113
115
 
114
116
  let(:person) do
115
- Person.create
117
+ Person.create!
116
118
  end
117
119
 
118
120
  let(:address) do
@@ -131,7 +133,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
131
133
  context "when appending more than one document at once" do
132
134
 
133
135
  let(:person) do
134
- Person.create
136
+ Person.create!
135
137
  end
136
138
 
137
139
  let(:address_one) do
@@ -207,7 +209,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
207
209
  context "when the parent is not a new record" do
208
210
 
209
211
  let(:parent_role) do
210
- Role.create(name: "CEO")
212
+ Role.create!(name: "CEO")
211
213
  end
212
214
 
213
215
  let(:child_role) do
@@ -226,7 +228,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
226
228
 
227
229
  context "when the child has one sided many to many relation" do
228
230
  let(:person) do
229
- Person.create
231
+ Person.create!
230
232
  end
231
233
 
232
234
  let(:message) do
@@ -309,7 +311,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
309
311
  context "when the parent is not a new record" do
310
312
 
311
313
  let(:person) do
312
- Person.create
314
+ Person.create!
313
315
  end
314
316
 
315
317
  let(:address) do
@@ -330,11 +332,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
330
332
  context "when setting via an overridden method from the parent" do
331
333
 
332
334
  let!(:person) do
333
- Person.create
335
+ Person.create!
334
336
  end
335
337
 
336
338
  let!(:address) do
337
- person.addresses.create(street: "Alt Treptow")
339
+ person.addresses.create!(street: "Alt Treptow")
338
340
  end
339
341
 
340
342
  let!(:new_address) do
@@ -342,7 +344,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
342
344
  end
343
345
 
344
346
  before do
345
- person.update_attributes(set_addresses: [ new_address ])
347
+ person.update_attributes!(set_addresses: [ new_address ])
346
348
  end
347
349
 
348
350
  it "overwrites the existing addresses" do
@@ -372,7 +374,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
372
374
 
373
375
  before do
374
376
  person.addresses = [ address_two ]
375
- person.save
377
+ person.save!
376
378
  end
377
379
 
378
380
  it "sets the new documents" do
@@ -406,7 +408,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
406
408
 
407
409
  before do
408
410
  doctor.addresses = [ address_one ]
409
- doctor.save
411
+ doctor.save!
410
412
  end
411
413
 
412
414
  it "sets the documents" do
@@ -425,7 +427,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
425
427
 
426
428
  before do
427
429
  doctor.addresses = [ address_two ]
428
- doctor.save
430
+ doctor.save!
429
431
  end
430
432
 
431
433
  it "sets the new documents" do
@@ -443,7 +445,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
443
445
  context "when replacing an existing relation" do
444
446
 
445
447
  let(:person) do
446
- Person.create(addresses: addresses)
448
+ Person.create!(addresses: addresses)
447
449
  end
448
450
 
449
451
  let(:addresses) do
@@ -504,7 +506,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
504
506
  end
505
507
 
506
508
  let(:tracking_id) do
507
- MyCompany::Model::TrackingId.create
509
+ MyCompany::Model::TrackingId.create!
508
510
  end
509
511
 
510
512
  let(:history) do
@@ -539,7 +541,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
539
541
  inflect.singular("address_numbers", "address_number")
540
542
  end
541
543
  slave.address_numbers << AddressNumber.new(country_code: 1)
542
- slave.save
544
+ slave.save!
543
545
  end
544
546
 
545
547
  it "requires an inflection to determine the class" do
@@ -550,15 +552,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
550
552
  context "when setting the entire tree via a hash" do
551
553
 
552
554
  let(:person) do
553
- Person.create
555
+ Person.create!
554
556
  end
555
557
 
556
558
  let!(:address_one) do
557
- person.addresses.create(street: "Tauentzienstr")
559
+ person.addresses.create!(street: "Tauentzienstr")
558
560
  end
559
561
 
560
562
  let!(:address_two) do
561
- person.addresses.create(street: "Kudamm")
563
+ person.addresses.create!(street: "Kudamm")
562
564
  end
563
565
 
564
566
  let(:attributes) do
@@ -569,7 +571,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
569
571
 
570
572
  before do
571
573
  attributes["addresses"][0]["city"] = "Berlin"
572
- person.update_attributes(attributes)
574
+ person.update_attributes!(attributes)
573
575
  end
574
576
 
575
577
  it "sets the new attributes" do
@@ -585,15 +587,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
585
587
  context "when setting an embedded sub-document tree via a hash" do
586
588
 
587
589
  let(:person) do
588
- Person.create
590
+ Person.create!
589
591
  end
590
592
 
591
593
  let!(:address_one) do
592
- person.addresses.create(street: "Tauentzienstr")
594
+ person.addresses.create!(street: "Tauentzienstr")
593
595
  end
594
596
 
595
597
  let!(:location_one) do
596
- person.addresses.first.locations.create(name: "Work")
598
+ person.addresses.first.locations.create!(name: "Work")
597
599
  end
598
600
 
599
601
  let(:attributes) do
@@ -605,7 +607,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
605
607
  before do
606
608
  attributes["city"] = "Berlin"
607
609
  attributes["locations"][0]["name"] = "Home"
608
- person.addresses.first.update_attributes(attributes)
610
+ person.addresses.first.update_attributes!(attributes)
609
611
  end
610
612
 
611
613
  it "sets the new attributes on the address" do
@@ -678,7 +680,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
678
680
  context "when the parent is not a new record" do
679
681
 
680
682
  let(:parent_role) do
681
- Role.create(name: "CTO")
683
+ Role.create!(name: "CTO")
682
684
  end
683
685
 
684
686
  let(:child_role) do
@@ -746,7 +748,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
746
748
  context "when the parent is persisted" do
747
749
 
748
750
  let(:person) do
749
- Person.create
751
+ Person.create!
750
752
  end
751
753
 
752
754
  let(:address) do
@@ -795,7 +797,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
795
797
  context "when saving the parent" do
796
798
 
797
799
  before do
798
- person.save
800
+ person.save!
799
801
  person.reload
800
802
  end
801
803
 
@@ -809,7 +811,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
809
811
  context "when setting on a reload" do
810
812
 
811
813
  let(:person) do
812
- Person.create
814
+ Person.create!
813
815
  end
814
816
 
815
817
  let(:address) do
@@ -879,7 +881,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
879
881
  context "when the documents are not new records" do
880
882
 
881
883
  let(:parent_role) do
882
- Role.create
884
+ Role.create!
883
885
  end
884
886
 
885
887
  let(:child_role) do
@@ -909,13 +911,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
909
911
  describe "#as_document" do
910
912
 
911
913
  let!(:person) do
912
- Person.create
914
+ Person.create!
913
915
  end
914
916
 
915
917
  context 'when a string is used to access an attribute' do
916
918
 
917
919
  let!(:address) do
918
- person.addresses.create(street: "one")
920
+ person.addresses.create!(street: "one")
919
921
  end
920
922
 
921
923
  let(:document) do
@@ -930,7 +932,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
930
932
  context 'when a symbol is used to access an attribute' do
931
933
 
932
934
  let!(:address) do
933
- person.addresses.create(street: "one")
935
+ person.addresses.create!(street: "one")
934
936
  end
935
937
 
936
938
  let(:document) do
@@ -945,7 +947,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
945
947
  context "when the relation has no default scope" do
946
948
 
947
949
  let!(:address) do
948
- person.addresses.create(street: "one")
950
+ person.addresses.create!(street: "one")
949
951
  end
950
952
 
951
953
  let(:document) do
@@ -1102,7 +1104,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1102
1104
  context "when providing nested attributes" do
1103
1105
 
1104
1106
  let(:person) do
1105
- Person.create
1107
+ Person.create!
1106
1108
  end
1107
1109
 
1108
1110
  let(:address) do
@@ -1116,7 +1118,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1116
1118
  context "when followed by a save" do
1117
1119
 
1118
1120
  before do
1119
- address.save
1121
+ address.save!
1120
1122
  end
1121
1123
 
1122
1124
  let(:location) do
@@ -1136,13 +1138,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1136
1138
  context "when the parent has been persisted" do
1137
1139
 
1138
1140
  let(:person) do
1139
- Person.create
1141
+ Person.create!
1140
1142
  end
1141
1143
 
1142
1144
  context "when the children are persisted" do
1143
1145
 
1144
1146
  let!(:address) do
1145
- person.addresses.create(street: "High St")
1147
+ person.addresses.create!(street: "High St")
1146
1148
  end
1147
1149
 
1148
1150
  let!(:relation) do
@@ -1258,7 +1260,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1258
1260
  context "when the parent is not a new record" do
1259
1261
 
1260
1262
  let(:person) do
1261
- Person.create
1263
+ Person.create!
1262
1264
  end
1263
1265
 
1264
1266
  let(:address) do
@@ -1277,7 +1279,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1277
1279
  context "when concatenating an empty array" do
1278
1280
 
1279
1281
  let(:person) do
1280
- Person.create
1282
+ Person.create!
1281
1283
  end
1282
1284
 
1283
1285
  before do
@@ -1293,7 +1295,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1293
1295
  context "when appending more than one document at once" do
1294
1296
 
1295
1297
  let(:person) do
1296
- Person.create
1298
+ Person.create!
1297
1299
  end
1298
1300
 
1299
1301
  let(:address_one) do
@@ -1365,7 +1367,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1365
1367
  context "when the parent is not a new record" do
1366
1368
 
1367
1369
  let(:parent_role) do
1368
- Role.create(name: "CEO")
1370
+ Role.create!(name: "CEO")
1369
1371
  end
1370
1372
 
1371
1373
  let(:child_role) do
@@ -1386,17 +1388,262 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1386
1388
  describe "#count" do
1387
1389
 
1388
1390
  let(:person) do
1389
- Person.create
1391
+ Person.create!
1390
1392
  end
1391
1393
 
1392
1394
  before do
1393
- person.addresses.create(street: "Upper")
1395
+ person.addresses.create!(street: "Upper")
1394
1396
  person.addresses.build(street: "Bond")
1397
+ person.addresses.build(street: "Lower")
1395
1398
  end
1396
1399
 
1397
1400
  it "returns the number of persisted documents" do
1398
1401
  expect(person.addresses.count).to eq(1)
1399
1402
  end
1403
+
1404
+ context 'block form' do
1405
+ it "iterates across all documents" do
1406
+ expect(person.addresses.count {|a| a.persisted? }).to eq(1)
1407
+ expect(person.addresses.count {|a| !a.persisted? }).to eq(2)
1408
+ expect(person.addresses.count {|a| a.street.include?('on') }).to eq(1)
1409
+ expect(person.addresses.count {|a| a.street.ends_with?('er') }).to eq(2)
1410
+ end
1411
+ end
1412
+
1413
+ context 'argument form' do
1414
+ it "behaves correctly when given a model instance" do
1415
+ expect(person.addresses.count(person.addresses.first)).to eq(1)
1416
+ end
1417
+
1418
+ it "behaves correctly when given a non-model instance" do
1419
+ expect(person.addresses.count(1)).to eq(0)
1420
+ end
1421
+ end
1422
+ end
1423
+
1424
+ describe "#any?" do
1425
+
1426
+ let(:person) do
1427
+ Person.create!
1428
+ end
1429
+
1430
+ context "when documents are persisted" do
1431
+ before do
1432
+ person.addresses.create!(street: "Upper")
1433
+ end
1434
+
1435
+ it "returns true" do
1436
+ expect(person.addresses.any?).to be true
1437
+ end
1438
+
1439
+ it "block form iterates across all documents" do
1440
+ expect(person.addresses.any? {|a| a.street == "Upper" }).to be true
1441
+ expect(person.addresses.any? {|a| a.street == "Bond" }).to be false
1442
+ end
1443
+
1444
+ context 'argument form' do
1445
+ it "behaves correctly when given a model instance" do
1446
+ expect(person.addresses.any?(person.addresses.first)).to be true
1447
+ end
1448
+
1449
+ it "behaves correctly when given a non-model instance" do
1450
+ expect(person.addresses.any?(1)).to be false
1451
+ end
1452
+ end
1453
+ end
1454
+
1455
+ context "when documents are not persisted" do
1456
+ before do
1457
+ person.addresses.build(street: "Bond")
1458
+ end
1459
+
1460
+ it "returns true" do
1461
+ expect(person.addresses.any?).to be true
1462
+ end
1463
+
1464
+ it "block form iterates across all documents" do
1465
+ expect(person.addresses.any? {|a| a.street == "Upper" }).to be false
1466
+ expect(person.addresses.any? {|a| a.street == "Bond" }).to be true
1467
+ end
1468
+
1469
+ context 'argument form' do
1470
+ it "behaves correctly when given a model instance" do
1471
+ expect(person.addresses.any?(person.addresses.first)).to be true
1472
+ end
1473
+
1474
+ it "behaves correctly when given a non-model instance" do
1475
+ expect(person.addresses.any?(1)).to be false
1476
+ end
1477
+ end
1478
+ end
1479
+
1480
+ context "when documents are not present" do
1481
+ it "returns false" do
1482
+ expect(person.addresses.any?).to be false
1483
+ end
1484
+
1485
+ it "block form iterates across all documents" do
1486
+ expect(person.addresses.any?(&:a)).to be false
1487
+ end
1488
+
1489
+ it "argument form is supported" do
1490
+ expect(person.addresses.any?(1)).to be false
1491
+ end
1492
+ end
1493
+ end
1494
+
1495
+ describe "#all?" do
1496
+
1497
+ let(:person) do
1498
+ Person.create!
1499
+ end
1500
+
1501
+ context "when documents are persisted" do
1502
+ before do
1503
+ person.addresses.create!(street: "Upper")
1504
+ end
1505
+
1506
+ it "returns true" do
1507
+ expect(person.addresses.all?).to be true
1508
+ end
1509
+
1510
+ it "block form iterates across all documents" do
1511
+ expect(person.addresses.all? {|a| a.street == "Upper" }).to be true
1512
+ expect(person.addresses.all? {|a| a.street == "Bond" }).to be false
1513
+ end
1514
+
1515
+ context 'argument form' do
1516
+ it "behaves correctly when given a model instance" do
1517
+ expect(person.addresses.all?(person.addresses.first)).to be true
1518
+ end
1519
+
1520
+ it "behaves correctly when given a non-model instance" do
1521
+ expect(person.addresses.all?(1)).to be false
1522
+ end
1523
+ end
1524
+ end
1525
+
1526
+ context "when documents are not persisted" do
1527
+ before do
1528
+ person.addresses.build(street: "Bond")
1529
+ end
1530
+
1531
+ it "returns true" do
1532
+ expect(person.addresses.all?).to be true
1533
+ end
1534
+
1535
+ it "block form iterates across all documents" do
1536
+ expect(person.addresses.all? {|a| a.street == "Upper" }).to be false
1537
+ expect(person.addresses.all? {|a| a.street == "Bond" }).to be true
1538
+ end
1539
+
1540
+ context 'argument form' do
1541
+ it "behaves correctly when given a model instance" do
1542
+ expect(person.addresses.all?(person.addresses.first)).to be true
1543
+ end
1544
+
1545
+ it "behaves correctly when given a non-model instance" do
1546
+ expect(person.addresses.all?(1)).to be false
1547
+ end
1548
+ end
1549
+ end
1550
+
1551
+ context "when documents are not present" do
1552
+ it "returns false" do
1553
+ expect(person.addresses.all?).to be true
1554
+ end
1555
+
1556
+ it "block form iterates across all documents" do
1557
+ expect(person.addresses.all?(&:foo)).to be true
1558
+ end
1559
+
1560
+ context 'argument form' do
1561
+ it "behaves correctly when given nil" do
1562
+ expect(person.addresses.all?(nil)).to be true
1563
+ end
1564
+
1565
+ it "behaves correctly when given a non-model instance" do
1566
+ expect(person.addresses.all?(1)).to be true
1567
+ end
1568
+ end
1569
+ end
1570
+ end
1571
+
1572
+ describe "#none?" do
1573
+
1574
+ let(:person) do
1575
+ Person.create!
1576
+ end
1577
+
1578
+ context "when documents are persisted" do
1579
+ before do
1580
+ person.addresses.create!(street: "Upper")
1581
+ end
1582
+
1583
+ it "returns true" do
1584
+ expect(person.addresses.none?).to be false
1585
+ end
1586
+
1587
+ it "block form iterates across all documents" do
1588
+ expect(person.addresses.none? {|a| a.street == "Upper" }).to be false
1589
+ expect(person.addresses.none? {|a| a.street == "Bond" }).to be true
1590
+ end
1591
+
1592
+ context 'argument form' do
1593
+ it "behaves correctly when given a model instance" do
1594
+ expect(person.addresses.none?(person.addresses.first)).to be false
1595
+ end
1596
+
1597
+ it "behaves correctly when given a non-model instance" do
1598
+ expect(person.addresses.none?(1)).to be true
1599
+ end
1600
+ end
1601
+ end
1602
+
1603
+ context "when documents are not persisted" do
1604
+ before do
1605
+ person.addresses.build(street: "Bond")
1606
+ end
1607
+
1608
+ it "returns true" do
1609
+ expect(person.addresses.none?).to be false
1610
+ end
1611
+
1612
+ it "block form iterates across all documents" do
1613
+ expect(person.addresses.none? {|a| a.street == "Upper" }).to be true
1614
+ expect(person.addresses.none? {|a| a.street == "Bond" }).to be false
1615
+ end
1616
+
1617
+ context 'argument form' do
1618
+ it "behaves correctly when given a model instance" do
1619
+ expect(person.addresses.none?(person.addresses.first)).to be false
1620
+ end
1621
+
1622
+ it "behaves correctly when given a non-model instance" do
1623
+ expect(person.addresses.none?(1)).to be true
1624
+ end
1625
+ end
1626
+ end
1627
+
1628
+ context "when documents are not present" do
1629
+ it "returns false" do
1630
+ expect(person.addresses.none?).to be true
1631
+ end
1632
+
1633
+ it "block form iterates across all documents" do
1634
+ expect(person.addresses.none?(&:a)).to be true
1635
+ end
1636
+
1637
+ context 'argument form' do
1638
+ it "behaves correctly when given nil" do
1639
+ expect(person.addresses.none?(nil)).to be true
1640
+ end
1641
+
1642
+ it "behaves correctly when given a non-model instance" do
1643
+ expect(person.addresses.none?(1)).to be true
1644
+ end
1645
+ end
1646
+ end
1400
1647
  end
1401
1648
 
1402
1649
  describe "#create" do
@@ -1404,11 +1651,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1404
1651
  context "when providing multiple attributes" do
1405
1652
 
1406
1653
  let(:person) do
1407
- Person.create
1654
+ Person.create!
1408
1655
  end
1409
1656
 
1410
1657
  let!(:addresses) do
1411
- person.addresses.create([{ street: "Bond" }, { street: "Upper" }])
1658
+ person.addresses.create!([{ street: "Bond" }, { street: "Upper" }])
1412
1659
  end
1413
1660
 
1414
1661
  it "creates multiple documents" do
@@ -1431,11 +1678,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1431
1678
  context "when the relation is not cyclic" do
1432
1679
 
1433
1680
  let(:person) do
1434
- Person.create
1681
+ Person.create!
1435
1682
  end
1436
1683
 
1437
1684
  let!(:address) do
1438
- person.addresses.create(street: "Bond") do |address|
1685
+ person.addresses.create!(street: "Bond") do |address|
1439
1686
  address.state = "CA"
1440
1687
  end
1441
1688
  end
@@ -1479,7 +1726,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1479
1726
  context "when embedding a multi word named document" do
1480
1727
 
1481
1728
  let!(:component) do
1482
- person.address_components.create(street: "Test")
1729
+ person.address_components.create!(street: "Test")
1483
1730
  end
1484
1731
 
1485
1732
  it "saves the embedded document" do
@@ -1491,11 +1738,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1491
1738
  context "when the relation is cyclic" do
1492
1739
 
1493
1740
  let!(:entry) do
1494
- Entry.create(title: "hi")
1741
+ Entry.create!(title: "hi")
1495
1742
  end
1496
1743
 
1497
1744
  let!(:child_entry) do
1498
- entry.child_entries.create(title: "hello")
1745
+ entry.child_entries.create!(title: "hello")
1499
1746
  end
1500
1747
 
1501
1748
  it "creates a new child" do
@@ -1507,7 +1754,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1507
1754
  describe "#create!" do
1508
1755
 
1509
1756
  let(:person) do
1510
- Person.create
1757
+ Person.create!
1511
1758
  end
1512
1759
 
1513
1760
  context "when providing multiple attributes" do
@@ -1666,7 +1913,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1666
1913
  describe "#delete_if" do
1667
1914
 
1668
1915
  let(:person) do
1669
- Person.create
1916
+ Person.create!
1670
1917
  end
1671
1918
 
1672
1919
  context "when the documents are new" do
@@ -1715,11 +1962,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1715
1962
  context "when the documents persisted" do
1716
1963
 
1717
1964
  let!(:address_one) do
1718
- person.addresses.create(street: "Bond")
1965
+ person.addresses.create!(street: "Bond")
1719
1966
  end
1720
1967
 
1721
1968
  let!(:address_two) do
1722
- person.addresses.create(street: "Upper")
1969
+ person.addresses.create!(street: "Upper")
1723
1970
  end
1724
1971
 
1725
1972
  context "when a block is provided" do
@@ -1774,7 +2021,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1774
2021
  describe "##{method}" do
1775
2022
 
1776
2023
  let(:person) do
1777
- Person.create
2024
+ Person.create!
1778
2025
  end
1779
2026
 
1780
2027
  context "when the documents are new" do
@@ -1828,11 +2075,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1828
2075
  context "when the documents persisted" do
1829
2076
 
1830
2077
  let!(:address_one) do
1831
- person.addresses.create(street: "Bond")
2078
+ person.addresses.create!(street: "Bond")
1832
2079
  end
1833
2080
 
1834
2081
  let!(:address_two) do
1835
- person.addresses.create(street: "Upper")
2082
+ person.addresses.create!(street: "Upper")
1836
2083
  end
1837
2084
 
1838
2085
  context "when conditions are provided" do
@@ -1879,7 +2126,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1879
2126
  context "when removing and resaving" do
1880
2127
 
1881
2128
  let(:owner) do
1882
- PetOwner.create(title: "AKC")
2129
+ PetOwner.create!(title: "AKC")
1883
2130
  end
1884
2131
 
1885
2132
  before do
@@ -1975,13 +2222,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
1975
2222
  describe "#exists?" do
1976
2223
 
1977
2224
  let!(:person) do
1978
- Person.create
2225
+ Person.create!
1979
2226
  end
1980
2227
 
1981
2228
  context "when documents exist in the database" do
1982
2229
 
1983
2230
  before do
1984
- person.addresses.create(street: "Bond St")
2231
+ person.addresses.create!(street: "Bond St")
1985
2232
  end
1986
2233
 
1987
2234
  it "returns true" do
@@ -2112,12 +2359,50 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2112
2359
  end
2113
2360
  end
2114
2361
  end
2362
+
2363
+ context "with block" do
2364
+ let!(:author) do
2365
+ Person.create!(title: 'Person')
2366
+ end
2367
+
2368
+ let!(:video_one) do
2369
+ author.videos.create!(title: 'video one')
2370
+ end
2371
+
2372
+ let!(:video_two) do
2373
+ author.videos.create!(title: 'video two')
2374
+ end
2375
+
2376
+ it "finds one" do
2377
+ expect(
2378
+ author.videos.find do |video|
2379
+ video.title == 'video one'
2380
+ end
2381
+ ).to eq(video_one)
2382
+ end
2383
+
2384
+ it "returns first match of multiple" do
2385
+ expect(
2386
+ author.videos.find do |video|
2387
+ ['video one', 'video two'].include?(video.title)
2388
+ end
2389
+ ).to be_a(Video)
2390
+ end
2391
+
2392
+ it "returns nil when not found" do
2393
+ expect(
2394
+ author.videos.find do |video|
2395
+ video.title == 'non exiting one'
2396
+ end
2397
+ ).to be_nil
2398
+ end
2399
+ end
2115
2400
  end
2116
2401
 
2117
2402
  describe "#find_or_create_by" do
2118
2403
 
2119
2404
  let(:person) do
2120
- Person.create
2405
+ Person.create!
2121
2406
  end
2122
2407
 
2123
2408
  let!(:address) do
@@ -2160,11 +2445,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2160
2445
  # context "when the child belongs to another document" do
2161
2446
  #
2162
2447
  # let(:product) do
2163
- # Product.create
2448
+ # Product.create!
2164
2449
  # end
2165
2450
  #
2166
2451
  # let(:purchase) do
2167
- # Purchase.create
2452
+ # Purchase.create!
2168
2453
  # end
2169
2454
  #
2170
2455
  # let(:line_item) do
@@ -2183,7 +2468,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2183
2468
  describe "#find_or_create_by!" do
2184
2469
 
2185
2470
  let(:person) do
2186
- Person.create
2471
+ Person.create!
2187
2472
  end
2188
2473
 
2189
2474
  let!(:address) do
@@ -2235,11 +2520,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2235
2520
  # context "when the child belongs to another document" do
2236
2521
  #
2237
2522
  # let(:product) do
2238
- # Product.create
2523
+ # Product.create!
2239
2524
  # end
2240
2525
  #
2241
2526
  # let(:purchase) do
2242
- # Purchase.create
2527
+ # Purchase.create!
2243
2528
  # end
2244
2529
  #
2245
2530
  # let(:line_item) do
@@ -2357,11 +2642,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2357
2642
  describe "#method_missing" do
2358
2643
 
2359
2644
  let!(:person) do
2360
- Person.create
2645
+ Person.create!
2361
2646
  end
2362
2647
 
2363
2648
  let!(:address_one) do
2364
- person.addresses.create(
2649
+ person.addresses.create!(
2365
2650
  street: "Market",
2366
2651
  state: "CA",
2367
2652
  services: [ "1", "2" ]
@@ -2369,7 +2654,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2369
2654
  end
2370
2655
 
2371
2656
  let!(:address_two) do
2372
- person.addresses.create(
2657
+ person.addresses.create!(
2373
2658
  street: "Madison",
2374
2659
  state: "NY",
2375
2660
  services: [ "1", "2" ]
@@ -2413,13 +2698,26 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2413
2698
  end
2414
2699
 
2415
2700
  context "when providing a criteria class method" do
2701
+ context "without keyword arguments" do
2416
2702
 
2417
- let(:addresses) do
2418
- person.addresses.california
2703
+ let(:addresses) do
2704
+ person.addresses.california
2705
+ end
2706
+
2707
+ it "applies the criteria to the documents" do
2708
+ expect(addresses).to eq([ address_one ])
2709
+ end
2419
2710
  end
2420
2711
 
2421
- it "applies the criteria to the documents" do
2422
- expect(addresses).to eq([ address_one ])
2712
+ context "with keyword arguments" do
2713
+
2714
+ let(:addresses) do
2715
+ person.addresses.city_and_state(city: "Sacramento", state: "CA")
2716
+ end
2717
+
2718
+ it "applies the criteria to the documents" do
2719
+ expect(addresses).to eq([])
2720
+ end
2423
2721
  end
2424
2722
  end
2425
2723
 
@@ -2504,17 +2802,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2504
2802
  describe "#pop" do
2505
2803
 
2506
2804
  let(:person) do
2507
- Person.create
2805
+ Person.create!
2508
2806
  end
2509
2807
 
2510
2808
  context "when no argument is provided" do
2511
2809
 
2512
2810
  let!(:address_one) do
2513
- person.addresses.create(street: "sonnenallee")
2811
+ person.addresses.create!(street: "sonnenallee")
2514
2812
  end
2515
2813
 
2516
2814
  let!(:address_two) do
2517
- person.addresses.create(street: "hermannstr")
2815
+ person.addresses.create!(street: "hermannstr")
2518
2816
  end
2519
2817
 
2520
2818
  let!(:popped) do
@@ -2537,11 +2835,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2537
2835
  context "when an integer is provided" do
2538
2836
 
2539
2837
  let!(:address_one) do
2540
- person.addresses.create(street: "sonnenallee")
2838
+ person.addresses.create!(street: "sonnenallee")
2541
2839
  end
2542
2840
 
2543
2841
  let!(:address_two) do
2544
- person.addresses.create(street: "hermannstr")
2842
+ person.addresses.create!(street: "hermannstr")
2545
2843
  end
2546
2844
 
2547
2845
  context "when the number is zero" do
@@ -2623,17 +2921,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2623
2921
  describe "#shift" do
2624
2922
 
2625
2923
  let(:person) do
2626
- Person.create
2924
+ Person.create!
2627
2925
  end
2628
2926
 
2629
2927
  context "when no argument is provided" do
2630
2928
 
2631
2929
  let!(:address_one) do
2632
- person.addresses.create(street: "sonnenallee")
2930
+ person.addresses.create!(street: "sonnenallee")
2633
2931
  end
2634
2932
 
2635
2933
  let!(:address_two) do
2636
- person.addresses.create(street: "hermannstr")
2934
+ person.addresses.create!(street: "hermannstr")
2637
2935
  end
2638
2936
 
2639
2937
  let!(:shifted) do
@@ -2656,11 +2954,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2656
2954
  context "when an integer is provided" do
2657
2955
 
2658
2956
  let!(:address_one) do
2659
- person.addresses.create(street: "sonnenallee")
2957
+ person.addresses.create!(street: "sonnenallee")
2660
2958
  end
2661
2959
 
2662
2960
  let!(:address_two) do
2663
- person.addresses.create(street: "hermannstr")
2961
+ person.addresses.create!(street: "hermannstr")
2664
2962
  end
2665
2963
 
2666
2964
  context "when the number is zero" do
@@ -2808,11 +3106,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2808
3106
  describe "##{method}" do
2809
3107
 
2810
3108
  let(:person) do
2811
- Person.create
3109
+ Person.create!
2812
3110
  end
2813
3111
 
2814
3112
  before do
2815
- person.addresses.create(street: "Upper")
3113
+ person.addresses.create!(street: "Upper")
2816
3114
  person.addresses.build(street: "Bond")
2817
3115
  end
2818
3116
 
@@ -2850,7 +3148,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2850
3148
  context "when there are no documents present" do
2851
3149
 
2852
3150
  let(:person) do
2853
- Person.create
3151
+ Person.create!
2854
3152
  end
2855
3153
 
2856
3154
  it "updates nothing" do
@@ -2861,11 +3159,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2861
3159
  context "when documents are present" do
2862
3160
 
2863
3161
  let(:person) do
2864
- Person.create
3162
+ Person.create!
2865
3163
  end
2866
3164
 
2867
3165
  let!(:address) do
2868
- person.addresses.create(street: "Hobrecht", number: 27)
3166
+ person.addresses.create!(street: "Hobrecht", number: 27)
2869
3167
  end
2870
3168
 
2871
3169
  context "when updating with a where clause" do
@@ -2900,16 +3198,16 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2900
3198
  context "when updating the bottom level" do
2901
3199
 
2902
3200
  let!(:person) do
2903
- Person.create
3201
+ Person.create!
2904
3202
  end
2905
3203
 
2906
3204
  let!(:address) do
2907
- person.addresses.create(street: "Joachimstr")
3205
+ person.addresses.create!(street: "Joachimstr")
2908
3206
  end
2909
3207
 
2910
3208
  let!(:location) do
2911
- address.locations.create(name: "vacation", number: 0)
2912
- address.locations.create(name: "work", number: 3)
3209
+ address.locations.create!(name: "vacation", number: 0)
3210
+ address.locations.create!(name: "work", number: 3)
2913
3211
  end
2914
3212
 
2915
3213
  context "when updating with replacement of embedded array" do
@@ -2917,7 +3215,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2917
3215
  context "when updating with a hash" do
2918
3216
 
2919
3217
  before do
2920
- address.update_attributes(locations: [{ name: "home" }])
3218
+ address.update_attributes!(locations: [{ name: "home" }])
2921
3219
  end
2922
3220
 
2923
3221
  it "updates the attributes" do
@@ -2938,7 +3236,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
2938
3236
 
2939
3237
  before do
2940
3238
  location.number = 7
2941
- location.save
3239
+ location.save!
2942
3240
  end
2943
3241
 
2944
3242
  let(:updated_location_number) do
@@ -3071,7 +3369,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3071
3369
  context "when creating a persisted tree" do
3072
3370
 
3073
3371
  let(:quiz) do
3074
- Quiz.create
3372
+ Quiz.create!
3075
3373
  end
3076
3374
 
3077
3375
  let(:page) do
@@ -3136,7 +3434,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3136
3434
  context "when saving the root" do
3137
3435
 
3138
3436
  before do
3139
- person.save
3437
+ person.save!
3140
3438
  end
3141
3439
 
3142
3440
  it "persists the first level document" do
@@ -3290,11 +3588,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3290
3588
  context "when accessing the parent in a destroy callback" do
3291
3589
 
3292
3590
  let!(:league) do
3293
- League.create
3591
+ League.create!
3294
3592
  end
3295
3593
 
3296
3594
  let!(:division) do
3297
- league.divisions.create
3595
+ league.divisions.create!
3298
3596
  end
3299
3597
 
3300
3598
  before do
@@ -3309,15 +3607,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3309
3607
  context "when updating the parent with all attributes" do
3310
3608
 
3311
3609
  let!(:person) do
3312
- Person.create
3610
+ Person.create!
3313
3611
  end
3314
3612
 
3315
3613
  let!(:address) do
3316
- person.addresses.create
3614
+ person.addresses.create!
3317
3615
  end
3318
3616
 
3319
3617
  before do
3320
- person.update_attributes(person.attributes)
3618
+ person.update_attributes!(person.attributes)
3321
3619
  end
3322
3620
 
3323
3621
  it "does not duplicate the embedded documents" do
@@ -3332,13 +3630,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3332
3630
  context "when embedding children named versions" do
3333
3631
 
3334
3632
  let(:acolyte) do
3335
- Acolyte.create(name: "test")
3633
+ Acolyte.create!(name: "test")
3336
3634
  end
3337
3635
 
3338
3636
  context "when creating a child" do
3339
3637
 
3340
3638
  let(:version) do
3341
- acolyte.versions.create(number: 1)
3639
+ acolyte.versions.create!(number: 1)
3342
3640
  end
3343
3641
 
3344
3642
  it "allows the operation" do
@@ -3363,7 +3661,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3363
3661
  let!(:account) do
3364
3662
  Account.new(name: "Testing").tap do |acct|
3365
3663
  acct.memberships.build
3366
- acct.save
3664
+ acct.save!
3367
3665
  end
3368
3666
  end
3369
3667
 
@@ -3375,10 +3673,10 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3375
3673
 
3376
3674
  before do
3377
3675
  account.name = ""
3378
- account.save
3379
3676
  end
3380
3677
 
3381
3678
  it "does not lose the parent reference" do
3679
+ expect(account.save).to eq false
3382
3680
  expect(from_db.memberships.first.account).to eq(account)
3383
3681
  end
3384
3682
  end
@@ -3398,15 +3696,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3398
3696
  context "when moving an embedded document from one parent to another" do
3399
3697
 
3400
3698
  let!(:person_one) do
3401
- Person.create
3699
+ Person.create!
3402
3700
  end
3403
3701
 
3404
3702
  let!(:person_two) do
3405
- Person.create
3703
+ Person.create!
3406
3704
  end
3407
3705
 
3408
3706
  let!(:address) do
3409
- person_one.addresses.create(street: "Kudamm")
3707
+ person_one.addresses.create!(street: "Kudamm")
3410
3708
  end
3411
3709
 
3412
3710
  before do
@@ -3441,7 +3739,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3441
3739
  context "when the relation has a default scope" do
3442
3740
 
3443
3741
  let!(:person) do
3444
- Person.create
3742
+ Person.create!
3445
3743
  end
3446
3744
 
3447
3745
  context "when the default scope is a sort" do
@@ -3511,7 +3809,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3511
3809
  context "when indexing the documents" do
3512
3810
 
3513
3811
  let!(:person) do
3514
- Person.create
3812
+ Person.create!
3515
3813
  end
3516
3814
 
3517
3815
  context "when the documents have a limiting default scope" do
@@ -3560,18 +3858,18 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3560
3858
  context "when the embedded document has an array field" do
3561
3859
 
3562
3860
  let!(:person) do
3563
- Person.create
3861
+ Person.create!
3564
3862
  end
3565
3863
 
3566
3864
  let!(:video) do
3567
- person.videos.create
3865
+ person.videos.create!
3568
3866
  end
3569
3867
 
3570
3868
  context "when saving the array on a persisted document" do
3571
3869
 
3572
3870
  before do
3573
3871
  video.genres = [ "horror", "scifi" ]
3574
- video.save
3872
+ video.save!
3575
3873
  end
3576
3874
 
3577
3875
  it "sets the value" do
@@ -3596,7 +3894,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3596
3894
 
3597
3895
  before do
3598
3896
  loaded_video.genres = [ "comedy" ]
3599
- loaded_video.save
3897
+ loaded_video.save!
3600
3898
  end
3601
3899
 
3602
3900
  it "sets the new value" do
@@ -3614,15 +3912,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3614
3912
  context "when destroying an embedded document" do
3615
3913
 
3616
3914
  let(:person) do
3617
- Person.create
3915
+ Person.create!
3618
3916
  end
3619
3917
 
3620
3918
  let!(:address_one) do
3621
- person.addresses.create(street: "hobrecht")
3919
+ person.addresses.create!(street: "hobrecht")
3622
3920
  end
3623
3921
 
3624
3922
  let!(:address_two) do
3625
- person.addresses.create(street: "maybachufer")
3923
+ person.addresses.create!(street: "maybachufer")
3626
3924
  end
3627
3925
 
3628
3926
  before do
@@ -3694,7 +3992,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3694
3992
  context "when the association has an order defined" do
3695
3993
 
3696
3994
  let(:person) do
3697
- Person.create
3995
+ Person.create!
3698
3996
  end
3699
3997
 
3700
3998
  let(:message_one) do
@@ -3725,11 +4023,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3725
4023
 
3726
4024
  before do
3727
4025
  person.aliases = [ { name: "A", priority: 3 }, { name: "B", priority: 4 }]
3728
- person.save
4026
+ person.save!
3729
4027
  end
3730
4028
 
3731
4029
  let!(:person2) do
3732
- Person.create( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
4030
+ Person.create!( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
3733
4031
  end
3734
4032
 
3735
4033
  it "allows ordering on a key of an embedded document" do
@@ -3764,7 +4062,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3764
4062
  context "when updating multiple levels in one update" do
3765
4063
 
3766
4064
  let!(:person) do
3767
- Person.create(
4065
+ Person.create!(
3768
4066
  addresses: [
3769
4067
  { locations: [{ name: "home" }]}
3770
4068
  ]
@@ -3778,7 +4076,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3778
4076
  end
3779
4077
 
3780
4078
  before do
3781
- from_db.update_attributes(
4079
+ from_db.update_attributes!(
3782
4080
  addresses: [
3783
4081
  { locations: [{ name: "work" }]}
3784
4082
  ]
@@ -3798,15 +4096,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3798
4096
  context "when the embedded relation sorts on a boolean" do
3799
4097
 
3800
4098
  let(:circuit) do
3801
- Circuit.create
4099
+ Circuit.create!
3802
4100
  end
3803
4101
 
3804
4102
  let!(:bus_one) do
3805
- circuit.buses.create(saturday: true)
4103
+ circuit.buses.create!(saturday: true)
3806
4104
  end
3807
4105
 
3808
4106
  let!(:bus_two) do
3809
- circuit.buses.create(saturday: false)
4107
+ circuit.buses.create!(saturday: false)
3810
4108
  end
3811
4109
 
3812
4110
  it "orders properly with the boolean" do
@@ -3817,7 +4115,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3817
4115
  context "when batch replacing multiple relations in a single update" do
3818
4116
 
3819
4117
  let(:document) do
3820
- Person.create
4118
+ Person.create!
3821
4119
  end
3822
4120
 
3823
4121
  let(:person) do
@@ -3825,23 +4123,23 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
3825
4123
  end
3826
4124
 
3827
4125
  let!(:symptom_one) do
3828
- person.symptoms.create
4126
+ person.symptoms.create!
3829
4127
  end
3830
4128
 
3831
4129
  let!(:symptom_two) do
3832
- person.symptoms.create
4130
+ person.symptoms.create!
3833
4131
  end
3834
4132
 
3835
4133
  let!(:appointment_one) do
3836
- person.appointments.create
4134
+ person.appointments.create!
3837
4135
  end
3838
4136
 
3839
4137
  let!(:appointment_two) do
3840
- person.appointments.create
4138
+ person.appointments.create!
3841
4139
  end
3842
4140
 
3843
4141
  before do
3844
- person.update_attributes(
4142
+ person.update_attributes!(
3845
4143
  appointments: [ appointment_one.as_document, appointment_two.as_document ],
3846
4144
  symptoms: [ symptom_one.as_document, symptom_two.as_document ]
3847
4145
  )
@@ -4174,7 +4472,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
4174
4472
  context "when the parent has an after create callback" do
4175
4473
 
4176
4474
  before do
4177
- server.save
4475
+ server.save!
4178
4476
  end
4179
4477
 
4180
4478
  it "does not push the embedded documents twice" do
@@ -4186,7 +4484,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
4186
4484
  context "when embedded documents are stored without ids" do
4187
4485
 
4188
4486
  let!(:band) do
4189
- Band.create(name: "Moderat")
4487
+ Band.create!(name: "Moderat")
4190
4488
  end
4191
4489
 
4192
4490
  before do
@@ -4236,7 +4534,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
4236
4534
  company = Company.new
4237
4535
  4.times { |i| company.staffs << Staff.new(age: 50 + i)}
4238
4536
  2.times { |i| company.staffs << Staff.new(age: 40)}
4239
- company.save
4537
+ company.save!
4240
4538
  company.staffs.delete_if {|x| x.age >= 50}
4241
4539
  expect(company.staffs.count).to eq(2)
4242
4540
  end
@@ -4313,7 +4611,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
4313
4611
  context "when the parent is persisted" do
4314
4612
 
4315
4613
  let(:zone) do
4316
- DNS::Zone.create
4614
+ DNS::Zone.create!
4317
4615
  end
4318
4616
 
4319
4617
  let(:soa_1) do