mongoid 6.4.8 → 7.0.0.beta

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 (315) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +0 -26
  5. data/lib/config/locales/en.yml +17 -21
  6. data/lib/mongoid.rb +2 -2
  7. data/lib/mongoid/association.rb +150 -0
  8. data/lib/mongoid/association/accessors.rb +339 -0
  9. data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
  10. data/lib/mongoid/association/builders.rb +92 -0
  11. data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
  12. data/lib/mongoid/association/depending.rb +116 -0
  13. data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
  14. data/lib/mongoid/association/embedded.rb +4 -0
  15. data/lib/mongoid/{relations → association}/embedded/batchable.rb +27 -53
  16. data/lib/mongoid/association/embedded/cyclic.rb +109 -0
  17. data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
  18. data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
  19. data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
  20. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
  21. data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
  22. data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
  23. data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
  24. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +529 -0
  25. data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
  26. data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
  27. data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
  28. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
  29. data/lib/mongoid/association/macros.rb +204 -0
  30. data/lib/mongoid/{relations → association}/many.rb +18 -52
  31. data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
  32. data/lib/mongoid/association/nested.rb +15 -0
  33. data/lib/mongoid/association/nested/many.rb +200 -0
  34. data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
  35. data/lib/mongoid/association/nested/one.rb +127 -0
  36. data/lib/mongoid/{relations → association}/one.rb +6 -6
  37. data/lib/mongoid/association/options.rb +152 -0
  38. data/lib/mongoid/{relations → association}/proxy.rb +31 -58
  39. data/lib/mongoid/association/referenced.rb +7 -0
  40. data/lib/mongoid/association/referenced/auto_save.rb +79 -0
  41. data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
  42. data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
  43. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
  44. data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
  45. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
  46. data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
  47. data/lib/mongoid/association/referenced/eager.rb +159 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
  52. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +310 -0
  53. data/lib/mongoid/association/referenced/has_many.rb +273 -0
  54. data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
  55. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  56. data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
  57. data/lib/mongoid/association/referenced/has_many/enumerable.rb +479 -0
  58. data/lib/mongoid/association/referenced/has_many/proxy.rb +577 -0
  59. data/lib/mongoid/association/referenced/has_one.rb +204 -0
  60. data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
  61. data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
  62. data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
  63. data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
  64. data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
  65. data/lib/mongoid/association/referenced/syncable.rb +170 -0
  66. data/lib/mongoid/{relations → association}/reflections.rb +21 -17
  67. data/lib/mongoid/association/relatable.rb +415 -0
  68. data/lib/mongoid/association/touchable.rb +97 -0
  69. data/lib/mongoid/atomic.rb +6 -6
  70. data/lib/mongoid/atomic/modifiers.rb +8 -12
  71. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  72. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  73. data/lib/mongoid/attributes.rb +2 -1
  74. data/lib/mongoid/attributes/nested.rb +10 -10
  75. data/lib/mongoid/attributes/processing.rb +2 -2
  76. data/lib/mongoid/attributes/readonly.rb +2 -4
  77. data/lib/mongoid/clients.rb +0 -2
  78. data/lib/mongoid/clients/options.rb +1 -1
  79. data/lib/mongoid/clients/storage_options.rb +0 -1
  80. data/lib/mongoid/composable.rb +3 -4
  81. data/lib/mongoid/config.rb +1 -0
  82. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  83. data/lib/mongoid/contextual/atomic.rb +3 -6
  84. data/lib/mongoid/contextual/map_reduce.rb +3 -7
  85. data/lib/mongoid/contextual/memory.rb +5 -10
  86. data/lib/mongoid/contextual/mongo.rb +10 -27
  87. data/lib/mongoid/copyable.rb +6 -6
  88. data/lib/mongoid/criteria.rb +1 -2
  89. data/lib/mongoid/criteria/includable.rb +14 -14
  90. data/lib/mongoid/criteria/modifiable.rb +8 -14
  91. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -3
  92. data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
  93. data/lib/mongoid/criteria/queryable/selectable.rb +10 -34
  94. data/lib/mongoid/document.rb +6 -6
  95. data/lib/mongoid/errors.rb +3 -1
  96. data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
  97. data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
  98. data/lib/mongoid/errors/unknown_model.rb +25 -0
  99. data/lib/mongoid/extensions/array.rb +5 -5
  100. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  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/factory.rb +4 -3
  106. data/lib/mongoid/fields.rb +1 -1
  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/indexable.rb +8 -5
  111. data/lib/mongoid/interceptable.rb +5 -5
  112. data/lib/mongoid/matchable.rb +0 -3
  113. data/lib/mongoid/persistable.rb +4 -5
  114. data/lib/mongoid/persistable/creatable.rb +2 -4
  115. data/lib/mongoid/persistable/deletable.rb +9 -10
  116. data/lib/mongoid/persistable/destroyable.rb +5 -1
  117. data/lib/mongoid/persistable/incrementable.rb +1 -1
  118. data/lib/mongoid/persistable/logical.rb +1 -1
  119. data/lib/mongoid/persistable/settable.rb +5 -5
  120. data/lib/mongoid/persistable/updatable.rb +2 -2
  121. data/lib/mongoid/persistable/upsertable.rb +1 -2
  122. data/lib/mongoid/persistence_context.rb +4 -9
  123. data/lib/mongoid/query_cache.rb +18 -65
  124. data/lib/mongoid/railtie.rb +0 -17
  125. data/lib/mongoid/reloadable.rb +1 -1
  126. data/lib/mongoid/scopable.rb +3 -3
  127. data/lib/mongoid/serializable.rb +3 -3
  128. data/lib/mongoid/tasks/database.rb +2 -3
  129. data/lib/mongoid/threaded.rb +0 -74
  130. data/lib/mongoid/traversable.rb +2 -2
  131. data/lib/mongoid/validatable.rb +8 -8
  132. data/lib/mongoid/validatable/presence.rb +2 -2
  133. data/lib/mongoid/validatable/uniqueness.rb +4 -4
  134. data/lib/mongoid/version.rb +1 -1
  135. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -4
  136. data/spec/app/models/animal.rb +2 -1
  137. data/spec/app/models/band.rb +0 -1
  138. data/spec/app/models/bomb.rb +1 -1
  139. data/spec/app/models/message.rb +1 -1
  140. data/spec/app/models/person.rb +5 -2
  141. data/spec/app/models/vertex.rb +6 -0
  142. data/spec/app/models/wiki_page.rb +1 -1
  143. data/spec/config/mongoid.yml +1 -0
  144. data/spec/mongoid/{relations → association}/accessors_spec.rb +1 -1
  145. data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
  146. data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
  147. data/spec/mongoid/association/constrainable_spec.rb +115 -0
  148. data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
  149. data/spec/mongoid/association/depending_spec.rb +613 -0
  150. data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
  151. data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
  152. data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
  153. data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
  154. data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
  155. data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
  156. data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
  157. data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
  158. data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
  159. data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +140 -428
  160. data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
  161. data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
  162. data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
  163. data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
  164. data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
  165. data/spec/mongoid/{relations → association}/macros_spec.rb +148 -93
  166. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
  167. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
  168. data/spec/mongoid/association/options_spec.rb +1321 -0
  169. data/spec/mongoid/{relations → association}/polymorphic_spec.rb +7 -34
  170. data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
  171. data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
  172. data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +9 -9
  173. data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
  174. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1963 -0
  175. data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
  176. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
  177. data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +5 -5
  178. data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
  179. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
  180. data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
  181. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
  182. data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +11 -11
  183. data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +1 -109
  184. data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
  185. data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
  186. data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
  187. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
  188. data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
  189. data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
  190. data/spec/mongoid/association/referenced/has_one_spec.rb +1244 -0
  191. data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
  192. data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
  193. data/spec/mongoid/{relations → association}/touchable_spec.rb +19 -1
  194. data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
  195. data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
  196. data/spec/mongoid/atomic_spec.rb +17 -17
  197. data/spec/mongoid/attributes/nested_spec.rb +14 -12
  198. data/spec/mongoid/attributes/readonly_spec.rb +80 -125
  199. data/spec/mongoid/clients/factory_spec.rb +28 -52
  200. data/spec/mongoid/clients/options_spec.rb +65 -69
  201. data/spec/mongoid/config_spec.rb +24 -0
  202. data/spec/mongoid/contextual/geo_near_spec.rb +0 -1
  203. data/spec/mongoid/contextual/mongo_spec.rb +4 -112
  204. data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
  205. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
  206. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
  207. data/spec/mongoid/criteria/queryable/selectable_spec.rb +6 -74
  208. data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
  209. data/spec/mongoid/criteria/scopable_spec.rb +0 -81
  210. data/spec/mongoid/criteria_spec.rb +16 -19
  211. data/spec/mongoid/document_spec.rb +2 -56
  212. data/spec/mongoid/extensions/array_spec.rb +11 -15
  213. data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
  214. data/spec/mongoid/extensions/object_spec.rb +7 -11
  215. data/spec/mongoid/extensions/range_spec.rb +7 -0
  216. data/spec/mongoid/extensions/regexp_spec.rb +0 -23
  217. data/spec/mongoid/extensions/string_spec.rb +7 -35
  218. data/spec/mongoid/factory_spec.rb +18 -11
  219. data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
  220. data/spec/mongoid/fields_spec.rb +2 -2
  221. data/spec/mongoid/findable_spec.rb +1 -1
  222. data/spec/mongoid/indexable_spec.rb +18 -8
  223. data/spec/mongoid/interceptable_spec.rb +21 -2
  224. data/spec/mongoid/matchable_spec.rb +1 -26
  225. data/spec/mongoid/persistable/deletable_spec.rb +0 -19
  226. data/spec/mongoid/persistable/destroyable_spec.rb +0 -19
  227. data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
  228. data/spec/mongoid/persistable/savable_spec.rb +3 -3
  229. data/spec/mongoid/persistable/settable_spec.rb +1 -35
  230. data/spec/mongoid/persistable/updatable_spec.rb +2 -2
  231. data/spec/mongoid/persistable_spec.rb +16 -16
  232. data/spec/mongoid/persistence_context_spec.rb +0 -14
  233. data/spec/mongoid/positional_spec.rb +10 -10
  234. data/spec/mongoid/query_cache_spec.rb +18 -87
  235. data/spec/mongoid/relations/proxy_spec.rb +124 -124
  236. data/spec/mongoid/scopable_spec.rb +0 -13
  237. data/spec/mongoid/threaded_spec.rb +0 -68
  238. data/spec/mongoid/validatable/associated_spec.rb +1 -1
  239. data/spec/mongoid/validatable/presence_spec.rb +7 -6
  240. data/spec/mongoid/validatable_spec.rb +1 -1
  241. data/spec/spec_helper.rb +7 -83
  242. metadata +586 -611
  243. metadata.gz.sig +2 -5
  244. data/lib/mongoid/clients/sessions.rb +0 -113
  245. data/lib/mongoid/errors/invalid_session_use.rb +0 -24
  246. data/lib/mongoid/matchable/nor.rb +0 -37
  247. data/lib/mongoid/railties/controller_runtime.rb +0 -86
  248. data/lib/mongoid/relations.rb +0 -148
  249. data/lib/mongoid/relations/accessors.rb +0 -267
  250. data/lib/mongoid/relations/auto_save.rb +0 -94
  251. data/lib/mongoid/relations/bindings.rb +0 -9
  252. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  253. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  254. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  255. data/lib/mongoid/relations/builder.rb +0 -57
  256. data/lib/mongoid/relations/builders.rb +0 -106
  257. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  258. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  259. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  260. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  261. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  262. data/lib/mongoid/relations/cascading.rb +0 -56
  263. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  264. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  265. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  266. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  267. data/lib/mongoid/relations/conversions.rb +0 -34
  268. data/lib/mongoid/relations/counter_cache.rb +0 -160
  269. data/lib/mongoid/relations/cyclic.rb +0 -107
  270. data/lib/mongoid/relations/eager/base.rb +0 -153
  271. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  272. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  273. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  274. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  275. data/lib/mongoid/relations/embedded/in.rb +0 -241
  276. data/lib/mongoid/relations/embedded/many.rb +0 -683
  277. data/lib/mongoid/relations/embedded/one.rb +0 -235
  278. data/lib/mongoid/relations/macros.rb +0 -367
  279. data/lib/mongoid/relations/metadata.rb +0 -1179
  280. data/lib/mongoid/relations/nested_builder.rb +0 -74
  281. data/lib/mongoid/relations/options.rb +0 -49
  282. data/lib/mongoid/relations/polymorphic.rb +0 -39
  283. data/lib/mongoid/relations/referenced/in.rb +0 -304
  284. data/lib/mongoid/relations/referenced/many.rb +0 -812
  285. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  286. data/lib/mongoid/relations/referenced/one.rb +0 -290
  287. data/lib/mongoid/relations/synchronization.rb +0 -169
  288. data/lib/mongoid/relations/targets.rb +0 -2
  289. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  290. data/lib/mongoid/relations/touchable.rb +0 -97
  291. data/spec/app/models/array_field.rb +0 -7
  292. data/spec/app/models/delegating_patient.rb +0 -16
  293. data/spec/integration/document_spec.rb +0 -22
  294. data/spec/mongoid/clients/sessions_spec.rb +0 -334
  295. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  296. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  297. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  298. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  299. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  300. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  301. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  302. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  303. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  304. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  305. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  306. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  307. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  308. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  309. data/spec/mongoid/relations/options_spec.rb +0 -35
  310. data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -110
  311. data/spec/support/cluster_config.rb +0 -158
  312. data/spec/support/constraints.rb +0 -101
  313. data/spec/support/macros.rb +0 -20
  314. data/spec/support/session_registry.rb +0 -50
  315. data/spec/support/spec_config.rb +0 -42
