mongoid 6.4.8 → 7.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (376) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/LICENSE +1 -0
  4. data/README.md +4 -3
  5. data/Rakefile +33 -7
  6. data/lib/config/locales/en.yml +17 -0
  7. data/lib/mongoid/association/accessors.rb +339 -0
  8. data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
  9. data/lib/mongoid/association/builders.rb +92 -0
  10. data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
  11. data/lib/mongoid/association/depending.rb +137 -0
  12. data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
  13. data/lib/mongoid/{relations → association}/embedded/batchable.rb +19 -19
  14. data/lib/mongoid/association/embedded/cyclic.rb +109 -0
  15. data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
  16. data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
  17. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
  18. data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
  19. data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
  20. data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
  21. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +552 -0
  22. data/lib/mongoid/association/embedded/embeds_many.rb +211 -0
  23. data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
  24. data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
  25. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
  26. data/lib/mongoid/association/embedded/embeds_one.rb +174 -0
  27. data/lib/mongoid/association/embedded.rb +4 -0
  28. data/lib/mongoid/association/macros.rb +204 -0
  29. data/lib/mongoid/{relations → association}/many.rb +19 -49
  30. data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
  31. data/lib/mongoid/association/nested/many.rb +200 -0
  32. data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
  33. data/lib/mongoid/association/nested/one.rb +127 -0
  34. data/lib/mongoid/association/nested.rb +15 -0
  35. data/lib/mongoid/{relations → association}/one.rb +6 -6
  36. data/lib/mongoid/association/options.rb +152 -0
  37. data/lib/mongoid/{relations → association}/proxy.rb +45 -59
  38. data/lib/mongoid/association/referenced/auto_save.rb +79 -0
  39. data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
  40. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
  41. data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
  42. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
  43. data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
  44. data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
  45. data/lib/mongoid/association/referenced/eager.rb +162 -0
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +312 -0
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
  51. data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
  52. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  53. data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
  54. data/lib/mongoid/association/referenced/has_many/enumerable.rb +510 -0
  55. data/lib/mongoid/association/referenced/has_many/proxy.rb +578 -0
  56. data/lib/mongoid/association/referenced/has_many.rb +275 -0
  57. data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
  58. data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
  59. data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
  60. data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
  61. data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
  62. data/lib/mongoid/association/referenced/has_one.rb +204 -0
  63. data/lib/mongoid/association/referenced/syncable.rb +170 -0
  64. data/lib/mongoid/association/referenced.rb +7 -0
  65. data/lib/mongoid/{relations → association}/reflections.rb +21 -17
  66. data/lib/mongoid/association/relatable.rb +511 -0
  67. data/lib/mongoid/{relations.rb → association.rb} +57 -56
  68. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  69. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  70. data/lib/mongoid/atomic/paths/embedded.rb +1 -1
  71. data/lib/mongoid/atomic.rb +14 -4
  72. data/lib/mongoid/attributes/dynamic.rb +16 -15
  73. data/lib/mongoid/attributes/nested.rb +22 -11
  74. data/lib/mongoid/attributes/processing.rb +2 -2
  75. data/lib/mongoid/attributes/readonly.rb +2 -4
  76. data/lib/mongoid/attributes.rb +55 -31
  77. data/lib/mongoid/changeable.rb +1 -1
  78. data/lib/mongoid/clients/options.rb +7 -5
  79. data/lib/mongoid/clients/sessions.rb +20 -4
  80. data/lib/mongoid/composable.rb +4 -4
  81. data/lib/mongoid/config/environment.rb +21 -8
  82. data/lib/mongoid/config.rb +1 -0
  83. data/lib/mongoid/contextual/atomic.rb +1 -1
  84. data/lib/mongoid/contextual/geo_near.rb +1 -1
  85. data/lib/mongoid/contextual/memory.rb +21 -3
  86. data/lib/mongoid/contextual/mongo.rb +10 -8
  87. data/lib/mongoid/copyable.rb +11 -6
  88. data/lib/mongoid/criteria/includable.rb +14 -14
  89. data/lib/mongoid/criteria/modifiable.rb +8 -3
  90. data/lib/mongoid/criteria/options.rb +2 -2
  91. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
  92. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  93. data/lib/mongoid/criteria/queryable/extensions/string.rb +1 -1
  94. data/lib/mongoid/criteria/queryable/extensions/time.rb +1 -1
  95. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +12 -0
  96. data/lib/mongoid/criteria/queryable/key.rb +67 -8
  97. data/lib/mongoid/criteria/queryable/mergeable.rb +5 -4
  98. data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
  99. data/lib/mongoid/criteria/queryable/selectable.rb +5 -3
  100. data/lib/mongoid/criteria/queryable/selector.rb +9 -31
  101. data/lib/mongoid/criteria.rb +9 -3
  102. data/lib/mongoid/document.rb +14 -4
  103. data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
  104. data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
  105. data/lib/mongoid/errors/unknown_model.rb +25 -0
  106. data/lib/mongoid/errors.rb +3 -0
  107. data/lib/mongoid/extensions/array.rb +5 -5
  108. data/lib/mongoid/extensions/hash.rb +9 -4
  109. data/lib/mongoid/extensions/object.rb +4 -4
  110. data/lib/mongoid/extensions/range.rb +1 -0
  111. data/lib/mongoid/extensions/regexp.rb +1 -1
  112. data/lib/mongoid/extensions/string.rb +2 -2
  113. data/lib/mongoid/extensions.rb +0 -4
  114. data/lib/mongoid/factory.rb +13 -3
  115. data/lib/mongoid/fields/foreign_key.rb +5 -5
  116. data/lib/mongoid/fields/standard.rb +2 -14
  117. data/lib/mongoid/fields/validators/macro.rb +1 -1
  118. data/lib/mongoid/fields.rb +5 -4
  119. data/lib/mongoid/indexable.rb +4 -1
  120. data/lib/mongoid/interceptable.rb +8 -6
  121. data/lib/mongoid/matchable/all.rb +4 -3
  122. data/lib/mongoid/matchable/and.rb +1 -1
  123. data/lib/mongoid/matchable/default.rb +71 -24
  124. data/lib/mongoid/matchable/elem_match.rb +9 -3
  125. data/lib/mongoid/matchable/eq.rb +22 -0
  126. data/lib/mongoid/matchable/ne.rb +1 -1
  127. data/lib/mongoid/matchable/regexp.rb +2 -2
  128. data/lib/mongoid/matchable.rb +17 -16
  129. data/lib/mongoid/persistable/deletable.rb +7 -6
  130. data/lib/mongoid/persistable/incrementable.rb +1 -1
  131. data/lib/mongoid/persistable/logical.rb +1 -1
  132. data/lib/mongoid/persistable/pushable.rb +11 -2
  133. data/lib/mongoid/persistable/settable.rb +57 -12
  134. data/lib/mongoid/persistable.rb +4 -5
  135. data/lib/mongoid/persistence_context.rb +26 -11
  136. data/lib/mongoid/positional.rb +1 -1
  137. data/lib/mongoid/query_cache.rb +4 -2
  138. data/lib/mongoid/serializable.rb +4 -4
  139. data/lib/mongoid/shardable.rb +1 -1
  140. data/lib/mongoid/touchable.rb +102 -0
  141. data/lib/mongoid/traversable.rb +3 -3
  142. data/lib/mongoid/validatable/macros.rb +1 -1
  143. data/lib/mongoid/validatable/presence.rb +2 -2
  144. data/lib/mongoid/validatable/uniqueness.rb +5 -5
  145. data/lib/mongoid/validatable.rb +8 -8
  146. data/lib/mongoid/version.rb +2 -1
  147. data/lib/mongoid.rb +1 -0
  148. data/lib/rails/generators/mongoid/config/config_generator.rb +8 -1
  149. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -0
  150. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
  151. data/spec/README.md +18 -0
  152. data/spec/app/models/animal.rb +2 -1
  153. data/spec/app/models/bomb.rb +1 -1
  154. data/spec/app/models/customer.rb +11 -0
  155. data/spec/app/models/customer_address.rb +12 -0
  156. data/spec/app/models/message.rb +1 -1
  157. data/spec/app/models/minim.rb +7 -0
  158. data/spec/app/models/other_owner_object.rb +2 -0
  159. data/spec/app/models/person.rb +5 -2
  160. data/spec/app/models/shipment_address.rb +1 -0
  161. data/spec/app/models/store_as_dup_test3.rb +7 -0
  162. data/spec/app/models/store_as_dup_test4.rb +7 -0
  163. data/spec/app/models/updatable.rb +7 -0
  164. data/spec/app/models/vertex.rb +6 -0
  165. data/spec/app/models/wiki_page.rb +1 -1
  166. data/spec/config/mongoid.yml +13 -3
  167. data/spec/integration/app_spec.rb +341 -0
  168. data/spec/integration/associations/belongs_to_spec.rb +13 -0
  169. data/spec/integration/associations/embedded_spec.rb +176 -0
  170. data/spec/integration/callbacks_models.rb +49 -0
  171. data/spec/integration/callbacks_spec.rb +216 -0
  172. data/spec/integration/criteria/date_field_spec.rb +41 -0
  173. data/spec/integration/criteria/time_with_zone_spec.rb +32 -0
  174. data/spec/integration/matchable_spec.rb +680 -0
  175. data/spec/lite_spec_helper.rb +71 -0
  176. data/spec/mongoid/{relations → association}/accessors_spec.rb +40 -1
  177. data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
  178. data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
  179. data/spec/mongoid/association/constrainable_spec.rb +115 -0
  180. data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
  181. data/spec/mongoid/association/depending_spec.rb +866 -0
  182. data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
  183. data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
  184. data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
  185. data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
  186. data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
  187. data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +55 -77
  188. data/spec/mongoid/association/embedded/embedded_in_spec.rb +901 -0
  189. data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
  190. data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
  191. data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +124 -182
  192. data/spec/mongoid/association/embedded/embeds_many_models.rb +53 -0
  193. data/spec/mongoid/association/embedded/embeds_many_spec.rb +862 -0
  194. data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
  195. data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
  196. data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
  197. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +6 -0
  198. data/spec/mongoid/association/embedded/embeds_one_models.rb +51 -0
  199. data/spec/mongoid/association/embedded/embeds_one_spec.rb +954 -0
  200. data/spec/mongoid/{relations → association}/macros_spec.rb +148 -73
  201. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
  202. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
  203. data/spec/mongoid/association/options_spec.rb +1321 -0
  204. data/spec/mongoid/{relations → association}/polymorphic_spec.rb +66 -34
  205. data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
  206. data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
  207. data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +33 -14
  208. data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
  209. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2023 -0
  210. data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
  211. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
  212. data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +26 -7
  213. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +56 -0
  214. data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +247 -99
  215. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -0
  216. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
  217. data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
  218. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
  219. data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +26 -11
  220. data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +227 -1
  221. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
  222. data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +30 -94
  223. data/spec/mongoid/association/referenced/has_many_models.rb +37 -0
  224. data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
  225. data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
  226. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
  227. data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
  228. data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
  229. data/spec/mongoid/association/referenced/has_one_models.rb +48 -0
  230. data/spec/mongoid/association/referenced/has_one_spec.rb +1360 -0
  231. data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
  232. data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
  233. data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
  234. data/spec/mongoid/atomic/modifiers_spec.rb +2 -2
  235. data/spec/mongoid/atomic/paths_spec.rb +41 -0
  236. data/spec/mongoid/atomic_spec.rb +4 -4
  237. data/spec/mongoid/attributes/dynamic_spec.rb +153 -0
  238. data/spec/mongoid/attributes/nested_spec.rb +29 -11
  239. data/spec/mongoid/attributes/readonly_spec.rb +80 -125
  240. data/spec/mongoid/attributes_spec.rb +298 -9
  241. data/spec/mongoid/clients/factory_spec.rb +20 -38
  242. data/spec/mongoid/clients/options_spec.rb +64 -50
  243. data/spec/mongoid/clients/sessions_spec.rb +9 -5
  244. data/spec/mongoid/clients/transactions_spec.rb +390 -0
  245. data/spec/mongoid/clients_spec.rb +70 -10
  246. data/spec/mongoid/config_spec.rb +27 -1
  247. data/spec/mongoid/contextual/atomic_spec.rb +37 -14
  248. data/spec/mongoid/contextual/geo_near_spec.rb +11 -2
  249. data/spec/mongoid/contextual/map_reduce_spec.rb +20 -5
  250. data/spec/mongoid/contextual/memory_spec.rb +19 -0
  251. data/spec/mongoid/contextual/mongo_spec.rb +107 -56
  252. data/spec/mongoid/copyable_spec.rb +90 -6
  253. data/spec/mongoid/copyable_spec_models.rb +17 -0
  254. data/spec/mongoid/criteria/modifiable_spec.rb +173 -1
  255. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +54 -0
  256. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -7
  257. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +44 -1
  258. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +19 -7
  259. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +28 -1
  260. data/spec/mongoid/criteria/queryable/key_spec.rb +48 -6
  261. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
  262. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +762 -0
  263. data/spec/mongoid/criteria/queryable/selectable_spec.rb +5 -224
  264. data/spec/mongoid/criteria/queryable/selector_spec.rb +37 -0
  265. data/spec/mongoid/criteria_spec.rb +36 -19
  266. data/spec/mongoid/document_fields_spec.rb +88 -0
  267. data/spec/mongoid/document_persistence_context_spec.rb +33 -0
  268. data/spec/mongoid/document_spec.rb +29 -4
  269. data/spec/mongoid/extensions/array_spec.rb +11 -15
  270. data/spec/mongoid/extensions/hash_spec.rb +18 -1
  271. data/spec/mongoid/extensions/object_spec.rb +7 -11
  272. data/spec/mongoid/extensions/range_spec.rb +7 -0
  273. data/spec/mongoid/factory_spec.rb +21 -3
  274. data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
  275. data/spec/mongoid/fields_spec.rb +1 -1
  276. data/spec/mongoid/indexable_spec.rb +24 -12
  277. data/spec/mongoid/interceptable_spec.rb +22 -1
  278. data/spec/mongoid/matchable/default_spec.rb +10 -3
  279. data/spec/mongoid/matchable/elem_match_spec.rb +20 -0
  280. data/spec/mongoid/matchable/eq_spec.rb +48 -0
  281. data/spec/mongoid/matchable/regexp_spec.rb +2 -2
  282. data/spec/mongoid/matchable_spec.rb +2 -2
  283. data/spec/mongoid/persistable/pushable_spec.rb +55 -1
  284. data/spec/mongoid/persistable/savable_spec.rb +5 -5
  285. data/spec/mongoid/persistable/settable_spec.rb +125 -10
  286. data/spec/mongoid/persistable_spec.rb +21 -6
  287. data/spec/mongoid/persistence_context_spec.rb +1 -1
  288. data/spec/mongoid/query_cache_spec.rb +65 -27
  289. data/spec/mongoid/relations/proxy_spec.rb +124 -124
  290. data/spec/mongoid/scopable_spec.rb +2 -1
  291. data/spec/mongoid/shardable_spec.rb +32 -12
  292. data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
  293. data/spec/mongoid/tasks/database_spec.rb +1 -1
  294. data/spec/mongoid/{relations/touchable_spec.rb → touchable_spec.rb} +40 -1
  295. data/spec/mongoid/validatable/associated_spec.rb +1 -1
  296. data/spec/mongoid/validatable/presence_spec.rb +7 -6
  297. data/spec/mongoid/validatable/uniqueness_spec.rb +33 -6
  298. data/spec/mongoid/validatable_spec.rb +1 -1
  299. data/spec/shared/LICENSE +20 -0
  300. data/spec/shared/bin/get-mongodb-download-url +17 -0
  301. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  302. data/spec/shared/lib/mrss/cluster_config.rb +221 -0
  303. data/spec/shared/lib/mrss/constraints.rb +354 -0
  304. data/spec/shared/lib/mrss/docker_runner.rb +265 -0
  305. data/spec/shared/lib/mrss/lite_constraints.rb +191 -0
  306. data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
  307. data/spec/shared/lib/mrss/spec_organizer.rb +162 -0
  308. data/spec/shared/lib/mrss/utils.rb +15 -0
  309. data/spec/shared/share/Dockerfile.erb +231 -0
  310. data/spec/shared/shlib/distro.sh +73 -0
  311. data/spec/shared/shlib/server.sh +290 -0
  312. data/spec/shared/shlib/set_env.sh +128 -0
  313. data/spec/spec_helper.rb +34 -49
  314. data/spec/support/cluster_config.rb +3 -3
  315. data/spec/support/constraints.rb +21 -76
  316. data/spec/support/expectations.rb +17 -3
  317. data/spec/support/spec_config.rb +20 -7
  318. data.tar.gz.sig +0 -0
  319. metadata +646 -541
  320. metadata.gz.sig +1 -5
  321. data/lib/mongoid/relations/accessors.rb +0 -267
  322. data/lib/mongoid/relations/auto_save.rb +0 -94
  323. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  324. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  325. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  326. data/lib/mongoid/relations/bindings.rb +0 -9
  327. data/lib/mongoid/relations/builder.rb +0 -57
  328. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  329. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  330. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  331. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  332. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  333. data/lib/mongoid/relations/builders.rb +0 -106
  334. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  335. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  336. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  337. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  338. data/lib/mongoid/relations/cascading.rb +0 -56
  339. data/lib/mongoid/relations/conversions.rb +0 -34
  340. data/lib/mongoid/relations/counter_cache.rb +0 -160
  341. data/lib/mongoid/relations/cyclic.rb +0 -107
  342. data/lib/mongoid/relations/eager/base.rb +0 -153
  343. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  344. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  345. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  346. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  347. data/lib/mongoid/relations/embedded/in.rb +0 -241
  348. data/lib/mongoid/relations/embedded/many.rb +0 -683
  349. data/lib/mongoid/relations/embedded/one.rb +0 -235
  350. data/lib/mongoid/relations/macros.rb +0 -367
  351. data/lib/mongoid/relations/metadata.rb +0 -1179
  352. data/lib/mongoid/relations/nested_builder.rb +0 -74
  353. data/lib/mongoid/relations/options.rb +0 -49
  354. data/lib/mongoid/relations/polymorphic.rb +0 -39
  355. data/lib/mongoid/relations/referenced/in.rb +0 -304
  356. data/lib/mongoid/relations/referenced/many.rb +0 -812
  357. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  358. data/lib/mongoid/relations/referenced/one.rb +0 -290
  359. data/lib/mongoid/relations/synchronization.rb +0 -169
  360. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  361. data/lib/mongoid/relations/targets.rb +0 -2
  362. data/lib/mongoid/relations/touchable.rb +0 -97
  363. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  364. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  365. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  366. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  367. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  368. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  369. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  370. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  371. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  372. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  373. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  374. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  375. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  376. data/spec/mongoid/relations/options_spec.rb +0 -35
