mongoid 6.4.8 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (320) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/Rakefile +0 -26
  4. data/lib/config/locales/en.yml +17 -0
  5. data/lib/mongoid/association/accessors.rb +339 -0
  6. data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
  7. data/lib/mongoid/association/builders.rb +92 -0
  8. data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
  9. data/lib/mongoid/association/depending.rb +116 -0
  10. data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
  11. data/lib/mongoid/{relations → association}/embedded/batchable.rb +21 -21
  12. data/lib/mongoid/association/embedded/cyclic.rb +109 -0
  13. data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
  14. data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
  15. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
  16. data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
  17. data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
  18. data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
  19. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +529 -0
  20. data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
  21. data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
  22. data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
  23. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
  24. data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
  25. data/lib/mongoid/association/embedded.rb +4 -0
  26. data/lib/mongoid/association/macros.rb +204 -0
  27. data/lib/mongoid/{relations → association}/many.rb +20 -50
  28. data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
  29. data/lib/mongoid/association/nested/many.rb +200 -0
  30. data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
  31. data/lib/mongoid/association/nested/one.rb +127 -0
  32. data/lib/mongoid/association/nested.rb +15 -0
  33. data/lib/mongoid/{relations → association}/one.rb +6 -6
  34. data/lib/mongoid/association/options.rb +152 -0
  35. data/lib/mongoid/{relations → association}/proxy.rb +31 -58
  36. data/lib/mongoid/association/referenced/auto_save.rb +79 -0
  37. data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
  38. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
  39. data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
  40. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
  41. data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
  42. data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
  43. data/lib/mongoid/association/referenced/eager.rb +159 -0
  44. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
  45. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +310 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
  49. data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
  50. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  51. data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
  52. data/lib/mongoid/association/referenced/has_many/enumerable.rb +510 -0
  53. data/lib/mongoid/association/referenced/has_many/proxy.rb +578 -0
  54. data/lib/mongoid/association/referenced/has_many.rb +275 -0
  55. data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
  56. data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
  57. data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
  58. data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
  59. data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
  60. data/lib/mongoid/association/referenced/has_one.rb +204 -0
  61. data/lib/mongoid/association/referenced/syncable.rb +170 -0
  62. data/lib/mongoid/association/referenced.rb +7 -0
  63. data/lib/mongoid/{relations → association}/reflections.rb +21 -17
  64. data/lib/mongoid/association/relatable.rb +415 -0
  65. data/lib/mongoid/association/touchable.rb +97 -0
  66. data/lib/mongoid/association.rb +150 -0
  67. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  68. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  69. data/lib/mongoid/atomic.rb +4 -4
  70. data/lib/mongoid/attributes/dynamic.rb +2 -2
  71. data/lib/mongoid/attributes/nested.rb +10 -10
  72. data/lib/mongoid/attributes/processing.rb +2 -2
  73. data/lib/mongoid/attributes/readonly.rb +2 -4
  74. data/lib/mongoid/attributes.rb +22 -13
  75. data/lib/mongoid/changeable.rb +1 -1
  76. data/lib/mongoid/clients/options.rb +1 -1
  77. data/lib/mongoid/clients/sessions.rb +2 -2
  78. data/lib/mongoid/composable.rb +4 -4
  79. data/lib/mongoid/config.rb +1 -0
  80. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  81. data/lib/mongoid/contextual/atomic.rb +1 -1
  82. data/lib/mongoid/contextual/geo_near.rb +1 -1
  83. data/lib/mongoid/contextual/map_reduce.rb +4 -4
  84. data/lib/mongoid/contextual/memory.rb +25 -7
  85. data/lib/mongoid/contextual/mongo.rb +13 -11
  86. data/lib/mongoid/copyable.rb +6 -6
  87. data/lib/mongoid/criteria/includable.rb +14 -14
  88. data/lib/mongoid/criteria/modifiable.rb +8 -14
  89. data/lib/mongoid/criteria/queryable/extensions/string.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
  91. data/lib/mongoid/criteria/queryable/selectable.rb +10 -34
  92. data/lib/mongoid/criteria.rb +2 -2
  93. data/lib/mongoid/document.rb +6 -6
  94. data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
  95. data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
  96. data/lib/mongoid/errors/unknown_model.rb +25 -0
  97. data/lib/mongoid/errors.rb +3 -0
  98. data/lib/mongoid/extensions/array.rb +5 -5
  99. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  100. data/lib/mongoid/extensions/hash.rb +5 -2
  101. data/lib/mongoid/extensions/object.rb +4 -4
  102. data/lib/mongoid/extensions/range.rb +1 -0
  103. data/lib/mongoid/extensions/regexp.rb +0 -1
  104. data/lib/mongoid/extensions/string.rb +1 -3
  105. data/lib/mongoid/extensions.rb +0 -4
  106. data/lib/mongoid/factory.rb +13 -3
  107. data/lib/mongoid/fields/foreign_key.rb +5 -5
  108. data/lib/mongoid/fields/standard.rb +2 -14
  109. data/lib/mongoid/fields/validators/macro.rb +1 -1
  110. data/lib/mongoid/fields.rb +3 -3
  111. data/lib/mongoid/indexable.rb +8 -5
  112. data/lib/mongoid/interceptable.rb +5 -5
  113. data/lib/mongoid/matchable/and.rb +1 -1
  114. data/lib/mongoid/matchable/elem_match.rb +9 -3
  115. data/lib/mongoid/matchable.rb +0 -3
  116. data/lib/mongoid/persistable/creatable.rb +2 -2
  117. data/lib/mongoid/persistable/deletable.rb +9 -8
  118. data/lib/mongoid/persistable/incrementable.rb +1 -1
  119. data/lib/mongoid/persistable/logical.rb +1 -1
  120. data/lib/mongoid/persistable/settable.rb +5 -5
  121. data/lib/mongoid/persistable/updatable.rb +2 -2
  122. data/lib/mongoid/persistable/upsertable.rb +1 -1
  123. data/lib/mongoid/persistable.rb +5 -6
  124. data/lib/mongoid/persistence_context.rb +1 -5
  125. data/lib/mongoid/query_cache.rb +19 -64
  126. data/lib/mongoid/railtie.rb +0 -17
  127. data/lib/mongoid/reloadable.rb +1 -1
  128. data/lib/mongoid/scopable.rb +3 -3
  129. data/lib/mongoid/serializable.rb +4 -4
  130. data/lib/mongoid/shardable.rb +1 -1
  131. data/lib/mongoid/tasks/database.rb +2 -2
  132. data/lib/mongoid/threaded.rb +0 -36
  133. data/lib/mongoid/traversable.rb +3 -3
  134. data/lib/mongoid/validatable/presence.rb +2 -2
  135. data/lib/mongoid/validatable/uniqueness.rb +4 -4
  136. data/lib/mongoid/validatable.rb +8 -8
  137. data/lib/mongoid/version.rb +1 -1
  138. data/lib/mongoid.rb +1 -1
  139. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -0
  140. data/spec/app/models/animal.rb +2 -1
  141. data/spec/app/models/bomb.rb +1 -1
  142. data/spec/app/models/message.rb +1 -1
  143. data/spec/app/models/person.rb +5 -2
  144. data/spec/app/models/shipment_address.rb +1 -0
  145. data/spec/app/models/vertex.rb +6 -0
  146. data/spec/app/models/wiki_page.rb +1 -1
  147. data/spec/config/mongoid.yml +1 -0
  148. data/spec/mongoid/{relations → association}/accessors_spec.rb +1 -1
  149. data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
  150. data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
  151. data/spec/mongoid/association/constrainable_spec.rb +115 -0
  152. data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
  153. data/spec/mongoid/association/depending_spec.rb +613 -0
  154. data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
  155. data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
  156. data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
  157. data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
  158. data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
  159. data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
  160. data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
  161. data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
  162. data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +140 -428
  163. data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
  164. data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
  165. data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
  166. data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
  167. data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
  168. data/spec/mongoid/{relations → association}/macros_spec.rb +148 -73
  169. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
  170. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
  171. data/spec/mongoid/association/options_spec.rb +1321 -0
  172. data/spec/mongoid/{relations → association}/polymorphic_spec.rb +7 -34
  173. data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
  174. data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
  175. data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +9 -9
  176. data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
  177. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1963 -0
  178. data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
  179. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
  180. data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +5 -5
  181. data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
  182. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
  183. data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
  184. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
  185. data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +26 -11
  186. data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +122 -1
  187. data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
  188. data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
  189. data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
  190. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
  191. data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
  192. data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
  193. data/spec/mongoid/association/referenced/has_one_spec.rb +1244 -0
  194. data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
  195. data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
  196. data/spec/mongoid/{relations → association}/touchable_spec.rb +19 -1
  197. data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
  198. data/spec/mongoid/atomic/modifiers_spec.rb +2 -2
  199. data/spec/mongoid/atomic_spec.rb +4 -4
  200. data/spec/mongoid/attributes/nested_spec.rb +14 -12
  201. data/spec/mongoid/attributes/readonly_spec.rb +80 -125
  202. data/spec/mongoid/attributes_spec.rb +38 -2
  203. data/spec/mongoid/clients/factory_spec.rb +28 -52
  204. data/spec/mongoid/clients/options_spec.rb +65 -69
  205. data/spec/mongoid/clients/sessions_spec.rb +4 -13
  206. data/spec/mongoid/config_spec.rb +24 -0
  207. data/spec/mongoid/contextual/geo_near_spec.rb +0 -1
  208. data/spec/mongoid/contextual/memory_spec.rb +19 -0
  209. data/spec/mongoid/contextual/mongo_spec.rb +30 -5
  210. data/spec/mongoid/copyable_spec.rb +34 -0
  211. data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
  212. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
  213. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +43 -0
  214. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
  215. data/spec/mongoid/criteria/queryable/selectable_spec.rb +3 -42
  216. data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
  217. data/spec/mongoid/criteria/scopable_spec.rb +0 -81
  218. data/spec/mongoid/criteria_spec.rb +16 -19
  219. data/spec/mongoid/document_spec.rb +2 -56
  220. data/spec/mongoid/extensions/array_spec.rb +11 -15
  221. data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
  222. data/spec/mongoid/extensions/hash_spec.rb +18 -1
  223. data/spec/mongoid/extensions/object_spec.rb +7 -11
  224. data/spec/mongoid/extensions/range_spec.rb +7 -0
  225. data/spec/mongoid/extensions/regexp_spec.rb +0 -23
  226. data/spec/mongoid/extensions/string_spec.rb +7 -35
  227. data/spec/mongoid/factory_spec.rb +19 -1
  228. data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
  229. data/spec/mongoid/fields_spec.rb +2 -2
  230. data/spec/mongoid/findable_spec.rb +1 -1
  231. data/spec/mongoid/indexable_spec.rb +18 -8
  232. data/spec/mongoid/interceptable_spec.rb +22 -1
  233. data/spec/mongoid/matchable/elem_match_spec.rb +20 -0
  234. data/spec/mongoid/matchable_spec.rb +1 -26
  235. data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
  236. data/spec/mongoid/persistable/savable_spec.rb +2 -2
  237. data/spec/mongoid/persistable/settable_spec.rb +1 -35
  238. data/spec/mongoid/persistable_spec.rb +21 -6
  239. data/spec/mongoid/query_cache_spec.rb +16 -99
  240. data/spec/mongoid/relations/proxy_spec.rb +124 -124
  241. data/spec/mongoid/scopable_spec.rb +0 -13
  242. data/spec/mongoid/shardable_spec.rb +32 -12
  243. data/spec/mongoid/threaded_spec.rb +0 -68
  244. data/spec/mongoid/validatable/associated_spec.rb +1 -1
  245. data/spec/mongoid/validatable/presence_spec.rb +7 -6
  246. data/spec/mongoid/validatable_spec.rb +1 -1
  247. data/spec/spec_helper.rb +12 -14
  248. data.tar.gz.sig +1 -1
  249. metadata +192 -207
  250. metadata.gz.sig +0 -0
  251. data/lib/mongoid/matchable/nor.rb +0 -37
  252. data/lib/mongoid/railties/controller_runtime.rb +0 -86
  253. data/lib/mongoid/relations/accessors.rb +0 -267
  254. data/lib/mongoid/relations/auto_save.rb +0 -94
  255. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  256. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  257. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  258. data/lib/mongoid/relations/bindings.rb +0 -9
  259. data/lib/mongoid/relations/builder.rb +0 -57
  260. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  261. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  262. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  263. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  264. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  265. data/lib/mongoid/relations/builders.rb +0 -106
  266. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  267. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  268. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  269. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  270. data/lib/mongoid/relations/cascading.rb +0 -56
  271. data/lib/mongoid/relations/conversions.rb +0 -34
  272. data/lib/mongoid/relations/counter_cache.rb +0 -160
  273. data/lib/mongoid/relations/cyclic.rb +0 -107
  274. data/lib/mongoid/relations/eager/base.rb +0 -153
  275. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  276. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  277. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  278. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  279. data/lib/mongoid/relations/embedded/in.rb +0 -241
  280. data/lib/mongoid/relations/embedded/many.rb +0 -683
  281. data/lib/mongoid/relations/embedded/one.rb +0 -235
  282. data/lib/mongoid/relations/macros.rb +0 -367
  283. data/lib/mongoid/relations/metadata.rb +0 -1179
  284. data/lib/mongoid/relations/nested_builder.rb +0 -74
  285. data/lib/mongoid/relations/options.rb +0 -49
  286. data/lib/mongoid/relations/polymorphic.rb +0 -39
  287. data/lib/mongoid/relations/referenced/in.rb +0 -304
  288. data/lib/mongoid/relations/referenced/many.rb +0 -812
  289. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  290. data/lib/mongoid/relations/referenced/one.rb +0 -290
  291. data/lib/mongoid/relations/synchronization.rb +0 -169
  292. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  293. data/lib/mongoid/relations/targets.rb +0 -2
  294. data/lib/mongoid/relations/touchable.rb +0 -97
  295. data/lib/mongoid/relations.rb +0 -148
  296. data/spec/app/models/array_field.rb +0 -7
  297. data/spec/app/models/delegating_patient.rb +0 -16
  298. data/spec/integration/document_spec.rb +0 -22
  299. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  300. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  301. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  302. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  303. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  304. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  305. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  306. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  307. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  308. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  309. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  310. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  311. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  312. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  313. data/spec/mongoid/relations/options_spec.rb +0 -35
  314. data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -110
  315. data/spec/support/cluster_config.rb +0 -158
  316. data/spec/support/constraints.rb +0 -101
  317. data/spec/support/macros.rb +0 -20
  318. data/spec/support/session_registry.rb +0 -50
  319. data/spec/support/spec_config.rb +0 -42
  320. /data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
