mongoid 6.4.8 → 7.0.13

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 (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
@@ -1,11 +1,15 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Referenced::ManyToMany do
3
+ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
4
4
 
5
- before(:all) do
5
+ around(:each) do |example|
6
+ original_raise_not_found_error = Mongoid.raise_not_found_error
7
+ original_preferences_association = Person.relations["preferences"]
6
8
  Mongoid.raise_not_found_error = true
7
- Person.autosave(Person.relations["preferences"].merge!(autosave: true))
8
- Person._synced(Person.relations["preferences"])
9
+ Person.has_and_belongs_to_many :preferences, autosave: true
10
+ example.run
11
+ Mongoid.raise_not_found_error = original_raise_not_found_error
12
+ Person.relations["preferences"] = original_preferences_association
9
13
  end
10
14
 
11
15
  after(:all) do
@@ -814,6 +818,82 @@ describe Mongoid::Relations::Referenced::ManyToMany do
814
818
  end
815
819
  end
816
820
 
821
+ describe "when self-referencing" do
822
+ let!(:parent) do
823
+ Vertex.create
824
+ end
825
+
826
+ let!(:child) do
827
+ Vertex.create(parents: [parent])
828
+ end
829
+
830
+ before do
831
+ parent.reload
832
+ child.reload
833
+ end
834
+
835
+ it "sets the parent" do
836
+ expect(child.parents).to include(parent)
837
+ end
838
+
839
+ it "sets the parent id" do
840
+ expect(child.parent_ids).to include(parent.id)
841
+ end
842
+
843
+ it "sets the child" do
844
+ expect(parent.children).to include(child)
845
+ end
846
+
847
+ it "sets the child id" do
848
+ expect(parent.child_ids).to include(child.id)
849
+ end
850
+
851
+ describe "#update" do
852
+ before do
853
+ child.update(parents: [parent])
854
+ end
855
+
856
+ it "sets the parent" do
857
+ expect(child.parents).to include(parent)
858
+ end
859
+
860
+ it "sets the parent id" do
861
+ expect(child.parent_ids).to include(parent.id)
862
+ end
863
+
864
+ it "sets the child" do
865
+ expect(parent.children).to include(child)
866
+ end
867
+
868
+ it "sets the child id" do
869
+ expect(parent.child_ids).to include(child.id)
870
+ end
871
+
872
+ describe "when reloading" do
873
+ before do
874
+ parent.reload
875
+ child.reload
876
+ end
877
+
878
+ it "sets the parent" do
879
+ expect(child.parents).to include(parent)
880
+ end
881
+
882
+ it "sets the parent id" do
883
+ expect(child.parent_ids).to include(parent.id)
884
+ end
885
+
886
+ it "sets the child" do
887
+ expect(parent.children).to include(child)
888
+ end
889
+
890
+ it "sets the child id" do
891
+ expect(parent.child_ids).to include(child.id)
892
+ end
893
+ end
894
+ end
895
+ end
896
+
817
897
  [ nil, [] ].each do |value|
818
898
 
819
899
  describe "#= #{value}" do
@@ -1041,27 +1121,6 @@ describe Mongoid::Relations::Referenced::ManyToMany do
1041
1121
  end
1042
1122
  end
1043
1123
 
1044
- describe ".builder" do
1045
-
1046
- let(:builder_klass) do
1047
- Mongoid::Relations::Builders::Referenced::ManyToMany
1048
- end
1049
-
1050
- let(:document) do
1051
- double
1052
- end
1053
-
1054
- let(:metadata) do
1055
- double(extension?: false)
1056
- end
1057
-
1058
- it "returns the embedded in builder" do
1059
- expect(
1060
- described_class.builder(nil, metadata, document)
1061
- ).to be_a_kind_of(builder_klass)
1062
- end
1063
- end
1064
-
1065
1124
  describe "#clear" do
1066
1125
 
1067
1126
  context "when the relation is not polymorphic" do
@@ -1695,6 +1754,43 @@ describe Mongoid::Relations::Referenced::ManyToMany do
1695
1754
  end
1696
1755
  end
1697
1756
 
1757
+ describe "#any?" do
1758
+
1759
+ let(:person) do
1760
+ Person.create
1761
+ end
1762
+
1763
+ context "when nothing exists on the relation" do
1764
+
1765
+ context "when no document is added" do
1766
+
1767
+ let!(:sandwich) do
1768
+ Sandwich.create!
1769
+ end
1770
+
1771
+ it "returns false" do
1772
+ expect(sandwich.meats.any?).to be false
1773
+ end
1774
+ end
1775
+
1776
+ context "when the document is destroyed" do
1777
+
1778
+ before do
1779
+ Meat.create!
1780
+ end
1781
+
1782
+ let!(:sandwich) do
1783
+ Sandwich.create!
1784
+ end
1785
+
1786
+ it "returns false" do
1787
+ sandwich.destroy
1788
+ expect(sandwich.meats.any?).to be false
1789
+ end
1790
+ end
1791
+ end
1792
+ end
1793
+
1698
1794
  context "when documents have been persisted" do
1699
1795
 
1700
1796
  let!(:preference) do
@@ -1784,6 +1880,107 @@ describe Mongoid::Relations::Referenced::ManyToMany do
1784
1880
  end
1785
1881
  end
1786
1882
 
1883
+ describe "#any?" do
1884
+
1885
+ let(:sandwich) do
1886
+ Sandwich.create
1887
+ end
1888
+
1889
+ context "when nothing exists on the relation" do
1890
+
1891
+ context "when no document is added" do
1892
+
1893
+ let!(:sandwich) do
1894
+ Sandwich.create!
1895
+ end
1896
+
1897
+ it "returns false" do
1898
+ expect(sandwich.meats.any?).to be false
1899
+ end
1900
+ end
1901
+
1902
+ context "when the document is destroyed" do
1903
+
1904
+ before do
1905
+ Meat.create!
1906
+ end
1907
+
1908
+ let!(:sandwich) do
1909
+ Sandwich.create!
1910
+ end
1911
+
1912
+ it "returns false" do
1913
+ sandwich.destroy
1914
+ expect(sandwich.meats.any?).to be false
1915
+ end
1916
+ end
1917
+ end
1918
+
1919
+ context "when appending to a relation and _loaded/_unloaded are empty" do
1920
+
1921
+ let!(:sandwich) do
1922
+ Sandwich.create!
1923
+ end
1924
+
1925
+ before do
1926
+ sandwich.meats << Meat.new
1927
+ end
1928
+
1929
+ it "returns true" do
1930
+ expect(sandwich.meats.any?).to be true
1931
+ end
1932
+ end
1933
+
1934
+ context "when appending to a relation in a transaction" do
1935
+ require_transaction_support
1936
+
1937
+ let!(:sandwich) do
1938
+ Sandwich.create!
1939
+ end
1940
+
1941
+ it "returns true" do
1942
+ sandwich.with_session do |session|
1943
+ session.with_transaction do
1944
+ expect{ sandwich.meats << Meat.new }.to_not raise_error
1945
+ expect(sandwich.meats.any?).to be true
1946
+ end
1947
+ end
1948
+ end
1949
+ end
1950
+
1951
+ context "when documents have been persisted" do
1952
+
1953
+ let!(:meat) do
1954
+ sandwich.meats.create
1955
+ end
1956
+
1957
+ it "returns true" do
1958
+ expect(sandwich.meats.any?).to be true
1959
+ end
1960
+ end
1961
+
1962
+ context "when documents have not been persisted" do
1963
+
1964
+ let!(:meat) do
1965
+ sandwich.meats.build
1966
+ end
1967
+
1968
+ it "returns false" do
1969
+ expect(sandwich.meats.any?).to be true
1970
+ end
1971
+ end
1972
+
1973
+ context "when new documents exist in the database" do
1974
+ before do
1975
+ Meat.create(sandwiches: [sandwich])
1976
+ end
1977
+
1978
+ it "returns true" do
1979
+ expect(sandwich.meats.any?).to be true
1980
+ end
1981
+ end
1982
+ end
1983
+
1787
1984
  [ :create, :create! ].each do |method|
1788
1985
 
1789
1986
  describe "##{method}" do
@@ -2175,8 +2372,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
2175
2372
 
2176
2373
  let!(:deleted) do
2177
2374
  person.preferences.send(
2178
- method,
2179
- { name: "Testing" }
2375
+ method,
2376
+ { name: "Testing" }
2180
2377
  )
2181
2378
  end
2182
2379
 
@@ -2365,7 +2562,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
2365
2562
 
2366
2563
  let(:preferences) do
2367
2564
  person.preferences.find(
2368
- [ unrelated_pref.id, unrelated_pref_two.id ]
2565
+ [ unrelated_pref.id, unrelated_pref_two.id ]
2369
2566
  )
2370
2567
  end
2371
2568
 
@@ -2543,20 +2740,6 @@ describe Mongoid::Relations::Referenced::ManyToMany do
2543
2740
  end
2544
2741
  end
2545
2742
 
2546
- describe ".foreign_key_suffix" do
2547
-
2548
- it "returns _ids" do
2549
- expect(described_class.foreign_key_suffix).to eq("_ids")
2550
- end
2551
- end
2552
-
2553
- describe ".macro" do
2554
-
2555
- it "returns has_and_belongs_to_many" do
2556
- expect(described_class.macro).to eq(:has_and_belongs_to_many)
2557
- end
2558
- end
2559
-
2560
2743
  describe "#max" do
2561
2744
 
2562
2745
  let(:person) do
@@ -2641,7 +2824,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
2641
2824
  expect(preferences).to eq([ preference_one ])
2642
2825
  end
2643
2826
 
2644
- context 'when providing a collation', if: collation_supported? do
2827
+ context 'when providing a collation' do
2828
+ min_server_version '3.4'
2645
2829
 
2646
2830
  let(:preferences) do
2647
2831
  person.preferences.where(name: "FIRST").collation(locale: 'en_US', strength: 2).to_a
@@ -2843,7 +3027,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
2843
3027
  end
2844
3028
  end
2845
3029
 
2846
- Mongoid::Relations::Referenced::Many.public_instance_methods.each do |method|
3030
+ Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy.public_instance_methods.each do |method|
2847
3031
 
2848
3032
  context "when checking #{method}" do
2849
3033
 
@@ -2864,13 +3048,6 @@ describe Mongoid::Relations::Referenced::ManyToMany do
2864
3048
  end
2865
3049
  end
2866
3050
 
2867
- describe ".stores_foreign_key?" do
2868
-
2869
- it "returns true" do
2870
- expect(described_class.stores_foreign_key?).to be true
2871
- end
2872
- end
2873
-
2874
3051
  describe "#scoped" do
2875
3052
 
2876
3053
  let(:person) do
@@ -2976,33 +3153,6 @@ describe Mongoid::Relations::Referenced::ManyToMany do
2976
3153
  end
2977
3154
  end
2978
3155
 
2979
- describe ".valid_options" do
2980
-
2981
- it "returns the valid options" do
2982
- expect(described_class.valid_options).to eq(
2983
- [
2984
- :after_add,
2985
- :after_remove,
2986
- :autosave,
2987
- :before_add,
2988
- :before_remove,
2989
- :dependent,
2990
- :foreign_key,
2991
- :index,
2992
- :order,
2993
- :primary_key
2994
- ]
2995
- )
2996
- end
2997
- end
2998
-
2999
- describe ".validation_default" do
3000
-
3001
- it "returns true" do
3002
- expect(described_class.validation_default).to be true
3003
- end
3004
- end
3005
-
3006
3156
  context "when setting the ids directly after the documents" do
3007
3157
 
3008
3158
  let!(:person) do
@@ -3023,7 +3173,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
3023
3173
 
3024
3174
  before do
3025
3175
  person.update_attributes(
3026
- houses: [ wife_house, exwife_house, girlfriend_house ]
3176
+ houses: [ wife_house, exwife_house, girlfriend_house ]
3027
3177
  )
3028
3178
  person.update_attributes(house_ids: [ girlfriend_house.id ])
3029
3179
  end
@@ -3208,14 +3358,14 @@ describe Mongoid::Relations::Referenced::ManyToMany do
3208
3358
 
3209
3359
  it "orders the documents" do
3210
3360
  expect(person.ordered_preferences(true)).to eq(
3211
- [preference_two, preference_three, preference_one]
3212
- )
3361
+ [preference_two, preference_three, preference_one]
3362
+ )
3213
3363
  end
