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
@@ -1,97 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Touchable
5
- extend ActiveSupport::Concern
6
-
7
- # Touch the document, in effect updating its updated_at timestamp and
8
- # optionally the provided field to the current time. If any belongs_to
9
- # relations exist with a touch option, they will be updated as well.
10
- #
11
- # @example Update the updated_at timestamp.
12
- # document.touch
13
- #
14
- # @example Update the updated_at and provided timestamps.
15
- # document.touch(:audited)
16
- #
17
- # @note This will not autobuild relations if those options are set.
18
- #
19
- # @param [ Symbol ] field The name of an additional field to update.
20
- #
21
- # @return [ true/false ] false if record is new_record otherwise true.
22
- #
23
- # @since 3.0.0
24
- def touch(field = nil)
25
- return false if _root.new_record?
26
- current = Time.now
27
- field = database_field_name(field)
28
- write_attribute(:updated_at, current) if respond_to?("updated_at=")
29
- write_attribute(field, current) if field
30
-
31
- touches = touch_atomic_updates(field)
32
- unless touches["$set"].blank?
33
- selector = atomic_selector
34
- _root.collection.find(selector).update_one(positionally(selector, touches), session: _session)
35
- end
36
- run_callbacks(:touch)
37
- true
38
- end
39
-
40
- module ClassMethods
41
-
42
- # Add the metadata to the touchable relations if the touch option was
43
- # provided.
44
- #
45
- # @example Add the touchable.
46
- # Model.touchable(meta)
47
- #
48
- # @param [ Metadata ] metadata The relation metadata.
49
- #
50
- # @return [ Class ] The model class.
51
- #
52
- # @since 3.0.0
53
- def touchable(metadata)
54
- if metadata.touchable?
55
- name = metadata.name
56
- field = metadata[:touch].is_a?(Symbol) ? metadata[:touch] : nil
57
- method_name = define_relation_touch_method(name, field)
58
- after_save method_name
59
- after_destroy method_name
60
- after_touch method_name
61
- end
62
- self
63
- end
64
-
65
- private
66
-
67
- # Define the method that will get called for touching belongs_to
68
- # relations.
69
- #
70
- # @api private
71
- #
72
- # @example Define the touch relation.
73
- # Model.define_relation_touch_method(:band)
74
- # Model.define_relation_touch_method(:band, :band_updated_at)
75
- #
76
- # @param [ Symbol ] name The name of the relation.
77
- # @param [ Symbol ] extra_field Additional timestamp field to update.
78
- #
79
- # @since 3.1.0
80
- #
81
- # @return [ Symbol ] The method name.
82
- def define_relation_touch_method(name, extra_field = nil)
83
- method_name = "touch_#{name}_after_create_or_destroy"
84
- class_eval <<-TOUCH, __FILE__, __LINE__ + 1
85
- def #{method_name}
86
- without_autobuild do
87
- relation = __send__(:#{name})
88
- relation.touch #{":#{extra_field}" if extra_field} if relation
89
- end
90
- end
91
- TOUCH
92
- method_name.to_sym
93
- end
94
- end
95
- end
96
- end
97
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class ArrayField
4
- include Mongoid::Document
5
-
6
- field :af, type: Array
7
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- class DelegatingPatient
5
- include Mongoid::Document
6
-
7
- embeds_one :email
8
-
9
- # Instance level delegation
10
- delegate :address, to: :email
11
-
12
- class << self
13
- # Class level delegation
14
- delegate :default_client, to: ::Mongoid
15
- end
16
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- require 'spec_helper'
5
-
6
- describe Mongoid::Document do
7
- context 'when including class uses delegate' do
8
- let(:patient) do
9
- DelegatingPatient.new(
10
- email: Email.new(address: 'test@example.com'),
11
- )
12
- end
13
-
14
- it 'works for instance level delegation' do
15
- patient.address.should == 'test@example.com'
16
- end
17
-
18
- it 'works for class level delegation' do
19
- DelegatingPatient.default_client.should be Mongoid.default_client
20
- end
21
- end
22
- end
@@ -1,334 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Clients::Sessions do
4
-
5
- before(:all) do
6
- CONFIG[:clients][:other] = CONFIG[:clients][:default].dup
7
- CONFIG[:clients][:other][:database] = 'other'
8
- Mongoid::Clients.clients.values.each(&:close)
9
- Mongoid::Config.send(:clients=, CONFIG[:clients])
10
- Mongoid::Clients.with_name(:other).subscribe(Mongo::Monitoring::COMMAND, EventSubscriber.new)
11
- end
12
-
13
- after(:all) do
14
- Mongoid::Clients.with_name(:other).close
15
- Mongoid::Clients.clients.delete(:other)
16
- end
17
-
18
- let(:subscriber) do
19
- client = Mongoid::Clients.with_name(:other)
20
- monitoring = if client.respond_to?(:monitoring, true)
21
- client.send(:monitoring)
22
- else
23
- # driver 2.5
24
- client.instance_variable_get('@monitoring')
25
- end
26
- monitoring.subscribers['Command'].find do |s|
27
- s.is_a?(EventSubscriber)
28
- end
29
- end
30
-
31
- let(:insert_events) do
32
- # Driver 2.5 sends command_name as a symbol
33
- subscriber.started_events.select { |event| event.command_name.to_s == 'insert' }
34
- end
35
-
36
- let(:update_events) do
37
- # Driver 2.5 sends command_name as a symbol
38
- subscriber.started_events.select { |event| event.command_name.to_s == 'update' }
39
- end
40
-
41
- context 'when a session is used on a model class' do
42
-
43
- context 'when sessions are supported', if: sessions_supported? do
44
-
45
- around do |example|
46
- Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
47
- subscriber.clear_events!
48
- Person.with(client: :other) do
49
- example.run
50
- end
51
- Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
52
- end
53
-
54
- context 'when another thread is started' do
55
-
56
- let!(:last_use_diff) do
57
- Person.with_session do |session|
58
- Person.create
59
- Person.create
60
- last_use = session.instance_variable_get(:@server_session).last_use
61
- Thread.new { Person.create }.value
62
- session.instance_variable_get(:@server_session).last_use - last_use
63
- end
64
- end
65
-
66
- it 'does not use the session for that thread' do
67
- expect(Person.count).to be(2)
68
- expect(Person.with(client: :default) { Person.count }).to be(1)
69
- lsids_sent = insert_events.collect { |event| event.command['lsid'] }
70
- expect(lsids_sent.size).to eq(2)
71
- expect(lsids_sent.uniq.size).to eq(1)
72
- expect(last_use_diff).to eq(0)
73
- end
74
- end
75
-
76
- context 'when the operations in the session block are all on the class' do
77
-
78
- before do
79
- Person.with_session do
80
- Person.create
81
- Person.create
82
- end
83
- end
84
-
85
- it 'uses a single session id for all operations on the class' do
86
- expect(Person.count).to be(2)
87
- lsids_sent = insert_events.collect { |event| event.command['lsid'] }
88
- expect(lsids_sent.size).to eq(2)
89
- expect(lsids_sent.uniq.size).to eq(1)
90
- end
91
- end
92
-
93
- context 'when the operations in the session block are also on another class' do
94
-
95
- context 'when the other class uses the same client' do
96
-
97
- before do
98
- Post.with(client: :other) do
99
- Person.with_session do
100
- Person.create
101
- Person.create
102
- Post.create
103
- end
104
- end
105
- end
106
-
107
- it 'uses a single session id for all operations on the class' do
108
- expect(Post.with(client: :other) { |klass| klass.count }).to be(1)
109
- lsids_sent = insert_events.collect { |event| event.command['lsid'] }
110
- expect(lsids_sent.size).to eq(3)
111
- expect(lsids_sent.uniq.size).to eq(1)
112
- end
113
- end
114
-
115
- context 'when the other class uses a different client' do
116
-
117
- let!(:error) do
118
- e = nil
119
- begin
120
- Person.with_session do
121
- Person.create
122
- Person.create
123
- Post.create
124
- end
125
- rescue => ex
126
- e = ex
127
- end
128
- e
129
- end
130
-
131
- it 'raises an error' do
132
- expect(error).to be_a(Mongoid::Errors::InvalidSessionUse)
133
- end
134
-
135
- it 'uses a single session id for all operations on the class' do
136
- expect(Person.count).to be(2)
137
- lsids_sent = insert_events.collect { |event| event.command['lsid'] }
138
- expect(lsids_sent.size).to eq(2)
139
- expect(lsids_sent.uniq.size).to eq(1)
140
- end
141
- end
142
-
143
- context 'when sessions are nested' do
144
-
145
- let!(:error) do
146
- e = nil
147
- begin
148
- Person.with_session do
149
- Person.with_session do
150
- Person.create
151
- Post.create
152
- end
153
- end
154
- rescue => ex
155
- e = ex
156
- end
157
- e
158
- end
159
-
160
- it 'raises an error' do
161
- expect(error).to be_a(Mongoid::Errors::InvalidSessionUse)
162
- end
163
-
164
- it 'does not execute any operations' do
165
- expect(Person.count).to be(0)
166
- expect(insert_events).to be_empty
167
- end
168
- end
169
- end
170
- end
171
-
172
- context 'when sessions are not supported', unless: sessions_supported? do
173
-
174
- let!(:error) do
175
- e = nil
176
- begin
177
- Person.with_session {}
178
- rescue => ex
179
- e = ex
180
- end
181
- e
182
- end
183
-
184
- it 'raises a sessions not supported error' do
185
- expect(error).to be_a(Mongoid::Errors::InvalidSessionUse)
186
- expect(error.message).to include('not supported')
187
- end
188
- end
189
- end
190
-
191
- context 'when a session is used on a model instance' do
192
-
193
- let!(:person) do
194
- Person.with(client: :other) do |klass|
195
- klass.create
196
- end
197
- end
198
-
199
- context 'when sessions are supported', if: sessions_supported? do
200
-
201
- around do |example|
202
- Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
203
- subscriber.clear_events!
204
- person.with(client: :other) do
205
- example.run
206
- end
207
- Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
208
- end
209
-
210
- context 'when the operations in the session block are all on the instance' do
211
-
212
- before do
213
- person.with_session do
214
- person.username = 'Emily'
215
- person.save
216
- person.age = 80
217
- person.save
218
- end
219
- end
220
-
221
- it 'uses a single session id for all operations on the class' do
222
- expect(person.reload.username).to eq('Emily')
223
- expect(person.reload.age).to eq(80)
224
- lsids_sent = update_events.collect { |event| event.command['lsid'] }
225
- expect(lsids_sent.size).to eq(2)
226
- expect(lsids_sent.uniq.size).to eq(1)
227
- end
228
- end
229
-
230
- context 'when the operations in the session block are also on another class' do
231
-
232
- context 'when the other class uses the same client' do
233
-
234
- before do
235
- Post.with(client: :other) do
236
- person.with_session do
237
- person.username = 'Emily'
238
- person.save
239
- person.posts << Post.create
240
- end
241
- end
242
- end
243
-
244
- it 'uses a single session id for all operations on the class' do
245
- expect(person.reload.username).to eq('Emily')
246
- expect(Post.with(client: :other) { Post.count }).to be(1)
247
- update_lsids_sent = update_events.collect { |event| event.command['lsid'] }
248
- expect(update_lsids_sent.size).to eq(3) # person update, counter cache, post assignment
249
- expect(update_lsids_sent.uniq.size).to eq(1) # person update, counter cache, post assignment
250
- insert_lsids_sent = insert_events.collect { |event| event.command['lsid'] }
251
- expect(insert_lsids_sent.size).to eq(2)
252
- expect(insert_lsids_sent.uniq.size).to eq(1)
253
- expect(update_lsids_sent.uniq).to eq(insert_lsids_sent.uniq)
254
- end
255
- end
256
-
257
- context 'when the other class uses a different client' do
258
-
259
- let!(:error) do
260
- e = nil
261
- begin
262
- person.with_session do
263
- person.username = 'Emily'
264
- person.save
265
- person.posts << Post.create
266
- end
267
- rescue => ex
268
- e = ex
269
- end
270
- e
271
- end
272
-
273
- it 'raises an error' do
274
- expect(error).to be_a(Mongoid::Errors::InvalidSessionUse)
275
- end
276
-
277
- it 'uses a single session id for all operations on the class' do
278
- expect(person.reload.username).to eq('Emily')
279
- expect(Post.count).to be(0)
280
- update_lsids_sent = update_events.collect { |event| event.command['lsid'] }
281
- expect(update_lsids_sent.size).to eq(1)
282
- end
283
- end
284
-
285
- context 'when sessions are nested' do
286
-
287
- let!(:error) do
288
- e = nil
289
- begin
290
- person.with_session do
291
- person.with_session do
292
- person.username = 'Emily'
293
- person.save
294
- person.posts << Post.create
295
- end
296
- end
297
- rescue => ex
298
- e = ex
299
- end
300
- e
301
- end
302
-
303
- it 'raises an error' do
304
- expect(error).to be_a(Mongoid::Errors::InvalidSessionUse)
305
- end
306
-
307
- it 'does not execute any operations' do
308
- expect(person.reload.username).not_to eq('Emily')
309
- expect(Post.count).to be(0)
310
- expect(update_events).to be_empty
311
- end
312
- end
313
- end
314
- end
315
-
316
- context 'when sessions are not supported', unless: sessions_supported? do
317
-
318
- let!(:error) do
319
- e = nil
320
- begin
321
- person.with_session {}
322
- rescue => ex
323
- e = ex
324
- end
325
- e
326
- end
327
-
328
- it 'raises a sessions not supported error' do
329
- expect(error).to be_a(Mongoid::Errors::InvalidSessionUse)
330
- expect(error.message).to include('not supported')
331
- end
332
- end
333
- end
334
- end