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,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Bindings::Embedded::Many do
3
+ describe Mongoid::Association::Embedded::EmbedsMany::Binding do
4
4
 
5
5
  let(:person) do
6
6
  Person.new
@@ -14,14 +14,14 @@ describe Mongoid::Relations::Bindings::Embedded::Many do
14
14
  [ address ]
15
15
  end
16
16
 
17
- let(:metadata) do
17
+ let(:association) do
18
18
  Person.relations["addresses"]
19
19
  end
20
20
 
21
21
  describe "#bind_one" do
22
22
 
23
23
  let(:binding) do
24
- described_class.new(person, target, metadata)
24
+ described_class.new(person, target, association)
25
25
  end
26
26
 
27
27
  context "when the document is bindable" do
@@ -1,31 +1,31 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Builders::Embedded::Many do
3
+ describe Mongoid::Association::Embedded::EmbedsMany::Buildable do
4
4
 
5
5
  let(:base) do
6
6
  double
7
7
  end
8
8
 
9
- let(:builder) do
10
- described_class.new(base, metadata, object)
9
+ let(:options) do
10
+ { }
11
11
  end
12
12
 
13
13
  describe "#build" do
14
14
 
15
- context "when passed an array of documents" do
15
+ let(:documents) do
16
+ association.build(base, object)
17
+ end
16
18
 
17
- let(:metadata) do
18
- double(klass: Address, name: :addresses)
19
- end
19
+ let(:association) do
20
+ Mongoid::Association::Embedded::EmbedsMany.new(Person, :addresses, options)
21
+ end
22
+
23
+ context "when passed an array of documents" do
20
24
 
21
25
  let(:object) do
22
26
  [ Address.new(city: "London") ]
23
27
  end
24
28
 
25
- let(:documents) do
26
- builder.build
27
- end
28
-
29
29
  it "returns an array of documents" do
30
30
  expect(documents).to eq(object)
31
31
  end
@@ -33,18 +33,10 @@ describe Mongoid::Relations::Builders::Embedded::Many do
33
33
 
34
34
  context "when the array is empty" do
35
35
 
36
- let(:metadata) do
37
- double(klass: Address, name: :addresses)
38
- end
39
-
40
36
  let(:object) do
41
37
  []
42
38
  end
43
39
 
44
- let(:documents) do
45
- builder.build
46
- end
47
-
48
40
  it "returns an empty array" do
49
41
  expect(documents).to eq(object)
50
42
  end
@@ -52,16 +44,8 @@ describe Mongoid::Relations::Builders::Embedded::Many do
52
44
 
53
45
  context "when passed nil" do
54
46
 
55
- let(:metadata) do
56
- double(klass: Address, name: :addresses)
57
- end
58
-
59
- let(:builder) do
60
- described_class.new(nil, metadata, nil)
61
- end
62
-
63
- let(:documents) do
64
- builder.build
47
+ let(:object) do
48
+ nil
65
49
  end
66
50
 
67
51
  it "returns an empty array" do
@@ -71,18 +55,10 @@ describe Mongoid::Relations::Builders::Embedded::Many do
71
55
 
72
56
  context "when no type is in the object" do
73
57
 
74
- let(:metadata) do
75
- double(klass: Address, name: :addresses)
76
- end
77
-
78
58
  let(:object) do
79
59
  [ { "city" => "London" }, { "city" => "Shanghai" } ]
80
60
  end
81
61
 
82
- let(:documents) do
83
- builder.build
84
- end
85
-
86
62
  it "returns an array of documents" do
87
63
  expect(documents).to be_a_kind_of(Array)
88
64
  end
@@ -99,21 +75,17 @@ describe Mongoid::Relations::Builders::Embedded::Many do
99
75
 
100
76
  context "when a type is in the object" do
101
77
 
102
- let(:metadata) do
103
- double(klass: Shape, name: :shapes)
78
+ let(:association) do
79
+ Mongoid::Association::Embedded::EmbedsMany.new(Person, :shapes)
104
80
  end
105
81
 
106
82
  let(:object) do
107
83
  [
108
- { "_type" => "Circle", "radius" => 100 },
109
- { "_type" => "Square", "width" => 50 }
84
+ { "_type" => "Circle", "radius" => 100 },
85
+ { "_type" => "Square", "width" => 50 }
110
86
  ]
111
87
  end
112
88
 
113
- let(:documents) do
114
- builder.build
115
- end
116
-
117
89
  it "returns an array of documents" do
