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
@@ -2,12 +2,21 @@ require "spec_helper"
2
2
 
3
3
  describe Mongoid::Clients::Options do
4
4
 
5
- describe '#with', if: non_legacy_server? do
5
+ before do
6
+ # This test asserts on numbers of open connections,
7
+ # to make these assertions work in jruby we cannot have connections
8
+ # bleeding from one test to another and this includes background SDAM
9
+ # threads in the driver
10
+ Mongoid.disconnect_clients
11
+ Mongoid::Clients.clients.clear
12
+ end
13
+
14
+ describe '#with' do
6
15
 
7
16
  context 'when passing some options' do
8
17
 
9
18
  let(:persistence_context) do
10
- Band.with(options) do |klass|
19
+ Minim.with(options) do |klass|
11
20
  klass.persistence_context
12
21
  end
13
22
  end
@@ -19,13 +28,13 @@ describe Mongoid::Clients::Options do
19
28
  end
20
29
 
21
30
  it 'does not set the options on class level' do
22
- expect(Band.persistence_context.client.options['database']).to eq('mongoid_test')
31
+ expect(Minim.persistence_context.client.options['database']).to eq('mongoid_test')
23
32
  end
24
33
 
25
34
  context 'when the options are not valid mongo client options' do
26
35
 
27
36
  let(:persistence_context) do
28
- Band.with(invalid_options) do |klass|
37
+ Minim.with(invalid_options) do |klass|
29
38
  klass.persistence_context
30
39
  end
31
40
  end
@@ -40,7 +49,7 @@ describe Mongoid::Clients::Options do
40
49
 
41
50
  it 'clears the persistence context' do
42
51
  begin; persistence_context; rescue Mongoid::Errors::InvalidPersistenceOption; end
43
- expect(Band.persistence_context).to eq(Mongoid::PersistenceContext.new(Band))
52
+ expect(Minim.persistence_context).to eq(Mongoid::PersistenceContext.new(Minim))
44
53
  end
45
54
  end
46
55
 
@@ -63,17 +72,17 @@ describe Mongoid::Clients::Options do
63
72
  end
64
73
  end
65
74
 
66
- context 'when passing a block', if: testing_locally? do
75
+ context 'when passing a block' do
67
76
 
68
77
  let!(:connections_before) do
69
- Band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
78
+ Minim.mongo_client.database.command(serverStatus: 1).first['connections']['current']
70
79
  end
71
80
 
72
81
  let!(:connections_and_cluster_during) do
73
82
  connections = nil
74
- cluster = Band.with(options) do |klass|
83
+ cluster = Minim.with(options) do |klass|
75
84
  klass.where(name: 'emily').to_a
76
- connections = Band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
85
+ connections = Minim.mongo_client.database.command(serverStatus: 1).first['connections']['current']
77
86
  end
78
87
  [ connections, cluster ]
79
88
  end
@@ -87,15 +96,15 @@ describe Mongoid::Clients::Options do
87
96
  end
88
97
 
89
98
  let(:connections_after) do
90
- Band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
99
+ Minim.mongo_client.database.command(serverStatus: 1).first['connections']['current']
91
100
  end
92
101
 
93
102
  let!(:cluster_before) do
94
- Band.persistence_context.cluster
103
+ Minim.persistence_context.cluster
95
104
  end
96
105
 
97
106
  let(:cluster_after) do
98
- Band.persistence_context.cluster
107
+ Minim.persistence_context.cluster
99
108
  end
100
109
 
101
110
  context 'when the options create a new cluster' do
@@ -134,8 +143,8 @@ describe Mongoid::Clients::Options do
134
143
 
135
144
  let(:config) do
136
145
  {
137
- default: { hosts: [ "127.0.0.1:27017" ], database: database_id },
138
- secondary: { uri: "mongodb://127.0.0.1:27017/secondary-db?connectTimeoutMS=3000" }
146
+ default: { hosts: SpecConfig.instance.addresses, database: database_id },
147
+ secondary: { uri: "mongodb://#{SpecConfig.instance.addresses.first}/secondary-db?connectTimeoutMS=3000" }
139
148
  }
140
149
  end
141
150
 
@@ -148,7 +157,7 @@ describe Mongoid::Clients::Options do
148
157
  end
149
158
 
150
159
  let(:persistence_context) do
151
- Band.with(client: :secondary) do |klass|
160
+ Minim.with(client: :secondary) do |klass|
152
161
  klass.persistence_context
153
162
  end
154
163
  end
@@ -181,7 +190,7 @@ describe Mongoid::Clients::Options do
181
190
 
182
191
  let(:context_and_criteria) do
183
192
  collection = nil
184
- cxt = Band.with(read_secondary_option) do |klass|
193
+ cxt = Minim.with(read_secondary_option) do |klass|
185
194
  collection = klass.all.collection
186
195
  klass.persistence_context
187
196
  end
@@ -221,11 +230,11 @@ describe Mongoid::Clients::Options do
221
230
  100.times do |i|
222
231
  threads << Thread.new do
223
232
  if i % 2 == 0