@@ -204,14 +204,10 @@ describe Mongoid::Extensions::Array do
204
204
 
205
205
  context "when the related model uses object ids" do
206
206
 
207
- let(:metadata) do
207
+ let(:association) do
208
208
  Person.relations["preferences"]
209
209
  end
210
210
 
211
- let(:constraint) do
212
- metadata.constraint
213
- end
214
-
215
211
  context "when provided an object id" do
216
212
 
217
213
  let(:object_id) do
@@ -219,7 +215,7 @@ describe Mongoid::Extensions::Array do
219
215
  end
220
216
 
221
217
  let(:fk) do
222
- Array.__mongoize_fk__(constraint, object_id)
218
+ Array.__mongoize_fk__(association, object_id)
223
219
  end
224
220
 
225
221
  it "returns the object id as an array" do
@@ -234,7 +230,7 @@ describe Mongoid::Extensions::Array do
234
230
  end
235
231
 
236
232
  let(:fk) do
237
- Array.__mongoize_fk__(constraint, [ object_id ])
233
+ Array.__mongoize_fk__(association, [ object_id ])
238
234
  end
239
235
 
240
236
  it "returns the object ids" do
@@ -251,7 +247,7 @@ describe Mongoid::Extensions::Array do
251
247
  end
252
248
 