118
90
  expect(documents).to be_a_kind_of(Array)
119
91
  end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Embedded::Many do
3
+ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
4
4
 
5
5
  [ :<<, :push ].each do |method|
6
6
 
@@ -40,8 +40,8 @@ describe Mongoid::Relations::Embedded::Many do
40
40
  expect(address._parent).to eq(person)
41
41
  end
42
42
 
43
- it "sets the metadata on the child" do
44
- expect(address.__metadata).to_not be_nil
43
+ it "sets the association metadata on the child" do
44
+ expect(address._association).to_not be_nil
45
45
  end
46
46
 
47
47
  it "sets the index on the child" do
@@ -52,6 +52,21 @@ describe Mongoid::Relations::Embedded::Many do
52
52
  expect(added).to eq(person.addresses)
53
53
  end
54
54
 
55
+ context 'when the child is already related to the parent' do
56
+
57
+ let(:message) do
58
+ Message.new(person: person)
59
+ end
60
+
61
+ before do
62
+ person.messages << message
63
+ end
64
+
65
+ it "appends only once to the target" do
66
+ expect(person.messages).to eq([ message ])
67
+ end
68
+ end
69
+
55
70
  context "with a limiting default scope" do
56
71
 
57
72
  context "when the document matches the scope" do
@@ -65,7 +80,7 @@ describe Mongoid::Relations::Embedded::Many do
65
80
  end
66
81
 
67
82
  it "appends to the target" do
68
- expect(person.appointments.target).to eq([ active ])
83
+ expect(person.appointments._target).to eq([ active ])
69
84
  end
70
85
 
71
86
  it "appends to the _unscoped" do
@@ -84,7 +99,7 @@ describe Mongoid::Relations::Embedded::Many do
84
99
  end
85
100
 
86
101
  it "doesn't append to the target" do
87
- expect(person.appointments.target).to_not eq([ inactive ])
102
+ expect(person.appointments._target).to_not eq([ inactive ])
88
103
  end
89
104
 
90
105
  it "appends to the _unscoped" do
@@ -180,8 +195,8 @@ describe Mongoid::Relations::Embedded::Many do
180
195
  expect(child_role._parent).to eq(parent_role)
181
196
  end
182
197
 
183
- it "sets the metadata on the child" do
184
- expect(child_role.__metadata).to_not be_nil
198
+ it "sets the association metadata on the child" do
199
+ expect(child_role._association).to_not be_nil
185
200
  end
186
201
 
187
202
  it "sets the index on the child" do
@@ -221,21 +236,21 @@ describe Mongoid::Relations::Embedded::Many do
221
236
  context "assign parent first" do
222
237
  before do
223
238
  message.person = person
224
- message.receviers.send(method, person)
239
+ message.receivers.send(method, person)
225
240
  end
226
241
 
227
242
  it "appends to the relation array" do
228
- expect(message.receviers).to include(person)
243
+ expect(message.receivers).to include(person)
229
244
  end
230
245
  end
231
246
 
232
247
  context "not assign parent" do
233
248
  before do
234
- message.receviers.send(method, person)
249
+ message.receivers.send(method, person)
235
250
  end
236
251
 
237
252
  it "appends to the relation array" do
238
- expect(message.receviers).to include(person)
253
+ expect(message.receivers).to include(person)
239
254
  end
240
255
  end
241
256
  end
@@ -282,8 +297,8 @@ describe Mongoid::Relations::Embedded::Many do
282
297
  expect(address._parent).to eq(person)
283
298
  end
284
299
 
285
- it "sets the metadata on the child" do
286
- expect(address.__metadata).to_not be_nil
300
+ it "sets the association metadata on the child" do
301
+ expect(address._association).to_not be_nil
287
302
  end
288
303
 
289
304
  it "sets the index on the child" do
@@ -433,8 +448,8 @@ describe Mongoid::Relations::Embedded::Many do
433
448
 
434
449
  let(:addresses) do
435
450
  [
436
- Address.new(street: "1st St"),
437
- Address.new(street: "2nd St")
451
+ Address.new(street: "1st St"),
452
+ Address.new(street: "2nd St")
438
453
  ]
439
454
  end
440
455
 
@@ -651,8 +666,8 @@ describe Mongoid::Relations::Embedded::Many do
651
666
  expect(child_role._parent).to eq(parent_role)
652
667
  end
653
668
 