224
- Band.with(collection: 'British') do |klass|
233
+ Minim.with(collection: 'British') do |klass|
225
234
  klass.create(name: 'realised')
226
235
  end
227
236
  else
228
- Band.with(collection: 'American') do |klass|
237
+ Minim.with(collection: 'American') do |klass|
229
238
  klass.create(name: 'realized')
230
239
  end
231
240
  end
@@ -235,13 +244,13 @@ describe Mongoid::Clients::Options do
235
244
  end
236
245
 
237
246
  let(:british_count) do
238
- Band.with(collection: 'British') do |klass|
247
+ Minim.with(collection: 'British') do |klass|
239
248
  klass.all.count
240
249
  end
241
250
  end
242
251
 
243
252
  let(:american_count) do
244
- Band.with(collection: 'American') do |klass|
253
+ Minim.with(collection: 'American') do |klass|
245
254
  klass.all.count
246
255
  end
247
256
  end
@@ -256,7 +265,7 @@ describe Mongoid::Clients::Options do
256
265
  context 'when passing a persistence context' do
257
266
 
258
267
  let(:instance) do
259
- Band.new
268
+ Minim.new
260
269
  end
261
270
 
262
271
  let(:persistence_context) do
@@ -268,14 +277,14 @@ describe Mongoid::Clients::Options do
268
277
  let(:options) { { database: 'other' } }
269
278
 
270
279
  it 'sets the persistence context on the object' do
271
- Band.new.with(persistence_context) do |band_instance|
272
- expect(band_instance.persistence_context.options).to eq(persistence_context.options)
280
+ Minim.new.with(persistence_context) do |model_instance|
281
+ expect(model_instance.persistence_context.options).to eq(persistence_context.options)
273
282
  end
274
283
  end
275
284
  end
276
285
  end
277
286
 
278
- describe '.with', if: non_legacy_server? do
287
+ describe '.with' do
279
288
 
280
289
  context 'when passing some options' do
281
290
 
@@ -283,12 +292,12 @@ describe Mongoid::Clients::Options do
283
292
  { database: 'other' }
284
293
  end
285
294
 
286
- let(:band) do
287
- Band.create
295
+ let(:test_model) do
296
+ Minim.create
288
297
  end
289
298
 
290
299
  let(:persistence_context) do
291
- band.with(options) do |object|
300
+ test_model.with(options) do |object|
292
301
  object.persistence_context
293
302
  end
294
303
  end
@@ -298,13 +307,13 @@ describe Mongoid::Clients::Options do
298
307
  end
299
308
 
300
309
  it 'does not set the options on instance level' do
301
- expect(band.persistence_context.client.database.name).to eq('mongoid_test')
310
+ expect(test_model.persistence_context.client.database.name).to eq('mongoid_test')
302
311
  end
303
312
 
304
313
  context 'when the options are not valid mongo client options' do
305
314
 
306
315
  let(:persistence_context) do
307
- band.with(invalid_options) do |object|
316
+ test_model.with(invalid_options) do |object|
308
317
  object.persistence_context
309
318
  end
310
319
  end
@@ -319,7 +328,7 @@ describe Mongoid::Clients::Options do
319
328
 
320
329
  it 'clears the persistence context' do
321
330
  begin; persistence_context; rescue Mongoid::Errors::InvalidPersistenceOption; end
322
- expect(band.persistence_context).to eq(Mongoid::PersistenceContext.new(band))
331
+ expect(test_model.persistence_context).to eq(Mongoid::PersistenceContext.new(test_model))
323
332
  end
324
333
  end
325
334
 
@@ -327,8 +336,13 @@ describe Mongoid::Clients::Options do
327
336
 
328
337
  let(:config) do
329
338
  {
330
- default: { hosts: [ "127.0.0.1:27017" ], database: database_id },
331
- secondary: { uri: "mongodb://127.0.0.1:27017/secondary-db" }
339
+ default: { hosts: SpecConfig.instance.addresses, database: database_id },
340
+ secondary: {
341
+ uri: "mongodb://#{SpecConfig.instance.addresses.first}/secondary-db",
342
+ options: {
343
+ server_selection_timeout: 0.5,
344
+ },
345
+ }
332
346
  }
333
347
  end
334
348
 
@@ -337,7 +351,7 @@ describe Mongoid::Clients::Options do
337
351
  end
338
352
 
339
353
  let(:persistence_context) do
340
- band.with(client: :secondary) do |object|
354
+ test_model.with(client: :secondary) do |object|
341
355
  object.persistence_context
342
356
  end
343
357
  end
@@ -348,17 +362,17 @@ describe Mongoid::Clients::Options do
348
362
  end
349
363
  end
350
364
 
351
- context 'when passing a block', if: testing_locally? do
365
+ context 'when passing a block' do
352
366
 
353
367
  let!(:connections_before) do
354
- band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
368
+ test_model.mongo_client.database.command(serverStatus: 1).first['connections']['current']
355
369
  end
356
370
 
357
- let(:connections_and_cluster_during) do
371
+ let!(:connections_and_cluster_during) do
358
372
  connections = nil