@@ -88,6 +88,30 @@ describe Mongoid::Config do
88
88
  end
89
89
  end
90
90
 
91
+ context 'when background_indexing option' do
92
+ context 'is not set in the config' do
93
+ it 'sets the value to false by default' do
94
+ Mongoid::Config.reset
95
+ configuration = CONFIG.merge(options: {})
96
+
97
+ Mongoid.configure { |config| config.load_configuration(configuration) }
98
+
99
+ expect(Mongoid::Config.background_indexing).to be(false)
100
+ end
101
+ end
102
+
103
+ context 'is set in the config' do
104
+ it 'sets the value' do
105
+ Mongoid::Config.reset
106
+ configuration = CONFIG.merge(options: {background_indexing: true})
107
+
108
+ Mongoid.configure { |config| config.load_configuration(configuration) }
109
+
110
+ expect(Mongoid::Config.background_indexing).to be(true)
111
+ end
112
+ end
113
+ end
114
+
91
115
  context 'when the belongs_to_required_by_default option is not set in the config' do
92
116
 
93
117
  before do
@@ -1,7 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Mongoid::Contextual::GeoNear do
4
- max_server_version '4.0'
5
4
 
6
5
  describe "#average_distance" do
7
6
 
@@ -275,23 +275,6 @@ describe Mongoid::Contextual::Mongo do
275
275
  expect(Band.count).to eq(0)