3214
3364
 
3215
3365
  it "chains default criteria with additional" do
3216
3366
  expect(person.ordered_preferences.order_by(:name.desc).to_a).to eq(
3217
- [preference_three, preference_two, preference_one]
3218
- )
3367
+ [preference_three, preference_two, preference_one]
3368
+ )
3219
3369
  end
3220
3370
  end
3221
3371
 
@@ -3273,7 +3423,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
3273
3423
 
3274
3424
  before do
3275
3425
  Preference.collection.find({ _id: preference_one.id }).
3276
- update_one({ "$set" => { name: "reloaded" }})
3426
+ update_one({ "$set" => { name: "reloaded" }})
3277
3427
  end
3278
3428
 
3279
3429
  let(:reloaded) do
@@ -3367,8 +3517,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
3367
3517
 
3368
3518
  it "persists the change in id order" do
3369
3519
  expect(reloaded.preference_ids).to eq(
3370
- [ preference_two.id, preference_one.id ]
3371
- )
3520
+ [ preference_two.id, preference_one.id ]
3521
+ )
3372
3522
  end
3373
3523
  end
3374
3524
 
@@ -3380,7 +3530,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
3380
3530
 
3381
3531
  before do
3382
3532
  person.preference_ids =
3383
- [ preference_two.id, preference_one.id, preference_three.id ]
3533
+ [ preference_two.id, preference_one.id, preference_three.id ]
3384
3534
  person.save
