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::Referenced::HasAndBelongsToMany::Proxy do
@@ -24,7 +26,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
24
26
  context "when the inverse_of is nil" do
25
27
 
26
28
  let!(:article) do
27
- Article.create
29
+ Article.create!
28
30
  end
29
31
 
30
32
  context "when the child document is new" do
@@ -45,7 +47,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
45
47
  context "when the child document is not new" do
46
48
 
47
49
  let(:preference) do
48
- Preference.create
50
+ Preference.create!
49
51
  end
50
52
 
51
53
  it "does not persist the child document" do
@@ -77,7 +79,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
77
79
  context "when the parent is not a new record" do
78
80
 
79
81
  let(:person) do
80
- Person.create
82
+ Person.create!
81
83
  end
82
84
 
83
85
  let!(:preference) do
@@ -121,11 +123,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
121
123
  context "when appending in a parent create block" do
122
124
 
123
125
  let!(:preference) do
124
- Preference.create(name: "testing")
126
+ Preference.create!(name: "testing")
125
127
  end
126
128
 
127
129
  let!(:person) do
128
- Person.create do |doc|
130
+ Person.create! do |doc|
129
131
  doc.preferences << preference
130
132
  end
131
133
  end
@@ -210,7 +212,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
210
212
  context "when the child is already persisted" do
211
213
 
212
214
  let!(:persisted) do
213
- Preference.create(name: "testy")
215
+ Preference.create!(name: "testy")
214
216
  end
215
217
 
216
218
  let(:preference) do
@@ -219,7 +221,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
219
221
 
220
222
  before do
221
223
  person.preferences.send(method, preference)
222
- person.save
224
+ person.save!
223
225
  end
224
226
 
225
227
  it "adds the documents to the relation" do
@@ -250,7 +252,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
250
252
  context "when setting via the associated ids" do
251
253
 
252
254
  let!(:persisted) do
253
- Preference.create(name: "testy")
255
+ Preference.create!(name: "testy")
254
256
  end
255
257
 
256
258
  let(:preference) do
@@ -262,7 +264,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
262
264
  end
263
265
 
264
266
  before do
265
- person.save
267
+ person.save!
266
268
  end
267
269
 
268
270
  it "adds the documents to the relation" do
@@ -290,7 +292,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
290
292
  context "when the parent is not a new record" do
291
293
 
292
294
  let(:person) do
293
- Person.create
295
+ Person.create!
294
296
  end
295
297
 
296
298
  let(:preference) do
@@ -372,11 +374,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
372
374
  context "when both sides have been persisted" do
373
375
 
374
376
  let(:person) do
375
- Person.create
377
+ Person.create!
376
378
  end
377
379
 
378
380
  let(:event) do
379
- Event.create
381
+ Event.create!
380
382
  end
381
383
 
382
384
  before do
@@ -425,15 +427,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
425
427
  context "when the relation also includes a has_many relation" do
426
428
 
427
429
  let(:artwork) do
428
- Artwork.create
430
+ Artwork.create!
429
431
  end
430
432
 
431
433
  let(:exhibition) do
432
- Exhibition.create
434
+ Exhibition.create!
433
435
  end
434
436
 
435
437
  let(:exhibitor) do
436
- Exhibitor.create(exhibition: exhibition)
438
+ Exhibitor.create!(exhibition: exhibition)
437
439
  end
438
440
 
439
441
  before do
@@ -448,11 +450,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
448
450
  context "when the relation is self referencing" do
449
451
 
450
452
  let(:tag_one) do
451
- Tag.create(text: "one")
453
+ Tag.create!(text: "one")
452
454
  end
453
455
 
454
456
  let(:tag_two) do
455
- Tag.create(text: "two")
457
+ Tag.create!(text: "two")
456
458
  end
457
459
 
458
460
  before do
@@ -561,7 +563,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
561
563
  end
562
564
 
563
565
  let(:preference) do
564
- Preference.create(name: "one")
566
+ Preference.create!(name: "one")
565
567
  end
566
568
 
567
569
  before do
@@ -582,7 +584,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
582
584
  context "when the document is persisted" do
583
585
 
584
586
  before do
585
- person.save
587
+ person.save!
586
588
  end
587
589
 
588
590
  it "does not add the duplicates" do
@@ -653,7 +655,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
653
655
  end
654
656
 
655
657
  let!(:preference) do
656
- Preference.create
658
+ Preference.create!
657
659
  end
658
660
 
659
661
  before do
@@ -700,7 +702,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
700
702
  context "when the parent is not a new record" do
701
703
 
702
704
  let(:person) do
703
- Person.create
705
+ Person.create!
704
706
  end
705
707
 
706
708
  let(:preference) do
@@ -784,7 +786,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
784
786
  expect(person.preferences).to eq([ another_preference ])
785
787
  end
786
788
 
787
- it "persists the relation between another_prefrence and person" do
789
+ it "persists the relation between another_preference and person" do
788
790
  expect(another_preference.people).to eq([ person ])
789
791
  end
790
792
 
@@ -796,7 +798,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
796
798
  context "and person is saved" do