253
249
  let(:fk) do
254
- Array.__mongoize_fk__(constraint, object_id.to_s)
250
+ Array.__mongoize_fk__(association, object_id.to_s)
255
251
  end
256
252
 
257
253
  it "returns the object id in an array" do
@@ -266,7 +262,7 @@ describe Mongoid::Extensions::Array do
266
262
  end
267
263
 
268
264
  let(:fk) do
269
- Array.__mongoize_fk__(constraint, string)
265
+ Array.__mongoize_fk__(association, string)
270
266
  end
271
267
 
272
268
  it "returns the string in an array" do
@@ -277,7 +273,7 @@ describe Mongoid::Extensions::Array do
277
273
  context "when the string is blank" do
278
274
 
279
275
  let(:fk) do
280
- Array.__mongoize_fk__(constraint, "")
276
+ Array.__mongoize_fk__(association, "")
281
277
  end
282
278
 
283
279
  it "returns an empty array" do
@@ -289,7 +285,7 @@ describe Mongoid::Extensions::Array do
289
285
  context "when provided nil" do
290
286
 
291
287
  let(:fk) do
292
- Array.__mongoize_fk__(constraint, nil)
288
+ Array.__mongoize_fk__(association, nil)
293
289
  end
294
290
 
295
291
  it "returns an empty array" do