654
- it "sets the metadata on the child" do
655
- expect(child_role.__metadata).to_not be_nil
669
+ it "sets the association metadata on the child" do
670
+ expect(child_role._association).to_not be_nil
656
671
  end
657
672
 
658
673
  it "sets the index on the child" do
@@ -1028,8 +1043,8 @@ describe Mongoid::Relations::Embedded::Many do
1028
1043
  expect(address._parent).to eq(person)
1029
1044
  end
1030
1045
 
1031
- it "sets the metadata on the child" do
1032
- expect(address.__metadata).to_not be_nil
1046
+ it "sets the association metadata on the child" do
1047
+ expect(address._association).to_not be_nil
1033
1048
  end
1034
1049
 
1035
1050
  it "sets the index on the child" do
@@ -1071,8 +1086,8 @@ describe Mongoid::Relations::Embedded::Many do
1071
1086
  expect(child_role._parent).to eq(parent_role)
1072
1087
  end
1073
1088
 
1074
- it "sets the metadata on the child" do
1075
- expect(child_role.__metadata).to_not be_nil
1089
+ it "sets the association metadata on the child" do
1090
+ expect(child_role._association).to_not be_nil
1076
1091
  end
1077
1092
 
1078
1093
  it "sets the index on the child" do
@@ -1092,9 +1107,9 @@ describe Mongoid::Relations::Embedded::Many do
1092
1107
 
1093
1108
  let(:address) do
1094
1109
  person.addresses.send(
1095
- method,
1096
- street: "Bond",
1097
- locations_attributes: { "1" => { "name" => "Home" } }
1110
+ method,
1111
+ street: "Bond",
1112
+ locations_attributes: { "1" => { "name" => "Home" } }
1098
1113
  )
1099
1114
  end
1100
1115
 
@@ -1116,35 +1131,6 @@ describe Mongoid::Relations::Embedded::Many do
1116
1131
  end
1117
1132
  end
1118
1133
 
1119
- describe ".builder" do
1120
-
1121
- let(:base) do
1122
- Person.new
1123
- end
1124
-
1125
- let(:target) do
1126
- [ address ]
1127
- end
1128
-
1129
- let(:metadata) do
1130
- Person.relations["addresses"]
1131
- end
1132
-
1133
- let(:relation) do
1134
- described_class.new(base, target, metadata)
1135
- end
1136
-
1137
- let(:document) do
1138
- Address.new
1139
- end
1140
-
1141
- it "returns the many builder" do
1142
- expect(
1143
- described_class.builder(base, metadata, document)
1144
- ).to be_a(Mongoid::Relations::Builders::Embedded::Many)
1145
- end
1146
- end
1147
-
1148
1134
  describe "#clear" do
1149
1135
 
1150
1136
  context "when the parent has been persisted" do
@@ -1260,8 +1246,8 @@ describe Mongoid::Relations::Embedded::Many do
1260
1246
  expect(address._parent).to eq(person)
1261
1247
  end
1262
1248
 
1263
- it "sets the metadata on the child" do
1264
- expect(address.__metadata).to_not be_nil
1249
+ it "sets the association metadata on the child" do
1250
+ expect(address._association).to_not be_nil
1265
1251
  end
1266
1252
 
1267
1253
  it "sets the index on the child" do
@@ -1367,8 +1353,8 @@ describe Mongoid::Relations::Embedded::Many do
1367
1353
  expect(child_role._parent).to eq(parent_role)
1368
1354
  end
1369
1355
 
1370
- it "sets the metadata on the child" do
1371
- expect(child_role.__metadata).to_not be_nil
1356
+ it "sets the association metadata on the child" do
1357
+ expect(child_role._association).to_not be_nil
1372
1358
  end
1373
1359
 
1374
1360
  it "sets the index on the child" do
@@ -1474,8 +1460,8 @@ describe Mongoid::Relations::Embedded::Many do
1474
1460
  expect(address._parent).to eq(person)
1475
1461
  end
1476
1462
 
1477
- it "sets the metadata on the child" do
1478
- expect(address.__metadata).to_not be_nil
1463
+ it "sets the association metadata on the child" do
1464
+ expect(address._association).to_not be_nil
1479
1465
  end
1480
1466
 
1481
1467
  it "sets the index on the child" do
@@ -1573,8 +1559,8 @@ describe Mongoid::Relations::Embedded::Many do
1573
1559
  expect(address._parent).to eq(person)
1574
1560
  end
1575
1561
 