@@ -7,20 +7,6 @@ describe Mongoid::QueryCache do
7
7
  Mongoid::QueryCache.cache { spec.run }
8
8
  end
9
9
 
10
- before(:all) do
11
- # It is likely that there are other session leaks in the driver
12
- # and/or Mongoid that are unrelated to the query cache. Clear the
13
- # SessionRegistry at the start of these tests in order to detect leaks that
14
- # occur only within the scope of these tests.
15
- #
16
- # Other session leaks will be detected and addressed as part of RUBY-2391.
17
- SessionRegistry.instance.clear_registry
18
- end
19
-
20
- after do
21
- SessionRegistry.instance.verify_sessions_ended!
22
- end
23
-
24
10
  context 'when iterating over objects sharing the same base' do
25
11
 
26
12
  let(:server) do
@@ -45,32 +31,16 @@ describe Mongoid::QueryCache do
45
31
  :posts
46
32
  end
47
33
 
48
- context 'when query cache is disabled' do
34
+ context 'does not query for the relation and instead sets the base' do
49
35
 
50
36
  before do
51
37
  Mongoid::QueryCache.enabled = false
52
38
  end
53
39
 
54
40
  it 'queries for each access to the base' do
55
- expect_query(relations.size) do
56
- relations.each do |object|
57
- object.person
58
- end
59
- end
60
- end
61
- end
62
-
63
- context 'when query cache is enabled' do
64
-
65
- before do
66
- Mongoid::QueryCache.enabled = true
67
- end
68
-
69
- it 'queries only once for the base' do
70
- expect_query(1) do
71
- relations.each do |object|
72
- object.person
73
- end
41
+ expect(server).to receive(:with_connection).exactly(0).times.and_call_original
42
+ relations.each do |object|
43
+ object.person
74
44
  end