797
799
 
798
800
  before do
799
- person.save
801
+ person.save!
800
802
  person.reload
801
803
  another_preference.reload
802
804
  end
@@ -805,7 +807,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
805
807
  expect(person.preferences).to eq([ another_preference ])
806
808
  end
807
809
 
808
- it "persists the relation between another_prefrence and person" do
810
+ it "persists the relation between another_preference and person" do
809
811
  expect(another_preference.people).to eq([ person ])
810
812
  end
811
813
 
@@ -820,11 +822,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
820
822
 
821
823
  describe "when self-referencing" do
822
824
  let!(:parent) do
823
- Vertex.create
825
+ Vertex.create!
824
826
  end
825
827
 
826
828
  let!(:child) do
827
- Vertex.create(parents: [parent])
829
+ Vertex.create!(parents: [parent])
828
830
  end
829
831
 
830
832
  before do
@@ -961,7 +963,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
961
963
  context "when the relation has been loaded" do
962
964
 
963
965
  let(:person) do
964
- Person.create
966
+ Person.create!
965
967
  end
966
968
 
967
969
  let(:preference) do
@@ -1001,7 +1003,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1001
1003
  end
1002
1004
 
1003
1005
  let(:person) do
1004
- Person.create.tap do |p|
1006
+ Person.create!.tap do |p|
1005
1007
  p.preferences = [ preference ]
1006
1008
  end
1007
1009
  end
@@ -1071,7 +1073,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1071
1073
  context "when the parent is not a new record" do
1072
1074
 
1073
1075
  let(:person) do
1074
- Person.create
1076
+ Person.create!
1075
1077
  end
1076
1078
 
1077
1079
  let!(:preference) do
@@ -1109,7 +1111,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1109
1111
  context "when saving the target" do
1110
1112
 
1111
1113
  before do
1112
- preference.save
1114
+ preference.save!
1113
1115
  end
1114
1116
 
1115
1117
  it "persists the parent keys" do
@@ -1128,13 +1130,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1128
1130
  context "when the parent has been persisted" do
1129
1131
 
1130
1132
  let!(:person) do
1131
- Person.create
1133
+ Person.create!
1132
1134
  end
1133
1135
 
1134
1136
  context "when the children are persisted" do
1135
1137
 
1136
1138
  let!(:preference) do
1137
- person.preferences.create(name: "settings")
1139
+ person.preferences.create!(name: "settings")
1138
1140
  end
1139
1141
 
1140
1142
  let!(:relation) do
@@ -1306,7 +1308,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1306
1308
  context "when the parent is not a new record" do
1307
1309
 
1308
1310
  let(:person) do
1309
- Person.create
1311
+ Person.create!
1310
1312
  end
1311
1313
 
1312
1314
  let!(:preference) do
@@ -1350,11 +1352,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1350
1352
  context "when appending in a parent create block" do
1351
1353
 
1352
1354
  let!(:preference) do
1353
- Preference.create(name: "testing")
1355
+ Preference.create!(name: "testing")
1354
1356
  end
1355
1357
 
1356
1358
  let!(:person) do
1357
- Person.create do |doc|
1359
+ Person.create! do |doc|
1358
1360
  doc.preferences.concat([ preference ])
1359
1361
  end
1360
1362
  end
@@ -1439,7 +1441,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1439
1441
  context "when the child is already persisted" do
1440
1442
 
1441
1443
  let!(:persisted) do
1442
- Preference.create(name: "testy")
1444
+ Preference.create!(name: "testy")
1443
1445
  end
1444
1446
 
1445
1447
  let(:preference) do
@@ -1448,7 +1450,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1448
1450
 
1449
1451
  before do
1450
1452
  person.preferences.concat([ preference ])
1451
- person.save
1453
+ person.save!
1452
1454
  end
1453
1455
 
1454
1456
  it "adds the documents to the relation" do
@@ -1479,7 +1481,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1479
1481
  context "when setting via the associated ids" do
1480
1482
 
1481
1483
  let!(:persisted) do
1482
- Preference.create(name: "testy")
1484
+ Preference.create!(name: "testy")
1483
1485
  end
1484
1486
 
1485
1487
  let(:preference) do
@@ -1491,7 +1493,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1491
1493
  end
1492
1494
 
1493
1495
  before do
1494
- person.save
1496
+ person.save!
1495
1497
  end
1496
1498
 
1497
1499
  it "adds the documents to the relation" do
@@ -1519,7 +1521,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1519
1521
  context "when the parent is not a new record" do
1520
1522
 
1521
1523
  let(:person) do
1522
- Person.create
1524
+ Person.create!
1523
1525
  end
1524
1526
 
1525
1527
  let(:preference) do
@@ -1601,11 +1603,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1601
1603
  context "when both sides have been persisted" do
1602
1604
 
1603
1605
  let(:person) do
1604
- Person.create
1606
+ Person.create!
1605
1607
  end
1606
1608
 
1607
1609
  let(:event) do
1608
- Event.create
1610
+ Event.create!
1609
1611
  end