1576
- it "sets the metadata on the child" do
1577
- expect(address.__metadata).to_not be_nil
1562
+ it "sets the association metadata on the child" do
1563
+ expect(address._association).to_not be_nil
1578
1564
  end
1579
1565
 
1580
1566
  it "sets the index on the child" do
@@ -1596,10 +1582,10 @@ describe Mongoid::Relations::Embedded::Many do
1596
1582
 
1597
1583
  context 'when the presence of the embedded relation is validated' do
1598
1584
 
1599
- before do
1600
- class Book
1601
- validates :pages, presence: true
1602
- end
1585
+ around do |example|
1586
+ Book.validates :pages, presence: true
1587
+ example.run
1588
+ Book.reset_callbacks(:validate)
1603
1589
  end
1604
1590
 
1605
1591
  let(:book) do
@@ -1805,8 +1791,8 @@ describe Mongoid::Relations::Embedded::Many do
1805
1791
 
1806
1792
  let!(:deleted) do
1807
1793
  person.addresses.send(
1808
- method,
1809
- { street: "Bond" }
1794
+ method,
1795
+ { street: "Bond" }
1810
1796
  )
1811
1797
  end
1812
1798
 
@@ -1853,8 +1839,8 @@ describe Mongoid::Relations::Embedded::Many do
1853
1839
 
1854
1840
  let!(:deleted) do
1855
1841
  person.addresses.send(
1856
- method,
1857
- { street: "Bond" }
1842
+ method,
1843
+ { street: "Bond" }
1858
1844
  )
1859
1845
  end
1860
1846
 
@@ -1939,8 +1925,8 @@ describe Mongoid::Relations::Embedded::Many do
1939
1925
 
1940
1926
  let!(:deleted) do
1941
1927
  person.addresses.send(
1942
- method,
1943
- conditions: { street: "Bond" }
1928
+ method,
1929
+ conditions: { street: "Bond" }
1944
1930
  )
1945
1931
  end
1946
1932
 
@@ -1986,13 +1972,6 @@ describe Mongoid::Relations::Embedded::Many do
1986
1972
  end
1987
1973
  end
1988
1974
 
1989
- describe ".foreign_key_suffix" do
1990
-
1991
- it "returns nil" do
1992
- expect(described_class.foreign_key_suffix).to be_nil
1993
- end
1994
- end
1995
-
1996
1975
  describe "#exists?" do
1997
1976
 
1998
1977
  let!(:person) do
@@ -2177,27 +2156,28 @@ describe Mongoid::Relations::Embedded::Many do
2177
2156
  end
2178
2157
  end
2179
2158
 
2180
- context "when the child belongs to another document" do
2181
-
2182
- let(:product) do
2183
- Product.create
2184
- end
2185
-
2186
- let(:purchase) do
2187
- Purchase.create
2188
- end
2189
-
2190
- let(:line_item) do
2191
- purchase.line_items.find_or_create_by(
2192
- product_id: product.id,
2193
- product_type: product.class.name
2194
- )
2195
- end
2196
-
2197
- it "properly creates the document" do
2198
- expect(line_item.product).to eq(product)
2199
- end
2200
- end
2159
+ # todo: why should this pass?
2160
+ # context "when the child belongs to another document" do
2161
+ #
2162
+ # let(:product) do
2163
+ # Product.create
2164
+ # end
2165
+ #
2166
+ # let(:purchase) do
2167
+ # Purchase.create
2168
+ # end
2169
+ #
2170
+ # let(:line_item) do
2171
+ # purchase.line_items.find_or_create_by(
2172
+ # product_id: product.id,
2173
+ # product_type: product.class.name
2174
+ # )
2175
+ # end
2176
+ #
2177
+ # it "properly creates the document" do
2178
+ # expect(line_item.product).to eq(product)
2179
+ # end
2180
+ # end
2201
2181
  end
2202
2182
 
2203
2183
  describe "#find_or_create_by!" do
@@ -2251,27 +2231,28 @@ describe Mongoid::Relations::Embedded::Many do
2251
2231
  end
2252
2232
  end
2253
2233
 