75
45
  end
76
46
  end
@@ -221,10 +191,6 @@ describe Mongoid::QueryCache do
221
191
  end
222
192
 
223
193
  before do
224
- 10.times do |i|
225
- game.ratings << Rating.create!(value: i+1)
226
- end
227
-
228
194
  game.ratings.where(:value.gt => 5).asc(:id).all.to_a
229
195
  end
230
196
 
@@ -232,9 +198,7 @@ describe Mongoid::QueryCache do
232
198
 
233
199
  it "uses the cache" do
234
200
  expect_no_queries do
235
- result = game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
236
- expect(result.length).to eq(2)
237
- expect(result.map { |r| r['value'] }).to eq([6, 7])
201
+ game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
238
202
  end
239
203
  end
240
204
  end
@@ -247,23 +211,14 @@ describe Mongoid::QueryCache do
247
211
  end
248
212
 
249
213
  before do
250
- 10.times do |i|
251
- game.ratings << Rating.create!(value: i+1)
252
- end
253
-
254
214
  game.ratings.where(:value.gt => 5).limit(3).asc(:id).all.to_a
255
215
  end
256
216
 
257
217
  context "when the next query has a limit" do
258
- # Server versions older than 3.2 also perform a killCursors operation,
259
- # which causes this test to fail.
260
- min_server_version '3.2'
261
218
 