3385
3535
  end
3386
3536
 
@@ -3390,8 +3540,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
3390
3540
 
3391
3541
  it "also persists the change in id order" do
3392
3542
  expect(reloaded.preference_ids).to eq(
3393
- [ preference_two.id, preference_one.id, preference_three.id ]
3394
- )
3543
+ [ preference_two.id, preference_one.id, preference_three.id ]
3544
+ )
3395
3545
  end
3396
3546
  end
3397
3547
 
@@ -3403,10 +3553,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
3403
3553
 
3404
3554
  before do
3405
3555
  person.preference_ids =
3406
- [ preference_one.id, preference_two.id, preference_three.id ]
3556
+ [ preference_one.id, preference_two.id, preference_three.id ]
3407
3557
  person.save
3408
3558
  person.preference_ids =
3409
- [ preference_three.id, preference_two.id ]
3559
+ [ preference_three.id, preference_two.id ]
3410
3560
  person.save
3411
3561
  end
3412
3562
 
@@ -3416,8 +3566,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
3416
3566
 
3417
3567
  it "also persists the change in id order" do
3418
3568
  expect(reloaded.preference_ids).to eq(
3419
- [ preference_three.id, preference_two.id ]
3420
- )
3569
+ [ preference_three.id, preference_two.id ]
3570
+ )
3421
3571
  end