359
- cluster = band.with(options) do |b|
373
+ cluster = test_model.with(options) do |b|
360
374
  b.reload
361
- connections = band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
375
+ connections = test_model.mongo_client.database.command(serverStatus: 1).first['connections']['current']
362
376
  b.persistence_context.cluster
363
377
  end
364
378
  [ connections, cluster ]
@@ -373,15 +387,15 @@ describe Mongoid::Clients::Options do
373
387
  end
374
388
 
375
389
  let(:connections_after) do
376
- band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
390
+ test_model.mongo_client.database.command(serverStatus: 1).first['connections']['current']
377
391
  end
378
392
 
379
393
  let!(:cluster_before) do
380
- band.persistence_context.cluster
394
+ test_model.persistence_context.cluster
381
395
  end
382
396
 
383
397
  let(:cluster_after) do
384
- band.persistence_context.cluster
398
+ test_model.persistence_context.cluster
385
399
  end
386
400
 
387
401
  context 'when the options create a new cluster' do
@@ -396,7 +410,7 @@ describe Mongoid::Clients::Options do
396
410
  end
397
411
 
398
412
  it 'disconnects the new cluster when the block exits' do
399
- expect(connections_after).to eq(connections_before)
413
+ expect(connections_before).to eq(connections_after)
400
414
  end
401
415
  end
402
416
 
@@ -431,15 +445,15 @@ describe Mongoid::Clients::Options do
431
445
  before do
432
446
  threads = []
433
447
  100.times do |i|
434
- band = Band.create
448
+ test_model = Minim.create
435
449
  threads << Thread.new do
436
450
  if i % 2 == 0
437
- band.with(collection: 'British') do |b|
451
+ test_model.with(collection: 'British') do |b|
438
452
  b.name = 'realised'
439
453
  b.upsert
440
454
  end
441
455
  else
442
- band.with(collection: 'American') do |b|
456
+ test_model.with(collection: 'American') do |b|
443
457
  b.name = 'realized'
444
458
  b.upsert
445
459
  end
@@ -450,13 +464,13 @@ describe Mongoid::Clients::Options do
450
464
  end
451
465
 
452
466
  let(:british_count) do
453
- Band.with(collection: 'British') do |klass|
467
+ Minim.with(collection: 'British') do |klass|
454
468
  klass.all.count
455
469
  end
456
470
  end
457
471
 
458
472
  let(:american_count) do
459
- Band.with(collection: 'British') do |klass|
473
+ Minim.with(collection: 'British') do |klass|
460
474
  klass.all.count
461
475
  end
462
476
  end
@@ -471,7 +485,7 @@ describe Mongoid::Clients::Options do
471
485
  context 'when passing a persistence context' do
472
486
 
473
487
  let(:persistence_context) do
474
- Band.with(options) do |klass|
488
+ Minim.with(options) do |klass|
475
489
  klass.persistence_context
476
490
  end
477
491
  end
@@ -479,8 +493,8 @@ describe Mongoid::Clients::Options do
479
493
  let(:options) { { database: 'other' } }
480
494
 
481
495
  it 'sets the persistence context on the object' do
482
- Band.with(persistence_context) do |band_class|
483
- expect(band_class.persistence_context.options).to eq(persistence_context.options)
496
+ Minim.with(persistence_context) do |test_model_class|
497
+ expect(test_model_class.persistence_context.options).to eq(persistence_context.options)
484
498
  end
485
499
  end
486
500
  end
@@ -40,7 +40,8 @@ describe Mongoid::Clients::Sessions do
40
40
 
41
41
  context 'when a session is used on a model class' do
42
42
 
43
- context 'when sessions are supported', if: sessions_supported? do
43
+ context 'when sessions are supported' do
44
+ min_server_version '3.6'
44
45
 
45
46
  around do |example|
46
47
  Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
@@ -123,7 +124,7 @@ describe Mongoid::Clients::Sessions do
123
124
  Post.create
124
125
  end
125
126
  rescue => ex
126
- e = ex
127
+ e = ex
127
128
  end
128
129
  e
129
130
  end
@@ -169,7 +170,8 @@ describe Mongoid::Clients::Sessions do
169
170
  end
170
171
  end
171
172
 
172
- context 'when sessions are not supported', unless: sessions_supported? do
173
+ context 'when sessions are not supported' do
174
+ max_server_version '3.4'
173
175
 
174
176
  let!(:error) do
175
177
  e = nil
@@ -196,7 +198,8 @@ describe Mongoid::Clients::Sessions do
196
198
  end
197
199
  end
198
200
 
199
- context 'when sessions are supported', if: sessions_supported? do
201
+ context 'when sessions are supported' do
202
+ min_server_version '3.6'
200
203
 
201
204
  around do |example|
202
205
  Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
@@ -313,7 +316,8 @@ describe Mongoid::Clients::Sessions do
313
316
  end
314
317
  end
315
318
 
316
- context 'when sessions are not supported', unless: sessions_supported? do
319
+ context 'when sessions are not supported' do
320
+ max_server_version '3.4'
317
321
 
318
322
  let!(:error) do
319
323
  e = nil