1610
1612
 
1611
1613
  before do
@@ -1654,15 +1656,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1654
1656
  context "when the relation also includes a has_many relation" do
1655
1657
 
1656
1658
  let(:artwork) do
1657
- Artwork.create
1659
+ Artwork.create!
1658
1660
  end
1659
1661
 
1660
1662
  let(:exhibition) do
1661
- Exhibition.create
1663
+ Exhibition.create!
1662
1664
  end
1663
1665
 
1664
1666
  let(:exhibitor) do
1665
- Exhibitor.create(exhibition: exhibition)
1667
+ Exhibitor.create!(exhibition: exhibition)
1666
1668
  end
1667
1669
 
1668
1670
  before do
@@ -1677,11 +1679,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1677
1679
  context "when the relation is self referencing" do
1678
1680
 
1679
1681
  let(:tag_one) do
1680
- Tag.create(text: "one")
1682
+ Tag.create!(text: "one")
1681
1683
  end
1682
1684
 
1683
1685
  let(:tag_two) do
1684
- Tag.create(text: "two")
1686
+ Tag.create!(text: "two")
1685
1687
  end
1686
1688
 
1687
1689
  before do
@@ -1732,7 +1734,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1732
1734
  describe "#count" do
1733
1735
 
1734
1736
  let(:person) do
1735
- Person.create
1737
+ Person.create!
1736
1738
  end
1737
1739
 
1738
1740
  context "when nothing exists on the relation" do
@@ -1757,7 +1759,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1757
1759
  describe "#any?" do
1758
1760
 
1759
1761
  let(:person) do
1760
- Person.create
1762
+ Person.create!
1761
1763
  end
1762
1764
 
1763
1765
  context "when nothing exists on the relation" do
@@ -1794,7 +1796,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1794
1796
  context "when documents have been persisted" do
1795
1797
 
1796
1798
  let!(:preference) do
1797
- person.preferences.create(name: "setting")
1799
+ person.preferences.create!(name: "setting")
1798
1800
  end
1799
1801
 
1800
1802
  it "returns the number of persisted documents" do
@@ -1805,12 +1807,12 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1805
1807
  context "when appending to a loaded relation" do
1806
1808
 
1807
1809
  let!(:preference) do
1808
- person.preferences.create(name: "setting")
1810
+ person.preferences.create!(name: "setting")
1809
1811
  end
1810
1812
 
1811
1813
  before do
1812
1814
  person.preferences.count
1813
- person.preferences << Preference.create(name: "two")
1815
+ person.preferences << Preference.create!(name: "two")
1814
1816
  end
1815
1817
 
1816
1818
  it "returns the number of persisted documents" do
@@ -1834,7 +1836,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1834
1836
  context "when the documents are part of the relation" do
1835
1837
 
1836
1838
  before do
1837
- Preference.create(person_ids: [ person.id ])
1839
+ Preference.create!(person_ids: [ person.id ])
1838
1840
  end
1839
1841
 
1840
1842
  it "returns the count from the db" do
@@ -1845,7 +1847,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1845
1847
  context "when the documents are not part of the relation" do
1846
1848
 
1847
1849
  before do
1848
- Preference.create
1850
+ Preference.create!
1849
1851
  end
1850
1852
 
1851
1853
  it "returns the count from the db" do
@@ -1859,7 +1861,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1859
1861
  context "when documents have been persisted" do
1860
1862
 
1861
1863
  let!(:house) do
1862
- person.houses.create(name: "Wayne Manor")
1864
+ person.houses.create!(name: "Wayne Manor")
1863
1865
  end
1864
1866
 
1865
1867
  it "returns the number of persisted documents" do
@@ -1883,7 +1885,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1883
1885
  describe "#any?" do
1884
1886
 
1885
1887
  let(:sandwich) do
1886
- Sandwich.create
1888
+ Sandwich.create!
1887
1889
  end
1888
1890
 
1889
1891
  context "when nothing exists on the relation" do
@@ -1951,7 +1953,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1951
1953
  context "when documents have been persisted" do
1952
1954
 
1953
1955
  let!(:meat) do
1954
- sandwich.meats.create
1956
+ sandwich.meats.create!
1955
1957
  end
1956
1958
 
1957
1959
  it "returns true" do
@@ -1972,7 +1974,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1972
1974
 
1973
1975
  context "when new documents exist in the database" do
1974
1976
  before do
1975
- Meat.create(sandwiches: [sandwich])
1977
+ Meat.create!(sandwiches: [sandwich])
1976
1978
  end
1977
1979
 
1978
1980
  it "returns true" do
@@ -1990,15 +1992,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
1990
1992
  context "when using string keys" do
1991
1993
 
1992
1994
  let(:agent) do
1993
- Agent.create(number: "007")
1995
+ Agent.create!(number: "007")
1994
1996
  end
1995
1997
 
1996
1998
  before do
1997
- agent.accounts.create(name: "testing again")
1999
+ agent.accounts.send(method, name: "test again")
1998
2000
  end
1999
2001
 
2000
2002
  it "does not convert the string key to an object id" do