262
219
  it "queries again" do
263
220
  expect_query(1) do
264
- result = game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
265
- expect(result.length).to eq(2)
266
- expect(result.map { |r| r['value'] }).to eq([6, 7])
221
+ game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
267
222
  end
268
223
  end
269
224
  end
@@ -272,9 +227,7 @@ describe Mongoid::QueryCache do
272
227
 
273
228
  it "queries again" do
274
229
  expect_query(1) do
275
- result = game.ratings.where(:value.gt => 5).asc(:id).to_a
276
- expect(result.length).to eq(5)
277
- expect(result.map { |r| r['value'] }).to eq([6, 7, 8, 9, 10])
230
+ game.ratings.where(:value.gt => 5).asc(:id).to_a
278
231
  end
279
232
  end
280
233
  end
@@ -287,34 +240,21 @@ describe Mongoid::QueryCache do
287
240
  end
288
241
 
289
242
  before do
290
- 10.times do |i|
291
- game.ratings << Rating.create!(value: i+1)
292
- end
293
-
294
243
  game.ratings.where(:value.gt => 5).asc(:id).all.to_a
295
244
  end
296
245
 
297
246
  it "does not query again" do
298
247
  expect_no_queries do
299
- result = game.ratings.where(:value.gt => 5).asc(:id).first
300
- expect(result['value']).to eq(6)
248
+ game.ratings.where(:value.gt => 5).asc(:id).first
301
249
  end