276
276
  end
277
277
  end
278
-
279
- context 'when the write concern is unacknowledged' do
280
-
281
- let(:criteria) do
282
- Band.all
283
- end
284
-
285
- let!(:deleted) do
286
- criteria.with(write: { w: 0 }) do |crit|
287
- crit.send(method)
288
- end
289
- end
290
-
291
- it 'returns 0' do
292
- expect(deleted).to eq(0)
293
- end
294
- end
295
278
  end
296
279
  end
297
280
 
@@ -380,27 +363,6 @@ describe Mongoid::Contextual::Mongo do
380
363
  end
381
364
  end
382
365
  end
383
-
384
- context 'when the write concern is unacknowledged' do
385
-
386
- before do
387
- 2.times { Band.create }
388
- end
389
-
390
- let(:criteria) do
391
- Band.all
392
- end
393
-
394
- let!(:deleted) do
395
- criteria.with(write: { w: 0 }) do |crit|
396
- crit.send(method)
397
- end
398
- end
399
-
400
- it 'returns 0' do
401
- expect(deleted).to eq(0)
402
- end
403
- end
404
366
  end
405
367
 
406
368
  describe "#distinct" do
@@ -451,7 +413,7 @@ describe Mongoid::Contextual::Mongo do
451
413
  end
452
414
 
