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,35 +1,7 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
1
  require "spec_helper"
5
2
 
6
3
  describe Mongoid::Clients::Factory do
7
4
 
8
- shared_examples_for 'includes seed address' do
9
- let(:configured_address) do
10
- address = SpecConfig.instance.addresses.first
11
- unless address.include?(':')
12
- address = "#{address}:27017"
13
- end
14
- address
15
- end
16
-
17
- let(:expected_addresses) do
18
- [
19
- configured_address,
20
- configured_address.sub(/\Alocalhost:/, '127.0.0.1:'),
21
- configured_address.sub(/\A127\.0\.0\.1:/, 'localhost:'),
22
- ].uniq
23
- end
24
-
25
- it 'includes seed address' do
26
- ok = cluster_addresses.any? do |address|
27
- expected_addresses.include?(address)
28
- end
29
- expect(ok).to be true
30
- end
31
- end
32
-
33
5
  describe ".create" do
34
6
 
35
7
  context "when provided a name" do
@@ -40,8 +12,8 @@ describe Mongoid::Clients::Factory do
40
12
 
41
13
  let(:config) do
42
14
  {
43
- default: { hosts: SpecConfig.instance.addresses, database: database_id },
44
- secondary: { hosts: SpecConfig.instance.addresses, database: database_id }
15
+ default: { hosts: [ "127.0.0.1:27017" ], database: database_id },
16
+ secondary: { hosts: [ "127.0.0.1:27017" ], database: database_id }
45
17
  }
46
18
  end
47
19
 
@@ -65,12 +37,10 @@ describe Mongoid::Clients::Factory do
65
37
  expect(client).to be_a(Mongo::Client)
66
38
  end
67
39
 
68
- let(:cluster_addresses) do
69
- cluster.addresses.map(&:to_s)
40
+ it "sets the cluster's seeds" do
41
+ expect(cluster.addresses.first.to_s).to eq("127.0.0.1:27017")
70
42
  end
71
43
 
72
- it_behaves_like 'includes seed address'
73
-
74
44
  it "sets the platform to Mongoid's platform constant" do