302
250
  end
303
251
  end
304
252
 
305
253
  context "when limiting the result" do
306
- before do
307
- Band.destroy_all
308
-
309
- 5.times { |i| Band.create!(name: "Band #{i}") }
310
- Band.all.to_a
311
- end
312
254
 
313
255
  it "does not query again" do
314
256
  expect_query(0) do
315
- result = Band.limit(2).all.to_a
316
- expect(result.length).to eq(2)
317
- expect(result.map { |r| r["name"] }).to eq(["Band 0", "Band 1"])
257
+ Band.limit(2).all.to_a
318
258
  end
319
259
  end
320
260
  end
@@ -322,16 +262,12 @@ describe Mongoid::QueryCache do
322
262
  context "when specifying a different skip value" do
323
263
 
324
264
  before do
325
- Band.destroy_all
326
-
327
- 5.times { |i| Band.create!(name: "Band #{i}") }
265
+ Band.limit(2).skip(1).all.to_a
328
266
  end
329
267
 
330
268
  it "queries again" do
331
269
  expect_query(1) do
332
- result = Band.limit(2).skip(3).all.to_a
333
- expect(result.length).to eq(2)
334
- expect(result.map { |r| r["name"] }).to eq(["Band 3", "Band 4"])
270
+ Band.limit(2).skip(3).all.to_a
335
271
  end
336
272
  end
337
273
  end
@@ -367,25 +303,6 @@ describe Mongoid::QueryCache do
367
303
  end
368
304
  end
369
305
 
370
- context 'when querying colleciton larger than the batch size' do
371
- before do
372
- Band.destroy_all
373
- 101.times { |i| Band.create!(_id: i) }
374
- end
375
-
376
- it 'does not raise an exception when querying multiple times' do
377
- expect do
378
- results1 = Band.all.to_a
379
- expect(results1.length).to eq(101)
380
- expect(results1.map { |band| band["_id"] }).to eq([*0..100])
381
-
382
- results2 = Band.all.to_a
383
- expect(results2.length).to eq(101)
384
- expect(results2.map { |band| band["_id"] }).to eq([*0..100])
385
- end.not_to raise_error
386
- end
387
- end
388
-
389
306
  context "when query caching is enabled and the batch_size is set" do
390
307
 
391
308
  around(:each) do |example|
@@ -497,15 +414,15 @@ describe Mongoid::QueryCache do
497
414
  context "when querying a very large collection" do
498
415
 
499
416
  before do
500
- 100.times { Band.create! }
417
+ 123.times { Band.create! }
501
418
  end
502
419
 
503
420
  it "returns the right number of records" do
504
- expect(Band.all.to_a.length).to eq(100)
421
+ expect(Band.all.to_a.length).to eq(123)
505
422
  end
506
423
 
507
424
  it "#pluck returns the same count of objects" do
508
- expect(Band.pluck(:name).length).to eq(100)
425
+ expect(Band.pluck(:name).length).to eq(123)
509
426
  end
510
427
 
511
428
  context "when loading all the documents" do
@@ -516,12 +433,12 @@ describe Mongoid::QueryCache do
516
433
 
517
434
  it "caches the complete result of the query" do
518
435
  expect_no_queries do
519
- expect(Band.all.to_a.length).to eq(100)
436
+ expect(Band.all.to_a.length).to eq(123)
520
437
  end
521
438
  end
522
439
 
523
440
  it "returns the same count of objects when using #pluck" do
