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,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Bindings::Referenced::Many do
3
+ describe Mongoid::Association::Referenced::HasMany::Binding do
4
4
 
5
5
  let(:person) do
6
6
  Person.new
@@ -11,17 +11,17 @@ describe Mongoid::Relations::Bindings::Referenced::Many do
11
11
  end
12
12
 
13
13
  let(:target) do
14
- Mongoid::Relations::Targets::Enumerable.new([ post ])
14
+ Mongoid::Association::Referenced::HasMany::Targets::Enumerable.new([ post ])
15
15
  end
16
16
 
17
- let(:metadata) do
17
+ let(:association) do
18
18
  Person.relations["posts"]
19
19
  end
20
20
 
21
21
  describe "#bind_one" do
22
22
 
23
23
  let(:binding) do
24
- described_class.new(person, target, metadata)
24
+ described_class.new(person, target, association)
25
25
  end
26
26
 
27
27
  context "when the document is bindable" do
@@ -55,7 +55,7 @@ describe Mongoid::Relations::Bindings::Referenced::Many do
55
55
  describe "#unbind_one" do
56
56
 
57
57
  let(:binding) do
58
- described_class.new(person, target, metadata)
58
+ described_class.new(person, target, association)
59
59
  end
60
60
 
61
61
  context "when the documents are unbindable" do
@@ -0,0 +1,119 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Association::Referenced::HasMany::Buildable do
4
+
5
+ let(:base) do
6
+ double
7
+ end
8
+
9
+ describe "#build" do
10
+
11
+ let(:documents) do
12
+ association.build(base, object)
13
+ end
14
+
15
+ let(:options) do
16
+ {}
17
+ end
18
+
19
+ let(:association) do
20
+ Mongoid::Association::Referenced::HasMany.new(Person, :posts, options)
21
+ end
22
+
23
+ context "when provided an id" do
24
+
25
+ let(:object) do
26
+ BSON::ObjectId.new
27
+ end
28
+
29
+ let(:criteria) do
30
+ Post.where(association.foreign_key => object)
31
+ end
32
+
33
+ it "returns the criteria" do
34
+ expect(documents).to eq(criteria)
35
+ end
36
+ end
37
+
38
+ context "when order is specified" do
39
+
40
+ let(:options) do
41
+ {
42
+ order: :rating.asc,
43
+ }
44
+ end
45
+
46
+ let(:object) do
47
+ BSON::ObjectId.new
48
+ end
49
+
50
+ let(:criteria) do
51
+ Post.where(association.foreign_key => object).order_by(options[:order])
52
+ end
53
+
54
+ it "adds the ordering to the criteria" do
55
+ expect(documents).to eq(criteria)
56
+ end
57
+ end
58
+
59
+ context "when the relation is polymorphic" do
60
+
61
+ let(:options) do
62
+ {
63
+ as: :ratable
64
+ }
65
+ end
66
+
67
+ let(:object) do
68
+ BSON::ObjectId.new
69
+ end
70
+
71
+ let(:base) do
72
+ Rating.new
73
+ end
74
+
75
+ let(:criteria) do
76
+ Post.where(association.foreign_key => object, 'ratable_type' => 'Rating')
77
+ end
78
+
79
+ it "adds the type to the criteria" do
80
+ expect(documents).to eq(criteria)
81
+ end
82
+ end
83
+
84
+ context "when provided a object" do
85
+
86
+ let(:object) do
87
+ [ Person.new ]
88
+ end
89
+
90
+ it "returns the object" do
91
+ expect(documents).to eq(object)
92
+ end
93
+ end
94
+
95
+ context "when no documents found in the database" do
96
+
97
+ context "when the ids are empty" do
98
+
99
+ let(:object) do
100
+ [ nil ]
101
+ end
102
+
103
+ it "returns an empty array" do
104
+ expect(documents).to be_empty
105
+ end
106
+
107
+ context "during initialization" do
108
+
109
+ it "returns an empty array" do
110
+ Person.new do |p|
111
+ expect(p.posts).to be_empty
112
+ expect(p.posts._association).to_not be_nil
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Eager::HasMany do
3
+ describe Mongoid::Association::Referenced::HasMany::Eager do
4
4
 