453
415
  it "returns the distinct field values" do
454
- expect(context.distinct(:years).sort).to eq([ 25, 30 ])
416
+ expect(context.distinct(:years)).to eq([ 30, 25 ])
455
417
  end
456
418
  end
457
419
 
@@ -591,12 +553,12 @@ describe Mongoid::Contextual::Mongo do
591
553
 
592
554
  context "when no documents are returned" do
593
555
 
594
- let(:game_metadata) do
556
+ let(:game_association) do
595
557
  Person.reflect_on_association(:game)
596
558
  end
597
559
 
598
560
  it "does not make any additional database queries" do
599
- expect(game_metadata).to receive(:eager_load).never
561
+ expect(game_association).to receive(:eager_load).never
600
562
  context.send(:eager_load, [])
601
563
  end
602
564
  end
@@ -2132,41 +2094,6 @@ describe Mongoid::Contextual::Mongo do
2132
2094
  expect(context.update).to be false
2133
2095
  end
2134
2096
  end
2135
-
2136
- context 'when provided array filters', if: array_filters_supported? do
2137
-
2138
- before do
2139
- Band.delete_all
2140
- b = Band.new(name: 'Depeche Mode')
2141
- b.labels << Label.new(name: 'Warner')
2142
- b.labels << Label.new(name: 'Sony')
2143
- b.labels << Label.new(name: 'Cbs')
2144
- b.save
2145
-
2146
- b = Band.new(name: 'FKA Twigs')
2147
- b.labels << Label.new(name: 'Warner')
2148
- b.labels << Label.new(name: 'Cbs')
2149
- b.save
2150
- end
2151
-
2152
-
2153
- let(:criteria) do
2154
- Band.where(name: 'Depeche Mode')
2155
- end
2156
-
2157
- let!(:update) do
2158
- context.update({ '$set' => { 'labels.$[i].name' => 'Sony' } },
2159
- array_filters: [{ 'i.name' => 'Cbs' }])
2160
- end
2161
-
2162
- it 'applies the array filters' do
2163
- expect(Band.where(name: 'Depeche Mode').first.labels.collect(&:name)).to match_array(['Warner', 'Sony', 'Sony'])
2164
- end
2165
-
2166
- it 'does not affect other documents' do
2167
- expect(Band.where(name: 'FKA Twigs').first.labels.collect(&:name)).to match_array(['Warner', 'Cbs'])
2168
- end
2169
- end
2170
2097
  end