@@ -306,7 +302,7 @@ describe Mongoid::Extensions::Array do
306
302
  end
307
303
 
308
304
  let(:fk) do
309
- Array.__mongoize_fk__(constraint, [ object_id.to_s ])
305
+ Array.__mongoize_fk__(association, [ object_id.to_s ])
310
306
  end
311
307
 
312
308
  it "returns the object id in an array" do
@@ -321,7 +317,7 @@ describe Mongoid::Extensions::Array do
321
317
  end
322
318
 
323
319
  let(:fk) do
324
- Array.__mongoize_fk__(constraint, [ string ])
320
+ Array.__mongoize_fk__(association, [ string ])
325
321
  end
326
322
 
327
323
  it "returns the string in an array" do
@@ -332,7 +328,7 @@ describe Mongoid::Extensions::Array do
332
328
  context "when the strings are blank" do
333
329
 
334
330
  let(:fk) do
335
- Array.__mongoize_fk__(constraint, [ "", "" ])
331
+ Array.__mongoize_fk__(association, [ "", "" ])
336
332
  end
337
333
 
338
334
  it "returns an empty array" do
@@ -344,7 +340,7 @@ describe Mongoid::Extensions::Array do
344
340
  context "when provided nils" do
345
341
 
346
342
  let(:fk) do