5
5
  describe ".grouped_docs" do
6
6
 
@@ -12,13 +12,13 @@ describe Mongoid::Relations::Eager::HasMany do
12
12
  Person.create!
13
13
  end
14
14
 
15
- let(:metadata) do
15
+ let(:association) do
16
16
  Person.reflect_on_association(:posts)
17
17
  end
18
18
 
19
19
  let(:eager) do
20
- described_class.new([metadata], docs).tap do |b|
21
- b.shift_metadata
20
+ described_class.new([association], docs).tap do |b|
21
+ b.send(:shift_association)
22
22
  end
23
23
  end
24
24
 
@@ -27,7 +27,7 @@ describe Mongoid::Relations::Eager::HasMany do
27
27
  end
28
28
 
29
29
  it "aggregates by the parent primary key" do
30
- expect(eager.grouped_docs.keys).to eq([person.id])
30
+ expect(eager.send(:grouped_docs).keys).to eq([person.id])
31
31
  end
32
32
  end
33
33
 
@@ -41,13 +41,13 @@ describe Mongoid::Relations::Eager::HasMany do
41
41
  Person.create!
42
42
  end
43
43
 
44
- let(:metadata) do
44
+ let(:association) do
45
45
  Person.reflect_on_association(:posts)
46
46
  end
47
47
 
48
48
  let(:eager) do
49
- described_class.new([metadata], docs).tap do |b|
50
- b.shift_metadata
49
+ described_class.new([association], docs).tap do |b|
50
+ b.send(:shift_association)
51
51
  end
52
52
  end
53
53
 
@@ -58,14 +58,14 @@ describe Mongoid::Relations::Eager::HasMany do
58
58
 
59
59
  it "sets the relation into the parent" do
60
60
  docs.each do |doc|
61
- expect(doc).to receive(:__build__).once.with(:posts, :foo, metadata)
61
+ expect(doc).to receive(:__build__).once.with(:posts, :foo, association)
62
62
  end
63
- eager.set_on_parent(person.id, :foo)
63
+ eager.send(:set_on_parent, person.id, :foo)
64
64
  end
65
65
 
66
66
  it "doesnt call an extra query" do
67
67
  expect_query(0) do
68
- eager.set_on_parent(person.id, :foo)
68
+ eager.send(:set_on_parent, person.id, :foo)
69
69
  end
70
70
  end
71
71
  end
@@ -91,6 +91,15 @@ describe Mongoid::Relations::Eager::HasMany do
91
91
  end
92
92
  end
93
93
  end
94
+
95
+ it "does not query when accessing the base on each document" do
96
+ persons = Person.all.includes(:drugs).to_a
97
+ expect_query(0) do
98
+ persons.each do |person|
99
+ person.drugs.collect(&:person)
100
+ end
101
+ end
102
+ end
94
103
  end
95
104
 
96
105
  context "when the relation is not polymorphic" do
@@ -120,6 +129,12 @@ describe Mongoid::Relations::Eager::HasMany do
120
129
  eager.posts.first.title = "New title"
121
130
  end
122
131
  end
132
+
133
+ it "does not query when accessing the base on each document" do
134
+ expect_query(0) do
135
+ eager.posts.collect(&:person)
136
+ end
137
+ end
123
138
  end
124
139
 
125
140
  context "when the eager load has not returned documents" do
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Targets::Enumerable do
3
+ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
4
4
 
5
5
  describe "#==" do
6
6
 
@@ -189,6 +189,12 @@ describe Mongoid::Relations::Targets::Enumerable do
189
189
  it "returns the added documents" do
190
190
  expect(added).to eq([ post ])
191
191
  end
192
+
193
+ it "sets the base on the new document" do
194
+ expect_query(0) do
195
+ added.collect(&:person)
196
+ end
197
+ end
192
198
  end
193
199
  end
194
200
 