2171
2098
 
2172
2099
  describe "#update_all" do
@@ -2304,41 +2231,6 @@ describe Mongoid::Contextual::Mongo do
2304
2231
  expect(context.update_all).to be false
2305
2232
  end
2306
2233
  end
2307
-
2308
- context 'when provided array filters', if: array_filters_supported? do
2309
-
2310
- before do
2311
- Band.delete_all
2312
- b = Band.new(name: 'Depeche Mode')
2313
- b.labels << Label.new(name: 'Warner')
2314
- b.labels << Label.new(name: 'Sony')
2315
- b.labels << Label.new(name: 'Cbs')
2316
- b.save
2317
-
2318
- b = Band.new(name: 'FKA Twigs')
2319
- b.labels << Label.new(name: 'Warner')
2320
- b.labels << Label.new(name: 'Cbs')
2321
- b.save
2322
- end
2323
-
2324
-
2325
- let(:criteria) do
2326
- Band.all
2327
- end
2328
-
2329
- let!(:update) do
2330
- context.update_all({ '$set' => { 'labels.$[i].name' => 'Sony' } },
2331
- array_filters: [{ 'i.name' => 'Cbs' }])
2332
- end
2333
-
2334
- it 'applies the array filters' do
2335
- expect(Band.where(name: 'Depeche Mode').first.labels.collect(&:name)).to match_array(['Warner', 'Sony', 'Sony'])
2336
- end
2337
-
2338
- it 'updates all documents' do
2339
- expect(Band.where(name: 'FKA Twigs').first.labels.collect(&:name)).to match_array(['Warner', 'Sony'])
2340
- end
2341
- end
2342
2234
  end
2343
2235
 
2344
2236
  describe '#pipeline' do
@@ -2363,7 +2255,7 @@ describe Mongoid::Contextual::Mongo do
2363
2255
  end
2364
2256
 