2254
- context "when the child belongs to another document" do
2255
-
2256
- let(:product) do
2257
- Product.create
2258
- end
2259
-
2260
- let(:purchase) do
2261
- Purchase.create
2262
- end
2263
-
2264
- let(:line_item) do
2265
- purchase.line_items.find_or_create_by(
2266
- product_id: product.id,
2267
- product_type: product.class.name
2268
- )
2269
- end
2270
-
2271
- it "properly creates the document" do
2272
- expect(line_item.product).to eq(product)
2273
- end
2274
- end
2234
+ # todo: why should this pass?
2235
+ # context "when the child belongs to another document" do
2236
+ #
2237
+ # let(:product) do
2238
+ # Product.create
2239
+ # end
2240
+ #
2241
+ # let(:purchase) do
2242
+ # Purchase.create
2243
+ # end
2244
+ #
2245
+ # let(:line_item) do
2246
+ # purchase.line_items.find_or_create_by(
2247
+ # product_id: product.id,
2248
+ # product_type: product.class.name
2249
+ # )
2250
+ # end
2251
+ #
2252
+ # it "properly creates the document" do
2253
+ # expect(line_item.product).to eq(product)
2254
+ # end
2255
+ # end
2275
2256
  end
2276
2257
 
2277
2258
  describe "#find_or_initialize_by" do
@@ -2317,13 +2298,6 @@ describe Mongoid::Relations::Embedded::Many do
2317
2298
  end
2318
2299
  end
2319
2300
 
2320
- describe ".macro" do
2321
-
2322
- it "returns embeds_many" do
2323
- expect(described_class.macro).to eq(:embeds_many)
2324
- end
2325
- end
2326
-
2327
2301
  describe "#max" do
2328
2302
 
2329
2303
  let(:person) do
@@ -2388,17 +2362,17 @@ describe Mongoid::Relations::Embedded::Many do
2388
2362
 
2389
2363
  let!(:address_one) do
2390
2364
  person.addresses.create(
2391
- street: "Market",
2392
- state: "CA",
2393
- services: [ "1", "2" ]
2365
+ street: "Market",
2366
+ state: "CA",
2367
+ services: [ "1", "2" ]
2394
2368
  )
2395
2369
  end
2396
2370
 
2397
2371
  let!(:address_two) do
2398
2372
  person.addresses.create(
2399
- street: "Madison",
2400
- state: "NY",
2401
- services: [ "1", "2" ]
2373
+ street: "Madison",
2374
+ state: "NY",
2375
+ services: [ "1", "2" ]
2402
2376
  )
2403
2377
  end
2404
2378
 
@@ -2527,19 +2501,6 @@ describe Mongoid::Relations::Embedded::Many do
2527
2501
  end
2528
2502
  end
2529
2503
 
2530
- describe ".nested_builder" do
2531
-
2532
- let(:metadata) do
2533
- Person.relations["addresses"]
2534
- end
2535
-
2536
- it "returns the many nested builder class" do
2537
- expect(
2538
- described_class.nested_builder(metadata, {}, {})
2539
- ).to be_a(Mongoid::Relations::Builders::NestedAttributes::Many)
2540
- end
2541
- end
2542
-
2543
2504
  describe "#pop" do
2544
2505
 
2545
2506
  let(:person) do
@@ -2583,25 +2544,6 @@ describe Mongoid::Relations::Embedded::Many do
2583
2544
  person.addresses.create(street: "hermannstr")
2584
2545
  end
2585
2546
 
2586
- context "when the number is zero" do
2587
-
2588
- let!(:popped) do
2589
- person.addresses.pop(0)
2590
- end
2591
-
2592
- it "returns an empty array" do
2593
- expect(popped).to eq([])
2594
- end
2595
-
2596
- it "does not remove the document from the relation" do
2597
- expect(person.addresses).to eq([ address_one, address_two ])
2598
- end
2599
-
2600
- it "does not persist the pop" do
2601
- expect(person.reload.addresses).to eq([ address_one, address_two ])
2602
- end
2603
- end
2604
-
2605
2547
  context "when the number is not larger than the relation" do
2606
2548
 
2607
2549
  let!(:popped) do
@@ -2659,125 +2601,6 @@ describe Mongoid::Relations::Embedded::Many do
2659
2601
  end
2660
2602
  end
2661
2603
 