@@ -247,6 +253,111 @@ describe Mongoid::Relations::Targets::Enumerable do
247
253
  end
248
254
  end
249
255
  end
256
+
257
+ context "when the documents have been loaded" do
258
+ let(:criteria) do
259
+ Post.where(person_id: person.id)
260
+ end
261
+
262
+ let!(:enumerable) do
263
+ described_class.new(criteria)
264
+ end
265
+
266
+ before do
267
+ enumerable.load_all!
268
+ end
269
+
270
+ it "is _loaded" do
271
+ expect(enumerable._loaded?).to be true
272
+ end
273
+
274
+ context "when a block is given" do
275
+ it "returns true when the predicate is true" do
276
+ expect(
277
+ enumerable.any? { |doc| true }
278
+ ).to be true
279
+ end
280
+
281
+ it "returns false when the predicate is false" do
282
+ expect(
283
+ enumerable.any? { |doc| false }
284
+ ).to be false
285
+ end
286
+ end
287
+
288
+ context "when an argument is given" do
289
+ ruby_version_gte '2.5'
290
+
291
+ it "returns true when the argument is true" do
292
+ expect(enumerable.any?(Post)).to be true
293
+ end
294
+
295
+ it "returns false when the argument is false" do
296
+ expect(enumerable.any?(Sandwich)).to be false
297
+ end
298
+ end
299
+
300
+ context "when both an argument and a block are given" do
301
+ ruby_version_gte '2.5'
302
+
303
+ it "gives precedence to the pattern" do
304
+ expect(
305
+ enumerable.any?(Post) { |doc| false }
306
+ ).to be true
307
+ end
308
+ end
309
+ end
310
+
311
+ context "when the documents are not loaded" do
312
+
313
+ let(:criteria) do
314
+ Post.where(person_id: person.id)
315
+ end
316
+
317
+ let!(:enumerable) do
318
+ described_class.new(criteria)
319
+ end
320
+
321
+ it "is not _loaded" do
322
+ expect(enumerable._loaded?).to be false
323
+ end
324
+
325
+ context "when a block is given" do
326
+ it "returns true when the predicate is true" do
327
+ expect(
328
+ enumerable.any? { |doc| true }
329
+ ).to be true
330
+ end
331
+
332
+ it "returns false when the predicate is false" do
333
+ expect(
334
+ enumerable.any? { |doc| false }
335
+ ).to be false
336
+ end
337
+ end
338
+
339
+ context "when an argument is given" do
340
+ ruby_version_gte '2.5'
341
+
342
+ it "returns true when the argument is true" do
343
+ expect(enumerable.any?(Post)).to be true
344
+ end
345
+
346
+ it "returns false when the argument is false" do
347
+ expect(enumerable.any?(Sandwich)).to be false
348
+ end
349
+ end
350
+
351
+ context "when both an argument and a block are given" do
352
+ ruby_version_gte '2.5'
353
+
354
+ it "gives precedence to the pattern" do
355
+ expect(
356
+ enumerable.any?(Post) { |doc| false }
357
+ ).to be true
358
+ end
359
+ end
360
+ end
250
361
  end
251
362
 
252
363
  describe "#clear" do
@@ -622,6 +733,22 @@ describe Mongoid::Relations::Targets::Enumerable do
622
733
  it "becomes loaded" do
623
734
  expect(enumerable).to be__loaded
624
735
  end
736
+
737
+ context 'when the base relation is accessed from each document' do
738
+
739
+ let(:persons) do
740
+ described_class.new(criteria).collect(&:person)
741
+ end
742
+
743
+ before do
744
+ Post.create(person_id: person.id)
745
+ Post.create(person_id: person.id)
746
+ end
747
+
748
+ it 'sets the base relation from the criteria' do
749
+ expect(persons.uniq.size).to eq(1)
750
+ end
751
+ end
625
752
  end
626
753
 
627
754
  context "when only an array target exists" do
@@ -1822,4 +1949,103 @@ describe Mongoid::Relations::Targets::Enumerable do
1822
1949
  expect(enumerable).to be__loaded