347
- Array.__mongoize_fk__(constraint, [ nil, nil, nil ])
343
+ Array.__mongoize_fk__(association, [ nil, nil, nil ])
348
344
  end
349
345
 
350
346
  it "returns an empty array" do
@@ -230,10 +230,27 @@ describe Mongoid::Extensions::Hash do
230
230
  it "should retrieve a nested value under the provided key" do
231
231
  expect(nested).to eq "hundred"
232
232
  end
233
+
234
+ context 'and the value is falsey' do
235
+ let(:hash) do
236
+ { "100" => { "name" => false } }
237
+ end
238
+ it "should retrieve the falsey nested value under the provided key" do
239
+ expect(nested).to eq false
240
+ end
241
+ end
242
+
243
+ context 'and the value is nil' do
244
+ let(:hash) do
245
+ { "100" => { 0 => "Please don't return this value!" } }
246
+ end
247
+ it "should retrieve the nil nested value under the provided key" do
248
+ expect(nested).to eq nil
249
+ end
250
+ end
233
251
  end
234
252
 
235
253
  context "when the hash key is an integer" do
236
-
237
254
  let(:hash) do
238
255
  { 100 => { "name" => "hundred" } }
239
256
  end
@@ -39,14 +39,10 @@ describe Mongoid::Extensions::Object do
39
39
 
40
40
  context "when the related model uses object ids" do
41
41
 
42
- let(:metadata) do
42
+ let(:association) do
43
43
  Game.relations["person"]
44
44
  end
45
45
 
46
- let(:constraint) do
47
- metadata.constraint
48
- end
49
-
50
46
  context "when provided an object id" do
51
47
 
52
48
  let(:object_id) do
@@ -54,7 +50,7 @@ describe Mongoid::Extensions::Object do
54
50
  end
55
51
 
56
52
  let(:fk) do
57
- Object.__mongoize_fk__(constraint, object_id)
53
+ Object.__mongoize_fk__(association, object_id)
58
54
  end
59
55
 
60
56
  it "returns the object id" do
@@ -71,7 +67,7 @@ describe Mongoid::Extensions::Object do
71
67
  end
72
68
 
73
69
  let(:fk) do
74
- Object.__mongoize_fk__(constraint, object_id.to_s)
70
+ Object.__mongoize_fk__(association, object_id.to_s)
75
71
  end
76
72
 
77
73
  it "returns the object id" do
@@ -86,7 +82,7 @@ describe Mongoid::Extensions::Object do
86
82
  end
87
83
 
88
84
  let(:fk) do
89
- Object.__mongoize_fk__(constraint, string)
85
+ Object.__mongoize_fk__(association, string)
90
86
  end
91
87
 
92
88
  it "returns the string" do
@@ -97,7 +93,7 @@ describe Mongoid::Extensions::Object do
97
93
  context "when the string is blank" do
98
94
 
99
95
  let(:fk) do
100
- Object.__mongoize_fk__(constraint, "")
96
+ Object.__mongoize_fk__(association, "")
101
97
  end
102
98
 
103
99
  it "returns nil" do
@@ -109,7 +105,7 @@ describe Mongoid::Extensions::Object do
109
105
  context "when provided nil" do
110
106
 
111
107
  let(:fk) do
112
- Object.__mongoize_fk__(constraint, nil)
108
+ Object.__mongoize_fk__(association, nil)
113
109
  end
114
110
 
115
111
  it "returns nil" do
@@ -120,7 +116,7 @@ describe Mongoid::Extensions::Object do
120
116
  context "when provided an empty array" do
121
117
 
122
118
  let(:fk) do
123
- Object.__mongoize_fk__(constraint, [])
119
+ Object.__mongoize_fk__(association, [])
124
120
  end
125
121
 
126
122
  it "returns an empty array" do
@@ -139,6 +139,13 @@ describe Mongoid::Extensions::Range do
139
139
  expect(("a".."z").mongoize).to eq({ "min" => "a", "max" => "z" })