2365
2257
  it 'creates a pipeline with the selector as one of the $match criteria' do
2366
- expect(pipeline_match).to include({ '$text' => { '$search' => "New Order" } })
2258
+ expect(pipeline_match).to include({ :'$text' => { :'$search' => "New Order" } })
2367
2259
  end
2368
2260
 
2369
2261
  it 'creates a pipeline with the $exists operator as one of the $match criteria' do
@@ -49,6 +49,29 @@ describe Mongoid::Criteria::Modifiable do
49
49
  end
50
50
  end
51
51
  end
52
+
53
+ context 'when the object is polymorphic' do
54
+
55
+ let(:movie) do
56
+ Movie.new
57
+ end
58
+
59
+ let(:criteria) do
60
+ Rating.where(ratable: movie)
61
+ end
62
+
63
+ let(:document) do
64
+ criteria.create
65
+ end
66
+
67
+ it 'sets the polymorphic id' do
68
+ expect(document.ratable_id).to eq(movie.id)
69
+ end
70
+
71
+ it 'sets the type field' do
72
+ expect(document.ratable_type).to eq('Movie')
73
+ end
74
+ end
52
75
  end
53
76
 
54
77
  describe "#create!" do
@@ -65,6 +88,29 @@ describe Mongoid::Criteria::Modifiable do
65
88
  }.to raise_error(Mongoid::Errors::Validations)
66
89
  end
67
90
  end
91
+
92
+ context 'when the object is polymorphic' do
93
+
94
+ let(:movie) do
95
+ Movie.new
96
+ end
97
+
98
+ let(:criteria) do
99
+ Rating.where(ratable: movie)
100
+ end
101
+
102
+ let(:document) do
103
+ criteria.create!
104
+ end
105
+
106
+ it 'sets the polymorphic id' do
107
+ expect(document.ratable_id).to eq(movie.id)
108
+ end
109
+
110
+ it 'sets the type field' do
111
+ expect(document.ratable_type).to eq('Movie')
112
+ end
113
+ end
68
114
  end
69
115
 
70
116
  [ :delete, :delete_all, :destroy, :destroy_all ].each do |method|
@@ -295,6 +341,25 @@ describe Mongoid::Criteria::Modifiable do
295
341
  expect(person.pets).to be true
296
342
  end
297
343
  end
344
+
345
+ context 'when the object is polymorphic' do
346
+
347
+ let(:movie) do
348
+ Movie.new
349
+ end
350
+
351
+ let(:document) do
352
+ Rating.find_or_create_by(ratable: movie)
353
+ end
354
+
355
+ it 'sets the polymorphic id' do
356
+ expect(document.ratable_id).to eq(movie.id)
357
+ end
358
+
359
+ it 'sets the type field' do
360
+ expect(document.ratable_type).to eq('Movie')
361
+ end
362
+ end
298
363
  end
299
364
  end
300
365
 
@@ -447,6 +512,25 @@ describe Mongoid::Criteria::Modifiable do
447
512
  end
448
513
  end
449
514
  end
515
+
516
+ context 'when the object is polymorphic' do
517
+
518
+ let(:movie) do
519
+ Movie.new
520
+ end
521
+
522
+ let(:document) do
523
+ Rating.find_or_create_by!(ratable: movie)
524
+ end
525
+
526
+ it 'sets the polymorphic id' do
527
+ expect(document.ratable_id).to eq(movie.id)
528
+ end
529
+
530
+ it 'sets the type field' do
531
+ expect(document.ratable_type).to eq('Movie')
532
+ end
533
+ end
450
534
  end
451
535
 
452
536
  describe ".find_or_initialize_by" do
@@ -500,6 +584,25 @@ describe Mongoid::Criteria::Modifiable do
500
584
  end
501
585
  end
502
586
  end
587
+
588
+ context 'when the object is polymorphic' do
589
+
590
+ let(:movie) do
591
+ Movie.new
592
+ end
593
+
594
+ let(:document) do
595
+ Rating.find_or_initialize_by(ratable: movie)
596
+ end
597
+
598
+ it 'sets the polymorphic id' do
599
+ expect(document.ratable_id).to eq(movie.id)
600
+ end
601
+
602
+ it 'sets the type field' do
603
+ expect(document.ratable_type).to eq('Movie')
604
+ end
605
+ end
503
606
  end