524
- expect(Band.pluck(:name).length).to eq(100)
441
+ expect(Band.pluck(:name).length).to eq(123)
525
442
  end
526
443
  end
527
444
  end
@@ -1,124 +1,124 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Relations::Proxy do
4
-
5
- describe '#with', if: non_legacy_server? do
6
-
7
- let(:circus) do
8
- Circus.new
9
- end
10
-
11
- let(:animal) do
12
- Animal.new
13
- end
14
-
15
- before do
16
- circus.animals << animal
17
- circus.save
18
- end
19
-
20
- it 'uses the new persistence options' do
21
- expect {
22
- animal.with(write: { w: 100 }) do |an|
23
- an.update_attribute(:name, 'kangaroo')
24
- end
25
- }.to raise_exception(Mongo::Error::OperationFailure)
26
- end
27
- end
28
-
29
- describe "#find" do
30
- let(:person) do
31
- Person.create
32
- end
33
-
34
- let(:messages) do
35
- person.messages
36
- end
37
-
38
- let(:msg1) do
39
- messages.create(body: 'msg1')
40
- end
41
-
42
- it "returns nil with no arguments" do
43
- expect(messages.find).to be_nil
44
- expect(messages.send(:find)).to be_nil
45
- expect(messages.__send__(:find)).to be_nil
46
- expect(messages.public_send(:find)).to be_nil
47
- end
48
-
49
- it "returns the object corresponding to the id" do
50
- expect(messages.find(msg1.id)).to eq(msg1)
51
- expect(messages.send(:find, msg1.id)).to eq(msg1)
52
- expect(messages.__send__(:find, msg1.id)).to eq(msg1)
53
- expect(messages.public_send(:find, msg1.id)).to eq(msg1)
54
- end
55
- end
56
-
57
- describe "#extend" do
58
-
59
- before(:all) do
60
- Person.reset_callbacks(:validate)
61
- module Testable
62
- end
63
- end
64
-
65
- after(:all) do
66
- Object.send(:remove_const, :Testable)
67
- end
68
-
69
- let(:person) do
70
- Person.create
71
- end
72
-
73
- let(:name) do
74
- person.build_name
75
- end
76
-
77
- before do
78
- name.namable.extend(Testable)
79
- end
80
-
81
- it "extends the proxied object" do
82
- expect(person).to be_a(Testable)
83
- end
84
-
85
- context "when extending from the relation definition" do
86
-
87
- let!(:address) do
88
- person.addresses.create(street: "hobrecht")
89
- end
90
-
91
- let(:found) do
92
- person.addresses.find_by_street("hobrecht")
93
- end
94
-
95
- it "extends the proxy" do
96
- expect(found).to eq(address)
97
- end
98
- end
99
- end
100
-
101
- describe "equality" do
102
- let(:messages) do
103
- Person.create.messages
104
- end
105
-
106
- it "is #equal? to itself" do
107
- expect(messages.equal?(messages)).to eq(true)
108
- end
109
-
110
- it "is == to itself" do
111
- expect(messages == messages).to eq(true)
112
- end
113
-
114
- it "is not #equal? to its target" do
115
- expect(messages.equal?(messages.target)).to eq(false)
116
- expect(messages.target.equal?(messages)).to eq(false)
117
- end
118
-
119
- it "is == to its target" do
120
- expect(messages == messages.target).to eq(true)
121
- expect(messages.target == messages).to eq(true)
122
- end
123
- end
124
- end
1
+ # require "spec_helper"
2
+ #
3
+ # describe Mongoid::Relations::Proxy do
4
+ #
5
+ # describe '#with', if: non_legacy_server? do
6
+ #
7
+ # let(:circus) do
8
+ # Circus.new
9
+ # end
10
+ #
11
+ # let(:animal) do
12
+ # Animal.new
13
+ # end
14
+ #
15
+ # before do
16
+ # circus.animals << animal
17
+ # circus.save
18
+ # end
19
+ #
20
+ # it 'uses the new persistence options' do
21
+ # expect {
22
+ # animal.with(write: { w: 100 }) do |an|
23
+ # an.update_attribute(:name, 'kangaroo')
24
+ # end
25
+ # }.to raise_exception(Mongo::Error::OperationFailure)
26
+ # end
27
+ # end
28
+ #
29
+ # describe "#find" do
30
+ # let(:person) do
31
+ # Person.create
32
+ # end
33
+ #
34
+ # let(:messages) do
35
+ # person.messages
36
+ # end
37
+ #
38
+ # let(:msg1) do
39
+ # messages.create(body: 'msg1')
40
+ # end
41
+ #
42
+ # it "returns nil with no arguments" do
43
+ # expect(messages.find).to be_nil
44
+ # expect(messages.send(:find)).to be_nil
45
+ # expect(messages.__send__(:find)).to be_nil
46
+ # expect(messages.public_send(:find)).to be_nil
47
+ # end
48
+ #
49
+ # it "returns the object corresponding to the id" do
50
+ # expect(messages.find(msg1.id)).to eq(msg1)
51
+ # expect(messages.send(:find, msg1.id)).to eq(msg1)
52
+ # expect(messages.__send__(:find, msg1.id)).to eq(msg1)
53
+ # expect(messages.public_send(:find, msg1.id)).to eq(msg1)
54
+ # end
55
+ # end
56
+ #
57
+ # describe "#extend" do
58
+ #
59
+ # before(:all) do
60
+ # Person.reset_callbacks(:validate)
61
+ # module Testable
62
+ # end
63
+ # end
64
+ #
65
+ # after(:all) do
66
+ # Object.send(:remove_const, :Testable)
67
+ # end
68
+ #
69
+ # let(:person) do
70
+ # Person.create
71
+ # end
72
+ #
73
+ # let(:name) do
74
+ # person.build_name
75
+ # end
76
+ #
77
+ # before do
78
+ # name.namable.extend(Testable)
79
+ # end
80
+ #
81
+ # it "extends the proxied object" do
82
+ # expect(person).to be_a(Testable)
83
+ # end
84
+ #
85
+ # context "when extending from the relation definition" do
86
+ #
87
+ # let!(:address) do
88
+ # person.addresses.create(street: "hobrecht")
89
+ # end
90
+ #
91
+ # let(:found) do
92
+ # person.addresses.find_by_street("hobrecht")
93
+ # end
94
+ #
95
+ # it "extends the proxy" do
96
+ # expect(found).to eq(address)
97
+ # end
98
+ # end
99
+ # end
100
+ #
101
+ # describe "equality" do
102
+ # let(:messages) do
103
+ # Person.create.messages
104
+ # end
105
+ #
106
+ # it "is #equal? to itself" do
107
+ # expect(messages.equal?(messages)).to eq(true)
108
+ # end
109
+ #
110
+ # it "is == to itself" do
111
+ # expect(messages == messages).to eq(true)
112
+ # end
113
+ #
114
+ # it "is not #equal? to its target" do
115
+ # expect(messages.equal?(messages.target)).to eq(false)
116
+ # expect(messages.target.equal?(messages)).to eq(false)
117
+ # end
118
+ #
119
+ # it "is == to its target" do
120
+ # expect(messages == messages.target).to eq(true)
121
+ # expect(messages.target == messages).to eq(true)
122
+ # end
123
+ # end
124
+ # end
@@ -1130,19 +1130,6 @@ describe Mongoid::Scopable do
1130
1130
  it "sets the threading options" do