75
45
  expect(client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
76
46
  end
@@ -110,11 +80,11 @@ describe Mongoid::Clients::Factory do
110
80
  end
111
81
 
112
82
  it "sets the cluster's seed ports to 27017" do
113
- expect(%w(127.0.0.1:27017 localhost:27017)).to include(cluster.addresses.first.to_s)
83
+ expect(cluster.addresses.first.to_s).to eq("127.0.0.1:27017")
114
84
  end
115
85
 
116
86
  it "sets ips with no ports to 27017" do
117
- expect(%w(127.0.0.1:27017 localhost:27017)).to include(cluster.addresses.first.to_s)
87
+ expect(default.cluster.addresses.first.to_s).to eq("127.0.0.1:27017")
118
88
  end
119
89
  end
120
90
 
@@ -150,7 +120,7 @@ describe Mongoid::Clients::Factory do
150
120
  end
151
121
 
152
122
  it "sets the cluster's seeds" do
153
- expect(%w(127.0.0.1:27017 localhost:27017)).to include(cluster.addresses.first.to_s)
123
+ expect(cluster.addresses.first.to_s).to eq("127.0.0.1:27017")
154
124
  end
155
125
 
156
126
  it "sets the database" do
@@ -162,8 +132,8 @@ describe Mongoid::Clients::Factory do
162
132
 
163
133
  let(:config) do
164
134
  {
165
- default: { hosts: [ "127.0.0.1:1234" ], database: database_id, server_selection_timeout: 1 },
166
- secondary: { uri: "mongodb://127.0.0.1:1234,127.0.0.1:5678/mongoid_test?serverSelectionTimeoutMS=1000" }
135
+ default: { hosts: [ "127.0.0.1:27017" ], database: database_id },
136
+ secondary: { uri: "mongodb://127.0.0.1:27017,127.0.0.1:27018/mongoid_test" }
167
137
  }
168
138
  end
169
139
 
@@ -192,7 +162,7 @@ describe Mongoid::Clients::Factory do
192
162
  end
193
163
 
194
164
  it "sets the cluster's seeds" do
195
- expect(seeds).to eq([ "127.0.0.1:1234", "127.0.0.1:5678" ])
165
+ expect(seeds).to eq([ "127.0.0.1:27017", "127.0.0.1:27018" ])
196
166
  end
197
167
  end
198
168
  end
@@ -211,7 +181,7 @@ describe Mongoid::Clients::Factory do
211
181
  context "when no name is provided" do
212
182
 
213
183
  let(:config) do
214
- { default: { hosts: SpecConfig.instance.addresses, database: database_id }}
184
+ { default: { hosts: ["127.0.0.1:27017"], database: database_id }}
215
185
  end
216
186
 
217
187
  before do
@@ -230,15 +200,17 @@ describe Mongoid::Clients::Factory do
230
200
  client.cluster
231
201
  end
232
202
 
233
- let(:cluster_addresses) do
234
- cluster.addresses.map(&:to_s)
203
+ let(:seeds) do
204
+ cluster.addresses.map{ |address| address.to_s }
235
205
  end
236
206
 
237
207
  it "returns the default client" do
238
208
  expect(client).to be_a(Mongo::Client)
239
209
  end
240
210
 
241
- it_behaves_like 'includes seed address'
211
+ it "sets the cluster's seeds" do
212
+ expect(seeds).to eq([ "127.0.0.1:27017" ])
213
+ end
242
214
  end
243
215
 
244
216
  context "when nil is provided and no default config" do
@@ -258,7 +230,7 @@ describe Mongoid::Clients::Factory do
258
230
  describe ".default" do
259
231
 
260
232
  let(:config) do
261
- { default: { hosts: SpecConfig.instance.addresses, database: database_id }}
233
+ { default: { hosts: ["127.0.0.1:27017"], database: database_id }}
262
234
  end
263
235
 
264
236
  before do
@@ -277,15 +249,17 @@ describe Mongoid::Clients::Factory do
277
249
  client.cluster
278
250
  end
279
251
 
280
- let(:cluster_addresses) do
281
- cluster.addresses.map(&:to_s)
252
+ let(:seeds) do
253
+ cluster.addresses.map{ |address| address.to_s }
282
254
  end
283
255
 
284
256
  it "returns the default client" do
285
257
  expect(client).to be_a(Mongo::Client)
286
258
  end
287
259
 
288
- it_behaves_like 'includes seed address'
260
+ it "sets the cluster's seeds" do
261
+ expect(seeds).to eq([ "127.0.0.1:27017" ])
262
+ end
289
263
  end
290
264
 
291
265
  context "when options are provided with string keys" do
@@ -293,7 +267,7 @@ describe Mongoid::Clients::Factory do
293
267
  let(:config) do
294
268
  {
295
269
  default: {
296
- hosts: SpecConfig.instance.addresses,
270
+ hosts: [ "127.0.0.1:27017" ],
297
271
  database: database_id,
298
272
  options: {
299
273
  "server_selection_timeout" => 10,
@@ -319,15 +293,17 @@ describe Mongoid::Clients::Factory do
319
293
  client.cluster
320
294
  end
321
295
 
322
- let(:cluster_addresses) do
323
- cluster.addresses.map(&:to_s)
296
+ let(:seeds) do
297
+ cluster.addresses.map{ |address| address.to_s }
324
298
  end
325
299
 
326
300
  it "returns the default client" do
327
301
  expect(client).to be_a(Mongo::Client)
328
302
  end
329
303
 
330
- it_behaves_like 'includes seed address'
304
+ it "sets the cluster's seeds" do
305
+ expect(seeds).to eq([ "127.0.0.1:27017" ])
306
+ end
331
307
 
332
308
  it "sets the server selection timeout" do
333
309
  expect(cluster.options[:server_selection_timeout]).to eq(10)
@@ -2,12 +2,23 @@ require "spec_helper"
2
2
 
3
3
  describe Mongoid::Clients::Options do
4
4
 
5
+ before(:all) do
6
+ class TestModel
7
+ include Mongoid::Document
8
+ field :name
9
+ end
10
+ end
11
+
12
+ after(:all) do
13
+ Object.send(:remove_const, :TestModel)
14
+ end
15
+
5
16
  describe '#with', if: non_legacy_server? do
6
17
 
7
18
  context 'when passing some options' do
8
19
 
9
20
  let(:persistence_context) do
10
- Band.with(options) do |klass|
21
+ TestModel.with(options) do |klass|
11
22
  klass.persistence_context
12
23
  end
13
24
  end
@@ -19,13 +30,13 @@ describe Mongoid::Clients::Options do
19
30
  end
20
31
 
21
32
  it 'does not set the options on class level' do
22
- expect(Band.persistence_context.client.options['database']).to eq('mongoid_test')
33
+ expect(TestModel.persistence_context.client.options['database']).to eq('mongoid_test')
23
34
  end
24
35
 
25
36
  context 'when the options are not valid mongo client options' do
26
37
 
27
38
  let(:persistence_context) do
28
- Band.with(invalid_options) do |klass|
39
+ TestModel.with(invalid_options) do |klass|
29
40
  klass.persistence_context
30
41
  end
31
42
  end
@@ -40,7 +51,7 @@ describe Mongoid::Clients::Options do
40
51
 
41
52
  it 'clears the persistence context' do
42
53
  begin; persistence_context; rescue Mongoid::Errors::InvalidPersistenceOption; end
43
- expect(Band.persistence_context).to eq(Mongoid::PersistenceContext.new(Band))
54
+ expect(TestModel.persistence_context).to eq(Mongoid::PersistenceContext.new(TestModel))
44
55
  end
45
56
  end
46
57
 
@@ -66,14 +77,14 @@ describe Mongoid::Clients::Options do
66
77
  context 'when passing a block', if: testing_locally? do
67
78
 
68
79
  let!(:connections_before) do
69
- Band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
80
+ TestModel.mongo_client.database.command(serverStatus: 1).first['connections']['current']
70
81
  end
71
82
 
72
83
  let!(:connections_and_cluster_during) do
73
84
  connections = nil
74
- cluster = Band.with(options) do |klass|
85
+ cluster = TestModel.with(options) do |klass|
75
86
  klass.where(name: 'emily').to_a
76
- connections = Band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
87
+ connections = TestModel.mongo_client.database.command(serverStatus: 1).first['connections']['current']
77
88
  end
78
89
  [ connections, cluster ]
79
90
  end
@@ -87,15 +98,15 @@ describe Mongoid::Clients::Options do
87
98
  end
88
99
 
89
100
  let(:connections_after) do
90
- Band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
101
+ TestModel.mongo_client.database.command(serverStatus: 1).first['connections']['current']
91
102
  end
92
103
 
93
104
  let!(:cluster_before) do
94
- Band.persistence_context.cluster
105
+ TestModel.persistence_context.cluster
95
106
  end
96
107
 
97
108
  let(:cluster_after) do
98
- Band.persistence_context.cluster
109
+ TestModel.persistence_context.cluster
99
110
  end
100
111
 
101
112
  context 'when the options create a new cluster' do
@@ -148,7 +159,7 @@ describe Mongoid::Clients::Options do
148
159
  end
149
160
 
150
161
  let(:persistence_context) do
151
- Band.with(client: :secondary) do |klass|
162
+ TestModel.with(client: :secondary) do |klass|
152
163
  klass.persistence_context
153
164
  end
154
165
  end
@@ -177,40 +188,25 @@ describe Mongoid::Clients::Options do
177
188
 
178
189
  context 'when returning a criteria' do
179
190
 
180
- shared_context 'applies secondary read preference' do
181
-
182
- let(:context_and_criteria) do
183
- collection = nil
184
- cxt = Band.with(read_secondary_option) do |klass|
185
- collection = klass.all.collection
186
- klass.persistence_context
187
- end
188
- [ cxt, collection ]
189
- end
190
-
191
- let(:persistence_context) do
192
- context_and_criteria[0]
193
- end
194
-
195
- let(:client) do
196
- context_and_criteria[1].client
197
- end
198
-
199
- it 'applies the options to the criteria client' do
200
- expect(client.options['read']).to eq('mode' => :secondary)
191
+ let(:context_and_criteria) do
192
+ collection = nil
193
+ cxt = TestModel.with(read: :secondary) do |klass|
194
+ collection = klass.all.collection
195
+ klass.persistence_context
201
196
  end
197
+ [ cxt, collection ]
202
198
  end
203
199
 
204
- context 'read: :secondary shorthand' do
205
- let(:read_secondary_option) { {read: :secondary} }
206
-
207
- it_behaves_like 'applies secondary read preference'
200
+ let(:persistence_context) do
201
+ context_and_criteria[0]
208
202
  end
209
203
 
210
- context 'read: {mode: :secondary}' do
211
- let(:read_secondary_option) { {read: {mode: :secondary}} }
204
+ let(:client) do
205
+ context_and_criteria[1].client
206
+ end
212
207
 
213
- it_behaves_like 'applies secondary read preference'
208
+ it 'applies the options to the criteria client' do
209
+ expect(client.options['read']).to eq(:secondary)
214
210
  end
215
211
  end
216
212
 
@@ -221,11 +217,11 @@ describe Mongoid::Clients::Options do
221
217
  100.times do |i|
222
218
  threads << Thread.new do
223
219
  if i % 2 == 0
224
- Band.with(collection: 'British') do |klass|
220
+ TestModel.with(collection: 'British') do |klass|
225
221
  klass.create(name: 'realised')
226
222
  end
227
223
  else
228
- Band.with(collection: 'American') do |klass|
224
+ TestModel.with(collection: 'American') do |klass|
229
225
  klass.create(name: 'realized')
230
226
  end
231
227
  end
@@ -235,13 +231,13 @@ describe Mongoid::Clients::Options do
235
231
  end
236
232
 
237
233
  let(:british_count) do
238
- Band.with(collection: 'British') do |klass|
234
+ TestModel.with(collection: 'British') do |klass|
239
235
  klass.all.count
240
236
  end
241
237
  end
242
238
 
243
239
  let(:american_count) do
244
- Band.with(collection: 'American') do |klass|
240
+ TestModel.with(collection: 'American') do |klass|
245
241
  klass.all.count
246
242
  end
247
243
  end
@@ -256,7 +252,7 @@ describe Mongoid::Clients::Options do
256
252
  context 'when passing a persistence context' do
257
253
 
258
254
  let(:instance) do
259
- Band.new
255
+ TestModel.new
260
256
  end
261
257
 
262
258
  let(:persistence_context) do
@@ -268,8 +264,8 @@ describe Mongoid::Clients::Options do
268
264
  let(:options) { { database: 'other' } }
269
265
 
270
266
  it 'sets the persistence context on the object' do
271
- Band.new.with(persistence_context) do |band_instance|
272
- expect(band_instance.persistence_context.options).to eq(persistence_context.options)
267
+ TestModel.new.with(persistence_context) do |model_instance|
268
+ expect(model_instance.persistence_context.options).to eq(persistence_context.options)
273
269
  end
274
270
  end
275
271
  end
@@ -283,12 +279,12 @@ describe Mongoid::Clients::Options do
283
279
  { database: 'other' }
284
280
  end
285
281
 
286
- let(:band) do
287
- Band.create
282
+ let(:test_model) do
283
+ TestModel.create
288
284
  end
289
285
 
290
286
  let(:persistence_context) do
291
- band.with(options) do |object|
287
+ test_model.with(options) do |object|
292
288
  object.persistence_context
293
289
  end
294
290
  end
@@ -298,13 +294,13 @@ describe Mongoid::Clients::Options do
298
294
  end
299
295
 
300
296
  it 'does not set the options on instance level' do
301
- expect(band.persistence_context.client.database.name).to eq('mongoid_test')
297
+ expect(test_model.persistence_context.client.database.name).to eq('mongoid_test')
302
298
  end
303
299
 
304
300
  context 'when the options are not valid mongo client options' do
305
301
 
306
302
  let(:persistence_context) do
307
- band.with(invalid_options) do |object|
303
+ test_model.with(invalid_options) do |object|
308
304
  object.persistence_context
309
305
  end
310
306
  end
@@ -319,7 +315,7 @@ describe Mongoid::Clients::Options do
319
315
 
320
316
  it 'clears the persistence context' do
321
317
  begin; persistence_context; rescue Mongoid::Errors::InvalidPersistenceOption; end
322
- expect(band.persistence_context).to eq(Mongoid::PersistenceContext.new(band))
318
+ expect(test_model.persistence_context).to eq(Mongoid::PersistenceContext.new(test_model))
323
319
  end
324
320
  end
325
321
 
@@ -337,7 +333,7 @@ describe Mongoid::Clients::Options do
337
333
  end
338
334
 
339
335
  let(:persistence_context) do
340
- band.with(client: :secondary) do |object|
336
+ test_model.with(client: :secondary) do |object|
341
337
  object.persistence_context
342
338
  end
343
339
  end
@@ -351,14 +347,14 @@ describe Mongoid::Clients::Options do
351
347
  context 'when passing a block', if: testing_locally? do
352
348
 
353
349
  let!(:connections_before) do
354
- band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
350
+ test_model.mongo_client.database.command(serverStatus: 1).first['connections']['current']
355
351
  end
356
352
 
357
- let(:connections_and_cluster_during) do
353
+ let!(:connections_and_cluster_during) do
358
354
  connections = nil
359
- cluster = band.with(options) do |b|
355
+ cluster = test_model.with(options) do |b|
360
356
  b.reload
361
- connections = band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
357
+ connections = test_model.mongo_client.database.command(serverStatus: 1).first['connections']['current']
362
358
  b.persistence_context.cluster
363
359
  end
364
360
  [ connections, cluster ]
@@ -373,15 +369,15 @@ describe Mongoid::Clients::Options do
373
369
  end
374
370
 
375
371
  let(:connections_after) do
376
- band.mongo_client.database.command(serverStatus: 1).first['connections']['current']
372
+ test_model.mongo_client.database.command(serverStatus: 1).first['connections']['current']
377
373
  end
378
374
 
379
375
  let!(:cluster_before) do
380
- band.persistence_context.cluster
376
+ test_model.persistence_context.cluster
381
377
  end
382
378
 
383
379
  let(:cluster_after) do
384
- band.persistence_context.cluster
380
+ test_model.persistence_context.cluster
385
381
  end
386
382
 
387
383
  context 'when the options create a new cluster' do
@@ -396,7 +392,7 @@ describe Mongoid::Clients::Options do
396
392
  end
397
393
 
398
394
  it 'disconnects the new cluster when the block exits' do
399
- expect(connections_after).to eq(connections_before)
395
+ expect(connections_before).to eq(connections_after)
400
396
  end
401
397
  end
402
398
 
@@ -431,15 +427,15 @@ describe Mongoid::Clients::Options do
431
427
  before do
432
428
  threads = []
433
429
  100.times do |i|
434
- band = Band.create
430
+ test_model = TestModel.create
435
431
  threads << Thread.new do
436
432
  if i % 2 == 0
437
- band.with(collection: 'British') do |b|
433
+ test_model.with(collection: 'British') do |b|
438
434
  b.name = 'realised'
439
435
  b.upsert
440
436
  end
441
437
  else
442
- band.with(collection: 'American') do |b|
438
+ test_model.with(collection: 'American') do |b|
443
439
  b.name = 'realized'
444
440
  b.upsert
445
441
  end
@@ -450,13 +446,13 @@ describe Mongoid::Clients::Options do
450
446
  end
451
447
 
452
448
  let(:british_count) do
453
- Band.with(collection: 'British') do |klass|
449
+ TestModel.with(collection: 'British') do |klass|
454
450
  klass.all.count
455
451
  end
456
452
  end
457
453
 
458
454
  let(:american_count) do
459
- Band.with(collection: 'British') do |klass|
455
+ TestModel.with(collection: 'British') do |klass|
460
456
  klass.all.count
461
457
  end
462
458
  end
@@ -471,7 +467,7 @@ describe Mongoid::Clients::Options do
471
467
  context 'when passing a persistence context' do
472
468
 
473
469
  let(:persistence_context) do
474
- Band.with(options) do |klass|
470
+ TestModel.with(options) do |klass|
475
471
  klass.persistence_context
476
472
  end
477
473
  end
@@ -479,8 +475,8 @@ describe Mongoid::Clients::Options do
479
475
  let(:options) { { database: 'other' } }
480
476
 
481
477
  it 'sets the persistence context on the object' do
482
- Band.with(persistence_context) do |band_class|
483
- expect(band_class.persistence_context.options).to eq(persistence_context.options)
478
+ TestModel.with(persistence_context) do |test_model_class|
479
+ expect(test_model_class.persistence_context.options).to eq(persistence_context.options)
484
480
  end
485
481
  end
486
482
  end