2001
- expect(agent.account_ids).to eq([ "testing-again" ])
2003
+ expect(agent.account_ids).to eq([ "test-again" ])
2002
2004
  end
2003
2005
  end
2004
2006
 
@@ -2070,7 +2072,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2070
2072
  context "when validation fails" do
2071
2073
 
2072
2074
  let(:person) do
2073
- Person.create
2075
+ Person.create!
2074
2076
  end
2075
2077
 
2076
2078
  context "when the relation is not polymorphic" do
@@ -2087,15 +2089,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2087
2089
  describe "#delete" do
2088
2090
 
2089
2091
  let(:person) do
2090
- Person.create
2092
+ Person.create!
2091
2093
  end
2092
2094
 
2093
2095
  let(:preference_one) do
2094
- Preference.create(name: "Testing")
2096
+ Preference.create!(name: "Testing")
2095
2097
  end
2096
2098
 
2097
2099
  let(:preference_two) do
2098
- Preference.create(name: "Test")
2100
+ Preference.create!(name: "Test")
2099
2101
  end
2100
2102
 
2101
2103
  before do
@@ -2170,7 +2172,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2170
2172
  context "when :inverse_of is set" do
2171
2173
 
2172
2174
  let(:event) do
2173
- Event.create
2175
+ Event.create!
2174
2176
  end
2175
2177
 
2176
2178
  before do
@@ -2186,11 +2188,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2186
2188
  context "when the relationships are self referencing" do
2187
2189
 
2188
2190
  let(:tag_one) do
2189
- Tag.create(text: "one")
2191
+ Tag.create!(text: "one")
2190
2192
  end
2191
2193
 
2192
2194
  let(:tag_two) do
2193
- Tag.create(text: "two")
2195
+ Tag.create!(text: "two")
2194
2196
  end
2195
2197
 
2196
2198
  before do
@@ -2359,15 +2361,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2359
2361
  context "when conditions are provided" do
2360
2362
 
2361
2363
  let(:person) do
2362
- Person.create
2364
+ Person.create!
2363
2365
  end
2364
2366
 
2365
2367
  let!(:preference_one) do
2366
- person.preferences.create(name: "Testing")
2368
+ person.preferences.create!(name: "Testing")
2367
2369
  end
2368
2370
 
2369
2371
  let!(:preference_two) do
2370
- person.preferences.create(name: "Test")
2372
+ person.preferences.create!(name: "Test")
2371
2373
  end
2372
2374
 
2373
2375
  let!(:deleted) do
@@ -2397,9 +2399,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2397
2399
  context "when conditions are not provided" do
2398
2400
 
2399
2401
  let(:person) do
2400
- Person.create.tap do |person|
2401
- person.preferences.create(name: "Testing")
2402
- person.preferences.create(name: "Test")
2402
+ Person.create!.tap do |person|
2403
+ person.preferences.create!(name: "Testing")
2404
+ person.preferences.create!(name: "Test")
2403
2405
  end
2404
2406
  end
2405
2407
 
@@ -2433,13 +2435,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2433
2435
  describe "#exists?" do
2434
2436
 
2435
2437
  let!(:person) do
2436
- Person.create
2438
+ Person.create!
2437
2439
  end
2438
2440
 
2439
2441
  context "when documents exist in the database" do
2440
2442
 
2441
2443
  before do
2442
- person.preferences.create
2444
+ person.preferences.create!
2443
2445
  end
2444
2446
 
2445
2447
  it "returns true" do
@@ -2464,23 +2466,23 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2464
2466
  context "when the relation is not polymorphic" do
2465
2467
 
2466
2468
  let(:person) do
2467
- Person.create
2469
+ Person.create!
2468
2470
  end
2469
2471
 
2470
2472
  let!(:preference_one) do
2471
- person.preferences.create(name: "Test")
2473
+ person.preferences.create!(name: "Test")
2472
2474
  end
2473
2475
 
2474
2476
  let!(:preference_two) do
2475
- person.preferences.create(name: "OMG I has relations")
2477
+ person.preferences.create!(name: "OMG I has relations")
2476
2478
  end
2477
2479
 
2478
2480
  let!(:unrelated_pref) do
2479
- Preference.create(name: "orphan annie")
2481
+ Preference.create!(name: "orphan annie")
2480
2482
  end
2481
2483
 
2482
2484
  let!(:unrelated_pref_two) do
2483
- Preference.create(name: "orphan two")
2485
+ Preference.create!(name: "orphan two")
2484
2486
  end
2485
2487
 
2486
2488
  context "when providing an id" do
@@ -2558,7 +2560,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2558
2560
  end
2559
2561
  end
2560
2562
 
2561
- context "when the ids matche unreferenced documents" do
2563
+ context "when the ids match unreferenced documents" do
2562
2564
 
2563
2565
  let(:preferences) do