2662
- describe "#shift" do
2663
-
2664
- let(:person) do
2665
- Person.create
2666
- end
2667
-
2668
- context "when no argument is provided" do
2669
-
2670
- let!(:address_one) do
2671
- person.addresses.create(street: "sonnenallee")
2672
- end
2673
-
2674
- let!(:address_two) do
2675
- person.addresses.create(street: "hermannstr")
2676
- end
2677
-
2678
- let!(:shifted) do
2679
- person.addresses.shift
2680
- end
2681
-
2682
- it "returns the shifted document" do
2683
- expect(shifted).to eq(address_one)
2684
- end
2685
-
2686
- it "removes the document from the relation" do
2687
- expect(person.addresses).to eq([ address_two ])
2688
- end
2689
-
2690
- it "persists the shift" do
2691
- expect(person.reload.addresses).to eq([ address_two ])
2692
- end
2693
- end
2694
-
2695
- context "when an integer is provided" do
2696
-
2697
- let!(:address_one) do
2698
- person.addresses.create(street: "sonnenallee")
2699
- end
2700
-
2701
- let!(:address_two) do
2702
- person.addresses.create(street: "hermannstr")
2703
- end
2704
-
2705
- context "when the number is zero" do
2706
-
2707
- let!(:shifted) do
2708
- person.addresses.shift(0)
2709
- end
2710
-
2711
- it "returns an empty array" do
2712
- expect(shifted).to eq([])
2713
- end
2714
-
2715
- it "does not remove the document from the relation" do
2716
- expect(person.addresses).to eq([ address_one, address_two ])
2717
- end
2718
-
2719
- it "does not persist the shift" do
2720
- expect(person.reload.addresses).to eq([ address_one, address_two ])
2721
- end
2722
- end
2723
-
2724
- context "when the number is not larger than the relation" do
2725
-
2726
- let!(:shifted) do
2727
- person.addresses.shift(2)
2728
- end
2729
-
2730
- it "returns the shifted documents" do
2731
- expect(shifted).to eq([ address_one, address_two ])
2732
- end
2733
-
2734
- it "removes the document from the relation" do
2735
- expect(person.addresses).to be_empty
2736
- end
2737
-
2738
- it "persists the shift" do
2739
- expect(person.reload.addresses).to be_empty
2740
- end
2741
- end
2742
-
2743
- context "when the number is larger than the relation" do
2744
-
2745
- let!(:shifted) do
2746
- person.addresses.shift(4)
2747
- end
2748
-
2749
- it "returns the shifted documents" do
2750
- expect(shifted).to eq([ address_one, address_two ])
2751
- end
2752
-
2753
- it "removes the document from the relation" do
2754
- expect(person.addresses).to be_empty
2755
- end
2756
-
2757
- it "persists the shift" do
2758
- expect(person.reload.addresses).to be_empty
2759
- end
2760
- end
2761
- end
2762
-
2763
- context "when the relation is empty" do
2764
-
2765
- context "when providing no number" do
2766
-
2767
- it "returns nil" do
2768
- expect(person.addresses.shift).to be_nil
2769
- end
2770
- end
2771
-
2772
- context "when providing a number" do
2773
-
2774
- it "returns nil" do
2775
- expect(person.addresses.shift(2)).to be_nil
2776
- end
2777
- end
2778
- end
2779
- end
2780
-
2781
2604
  describe "#scoped" do
2782
2605
 
2783
2606
  let(:person) do
@@ -2817,7 +2640,7 @@ describe Mongoid::Relations::Embedded::Many do
2817
2640
  end
2818
2641
  end
2819
2642
 
2820
- Mongoid::Relations::Embedded::Many.public_instance_methods.each do |method|
2643
+ Mongoid::Association::Embedded::EmbedsMany::Proxy.public_instance_methods.each do |method|
2821
2644
 
2822
2645
  context "when checking #{method}" do
2823
2646
 
@@ -2911,8 +2734,8 @@ describe Mongoid::Relations::Embedded::Many do
2911
2734
 
2912
2735
  before do
2913
2736
  person.addresses.
2914
- where(street: "Hobrecht").
2915
- update_all(number: 26, post_code: "12437")
2737
+ where(street: "Hobrecht").
2738
+ update_all(number: 26, post_code: "12437")
2916
2739
  end
2917
2740
 
2918
2741
  it "resets the matching dirty flags" do
@@ -2934,25 +2757,6 @@ describe Mongoid::Relations::Embedded::Many do
2934
2757
  end
2935
2758
  end
2936
2759
 
2937
- describe ".valid_options" do
2938
-
2939
- it "returns the valid options" do
2940
- expect(described_class.valid_options).to eq(
2941
- [
2942
- :as, :cascade_callbacks, :cyclic, :order,
2943
- :store_as, :before_add, :after_add, :before_remove, :after_remove
2944
- ]
2945
- )
2946
- end
2947
- end
2948
-
2949
- describe ".validation_default" do
2950
-
2951
- it "returns true" do
2952
- expect(described_class.validation_default).to be true
2953
- end
2954
- end
2955
-
2956
2760
  context "when deeply embedding documents" do