140
140
  end
141
141
  end
142
+
143
+ context 'when the value is a string' do
144
+
145
+ it 'returns a string' do
146
+ expect(Range.mongoize('3')).to eq('3')
147
+ end
148
+ end
142
149
  end
143
150
 
144
151
  describe "#resizable?" do
@@ -92,7 +92,7 @@ describe Mongoid::Factory do
92
92
  context "when the type is a symbol" do
93
93
 
94
94
  let(:person) do
95
- described_class.build(Person, {:_type => "Doctor"})
95
+ described_class.build(Person, { :_type => "Doctor" })
96
96
  end
97
97
 
98
98
  it "instantiates the subclass" do
@@ -106,11 +106,11 @@ describe Mongoid::Factory do
106
106
  context "when the attributes are nil" do
107
107
 
108
108
  let(:document) do
109
- described_class.from_db(Address, nil)
109
+ described_class.from_db(Animal, nil)
110
110
  end
111
111
 
112
112
  it "generates based on the provided class" do
113
- expect(document).to be_a(Address)
113
+ expect(document).to be_a(Animal)
114
114
  end
115
115
 
116
116
  it "sets the attributes to empty" do
@@ -192,5 +192,23 @@ describe Mongoid::Factory do
192
192
  expect(document.title).to eq("Sir")
193
193
  end
194
194
  end
195
+
196
+ context 'when type does not correspond to a Class name' do
197
+
198
+ let(:attributes) do
199
+ { "title" => "Sir", "_type" => "invalid_class_name" }
200
+ end
201
+
202
+ let(:person) do
203
+ described_class.from_db(Person, attributes)
204
+ end
205
+
206
+ it 'raises a exception' do
207
+ expect {
208
+ person
209
+ }.to raise_exception(Mongoid::Errors::UnknownModel)
210
+ end
211
+
212
+ end
195
213
  end
196
214
  end
@@ -7,7 +7,7 @@ describe Mongoid::Fields::ForeignKey do
7
7
  let(:field) do