2564
2566
  person.preferences.find(
@@ -2616,11 +2618,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2616
2618
  context "when the relation is not polymorphic" do
2617
2619
 
2618
2620
  let(:person) do
2619
- Person.create
2621
+ Person.create!
2620
2622
  end
2621
2623
 
2622
2624
  let!(:preference) do
2623
- person.preferences.create(name: "Testing")
2625
+ person.preferences.create!(name: "Testing")
2624
2626
  end
2625
2627
 
2626
2628
  context "when the document exists" do
@@ -2656,11 +2658,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2656
2658
  context "when the relation is not polymorphic" do
2657
2659
 
2658
2660
  let(:person) do
2659
- Person.create
2661
+ Person.create!
2660
2662
  end
2661
2663
 
2662
2664
  let!(:preference) do
2663
- person.preferences.create(name: "Testing")
2665
+ person.preferences.create!(name: "Testing")
2664
2666
  end
2665
2667
 
2666
2668
  context "when the document exists" do
@@ -2705,11 +2707,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2705
2707
  context "when the relation is not polymorphic" do
2706
2708
 
2707
2709
  let(:person) do
2708
- Person.create
2710
+ Person.create!
2709
2711
  end
2710
2712
 
2711
2713
  let!(:preference) do
2712
- person.preferences.create(name: "Testing")
2714
+ person.preferences.create!(name: "Testing")
2713
2715
  end
2714
2716
 
2715
2717
  context "when the document exists" do
@@ -2743,15 +2745,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2743
2745
  describe "#max" do
2744
2746
 
2745
2747
  let(:person) do
2746
- Person.create
2748
+ Person.create!
2747
2749
  end
2748
2750
 
2749
2751
  let(:preference_one) do
2750
- Preference.create(ranking: 5)
2752
+ Preference.create!(ranking: 5)
2751
2753
  end
2752
2754
 
2753
2755
  let(:preference_two) do
2754
- Preference.create(ranking: 10)
2756
+ Preference.create!(ranking: 10)
2755
2757
  end
2756
2758
 
2757
2759
  before do
@@ -2772,15 +2774,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2772
2774
  describe "#max_by" do
2773
2775
 
2774
2776
  let(:person) do
2775
- Person.create
2777
+ Person.create!
2776
2778
  end
2777
2779
 
2778
2780
  let(:preference_one) do
2779
- Preference.create(ranking: 5)
2781
+ Preference.create!(ranking: 5)
2780
2782
  end
2781
2783
 
2782
2784
  let(:preference_two) do
2783
- Preference.create(ranking: 10)
2785
+ Preference.create!(ranking: 10)
2784
2786
  end
2785
2787
 
2786
2788
  before do
@@ -2799,19 +2801,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2799
2801
  describe "#method_missing" do
2800
2802
 
2801
2803
  let!(:person) do
2802
- Person.create
2804
+ Person.create!
2803
2805
  end
2804
2806
 
2805
2807
  let!(:preference_one) do
2806
- person.preferences.create(name: "First", value: "Posting")
2808
+ person.preferences.create!(name: "First", value: "Posting")
2807
2809
  end
2808
2810
 
2809
2811
  let!(:preference_two) do
2810
- person.preferences.create(name: "Second", value: "Testing")
2812
+ person.preferences.create!(name: "Second", value: "Testing")
2811
2813
  end
2812
2814
 
2813
2815
  let!(:unrelated) do
2814
- Preference.create(name: "Third")
2816
+ Preference.create!(name: "Third")
2815
2817
  end
2816
2818
 
2817
2819
  context "when providing a single criteria" do
@@ -2886,7 +2888,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2886
2888
  context "when the inverse relation is not defined" do
2887
2889
 
2888
2890
  let!(:house) do
2889
- person.houses.create(name: "Wayne Manor")
2891
+ person.houses.create!(name: "Wayne Manor")
2890
2892
  end
2891
2893
 
2892
2894
  it "returns the distinct values for the fields" do
@@ -2900,15 +2902,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2900
2902
  describe "#min" do
2901
2903
 
2902
2904
  let(:person) do
2903
- Person.create
2905
+ Person.create!
2904
2906
  end
2905
2907
 
2906
2908
  let(:preference_one) do
2907
- Preference.create(ranking: 5)
2909
+ Preference.create!(ranking: 5)
2908
2910
  end
2909
2911
 
2910
2912
  let(:preference_two) do
2911
- Preference.create(ranking: 10)
2913
+ Preference.create!(ranking: 10)
2912
2914
  end
2913
2915
 
2914
2916
  before do
@@ -2929,15 +2931,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2929
2931
  describe "#min_by" do
2930
2932
 
2931
2933
  let(:person) do
2932
- Person.create
2934
+ Person.create!
2933
2935
  end
2934
2936
 
2935
2937
  let(:preference_one) do
2936
- Preference.create(ranking: 5)
2938
+ Preference.create!(ranking: 5)
2937
2939
  end
2938
2940
 
2939
2941
  let(:preference_two) do
2940
- Preference.create(ranking: 10)
2942
+ Preference.create!(ranking: 10)
2941
2943
  end
2942
2944
 
2943
2945
  before do
@@ -2963,15 +2965,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
2963
2965
  describe "#nullify_all" do
2964
2966
 
2965
2967
  let(:person) do
2966
- Person.create
2968
+ Person.create!
2967
2969
  end
2968
2970
 
2969
2971
  let!(:preference_one) do
2970
- person.preferences.create(name: "One")
2972
+ person.preferences.create!(name: "One")
2971
2973
  end
2972
2974
 
2973
2975
  let!(:preference_two) do
2974
- person.preferences.create(name: "Two")
2976
+ person.preferences.create!(name: "Two")
2975
2977
  end
2976
2978
 
2977
2979
  before do
@@ -3017,9 +3019,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3017
3019
  person.preferences
3018
3020
  end
3019
3021
 
3020
- Array.public_instance_methods.each do |method|
3022
+ Array.public_instance_methods.sort.each do |method|
3021
3023
 
3022
- context "when checking #{method}" do
3024
+ context "when checking Array##{method}" do
3025
+
3026
+ before do
3027
+ expect([].respond_to?(method)).to be true
3028
+ end
3023
3029
 
3024
3030
  it "returns true" do
3025
3031
  expect(preferences.respond_to?(method)).to be true
@@ -3027,9 +3033,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3027
3033
  end
3028
3034
  end
3029
3035
 
3030
- Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy.public_instance_methods.each do |method|
3036
+ Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy.public_instance_methods.sort.each do |method|
3031
3037
 
3032
- context "when checking #{method}" do
3038
+ context "when checking Proxy##{method}" do
3033
3039
 
3034
3040
  it "returns true" do
3035
3041
  expect(preferences.respond_to?(method)).to be true
@@ -3037,9 +3043,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3037
3043
  end
3038
3044
  end
3039
3045
 
3040
- Preference.scopes.keys.each do |method|
3046
+ Preference.scopes.keys.sort.each do |method|
3041
3047
 
3042
- context "when checking #{method}" do
3048
+ context "when checking scope #{method}" do
3043
3049
 
3044
3050
  it "returns true" do
3045
3051
  expect(preferences.respond_to?(method)).to be true
@@ -3050,20 +3056,36 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3050
3056
 
3051
3057
  describe "#scoped" do
3052
3058
 
3053
- let(:person) do
3054
- Person.new
3055
- end
3056
-
3057
3059
  let(:scoped) do
3058
3060
  person.preferences.scoped
3059
3061
  end
3060
3062
 
3061
- it "returns the relation criteria" do
3062
- expect(scoped).to be_a(Mongoid::Criteria)
3063
+ context 'when association is empty' do
3064
+
3065
+ let(:person) do
3066
+ Person.new
3067
+ end
3068
+
3069
+ it "returns the relation criteria" do
3070
+ expect(scoped).to be_a(Mongoid::Criteria)
3071
+ end
3072
+
3073
+ it "returns with an empty selector" do
3074
+ expect(scoped.selector).to eq("_id" => { "$in" => [] })
3075
+ end
3063
3076
  end
3064
3077
 
3065
- it "returns with an empty selector" do
3066
- expect(scoped.selector).to eq({ "$and" => [{ "_id" => { "$in" => [] }}]})
3078
+ context 'when association is not empty' do
3079
+
3080
+ let(:person) do
3081
+ Person.create!(preferences: [
3082
+ Preference.new(id: 123),
3083
+ ])
3084
+ end
3085
+
3086
+ it "returns with a selector including association element ids" do
3087
+ expect(scoped.selector).to eq("_id" => { "$in" => [123] })
3088
+ end
3067
3089
  end
3068
3090
  end
3069
3091
 
@@ -3072,13 +3094,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3072
3094
  describe "##{method}" do
3073
3095
 
3074
3096
  let(:person) do
3075
- Person.create
3097
+ Person.create!
3076
3098
  end
3077
3099
 
3078
3100
  context "when documents have been persisted" do
3079
3101
 
3080
3102
  let!(:preference) do
3081
- person.preferences.create(name: "Testing")
3103
+ person.preferences.create!(name: "Testing")
3082
3104
  end
3083
3105
 
3084
3106
  it "returns the number of documents" do
@@ -3090,7 +3112,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3090
3112
 
3091
3113
  before do
3092
3114
  person.preferences.build(name: "Test")
3093
- person.preferences.create(name: "Test 2")
3115
+ person.preferences.create!(name: "Test 2")
3094
3116
  end
3095
3117
 
3096
3118
  it "returns the total number of documents" do
@@ -3105,15 +3127,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3105
3127
  context "when the relation has no default scope" do
3106
3128
 
3107
3129
  let!(:person) do
3108
- Person.create
3130
+ Person.create!
3109
3131
  end
3110
3132
 
3111
3133
  let!(:preference_one) do
3112
- person.preferences.create(name: "first")
3134
+ person.preferences.create!(name: "first")
3113
3135
  end
3114
3136
 
3115
3137
  let!(:preference_two) do
3116
- Preference.create(name: "second")
3138
+ Preference.create!(name: "second")
3117
3139
  end
3118
3140
 
3119
3141
  let(:unscoped) do
@@ -3128,15 +3150,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3128
3150
  context "when the relation has a default scope" do
3129
3151
 
3130
3152
  let!(:person) do
3131
- Person.create
3153
+ Person.create!
3132
3154
  end
3133
3155
 
3134
3156
  let!(:house_one) do
3135
- person.houses.create(name: "first")
3157
+ person.houses.create!(name: "first")
3136
3158
  end
3137
3159
 
3138
3160
  let!(:house_two) do
3139
- House.create(name: "second")
3161
+ House.create!(name: "second")
3140
3162
  end
3141
3163
 
3142
3164
  let(:unscoped) do
@@ -3172,10 +3194,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3172
3194
  end
3173
3195
 
3174
3196
  before do
3175
- person.update_attributes(
3197
+ person.update_attributes!(
3176
3198
  houses: [ wife_house, exwife_house, girlfriend_house ]
3177
3199
  )
3178
- person.update_attributes(house_ids: [ girlfriend_house.id ])
3200
+ person.update_attributes!(house_ids: [ girlfriend_house.id ])
3179
3201
  end
3180
3202
 
3181
3203
  context "when reloading" do
@@ -3222,7 +3244,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3222
3244
  end
3223
3245
 
3224
3246
  let!(:business) do
3225
- Business.create(name: "serious", owners: [ user ])
3247
+ Business.create!(name: "serious", owners: [ user ])
3226
3248
  end
3227
3249
 
3228
3250
  before do
@@ -3265,11 +3287,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3265
3287
  context "when the documents are persisted" do
3266
3288
 
3267
3289
  let(:user) do
3268
- User.create(name: "tst")
3290
+ User.create!(name: "tst")
3269
3291
  end
3270
3292
 
3271
3293
  let(:business) do
3272
- Business.create(name: "srs", owners: [ user ])
3294
+ Business.create!(name: "srs", owners: [ user ])
3273
3295
  end
3274
3296
 
3275
3297
  before do
@@ -3313,11 +3335,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3313
3335
  context "when binding the relation multiple times" do
3314
3336
 
3315
3337
  let(:person) do
3316
- Person.create
3338
+ Person.create!
3317
3339
  end
3318
3340
 
3319
3341
  let(:preference) do
3320
- person.preferences.create(name: "testing")
3342
+ person.preferences.create!(name: "testing")
3321
3343
  end
3322
3344
 
3323
3345
  before do
@@ -3336,19 +3358,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3336
3358
  context "when the association has order criteria" do
3337
3359
 
3338
3360
  let(:person) do
3339
- Person.create
3361
+ Person.create!
3340
3362
  end
3341
3363
 
3342
3364
  let(:preference_one) do
3343
- OrderedPreference.create(name: 'preference-1', value: 10)
3365
+ OrderedPreference.create!(name: 'preference-1', value: 10)
3344
3366
  end
3345
3367
 
3346
3368
  let(:preference_two) do
3347
- OrderedPreference.create(name: 'preference-2', value: 20)
3369
+ OrderedPreference.create!(name: 'preference-2', value: 20)
3348
3370
  end
3349
3371
 
3350
3372
  let(:preference_three) do
3351
- OrderedPreference.create(name: 'preference-3', value: 20)
3373
+ OrderedPreference.create!(name: 'preference-3', value: 20)
3352
3374
  end
3353
3375
 
3354
3376
  before do
@@ -3372,7 +3394,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3372
3394
  context "when the parent is not a new record and freshly loaded" do
3373
3395
 
3374
3396
  let(:person) do
3375
- Person.create
3397
+ Person.create!
3376
3398
  end
3377
3399
 
3378
3400
  let(:preference) do
@@ -3381,7 +3403,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3381
3403
 
3382
3404
  before do
3383
3405
  person.preferences = [ preference ]
3384
- person.save
3406
+ person.save!
3385
3407
  person.reload
3386
3408
  person.preferences = nil
3387
3409
  end
@@ -3404,15 +3426,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3404
3426
  context "when reloading the relation" do
3405
3427
 
3406
3428
  let!(:person) do
3407
- Person.create
3429
+ Person.create!
3408
3430
  end
3409
3431
 
3410
3432
  let!(:preference_one) do
3411
- Preference.create(name: "one")
3433
+ Preference.create!(name: "one")
3412
3434
  end
3413
3435
 
3414
3436
  let!(:preference_two) do
3415
- Preference.create(name: "two")
3437
+ Preference.create!(name: "two")
3416
3438
  end
3417
3439
 
3418
3440
  before do
@@ -3456,7 +3478,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3456
3478
  context "when the document is new" do
3457
3479
 
3458
3480
  let!(:person) do
3459
- Person.create(preference_names: "one, two")
3481
+ Person.create!(preference_names: "one, two")
3460
3482
  end
3461
3483
 
3462
3484
  let(:preference_one) do
@@ -3492,23 +3514,23 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3492
3514
  end
3493
3515
 
3494
3516
  let(:preference_one) do
3495
- Preference.create(name: "one")
3517
+ Preference.create!(name: "one")
3496
3518
  end
3497
3519
 
3498
3520
  let(:preference_two) do
3499
- Preference.create(name: "two")
3521
+ Preference.create!(name: "two")
3500
3522
  end
3501
3523
 
3502
3524
  before do
3503
3525
  person.preference_ids = [ preference_one.id, preference_two.id ]
3504
- person.save
3526
+ person.save!
3505
3527
  end
3506
3528
 
3507
3529
  context "and the order is changed" do
3508
3530
 
3509
3531
  before do
3510
3532
  person.preference_ids = [ preference_two.id, preference_one.id ]
3511
- person.save
3533
+ person.save!
3512
3534
  end
3513
3535
 
3514
3536
  let(:reloaded) do
@@ -3525,13 +3547,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3525
3547
  context "and the order is changed and an element is added" do
3526
3548
 
3527
3549
  let(:preference_three) do
3528
- Preference.create(name: "three")
3550
+ Preference.create!(name: "three")
3529
3551
  end
3530
3552
 
3531
3553
  before do
3532
3554
  person.preference_ids =
3533
3555
  [ preference_two.id, preference_one.id, preference_three.id ]
3534
- person.save
3556
+ person.save!
3535
3557
  end
3536
3558
 
3537
3559
  let(:reloaded) do
@@ -3548,16 +3570,16 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3548
3570
  context "and the order is changed and an element is removed" do
3549
3571
 
3550
3572
  let(:preference_three) do
3551
- Preference.create(name: "three")
3573
+ Preference.create!(name: "three")
3552
3574
  end
3553
3575
 
3554
3576
  before do
3555
3577
  person.preference_ids =
3556
3578
  [ preference_one.id, preference_two.id, preference_three.id ]
3557
- person.save
3579
+ person.save!
3558
3580
  person.preference_ids =
3559
3581
  [ preference_three.id, preference_two.id ]
3560
- person.save
3582
+ person.save!
3561
3583
  end
3562
3584
 
3563
3585
  let(:reloaded) do
@@ -3607,15 +3629,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3607
3629
  context "when the relation exists" do
3608
3630
 
3609
3631
  let!(:person) do
3610
- Person.create
3632
+ Person.create!
3611
3633
  end
3612
3634
 
3613
3635
  let!(:pref_one) do
3614
- person.preferences.create
3636
+ person.preferences.create!
3615
3637
  end
3616
3638
 
3617
3639
  let!(:pref_two) do
3618
- Preference.create
3640
+ Preference.create!
3619
3641
  end
3620
3642
 
3621
3643
  before do
@@ -3631,15 +3653,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3631
3653
  context "when using a different primary key" do
3632
3654
 
3633
3655
  let(:dog) do
3634
- Dog.create(name: 'Doggie')
3656
+ Dog.create!(name: 'Doggie')
3635
3657
  end
3636
3658
 
3637
3659
  let(:cat) do
3638
- Cat.create(name: 'Kitty')
3660
+ Cat.create!(name: 'Kitty')
3661
+ end
3662
+
3663
+ let(:another_cat) do
3664
+ Cat.create!(name: 'Kitten')
3639
3665
  end
3640
3666
 
3641
3667
  let(:fire_hydrant) do
3642
- FireHydrant.create(location: '221B Baker Street')
3668
+ FireHydrant.create!(location: '221B Baker Street')
3643
3669
  end
3644
3670
 
3645
3671
  context "when adding to a one-way many to many" do
@@ -3653,6 +3679,28 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3653
3679
  end
3654
3680
  end
3655
3681
 
3682
+ context "when adding multiple documents to a one-way many to many" do
3683
+
3684
+ before do
3685
+ fire_hydrant.cats.push([cat, another_cat])
3686
+ end
3687
+
3688
+ it "adds the pk values to the fk set" do
3689
+ expect(fire_hydrant.cat_ids).to eq([cat.name, another_cat.name])
3690
+ end
3691
+ end
3692
+
3693
+ context "when adding a new document to a one-way many to many" do
3694
+
3695
+ before do
3696
+ fire_hydrant.cats.build name: 'Kitten'
3697
+ end
3698
+
3699
+ it "adds the pk values to the fk set" do
3700
+ expect(fire_hydrant.cat_ids).to eq(['Kitten'])
3701
+ end
3702
+ end
3703
+
3656
3704
  context "when adding to a two-way many to many" do
3657
3705
 
3658
3706
  before do
@@ -3709,10 +3757,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
3709
3757
  end
3710
3758
 
3711
3759
  it "should assign relation from both sides" do
3712
- p1 = Project.create name: 'Foo'
3713
- p2 = Project.create name: 'Bar'
3714
- d1 = Distributor.create name: 'Rock'
3715
- d2 = Distributor.create name: 'Soul'
3760
+ p1 = Project.create! name: 'Foo'
3761
+ p2 = Project.create! name: 'Bar'
3762
+ d1 = Distributor.create! name: 'Rock'
3763
+ d2 = Distributor.create! name: 'Soul'
3716
3764
 
3717
3765
  p1.distributors << d1
3718
3766
  expect(p1.d_ids).to match_array([d1.id])