1131
1131
  Band.without_default_scope do
1132
1132
  expect(Mongoid::Threaded).to be_executing(:without_default_scope)
1133
- expect(Mongoid::Threaded.without_default_scope?(Band)).to be(true)
1134
- end
1135
- end
1136
-
1137
- it "suppresses default scope on the given model within the given block" do
1138
- Appointment.without_default_scope do
1139
- expect(Appointment.all.selector).to be_empty
1140
- end
1141
- end
1142
-
1143
- it "does not affect other models' default scopes within the given block" do
1144
- Appointment.without_default_scope do
1145
- expect(Audio.all.selector).not_to be_empty
1146
1133
  end
1147
1134
  end
1148
1135
  end
@@ -49,23 +49,43 @@ describe Mongoid::Shardable do
49
49
  end
50
50
  end
51
51
 
52
- describe "#shard_key_selector" do
52
+ describe '#shard_key_selector' do
53
+ subject { instance.shard_key_selector }
54
+ let(:klass) { Band }
55
+ let(:value) { 'a-brand-name' }
53
56
 
54
- let(:klass) do
55
- Band
56
- end
57
+ before { klass.shard_key(:name) }
57
58
 
58
- let(:object) do
59
- klass.new
60
- end
59
+ context 'when record is new' do
60
+ let(:instance) { klass.new(name: value) }
61
61
 
62
- before do
63
- klass.shard_key(:name)
64
- object.name = "Jo"
62
+ it { is_expected.to eq({ 'name' => value }) }
63
+
64
+ context 'changing shard key value' do
65
+ let(:new_value) { 'a-new-value' }
66
+
67
+ before do
68
+ instance.name = new_value
69
+ end
70
+
71
+ it { is_expected.to eq({ 'name' => new_value }) }
72
+ end
65
73
  end