504
607
 
505
608
  describe "first_or_create" do
@@ -649,7 +752,7 @@ describe Mongoid::Criteria::Modifiable do
649
752
  band = Band.create
650
753
  Mongoid::Criteria.new(Record) do |criteria|
651
754
  criteria.embedded = true
652
- criteria.metadata = Band.reflect_on_association(:records)
755
+ criteria.association = Band.reflect_on_association(:records)
653
756
  criteria.parent_document = band
654
757
  criteria.selector = { "records" => { "producers"=>{"$in"=>["nonexistent"] } } }
655
758
  end
@@ -703,6 +806,29 @@ describe Mongoid::Criteria::Modifiable do
703
806
  end
704
807
  end
705
808
 
809
+ context 'when the object is polymorphic' do
810
+
811
+ let(:movie) do
812
+ Movie.new
813
+ end
814
+
815
+ let(:criteria) do
816
+ Rating.where(ratable: movie)
817
+ end
818
+
819
+ let(:document) do
820
+ criteria.first_or_create
821
+ end
822
+
823
+ it 'sets the polymorphic id' do
824
+ expect(document.ratable_id).to eq(movie.id)
825
+ end
826
+
827
+ it 'sets the type field' do
828
+ expect(document.ratable_type).to eq('Movie')
829
+ end
830
+ end
831
+
706
832
  context "when a block is provided" do
707
833
 
708
834
  let(:document) do
@@ -919,6 +1045,29 @@ describe Mongoid::Criteria::Modifiable do
919
1045
  end
920
1046
  end
921
1047
  end
1048
+
1049
+ context 'when the object is polymorphic' do
1050
+
1051
+ let(:movie) do
1052
+ Movie.new
1053
+ end
1054
+
1055
+ let(:criteria) do
1056
+ Rating.where(ratable: movie)
1057
+ end
1058
+
1059
+ let(:document) do
1060
+ criteria.first_or_create!
1061
+ end
1062
+
1063
+ it 'sets the polymorphic id' do
1064
+ expect(document.ratable_id).to eq(movie.id)
1065
+ end
1066
+
1067
+ it 'sets the type field' do
1068
+ expect(document.ratable_type).to eq('Movie')
1069
+ end
1070
+ end
922
1071
  end
923
1072
 
924
1073
  describe "first_or_initialize" do
@@ -938,6 +1087,29 @@ describe Mongoid::Criteria::Modifiable do
938
1087
  end
939
1088
  end
940
1089
 
1090
+ context 'when the object is polymorphic' do
1091
+
1092
+ let(:movie) do
1093
+ Movie.new
1094
+ end
1095
+
1096
+ let(:criteria) do
1097
+ Rating.where(ratable: movie)
1098
+ end
1099
+
1100
+ let(:document) do
1101
+ criteria.first_or_initialize
1102
+ end
1103
+
1104
+ it 'sets the polymorphic id' do
1105
+ expect(document.ratable_id).to eq(movie.id)
1106
+ end
1107
+
1108
+ it 'sets the type field' do
1109
+ expect(document.ratable_type).to eq('Movie')
1110
+ end
1111
+ end
1112
+
941
1113
  context "when the document is not found" do
942
1114
 
943
1115
  context "when attributes are provided" do
@@ -1471,15 +1643,11 @@ describe Mongoid::Criteria::Modifiable do
1471
1643
  { 'username' => 'Turnip' }
1472
1644
  end
1473
1645
 
1474
- it 'does not modify the selector' do
1475
- expect(Person.create_with(attrs).selector[:username]).to be_nil
1476
- end
1477
-
1478
- it 'create_attrs is modified' do
1479
- expect(Person.create_with(attrs).create_attrs).to eq(attrs)
1646
+ it 'returns a criteria with the defined attributes' do
1647
+ expect(Person.create_with(attrs).selector).to eq(attrs)
1480
1648
  end
1481
1649
 
1482
- context 'when a create is chained' do
1650
+ context 'when a method is chained' do
1483
1651
 
1484
1652
  context 'when a write method is chained' do
1485
1653
 
@@ -1503,25 +1671,6 @@ describe Mongoid::Criteria::Modifiable do
1503
1671
  expect(new_person.age).to eq(50)