2957
2761
 
2958
2762
  context "when updating the bottom level" do
@@ -3823,9 +3627,9 @@ describe Mongoid::Relations::Embedded::Many do
3823
3627
 
3824
3628
  let!(:person) do
3825
3629
  Person.create(
3826
- addresses: [
3827
- { locations: [{ name: "home" }]}
3828
- ]
3630
+ addresses: [
3631
+ { locations: [{ name: "home" }]}
3632
+ ]
3829
3633
  )
3830
3634
  end
3831
3635
 
@@ -3837,9 +3641,9 @@ describe Mongoid::Relations::Embedded::Many do
3837
3641
 
3838
3642
  before do
3839
3643
  from_db.update_attributes(
3840
- addresses: [
3841
- { locations: [{ name: "work" }]}
3842
- ]
3644
+ addresses: [
3645
+ { locations: [{ name: "work" }]}
3646
+ ]
3843
3647
  )
3844
3648
  end
3845
3649
 
@@ -3900,8 +3704,8 @@ describe Mongoid::Relations::Embedded::Many do
3900
3704
 
3901
3705
  before do
3902
3706
  person.update_attributes(
3903
- appointments: [ appointment_one.as_document, appointment_two.as_document ],
3904
- symptoms: [ symptom_one.as_document, symptom_two.as_document ]
3707
+ appointments: [ appointment_one.as_document, appointment_two.as_document ],
3708
+ symptoms: [ symptom_one.as_document, symptom_two.as_document ]
3905
3709
  )
3906
3710
  end
3907
3711
 
@@ -3984,7 +3788,7 @@ describe Mongoid::Relations::Embedded::Many do
3984
3788
  end
3985
3789
  end
3986
3790
 
3987
- context "#delete, or #clear, or #pop, or #shift with before_remove callback" do
3791
+ context "#delete or #clear with before_remove callback" do
3988
3792
 
3989
3793
  let(:artist) do
3990
3794
  Artist.new
@@ -4030,81 +3834,35 @@ describe Mongoid::Relations::Embedded::Many do
4030
3834
  end
4031
3835
  end
4032
3836
 
4033
- describe "#pop" do
4034
-
4035
- before do
4036
- artist.songs.pop
4037
- end
4038
-
4039
- it "executes the callback" do
4040
- artist.songs.pop
4041
- expect(artist.before_remove_embedded_called).to be true
4042
- end
4043
- end
4044
-
4045
- describe "#shift" do
4046
-
4047
- before do
4048
- artist.songs.shift
4049
- end
4050
-
4051
- it "executes the callback" do
4052
- artist.songs.shift
4053
- expect(artist.before_remove_embedded_called).to be true
4054
- end
4055
- end
4056
- end
4057
-
4058
- context "when errors are raised" do
4059
-
4060
- before do
4061
- expect(artist).to receive(:before_remove_song).and_raise
4062
- end
4063
-
4064
- describe "#delete" do
4065
-
4066
- it "does not remove the document from the relation" do
4067
- begin; artist.songs.delete(song); rescue; end
4068
- expect(artist.songs).to eq([ song ])
4069
- end
4070
- end
4071
-
4072
- describe "#clear" do
3837
+ context "when errors are raised" do
4073
3838
 
4074
3839
  before do
4075
- begin; artist.songs.clear; rescue; end
3840
+ expect(artist).to receive(:before_remove_song).and_raise
4076
3841
  end
4077
3842
 
4078
- it "removes the documents from the relation" do
4079
- expect(artist.songs).to eq([ song ])
4080
- end
4081
- end
3843
+ describe "#delete" do
4082
3844
 
4083
- describe "#pop" do
4084
-
4085
- before do
4086
- begin; artist.songs.pop; rescue; end
4087
- end
4088
-
4089
- it "should remove from collection" do
4090
- expect(artist.songs).to eq([ song ])
3845
+ it "does not remove the document from the relation" do
3846
+ begin; artist.songs.delete(song); rescue; end
3847
+ expect(artist.songs).to eq([ song ])
3848
+ end
4091
3849
  end
4092
- end
4093
3850
 
4094
- describe "#shift" do
3851
+ describe "#clear" do
4095
3852
 