66
74
 
67
- it "returns a hash of shard key names and values" do
68
- expect(object.shard_key_selector).to eq({ "name" => "Jo" })
75
+ context 'when record is persisted' do
76
+ let(:instance) { klass.create(name: value) }
77
+
78
+ it { is_expected.to eq({ 'name' => value }) }
79
+
80
+ context 'changing shard key value' do
81
+ let(:new_value) { 'a-new-value' }
82
+
83
+ before do
84
+ instance.name = new_value
85
+ end
86
+
87
+ it { is_expected.to eq({ 'name' => value }) }
88
+ end
69
89
  end
70
90
  end
71
91
  end
@@ -233,72 +233,4 @@ describe Mongoid::Threaded do
233
233
  end
234
234
  end
235
235
  end
236
-
237
- describe "#begin_without_default_scope" do
238
-
239
- let(:klass) do
240
- Appointment
241
- end
242
-
243
- after do
244
- described_class.exit_without_default_scope(klass)
245
- end
246
-
247
- it "adds the given class to the without_default_scope stack" do
248
- described_class.begin_without_default_scope(klass)
249
-
250
- expect(described_class.stack(:without_default_scope)).to include(klass)
251
- end
252
- end
253
-
254
- describe "#exit_without_default_scope" do
255
-
256
- let(:klass) do
257
- Appointment
258
- end
259
-
260
- before do
261
- described_class.begin_without_default_scope(klass)
262
- end
263
-
264
- it "removes the given class from the without_default_scope stack" do
265
- described_class.exit_without_default_scope(klass)
266
-
267
- expect(described_class.stack(:without_default_scope)).not_to include(klass)
268
- end
269
- end
270
-
271
- describe "#without_default_scope?" do
272
-
273
- let(:klass) do
274
- Appointment
275
- end
276
-
277
- context "when klass has begun without_default_scope" do
278
-
279
- before do
280
- described_class.begin_without_default_scope(klass)
281
- end
282
-
283
- after do
284
- described_class.exit_without_default_scope(klass)
285
- end
286
-
287
- it "returns true" do
288
- expect(described_class.without_default_scope?(klass)).to be(true)
289
- end
290
- end
291
-
292
- context "when klass has exited without_default_scope" do
293
-
294
- before do
295
- described_class.begin_without_default_scope(klass)
296
- described_class.exit_without_default_scope(klass)
297
- end
298
-
299
- it "returns false" do
300
- expect(described_class.without_default_scope?(klass)).to be(false)
301
- end
302
- end
303
- end
304
236
  end
@@ -171,7 +171,7 @@ describe Mongoid::Validatable::AssociatedValidator do
171
171
  end
172
172
  end
173
173
 
174
- context "when the assocation has all valid documents" do
174
+ context "when the association has all valid documents" do
175
175
 
176
176
  let(:associated) do
177
177
  double(valid?: true, flagged_for_destroy?: false)
@@ -211,13 +211,14 @@ describe Mongoid::Validatable::PresenceValidator do
211
211
 
212
212
  context "when the relation is a has one" do
213
213
 
214
- before do
214
+ around do |example|
215
+ original_relations = Person.relations
216
+ Person.has_one :game, autosave: true
215
217
  Person.validates :game, presence: true
216
- end
217
-
218
- after do
218
+ example.run
219
219
  Person.reset_callbacks(:save)
220
220
  Person.reset_callbacks(:validate)
221
+ Person.relations = original_relations
221
222
  end
222
223
 
223
224
  context "when the relation is new" do
@@ -249,7 +250,7 @@ describe Mongoid::Validatable::PresenceValidator do
249
250
  context "when the relation is a has one and autosave is false" do
250
251
 
251
252
  before do
252
- Person.relations["game"][:autosave] = false
253
+ Person.relations["game"].options[:autosave] = false
253
254
  Person.validates :game, presence: true
254
255
  end
255
256
 
@@ -258,7 +259,7 @@ describe Mongoid::Validatable::PresenceValidator do
258
259
  end
259
260
 
260
261
  it "does not change autosave on the relation" do
261
- expect(Person.relations["game"][:autosave]).to be false
262
+ expect(Person.relations["game"].autosave?).to be false
262
263
  end
263
264
 
264
265
  context "when the relation is new" do
@@ -34,7 +34,7 @@ describe Mongoid::Validatable do
34
34
  end
35
35
 
36
36
  let(:documents) do
37
- Mongoid::Relations::Targets::Enumerable.new([ address ])
37
+ Mongoid::Association::Referenced::HasMany::Targets::Enumerable.new([ address ])
38
38
  end
39
39
 
40
40
  before do