1504
1672
  end
1505
1673
 
1506
- context 'when a matching document is already in the collection' do
1507
- let(:query) do
1508
- { 'username' => 'foo', 'age' => 12 }
1509
- end
1510
-
1511
- let(:person) do
1512
- Person.create!(query)
1513
- end
1514
-
1515
- let(:found_person) do
1516
- Person.create_with(attrs).find_or_create_by(query)
1517
- end
1518
-
1519
- it 'finds the matching document' do
1520
- person
1521
- expect(found_person.id).to eq(person.id)
1522
- end
1523
- end
1524
-
1525
1674
  context 'when the attributes are shared with the write method args' do
1526
1675
 
1527
1676
  let(:query) do
@@ -1532,7 +1681,7 @@ describe Mongoid::Criteria::Modifiable do
1532
1681
  Person.create_with(attrs).find_or_create_by(query)
1533
1682
  end
1534
1683
 
1535
- it 'gives the find method args precedence' do
1684
+ it 'gives the write method args precedence' do
1536
1685
  expect(new_person.username).to eq('Beet')
1537
1686
  expect(new_person.age).to eq(50)
1538
1687
  end
@@ -1559,12 +1708,8 @@ describe Mongoid::Criteria::Modifiable do
1559
1708
  { 'username' => 'Beet', 'age' => 50 }
1560
1709
  end
1561
1710
 
1562
- it 'does not modify the selector' do
1563
- expect(criteria.create_with(attrs).selector).to eq(criteria_selector)
1564
- end
1565
-
1566
1711
  it 'overwrites all the original attributes' do
1567
- expect(criteria.create_with(attrs).create_attrs).to eq(attrs)
1712
+ expect(criteria.create_with(attrs).selector).to eq(attrs)
1568
1713
  end
1569
1714
  end
1570
1715
  end
@@ -1575,12 +1720,8 @@ describe Mongoid::Criteria::Modifiable do
1575
1720
  { 'username' => 'Beet' }
1576
1721
  end
1577
1722
 
1578
- it 'does not modify the selector' do
1579
- expect(criteria.create_with(attrs).selector).to eq(criteria_selector)
1580
- end
1581
-
1582
1723
  it 'only overwrites the shared attributes' do
1583
- expect(criteria.create_with(attrs).create_attrs).to eq(attrs)
1724
+ expect(criteria.create_with(attrs).selector).to eq(criteria_selector.merge!(attrs))
1584
1725
  end
1585
1726
  end
1586
1727
 
@@ -1589,11 +1730,12 @@ describe Mongoid::Criteria::Modifiable do
1589
1730
  let(:attrs) do
1590
1731
  { 'username' => 'Turnip' }
1591
1732
  end
1733
+
1592
1734
  let(:query) do
1593
1735
  { 'username' => 'Beet', 'age' => 50 }
1594
1736
  end
1595
1737
 
1596
- context 'when a create method is chained' do
1738
+ context 'when a write method is chained' do
1597
1739
 
1598
1740
  it 'executes the method' do
1599
1741
  expect(criteria.create_with(attrs).new.username).to eq('Turnip')
@@ -1607,28 +1749,9 @@ describe Mongoid::Criteria::Modifiable do
1607
1749
  criteria.create_with(attrs).find_or_create_by(query)
1608
1750
  end
1609
1751
 
1610
- it 'gives the find method arg precedence' do
1752
+ it 'executes the query' do
1611
1753
  expect(new_person.username).to eq('Beet')
1612
- expect(new_person.age).to be(50)
1613
- end
1614
-
1615
- context 'when a matching document is already in the collection' do
1616
- let(:query) do
1617
- { 'username' => 'foo', 'age' => 12 }
1618
- end
1619
-
1620
- let(:person) do
1621
- Person.create!(query)
1622
- end
1623
-
1624
- let(:found_person) do
1625
- criteria.create_with(attrs).find_or_create_by(query)
1626
- end
1627
-
1628
- it 'finds the matching document' do
1629
- person
1630
- expect(found_person.id).to eq(person.id)
1631
- end
1754
+ expect(new_person.age).to eq(50)
1632
1755
  end
1633
1756
  end
1634
1757
  end