4096
- before do
4097
- begin; artist.songs.shift; rescue; end
4098
- end
3853
+ before do
3854
+ begin; artist.songs.clear; rescue; end
3855
+ end
4099
3856
 
4100
- it "should remove from collection" do
4101
- expect(artist.songs).to eq([ song ])
3857
+ it "removes the documents from the relation" do
3858
+ expect(artist.songs).to eq([ song ])
3859
+ end
4102
3860
  end
4103
3861
  end
4104
3862
  end
4105
3863
  end
4106
3864
 
4107
- context "#delete, or #clear, or #pop, or #shift with after_remove callback" do
3865
+ context "#delete or #clear with after_remove callback" do
4108
3866
 
4109
3867
  let(:artist) do
4110
3868
  Artist.new
@@ -4141,30 +3899,6 @@ describe Mongoid::Relations::Embedded::Many do
4141
3899
  expect(artist.after_remove_embedded_called).to be true
4142
3900
  end
4143
3901
  end
4144
-
4145
- describe "#pop" do
4146
-
4147
- before do
4148
- artist.labels.pop
4149
- end
4150
-
4151
- it "executes the callback" do
4152
- artist.labels.pop
4153
- expect(artist.after_remove_embedded_called).to be true
4154
- end
4155
- end
4156
-
4157
- describe "#shift" do
4158
-
4159
- before do
4160
- artist.labels.shift
4161
- end
4162
-
4163
- it "executes the callback" do
4164
- artist.labels.shift
4165
- expect(artist.after_remove_embedded_called).to be true
4166
- end
4167
- end
4168
3902
  end
4169
3903
 
4170
3904
  context "when errors are raised" do
@@ -4194,28 +3928,6 @@ describe Mongoid::Relations::Embedded::Many do
4194
3928
  expect(artist.labels).to be_empty
4195
3929
  end
4196
3930
  end
4197
-
4198
- describe "#pop" do
4199
-
4200
- before do
4201
- begin; artist.labels.pop; rescue; end
4202
- end
4203
-
4204
- it "should remove from collection" do
4205
- expect(artist.labels).to be_empty
4206
- end
4207
- end
4208
-
4209
- describe "#shift" do
4210
-
4211
- before do
4212
- begin; artist.labels.shift; rescue; end
4213
- end
4214
-
4215
- it "should remove from collection" do
4216
- expect(artist.labels).to be_empty
4217
- end
4218
- end
4219
3931
  end
4220
3932
  end
4221
3933
 
@@ -4249,8 +3961,8 @@ describe Mongoid::Relations::Embedded::Many do
4249
3961
 
4250
3962
  before do
4251
3963
  band.collection.
4252
- find(_id: band.id).
4253
- update_one("$set" => { records: [{ name: "Moderat" }]})
3964
+ find(_id: band.id).
3965
+ update_one("$set" => { records: [{ name: "Moderat" }]})
4254
3966
  end
4255
3967
 
4256
3968
  context "when loading the documents" do
@@ -4347,7 +4059,7 @@ describe Mongoid::Relations::Embedded::Many do
4347
4059
  zone.soa = soa_1
4348
4060
  end
4349
4061
 
4350
- it "properly sets the metadata" do
4062
+ it "properly sets the association metadata" do
4351
4063
  expect(zone.soa = soa_2).to eq(soa_2)
4352
4064
  end
4353
4065
  end
@@ -4362,7 +4074,7 @@ describe Mongoid::Relations::Embedded::Many do
4362
4074
  zone.soa = soa_1
4363
4075
  end
4364
4076
 
4365
- it "properly sets the metadata" do
4077
+ it "properly sets the association metadata" do
4366
4078
  expect(zone.soa.delete).to be true
4367
4079
  end
4368
4080
  end
@@ -4388,7 +4100,7 @@ describe Mongoid::Relations::Embedded::Many do
4388
4100
  zone.soa = soa_1
4389
4101
  end
4390
4102
 
4391
- it "properly sets the metadata" do
4103
+ it "properly sets the association" do
4392
4104
  expect(zone.soa = soa_2).to eq(soa_2)
4393
4105
  end
4394
4106
  end
@@ -4403,7 +4115,7 @@ describe Mongoid::Relations::Embedded::Many do
4403
4115
  zone.soa = soa_1
4404
4116
  end
4405
4117
 
4406
- it "properly sets the metadata" do
4118
+ it "properly sets the association" do
4407
4119
  expect(zone.soa.delete).to be true
4408
4120
  end
4409
4121
  end