1823
1950
  end
1824
1951
  end
1952
+
1953
+ describe 'setting the same parent object on enumerated children objects' do
1954
+
1955
+ let(:person) do
1956
+ Person.create
1957
+ end
1958
+
1959
+ context 'when a single child is fetched' do
1960
+
1961
+ let!(:post) do
1962
+ person.posts << Post.new
1963
+ person.posts.first
1964
+ end
1965
+
1966
+ it 'does not query the database to access the parent' do
1967
+ expect_query(0) do
1968
+ expect(post.person).to eq(person)
1969
+ end
1970
+ end
1971
+ end
1972
+
1973
+ context 'when a single child is fetched with a scope' do
1974
+
1975
+ let!(:post) do
1976
+ person.posts << Post.new(title: 'open')
1977
+ person.posts.open.first
1978
+ end
1979
+
1980
+ it 'does not query the database to access the parent' do
1981
+ expect_query(0) do
1982
+ expect(post.person).to eq(person)
1983
+ end
1984
+ end
1985
+ end
1986
+
1987
+ context 'when multiple children are fetched' do
1988
+
1989
+ let!(:posts) do
1990
+ person.posts << Post.new
1991
+ person.posts << Post.new
1992
+ person.posts << Post.new
1993
+ person.posts.to_a
1994
+ end
1995
+
1996
+ it 'does not query the database to access the parent' do
1997
+ expect_query(0) do
1998
+ expect(posts.all? { |post| post.person == person }).to be(true)
1999
+ end
2000
+ end
2001
+ end
2002
+
2003
+ context 'when multiple children are fetched with query criteria' do
2004
+
2005
+ let!(:posts) do
2006
+ person.posts << Post.new(title: 'open')
2007
+ person.posts << Post.new(title: 'open')
2008
+ person.posts << Post.new(title: 'not-a-test')
2009
+ person.posts.where(title: 'open').to_a
2010
+ end
2011
+
2012
+ it 'does not query the database to access the parent' do
2013
+ expect_query(0) do
2014
+ expect(posts.all? { |post| post.person == person }).to be(true)
2015
+ end
2016
+ end
2017
+ end
2018
+
2019
+ context 'when multiple children are fetched with a scope' do
2020
+
2021
+ let!(:posts) do
2022
+ person.posts << Post.new(title: 'open')
2023
+ person.posts << Post.new(title: 'open')
2024
+ person.posts << Post.new(title: 'not-a-test')
2025
+ person.posts.open.to_a
2026
+ end
2027
+
2028
+ it 'does not query the database to access the parent' do
2029
+ expect_query(0) do
2030
+ expect(posts.all? { |post| post.person == person }).to be(true)
2031
+ end
2032
+ end
2033
+ end
2034
+
2035
+ context 'when the parent is updated in memory' do
2036
+
2037
+ let!(:posts) do
2038
+ person.posts << Post.new
2039
+ person.posts << Post.new
2040
+ person.username = 'emily'
2041
+ person.posts.to_a
2042
+ end
2043
+
2044
+ it 'does not query the database to access the parent' do
2045
+ expect_query(0) do
2046
+ expect(posts.all? { |post| post.person.username == 'emily' }).to be(true)
2047
+ end
2048
+ end
2049
+ end
2050
+ end
1825
2051
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+ require_relative '../has_many_models'
5
+
6
+ describe Mongoid::Association::Referenced::HasMany::Proxy do
7
+ context 'with primary_key and foreign_key given' do
8
+ let(:company) { HmmCompany.create!(p: 123) }
9
+ let(:criteria) { company.emails }
10
+
11
+ it 'generates correct query' do
12
+ expect(criteria.selector).to eq('f' => 123)
13
+ end
14
+
15
+ context 'unscoped' do
16
+ let(:criteria) { company.emails.unscoped }
17
+
18
+ it 'generates correct query' do
19
+ expect(criteria.selector).to eq('f' => 123)
20
+ end
21
+ end
22
+ end
23
+ end