8
8
  described_class.new(
9
9
  :vals,
10
- metadata: Person.relations["preferences"],
10
+ association: Person.relations["preferences"],
11
11
  type: Array,
12
12
  default: [],
13
13
  identity: true
@@ -68,7 +68,7 @@ describe Mongoid::Fields::ForeignKey do
68
68
  let(:field) do
69
69
  described_class.new(
70
70
  :vals,
71
- metadata: Person.relations["posts"],
71
+ association: Person.relations["posts"],
72
72
  type: Array,
73
73
  default: default,
74
74
  identity: true
@@ -89,7 +89,7 @@ describe Mongoid::Fields::ForeignKey do
89
89
  let(:field) do
90
90
  described_class.new(
91
91
  :vals,
92
- metadata: Person.relations["posts"],
92
+ association: Person.relations["posts"],
93
93
  type: Array,
94
94
  default: [],
95
95
  identity: true
@@ -103,14 +103,14 @@ describe Mongoid::Fields::ForeignKey do
103
103
 
104
104
  describe "#evolve" do
105
105
 
106
- let(:metadata) do
106
+ let(:association) do
107
107
  Person.reflect_on_association(:preferences)
108
108
  end
109
109
 
110
110
  context "when provided a document" do
111
111
 
112
112
  let(:field) do
113
- described_class.new(:person_id, type: Object, metadata: metadata)
113
+ described_class.new(:person_id, type: Object, association: association)
114
114
  end
115
115
 
116
116
  let(:game) do
@@ -129,7 +129,7 @@ describe Mongoid::Fields::ForeignKey do
129
129
  context "when the type is an array" do
130
130
 
131
131
  let(:field) do
132
- described_class.new(:preference_ids, type: Array, default: [], metadata: metadata)
132
+ described_class.new(:preference_ids, type: Array, default: [], association: association)
133
133
  end
134
134
 
135
135
  context "when providing a single value" do
@@ -197,12 +197,12 @@ describe Mongoid::Fields::ForeignKey do
197
197
 
198
198
  context "when the relation stores ids as strings" do
199
199
 
200
- let!(:metadata) do
200
+ let!(:association) do
201
201
  Agent.reflect_on_association(:accounts)
202
202
  end
203
203
 
204
204
  let!(:field) do
205
- described_class.new(:account_ids, type: Array, default: [], metadata: metadata)
205
+ described_class.new(:account_ids, type: Array, default: [], association: association)
206
206
  end
207
207
 
208
208
  let(:id_one) do
@@ -260,12 +260,12 @@ describe Mongoid::Fields::ForeignKey do
260
260
 
261
261
  context "when the type is an object" do
262
262
 
263
- let(:metadata) do
263
+ let(:association) do
264
264
  Game.reflect_on_association(:person)
265
265
  end
266
266
 
267
267
  let(:field) do
268
- described_class.new(:person_id, type: Object, metadata: metadata)
268
+ described_class.new(:person_id, type: Object, association: association)
269
269
  end
270
270
 
271
271
  context "when providing a single value" do
@@ -312,12 +312,12 @@ describe Mongoid::Fields::ForeignKey do
312
312
 
313
313
  context "when the relation stores string ids" do
314
314
 
315
- let(:metadata) do
315
+ let(:association) do
316
316
  Comment.reflect_on_association(:account)
317
317
  end
318
318
 
319
319
  let(:field) do
320
- described_class.new(:person_id, type: Object, metadata: metadata)
320
+ described_class.new(:person_id, type: Object, association: association)
321
321
  end
322
322
 
323
323
  context "when the value is an id string" do
@@ -384,12 +384,12 @@ describe Mongoid::Fields::ForeignKey do
384
384
 
385
385
  context "when the relation stores ids as strings" do
386
386
 
387
- let(:metadata) do
387
+ let(:association) do
388
388
  Comment.reflect_on_association(:account)
389
389
  end
390
390
 
391
391
  let(:field) do
392
- described_class.new(:person_id, type: Object, metadata: metadata)
392
+ described_class.new(:person_id, type: Object, association: association)
393
393
  end
394
394
 
395
395
  let(:id_one) do
@@ -445,14 +445,14 @@ describe Mongoid::Fields::ForeignKey do
445
445
  end
446
446
  end
447
447
 
448
- context "when the metadata is polymoprhic" do
448
+ context "when the association is polymoprhic" do
449
449
 
450
- let(:metadata) do
450
+ let(:association) do
451
451
  Agent.reflect_on_association(:names)
452
452
  end
453
453
 
454
454
  let(:field) do
455
- described_class.new(:nameable_id, type: Object, metadata: metadata)
455
+ described_class.new(:nameable_id, type: Object, association: association)
456
456
  end
457
457
 
458
458
  let(:value) do
@@ -464,7 +464,7 @@ describe Mongoid::Fields::ForeignKey do
464
464
  end
465
465
 
466
466
  it "does not change the foreign key" do
467
- expect(evolved).to be(value)
467
+ expect(evolved).to eq(BSON::ObjectId.from_string(value))
468
468
  end
469
469
  end
470
470
  end
@@ -500,12 +500,8 @@ describe Mongoid::Fields::ForeignKey do
500
500
 
501
501
  context "when the array is object ids" do
502
502
 
503
- let(:metadata) do
504
- Mongoid::Relations::Metadata.new(
505
- inverse_class_name: "Game",
506
- name: :person,
507
- relation: Mongoid::Relations::Referenced::In
508
- )
503
+ let(:association) do
504
+ Game.relations["person"]
509
505
  end
510
506
 
511
507
  let(:field) do
@@ -514,7 +510,7 @@ describe Mongoid::Fields::ForeignKey do
514
510
  type: Array,
515
511
  default: [],
516
512
  identity: true,
517
- metadata: metadata,
513
+ association: association,
518
514
  overwrite: true
519
515
  )
520
516
  end
@@ -589,12 +585,8 @@ describe Mongoid::Fields::ForeignKey do
589
585
 
590
586
  context "when the array is object ids" do
591
587
 
592
- let(:metadata) do
593
- Mongoid::Relations::Metadata.new(
594
- inverse_class_name: "Game",
595
- name: :person,
596
- relation: Mongoid::Relations::Referenced::In
597
- )
588
+ let(:association) do
589
+ Game.relations['person']
598
590
  end
599
591
 
600
592
  let(:field) do
@@ -603,7 +595,7 @@ describe Mongoid::Fields::ForeignKey do
603
595
  type: Object,
604
596
  default: nil,
605
597
  identity: true,
606
- metadata: metadata,
598
+ association: association,
607
599
  overwrite: true
608
600
  )
609
601
  end
@@ -816,7 +816,7 @@ describe Mongoid::Fields do
816
816
 
817
817
  context "when the field name conflicts with mongoid's internals" do
818
818
 
819
- [:__metadata, :invalid].each do |meth|
819
+ [:_association, :invalid].each do |meth|
820
820
  context "when the field is named #{meth}" do
821
821
 
822
822
  it "raises an error" do
@@ -45,7 +45,7 @@ describe Mongoid::Indexable do
45
45
  end
46
46
  end
47
47
 
48
- context "when database specific options exist", if: non_legacy_server? do
48
+ context "when database specific options exist" do
49
49
 
50
50
  let(:klass) do
51
51
  Class.new do
@@ -89,12 +89,13 @@ describe Mongoid::Indexable do
89
89
  klass.create_indexes
90
90
  end
91
91
 
92
- it "creates the indexes" do
93
- expect(klass.collection.indexes.get(_type: 1)).to_not be_nil
92
+ it "creates the indexes by using specified background option" do
93
+ index = klass.collection.indexes.get(_type: 1)
94
+ expect(index[:background]).to eq(true)
94
95
  end
95
96
  end
96
97
 
97
- context "when database options are specified", if: non_legacy_server? do
98
+ context "when database options are specified" do
98
99
 
99
100
  let(:klass) do
100
101
  Class.new do
@@ -104,12 +105,9 @@ describe Mongoid::Indexable do
104
105
  end
105
106
  end
106
107
 
107
- before do
108
- klass.create_indexes
109
- end
110
-
111
108
  after do
112
109
  klass.remove_indexes
110
+ Mongoid::Config.background_indexing = false
113
111
  end
114
112
 
115
113
  let(:indexes) do
@@ -118,12 +116,25 @@ describe Mongoid::Indexable do
118
116
  end
119
117
  end
120
118
 
121
- it "creates the indexes" do
122
- expect(indexes.get(_type: 1)).to_not be_nil
119
+ it "creates the indexes by using default background_indexing option" do
120
+ klass.create_indexes
121
+
122
+ index = indexes.get(_type: 1)
123
+ expect(index[:background]).to eq(Mongoid::Config.background_indexing)
124
+ end
125
+
126
+ it "creates the indexes by using specified background_indexing option" do
127
+ Mongoid::Config.background_indexing = true
128
+
129
+ klass.create_indexes
130
+
131
+ index = indexes.get(_type: 1)
132
+ expect(index[:background]).to eq(true)
123
133
  end
124
134
  end
125
135
 
126
- context "when a collation option is specified", if: collation_supported? do
136
+ context "when a collation option is specified" do
137
+ min_server_version '3.4'
127
138
 
128
139
  let(:klass) do
129
140
  Class.new do
@@ -298,7 +309,8 @@ describe Mongoid::Indexable do
298
309
  end
299
310
  end
300
311
 
301
- context "when providing a collation option", if: collation_supported? do
312
+ context "when providing a collation option" do
313
+ min_server_version '3.4'
302
314
 
303
315
  before do
304
316
  klass.index({ name: 1 }, collation: { locale: 'en_US', strength: 2 })
@@ -526,6 +526,8 @@ describe Mongoid::Interceptable do
526
526
  end
527
527
 
528
528
  after(:all) do
529
+ # ActiveSupport may raise an error when trying to reset callbacks on all of Band's
530
+ # descendants, regardless of whether they have a particular callback defined.
529
531
  begin; Band.reset_callbacks(:rearrange); rescue; end
530
532
  end
531
533
 
@@ -597,7 +599,7 @@ describe Mongoid::Interceptable do
597
599
  it "raises an error" do
598
600
  expect {
599
601
  Band.has_and_belongs_to_many :tags, cascade_callbacks: true
600
- }.to raise_error(Mongoid::Errors::InvalidOptions)
602
+ }.to raise_error(Mongoid::Errors::InvalidRelationOption)
601
603
  end