3422
3572
  end
3423
3573
  end
@@ -3543,9 +3693,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
3543
3693
  field :n, type: String, as: :name
3544
3694
 
3545
3695
  has_and_belongs_to_many :distributors,
3546
- foreign_key: :d_ids,
3547
- inverse_of: 'p',
3548
- inverse_class_name: 'Distributor'
3696
+ foreign_key: :d_ids,
3697
+ inverse_of: 'p'
3549
3698
  end
3550
3699
 
3551
3700
  class Distributor
@@ -3554,9 +3703,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
3554
3703
  field :n, type: String, as: :name
3555
3704
 
3556
3705
  has_and_belongs_to_many :projects,
3557
- foreign_key: :p_ids,
3558
- inverse_of: 'd',
3559
- inverse_class_name: 'Project'
3706
+ foreign_key: :p_ids,
3707
+ inverse_of: 'd'
3560
3708
  end
3561
3709
  end
3562
3710
 
@@ -0,0 +1,26 @@
1
+ class HabtmmCompany
2
+ include Mongoid::Document
3
+
4
+ field :c_id, type: Integer
5
+ field :e_ids, type: Array
6
+ has_and_belongs_to_many :employees, primary_key: :e_id, foreign_key: :e_ids, class_name: 'HabtmmEmployee'
7
+ end
8
+
9
+ class HabtmmEmployee
10
+ include Mongoid::Document
11
+
12
+ field :e_id, type: Integer
13
+ field :c_ids, type: Array
14
+ field :habtmm_company_ids, type: Array
15
+ has_and_belongs_to_many :companies, primary_key: :c_id, foreign_key: :c_ids, class_name: 'HabtmmCompany'
16
+ end
17
+
18
+ class HabtmmTicket
19
+ include Mongoid::Document
20
+ end
21
+
22
+ class HabtmmPerson
23
+ include Mongoid::Document
24
+
25
+ has_and_belongs_to_many :tickets, class_name: 'HabtmmTicket'
26
+ end