602
604
  end
603
605
 
@@ -1181,6 +1183,25 @@ describe Mongoid::Interceptable do
1181
1183
  end
1182
1184
  end
1183
1185
 
1186
+ context 'when the parent is updated' do
1187
+
1188
+ let(:band) do
1189
+ Band.create(name: "Moderat")
1190
+ end
1191
+
1192
+ before do
1193
+ band.update(records: [ { name: 'Black on Both Sides' }])
1194
+ end
1195
+
1196
+ it 'executes the callback' do
1197
+ expect(band.records.first.before_validation_called).to be true
1198
+ end
1199
+
1200
+ it 'persists the change' do
1201
+ expect(band.reload.records.first.before_validation_called).to be true
1202
+ end
1203
+ end
1204
+
1184
1205
  context "when the child is persisted" do
1185
1206
 
1186
1207
  let(:band) do
@@ -68,7 +68,7 @@ describe Mongoid::Matchable::Default do
68
68
  context "when the value is a regexp" do
69
69
 
70
70
  it "returns true" do
71
- expect(matcher._matches?(/^Test[3-5]$/)).to be true
71
+ expect(matcher._matches?(/\ATest[3-5]\z/)).to be true
72
72
  end
73
73
  end
74
74
  end
@@ -112,14 +112,21 @@ describe Mongoid::Matchable::Default do
112
112
  described_class.new(["Test1", "Test2", "Test3"])
113
113
  end
114
114
 
115
- context "when the attribute contains the value" do
115
+ context "when the attribute equals the value" do
116
116
 
117
117
  it "returns true" do
118
118
  expect(matcher._matches?(["Test1", "Test2", "Test3"])).to be true
119
119
  end
120
120
  end
121
121
 
122
- context "when the attribute does not contain the value" do
122
+ context "when the value contains same items as attribute but in different order" do
123
+
124
+ it "returns false" do
125
+ expect(matcher._matches?(["Test1", "Test3", "Test2"])).to be false
126
+ end
127
+ end
128
+
129
+ context "when the value is a subset of attribute" do
123
130
 
124
131
  it "returns false" do
125
132
  expect(matcher._matches?(["Test1", "Test2"])).to be false
@@ -53,6 +53,19 @@ describe Mongoid::Matchable::ElemMatch do
53
53
  expect(matcher._matches?("$elemMatch" => {"a" => {"$in" => [1]}, "b" => {"$gt" => 1}})).to be true
54
54
  end
55
55
  end
56
+
57
+ context "when using a $not operator that matches" do
58
+
59
+ it "returns true" do
60
+ expect(matcher._matches?("$elemMatch" => {"a" => {"$not" => 4}})).to be true
61
+ end
62
+ end
63
+ end
64
+
65
+ context "when using symbols and a :$not operator that matches" do
66
+ it "returns true" do
67
+ expect(matcher._matches?(:$elemMatch => {"a" => {:$not => 4}})).to be true
68
+ end
56
69
  end
57
70
 
58
71
  context "when there is not a sub document that matches the criteria" do
@@ -74,6 +87,13 @@ describe Mongoid::Matchable::ElemMatch do
74
87
  expect(matcher._matches?("$elemMatch" => {"a" => {"$in" => [1]}, "b" => {"$gt" => 10}})).to be false
75
88
  end
76
89
  end
90
+
91
+ context "when using a $not operator that does not match" do
92
+
93
+ it "returns true" do
94
+ expect(matcher._matches?("$elemMatch" => {"a" => {"$not" => 1}})).to be true
95
+ end
96
+ end
77
97
  end
78
98
 
79
99
  context "when using a criteria that matches partially but not a single sub document" do