mongoid 6.4.4 → 7.3.2

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 (1341) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +13 -13
  4. data/LICENSE +1 -0
  5. data/README.md +34 -20
  6. data/Rakefile +75 -5
  7. data/lib/config/locales/en.yml +115 -53
  8. data/lib/mongoid/association/accessors.rb +429 -0
  9. data/lib/mongoid/association/bindable.rb +200 -0
  10. data/lib/mongoid/association/builders.rb +93 -0
  11. data/lib/mongoid/association/constrainable.rb +46 -0
  12. data/lib/mongoid/association/depending.rb +135 -0
  13. data/lib/mongoid/association/eager_loadable.rb +38 -0
  14. data/lib/mongoid/association/embedded/batchable.rb +386 -0
  15. data/lib/mongoid/association/embedded/cyclic.rb +111 -0
  16. data/lib/mongoid/association/embedded/embedded_in/binding.rb +59 -0
  17. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +41 -0
  18. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +124 -0
  19. data/lib/mongoid/association/embedded/embedded_in.rb +157 -0
  20. data/lib/mongoid/association/embedded/embeds_many/binding.rb +48 -0
  21. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +48 -0
  22. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +562 -0
  23. data/lib/mongoid/association/embedded/embeds_many.rb +214 -0
  24. data/lib/mongoid/association/embedded/embeds_one/binding.rb +50 -0
  25. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +42 -0
  26. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +133 -0
  27. data/lib/mongoid/association/embedded/embeds_one.rb +177 -0
  28. data/lib/mongoid/association/embedded.rb +7 -0
  29. data/lib/mongoid/association/macros.rb +206 -0
  30. data/lib/mongoid/association/many.rb +215 -0
  31. data/lib/mongoid/association/marshalable.rb +36 -0
  32. data/lib/mongoid/association/nested/many.rb +202 -0
  33. data/lib/mongoid/association/nested/nested_buildable.rb +75 -0
  34. data/lib/mongoid/association/nested/one.rb +131 -0
  35. data/lib/mongoid/association/nested.rb +18 -0
  36. data/lib/mongoid/association/one.rb +62 -0
  37. data/lib/mongoid/association/options.rb +155 -0
  38. data/lib/mongoid/association/proxy.rb +210 -0
  39. data/lib/mongoid/association/referenced/auto_save.rb +82 -0
  40. data/lib/mongoid/association/referenced/belongs_to/binding.rb +89 -0
  41. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +49 -0
  42. data/lib/mongoid/association/referenced/belongs_to/eager.rb +74 -0
  43. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +138 -0
  44. data/lib/mongoid/association/referenced/belongs_to.rb +251 -0
  45. data/lib/mongoid/association/referenced/counter_cache.rb +165 -0
  46. data/lib/mongoid/association/referenced/eager.rb +184 -0
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +77 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +43 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +54 -0
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +319 -0
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +297 -0
  52. data/lib/mongoid/association/referenced/has_many/binding.rb +41 -0
  53. data/lib/mongoid/association/referenced/has_many/buildable.rb +41 -0
  54. data/lib/mongoid/association/referenced/has_many/eager.rb +45 -0
  55. data/lib/mongoid/association/referenced/has_many/enumerable.rb +550 -0
  56. data/lib/mongoid/association/referenced/has_many/proxy.rb +588 -0
  57. data/lib/mongoid/association/referenced/has_many.rb +278 -0
  58. data/lib/mongoid/association/referenced/has_one/binding.rb +49 -0
  59. data/lib/mongoid/association/referenced/has_one/buildable.rb +75 -0
  60. data/lib/mongoid/association/referenced/has_one/eager.rb +37 -0
  61. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +128 -0
  62. data/lib/mongoid/association/referenced/has_one/proxy.rb +120 -0
  63. data/lib/mongoid/association/referenced/has_one.rb +207 -0
  64. data/lib/mongoid/association/referenced/syncable.rb +172 -0
  65. data/lib/mongoid/association/referenced.rb +10 -0
  66. data/lib/mongoid/association/reflections.rb +70 -0
  67. data/lib/mongoid/association/relatable.rb +514 -0
  68. data/lib/mongoid/association.rb +152 -0
  69. data/lib/mongoid/atomic/modifiers.rb +25 -2
  70. data/lib/mongoid/atomic/paths/embedded/many.rb +5 -3
  71. data/lib/mongoid/atomic/paths/embedded/one.rb +5 -3
  72. data/lib/mongoid/atomic/paths/embedded.rb +3 -1
  73. data/lib/mongoid/atomic/paths/root.rb +4 -2
  74. data/lib/mongoid/atomic/paths.rb +2 -0
  75. data/lib/mongoid/atomic.rb +16 -4
  76. data/lib/mongoid/attributes/dynamic.rb +19 -16
  77. data/lib/mongoid/attributes/nested.rb +29 -16
  78. data/lib/mongoid/attributes/processing.rb +10 -8
  79. data/lib/mongoid/attributes/projector.rb +120 -0
  80. data/lib/mongoid/attributes/readonly.rb +5 -5
  81. data/lib/mongoid/attributes.rb +93 -57
  82. data/lib/mongoid/cacheable.rb +5 -3
  83. data/lib/mongoid/changeable.rb +4 -2
  84. data/lib/mongoid/clients/factory.rb +42 -10
  85. data/lib/mongoid/clients/options.rb +17 -13
  86. data/lib/mongoid/clients/sessions.rb +23 -4
  87. data/lib/mongoid/clients/storage_options.rb +7 -5
  88. data/lib/mongoid/clients/validators/storage.rb +2 -0
  89. data/lib/mongoid/clients/validators.rb +2 -0
  90. data/lib/mongoid/clients.rb +3 -1
  91. data/lib/mongoid/composable.rb +9 -6
  92. data/lib/mongoid/config/environment.rb +23 -8
  93. data/lib/mongoid/config/options.rb +20 -12
  94. data/lib/mongoid/config/validators/client.rb +2 -0
  95. data/lib/mongoid/config/validators/option.rb +2 -0
  96. data/lib/mongoid/config/validators.rb +2 -0
  97. data/lib/mongoid/config.rb +75 -11
  98. data/lib/mongoid/contextual/aggregable/memory.rb +3 -1
  99. data/lib/mongoid/contextual/aggregable/mongo.rb +13 -9
  100. data/lib/mongoid/contextual/atomic.rb +24 -6
  101. data/lib/mongoid/contextual/command.rb +2 -0
  102. data/lib/mongoid/contextual/geo_near.rb +6 -4
  103. data/lib/mongoid/contextual/map_reduce.rb +5 -2
  104. data/lib/mongoid/contextual/memory.rb +23 -3
  105. data/lib/mongoid/contextual/mongo.rb +39 -13
  106. data/lib/mongoid/contextual/none.rb +2 -0
  107. data/lib/mongoid/contextual/queryable.rb +2 -0
  108. data/lib/mongoid/contextual.rb +7 -4
  109. data/lib/mongoid/copyable.rb +20 -9
  110. data/lib/mongoid/criteria/findable.rb +12 -2
  111. data/lib/mongoid/criteria/includable.rb +21 -19
  112. data/lib/mongoid/criteria/inspectable.rb +2 -0
  113. data/lib/mongoid/criteria/marshalable.rb +2 -0
  114. data/lib/mongoid/criteria/modifiable.rb +10 -3
  115. data/lib/mongoid/criteria/options.rb +4 -2
  116. data/lib/mongoid/criteria/permission.rb +2 -0
  117. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -0
  118. data/lib/mongoid/criteria/queryable/expandable.rb +69 -0
  119. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -1
  120. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -1
  121. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -1
  122. data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -1
  123. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -6
  124. data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -1
  125. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -1
  126. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -2
  127. data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -1
  128. data/lib/mongoid/criteria/queryable/extensions/range.rb +3 -1
  129. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -7
  130. data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -1
  131. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -2
  132. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
  133. data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -2
  134. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +15 -1
  135. data/lib/mongoid/criteria/queryable/extensions.rb +1 -3
  136. data/lib/mongoid/criteria/queryable/key.rb +101 -14
  137. data/lib/mongoid/criteria/queryable/macroable.rb +3 -1
  138. data/lib/mongoid/criteria/queryable/mergeable.rb +184 -15
  139. data/lib/mongoid/criteria/queryable/optional.rb +5 -3
  140. data/lib/mongoid/criteria/queryable/options.rb +2 -0
  141. data/lib/mongoid/criteria/queryable/pipeline.rb +14 -6
  142. data/lib/mongoid/criteria/queryable/selectable.rb +399 -98
  143. data/lib/mongoid/criteria/queryable/selector.rb +46 -39
  144. data/lib/mongoid/criteria/queryable/smash.rb +2 -0
  145. data/lib/mongoid/criteria/queryable/storable.rb +233 -0
  146. data/lib/mongoid/criteria/queryable.rb +7 -2
  147. data/lib/mongoid/criteria/scopable.rb +2 -0
  148. data/lib/mongoid/criteria.rb +88 -18
  149. data/lib/mongoid/document.rb +32 -22
  150. data/lib/mongoid/equality.rb +3 -2
  151. data/lib/mongoid/errors/ambiguous_relationship.rb +4 -2
  152. data/lib/mongoid/errors/callback.rb +2 -0
  153. data/lib/mongoid/errors/criteria_argument_required.rb +19 -0
  154. data/lib/mongoid/errors/delete_restriction.rb +10 -10
  155. data/lib/mongoid/errors/document_not_destroyed.rb +2 -0
  156. data/lib/mongoid/errors/document_not_found.rb +2 -0
  157. data/lib/mongoid/errors/eager_load.rb +6 -2
  158. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -0
  159. data/lib/mongoid/errors/invalid_collection.rb +2 -0
  160. data/lib/mongoid/errors/invalid_config_option.rb +2 -0
  161. data/lib/mongoid/errors/invalid_dependent_strategy.rb +34 -0
  162. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
  163. data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
  164. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
  165. data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
  166. data/lib/mongoid/errors/invalid_field.rb +2 -0
  167. data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
  168. data/lib/mongoid/errors/invalid_field_option.rb +2 -0
  169. data/lib/mongoid/errors/invalid_find.rb +2 -0
  170. data/lib/mongoid/errors/invalid_includes.rb +2 -0
  171. data/lib/mongoid/errors/invalid_index.rb +2 -0
  172. data/lib/mongoid/errors/invalid_options.rb +4 -2
  173. data/lib/mongoid/errors/invalid_path.rb +2 -0
  174. data/lib/mongoid/errors/invalid_persistence_option.rb +2 -0
  175. data/lib/mongoid/errors/invalid_query.rb +41 -0
  176. data/lib/mongoid/errors/invalid_relation.rb +4 -2
  177. data/lib/mongoid/errors/invalid_relation_option.rb +31 -0
  178. data/lib/mongoid/errors/invalid_scope.rb +2 -0
  179. data/lib/mongoid/errors/invalid_session_use.rb +2 -0
  180. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -4
  181. data/lib/mongoid/errors/invalid_storage_options.rb +2 -0
  182. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  183. data/lib/mongoid/errors/invalid_time.rb +2 -0
  184. data/lib/mongoid/errors/invalid_value.rb +2 -0
  185. data/lib/mongoid/errors/inverse_not_found.rb +3 -1
  186. data/lib/mongoid/errors/mixed_client_configuration.rb +2 -0
  187. data/lib/mongoid/errors/mixed_relations.rb +2 -0
  188. data/lib/mongoid/errors/mongoid_error.rb +3 -1
  189. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -1
  190. data/lib/mongoid/errors/no_client_config.rb +4 -2
  191. data/lib/mongoid/errors/no_client_database.rb +2 -0
  192. data/lib/mongoid/errors/no_client_hosts.rb +2 -0
  193. data/lib/mongoid/errors/no_clients_config.rb +2 -0
  194. data/lib/mongoid/errors/no_default_client.rb +3 -1
  195. data/lib/mongoid/errors/no_environment.rb +2 -0
  196. data/lib/mongoid/errors/no_map_reduce_output.rb +2 -0
  197. data/lib/mongoid/errors/no_metadata.rb +2 -0
  198. data/lib/mongoid/errors/no_parent.rb +2 -0
  199. data/lib/mongoid/errors/readonly_attribute.rb +2 -0
  200. data/lib/mongoid/errors/readonly_document.rb +2 -0
  201. data/lib/mongoid/errors/scope_overwrite.rb +2 -0
  202. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -0
  203. data/lib/mongoid/errors/unknown_attribute.rb +2 -0
  204. data/lib/mongoid/errors/unknown_model.rb +27 -0
  205. data/lib/mongoid/errors/unsaved_document.rb +2 -0
  206. data/lib/mongoid/errors/unsupported_javascript.rb +2 -0
  207. data/lib/mongoid/errors/validations.rb +2 -0
  208. data/lib/mongoid/errors.rb +13 -0
  209. data/lib/mongoid/evolvable.rb +4 -2
  210. data/lib/mongoid/extensions/array.rb +28 -11
  211. data/lib/mongoid/extensions/big_decimal.rb +2 -0
  212. data/lib/mongoid/extensions/boolean.rb +3 -2
  213. data/lib/mongoid/extensions/date.rb +13 -3
  214. data/lib/mongoid/extensions/date_time.rb +4 -3
  215. data/lib/mongoid/extensions/decimal128.rb +2 -0
  216. data/lib/mongoid/extensions/false_class.rb +3 -1
  217. data/lib/mongoid/extensions/float.rb +5 -3
  218. data/lib/mongoid/extensions/hash.rb +58 -13
  219. data/lib/mongoid/extensions/integer.rb +5 -3
  220. data/lib/mongoid/extensions/module.rb +2 -0
  221. data/lib/mongoid/extensions/nil_class.rb +2 -0
  222. data/lib/mongoid/extensions/object.rb +20 -8
  223. data/lib/mongoid/extensions/object_id.rb +2 -0
  224. data/lib/mongoid/extensions/range.rb +3 -0
  225. data/lib/mongoid/extensions/regexp.rb +3 -1
  226. data/lib/mongoid/extensions/set.rb +2 -0
  227. data/lib/mongoid/extensions/string.rb +23 -12
  228. data/lib/mongoid/extensions/symbol.rb +2 -0
  229. data/lib/mongoid/extensions/time.rb +14 -0
  230. data/lib/mongoid/extensions/time_with_zone.rb +14 -0
  231. data/lib/mongoid/extensions/true_class.rb +3 -1
  232. data/lib/mongoid/extensions.rb +3 -4
  233. data/lib/mongoid/factory.rb +59 -9
  234. data/lib/mongoid/fields/foreign_key.rb +8 -6
  235. data/lib/mongoid/fields/localized.rb +2 -0
  236. data/lib/mongoid/fields/standard.rb +8 -17
  237. data/lib/mongoid/fields/validators/macro.rb +39 -12
  238. data/lib/mongoid/fields/validators.rb +2 -0
  239. data/lib/mongoid/fields.rb +54 -10
  240. data/lib/mongoid/findable.rb +59 -18
  241. data/lib/mongoid/indexable/specification.rb +3 -1
  242. data/lib/mongoid/indexable/validators/options.rb +2 -0
  243. data/lib/mongoid/indexable.rb +9 -4
  244. data/lib/mongoid/inspectable.rb +4 -2
  245. data/lib/mongoid/interceptable.rb +18 -10
  246. data/lib/mongoid/loggable.rb +13 -7
  247. data/lib/mongoid/matchable.rb +3 -148
  248. data/lib/mongoid/matcher/all.rb +22 -0
  249. data/lib/mongoid/matcher/and.rb +21 -0
  250. data/lib/mongoid/matcher/bits.rb +41 -0
  251. data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
  252. data/lib/mongoid/matcher/bits_all_set.rb +20 -0
  253. data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
  254. data/lib/mongoid/matcher/bits_any_set.rb +20 -0
  255. data/lib/mongoid/matcher/elem_match.rb +36 -0
  256. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  257. data/lib/mongoid/matcher/eq.rb +11 -0
  258. data/lib/mongoid/matcher/eq_impl.rb +32 -0
  259. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
  260. data/lib/mongoid/matcher/exists.rb +15 -0
  261. data/lib/mongoid/matcher/expression.rb +35 -0
  262. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  263. data/lib/mongoid/matcher/field_expression.rb +62 -0
  264. data/lib/mongoid/matcher/field_operator.rb +54 -0
  265. data/lib/mongoid/matcher/gt.rb +17 -0
  266. data/lib/mongoid/matcher/gte.rb +17 -0
  267. data/lib/mongoid/matcher/in.rb +25 -0
  268. data/lib/mongoid/matcher/lt.rb +17 -0
  269. data/lib/mongoid/matcher/lte.rb +17 -0
  270. data/lib/mongoid/matcher/mod.rb +17 -0
  271. data/lib/mongoid/matcher/ne.rb +16 -0
  272. data/lib/mongoid/matcher/nin.rb +11 -0
  273. data/lib/mongoid/matcher/nor.rb +25 -0
  274. data/lib/mongoid/matcher/not.rb +29 -0
  275. data/lib/mongoid/matcher/or.rb +21 -0
  276. data/lib/mongoid/matcher/regex.rb +41 -0
  277. data/lib/mongoid/matcher/size.rb +26 -0
  278. data/lib/mongoid/matcher/type.rb +99 -0
  279. data/lib/mongoid/matcher.rb +110 -0
  280. data/lib/mongoid/persistable/creatable.rb +3 -1
  281. data/lib/mongoid/persistable/deletable.rb +11 -9
  282. data/lib/mongoid/persistable/destroyable.rb +11 -3
  283. data/lib/mongoid/persistable/incrementable.rb +7 -3
  284. data/lib/mongoid/persistable/logical.rb +5 -2
  285. data/lib/mongoid/persistable/poppable.rb +3 -1
  286. data/lib/mongoid/persistable/pullable.rb +3 -1
  287. data/lib/mongoid/persistable/pushable.rb +14 -3
  288. data/lib/mongoid/persistable/renamable.rb +10 -3
  289. data/lib/mongoid/persistable/savable.rb +3 -1
  290. data/lib/mongoid/persistable/settable.rb +60 -13
  291. data/lib/mongoid/persistable/unsettable.rb +8 -3
  292. data/lib/mongoid/persistable/updatable.rb +30 -3
  293. data/lib/mongoid/persistable/upsertable.rb +3 -1
  294. data/lib/mongoid/persistable.rb +136 -19
  295. data/lib/mongoid/persistence_context.rb +47 -20
  296. data/lib/mongoid/positional.rb +3 -1
  297. data/lib/mongoid/query_cache.rb +132 -77
  298. data/lib/mongoid/railtie.rb +3 -1
  299. data/lib/mongoid/railties/controller_runtime.rb +4 -1
  300. data/lib/mongoid/railties/database.rake +9 -0
  301. data/lib/mongoid/reloadable.rb +11 -4
  302. data/lib/mongoid/scopable.rb +2 -1
  303. data/lib/mongoid/selectable.rb +8 -8
  304. data/lib/mongoid/serializable.rb +28 -18
  305. data/lib/mongoid/shardable.rb +80 -10
  306. data/lib/mongoid/stateful.rb +3 -1
  307. data/lib/mongoid/stringified_symbol.rb +53 -0
  308. data/lib/mongoid/tasks/database.rake +12 -5
  309. data/lib/mongoid/tasks/database.rb +85 -0
  310. data/lib/mongoid/threaded/lifecycle.rb +2 -0
  311. data/lib/mongoid/threaded.rb +2 -0
  312. data/lib/mongoid/timestamps/created/short.rb +2 -0
  313. data/lib/mongoid/timestamps/created.rb +3 -1
  314. data/lib/mongoid/timestamps/short.rb +2 -0
  315. data/lib/mongoid/timestamps/timeless.rb +6 -2
  316. data/lib/mongoid/timestamps/updated/short.rb +2 -0
  317. data/lib/mongoid/timestamps/updated.rb +3 -1
  318. data/lib/mongoid/timestamps.rb +3 -1
  319. data/lib/mongoid/touchable.rb +129 -0
  320. data/lib/mongoid/traversable.rb +118 -9
  321. data/lib/mongoid/validatable/associated.rb +5 -3
  322. data/lib/mongoid/validatable/format.rb +2 -0
  323. data/lib/mongoid/validatable/length.rb +2 -0
  324. data/lib/mongoid/validatable/localizable.rb +2 -0
  325. data/lib/mongoid/validatable/macros.rb +3 -1
  326. data/lib/mongoid/validatable/presence.rb +9 -7
  327. data/lib/mongoid/validatable/queryable.rb +2 -0
  328. data/lib/mongoid/validatable/uniqueness.rb +10 -8
  329. data/lib/mongoid/validatable.rb +15 -13
  330. data/lib/mongoid/version.rb +3 -1
  331. data/lib/mongoid.rb +35 -2
  332. data/lib/rails/generators/mongoid/config/config_generator.rb +10 -1
  333. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -27
  334. data/lib/rails/generators/mongoid/model/model_generator.rb +3 -1
  335. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
  336. data/lib/rails/generators/mongoid_generator.rb +2 -0
  337. data/lib/rails/mongoid.rb +4 -2
  338. data/lib/support/ruby_version.rb +3 -0
  339. data/spec/README.md +33 -0
  340. data/spec/config/mongoid.yml +14 -3
  341. data/spec/integration/app_spec.rb +344 -0
  342. data/spec/integration/associations/belongs_to_spec.rb +16 -0
  343. data/spec/integration/associations/embedded_spec.rb +269 -0
  344. data/spec/integration/associations/embeds_many_spec.rb +68 -0
  345. data/spec/integration/associations/embeds_one_spec.rb +24 -0
  346. data/spec/integration/associations/foreign_key_spec.rb +99 -0
  347. data/spec/integration/associations/foreign_key_spec_models.rb +65 -0
  348. data/spec/integration/associations/has_many_spec.rb +129 -0
  349. data/spec/integration/associations/has_one_spec.rb +177 -0
  350. data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
  351. data/spec/integration/associations/reverse_population_spec.rb +35 -0
  352. data/spec/integration/associations/reverse_population_spec_models.rb +37 -0
  353. data/spec/integration/atomic/modifiers_spec.rb +117 -0
  354. data/spec/integration/bson_regexp_raw_spec.rb +20 -0
  355. data/spec/integration/callbacks_models.rb +49 -0
  356. data/spec/integration/callbacks_spec.rb +216 -0
  357. data/spec/integration/criteria/date_field_spec.rb +41 -0
  358. data/spec/integration/criteria/default_scope_spec.rb +21 -0
  359. data/spec/integration/criteria/logical_spec.rb +94 -0
  360. data/spec/integration/criteria/time_with_zone_spec.rb +32 -0
  361. data/spec/integration/discriminator_key_spec.rb +354 -0
  362. data/spec/integration/discriminator_value_spec.rb +207 -0
  363. data/spec/integration/document_spec.rb +52 -0
  364. data/spec/integration/i18n_fallbacks_spec.rb +90 -0
  365. data/spec/integration/matcher_examples_spec.rb +759 -0
  366. data/spec/integration/matcher_operator_data/all.yml +140 -0
  367. data/spec/integration/matcher_operator_data/and.yml +93 -0
  368. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  369. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  370. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  371. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  372. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  373. data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
  374. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  375. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  376. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  377. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  378. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  379. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  380. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  381. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  382. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  383. data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
  384. data/spec/integration/matcher_operator_data/in.yml +210 -0
  385. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  386. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  387. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  388. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  389. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  390. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  391. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  392. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  393. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  394. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  395. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  396. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  397. data/spec/integration/matcher_operator_data/not.yml +196 -0
  398. data/spec/integration/matcher_operator_data/or.yml +137 -0
  399. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  400. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  401. data/spec/integration/matcher_operator_data/size.yml +174 -0
  402. data/spec/integration/matcher_operator_data/type.yml +70 -0
  403. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  404. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  405. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  406. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  407. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  408. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  409. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  410. data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
  411. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  412. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  413. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  414. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  415. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  416. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  417. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  418. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  419. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  420. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  421. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  422. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  423. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  424. data/spec/integration/matcher_operator_spec.rb +100 -0
  425. data/spec/integration/matcher_spec.rb +189 -0
  426. data/spec/integration/server_query_spec.rb +142 -0
  427. data/spec/integration/shardable_spec.rb +149 -0
  428. data/spec/integration/stringified_symbol_field_spec.rb +190 -0
  429. data/spec/lite_spec_helper.rb +77 -0
  430. data/spec/mongoid/association/accessors_spec.rb +1038 -0
  431. data/spec/mongoid/association/auto_save_spec.rb +365 -0
  432. data/spec/mongoid/association/builders_spec.rb +256 -0
  433. data/spec/mongoid/association/constrainable_spec.rb +118 -0
  434. data/spec/mongoid/association/counter_cache_spec.rb +453 -0
  435. data/spec/mongoid/association/depending_spec.rb +960 -0
  436. data/spec/mongoid/association/eager_spec.rb +282 -0
  437. data/spec/mongoid/association/embedded/cyclic_spec.rb +181 -0
  438. data/spec/mongoid/association/embedded/dirty_spec.rb +68 -0
  439. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +174 -0
  440. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +37 -0
  441. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +560 -0
  442. data/spec/mongoid/association/embedded/embedded_in_spec.rb +904 -0
  443. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +57 -0
  444. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +107 -0
  445. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4403 -0
  446. data/spec/mongoid/association/embedded/embeds_many_models.rb +54 -0
  447. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +52 -0
  448. data/spec/mongoid/association/embedded/embeds_many_spec.rb +865 -0
  449. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +80 -0
  450. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +82 -0
  451. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1026 -0
  452. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +9 -0
  453. data/spec/mongoid/association/embedded/embeds_one_models.rb +55 -0
  454. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +29 -0
  455. data/spec/mongoid/association/embedded/embeds_one_spec.rb +957 -0
  456. data/spec/mongoid/association/macros_spec.rb +1117 -0
  457. data/spec/mongoid/association/nested/many_spec.rb +233 -0
  458. data/spec/mongoid/association/nested/one_spec.rb +254 -0
  459. data/spec/mongoid/association/options_spec.rb +1324 -0
  460. data/spec/mongoid/association/polymorphic_spec.rb +163 -0
  461. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +244 -0
  462. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +200 -0
  463. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +377 -0
  464. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1369 -0
  465. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +38 -0
  466. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2026 -0
  467. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +181 -0
  468. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +124 -0
  469. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +168 -0
  470. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +77 -0
  471. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +3748 -0
  472. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +50 -0
  473. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +40 -0
  474. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1051 -0
  475. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +156 -0
  476. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +122 -0
  477. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +274 -0
  478. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2054 -0
  479. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +24 -0
  480. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4029 -0
  481. data/spec/mongoid/association/referenced/has_many_models.rb +61 -0
  482. data/spec/mongoid/association/referenced/has_many_query_spec.rb +38 -0
  483. data/spec/mongoid/association/referenced/has_many_spec.rb +1228 -0
  484. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +134 -0
  485. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +116 -0
  486. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +178 -0
  487. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1143 -0
  488. data/spec/mongoid/association/referenced/has_one_models.rb +80 -0
  489. data/spec/mongoid/association/referenced/has_one_query_spec.rb +38 -0
  490. data/spec/mongoid/association/referenced/has_one_spec.rb +1363 -0
  491. data/spec/mongoid/association/reflections_spec.rb +93 -0
  492. data/spec/mongoid/association/syncable_spec.rb +500 -0
  493. data/spec/mongoid/association_spec.rb +192 -0
  494. data/spec/mongoid/atomic/modifiers_spec.rb +52 -2
  495. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +3 -0
  496. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +3 -0
  497. data/spec/mongoid/atomic/paths/root_spec.rb +3 -0
  498. data/spec/mongoid/atomic/paths_spec.rb +108 -12
  499. data/spec/mongoid/atomic_spec.rb +30 -4
  500. data/spec/mongoid/attributes/dynamic_spec.rb +153 -0
  501. data/spec/mongoid/attributes/nested_spec.rb +33 -12
  502. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  503. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  504. data/spec/mongoid/attributes/projector_spec.rb +41 -0
  505. data/spec/mongoid/attributes/readonly_spec.rb +83 -125
  506. data/spec/mongoid/attributes_spec.rb +393 -9
  507. data/spec/mongoid/cacheable_spec.rb +3 -0
  508. data/spec/mongoid/changeable_spec.rb +26 -0
  509. data/spec/mongoid/clients/factory_spec.rb +142 -33
  510. data/spec/mongoid/clients/options_spec.rb +83 -56
  511. data/spec/mongoid/clients/sessions_spec.rb +19 -8
  512. data/spec/mongoid/clients/transactions_spec.rb +393 -0
  513. data/spec/mongoid/clients_spec.rb +73 -10
  514. data/spec/mongoid/composable_spec.rb +3 -0
  515. data/spec/mongoid/config/environment_spec.rb +3 -0
  516. data/spec/mongoid/config/options_spec.rb +23 -3
  517. data/spec/mongoid/config_spec.rb +126 -1
  518. data/spec/mongoid/contextual/aggregable/memory_spec.rb +3 -0
  519. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +3 -0
  520. data/spec/mongoid/contextual/atomic_spec.rb +137 -14
  521. data/spec/mongoid/contextual/geo_near_spec.rb +15 -2
  522. data/spec/mongoid/contextual/map_reduce_spec.rb +23 -5
  523. data/spec/mongoid/contextual/memory_spec.rb +22 -0
  524. data/spec/mongoid/contextual/mongo_spec.rb +185 -75
  525. data/spec/mongoid/contextual/none_spec.rb +3 -0
  526. data/spec/mongoid/copyable_spec.rb +289 -23
  527. data/spec/mongoid/copyable_spec_models.rb +48 -0
  528. data/spec/mongoid/criteria/findable_spec.rb +58 -0
  529. data/spec/mongoid/criteria/inspectable_spec.rb +3 -0
  530. data/spec/mongoid/criteria/marshalable_spec.rb +3 -0
  531. data/spec/mongoid/criteria/modifiable_spec.rb +181 -5
  532. data/spec/mongoid/criteria/options_spec.rb +3 -0
  533. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -0
  534. data/spec/mongoid/criteria/queryable/expandable_spec.rb +62 -0
  535. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +3 -0
  536. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -0
  537. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +3 -0
  538. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +4 -1
  539. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +3 -0
  540. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +36 -17
  541. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +3 -0
  542. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +3 -0
  543. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +3 -0
  544. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +3 -0
  545. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +3 -0
  546. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +54 -0
  547. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +3 -0
  548. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +3 -0
  549. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +4 -1
  550. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +10 -7
  551. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +3 -0
  552. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +47 -1
  553. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +3 -0
  554. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +43 -23
  555. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +31 -1
  556. data/spec/mongoid/criteria/queryable/key_spec.rb +51 -6
  557. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +146 -12
  558. data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -0
  559. data/spec/mongoid/criteria/queryable/options_spec.rb +3 -0
  560. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +15 -0
  561. data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -0
  562. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2070 -0
  563. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
  564. data/spec/mongoid/criteria/queryable/selectable_spec.rb +993 -2937
  565. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
  566. data/spec/mongoid/criteria/queryable/selector_spec.rb +40 -0
  567. data/spec/mongoid/criteria/queryable/smash_spec.rb +3 -0
  568. data/spec/mongoid/criteria/queryable/storable_spec.rb +190 -0
  569. data/spec/mongoid/criteria/scopable_spec.rb +3 -0
  570. data/spec/mongoid/criteria_projection_spec.rb +411 -0
  571. data/spec/mongoid/criteria_spec.rb +280 -297
  572. data/spec/mongoid/document_fields_spec.rb +114 -0
  573. data/spec/mongoid/document_persistence_context_spec.rb +33 -0
  574. data/spec/mongoid/document_query_spec.rb +90 -0
  575. data/spec/mongoid/document_spec.rb +121 -19
  576. data/spec/mongoid/equality_spec.rb +3 -1
  577. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +6 -3
  578. data/spec/mongoid/errors/callback_spec.rb +3 -0
  579. data/spec/mongoid/errors/delete_restriction_spec.rb +5 -2
  580. data/spec/mongoid/errors/document_not_destroyed_spec.rb +3 -0
  581. data/spec/mongoid/errors/document_not_found_spec.rb +3 -0
  582. data/spec/mongoid/errors/eager_load_spec.rb +3 -0
  583. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -0
  584. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -0
  585. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -0
  586. data/spec/mongoid/errors/invalid_field_spec.rb +3 -0
  587. data/spec/mongoid/errors/invalid_find_spec.rb +3 -0
  588. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -0
  589. data/spec/mongoid/errors/invalid_index_spec.rb +3 -0
  590. data/spec/mongoid/errors/invalid_options_spec.rb +5 -2
  591. data/spec/mongoid/errors/invalid_path_spec.rb +3 -0
  592. data/spec/mongoid/errors/invalid_relation_spec.rb +5 -2
  593. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -0
  594. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -0
  595. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -0
  596. data/spec/mongoid/errors/invalid_time_spec.rb +3 -0
  597. data/spec/mongoid/errors/inverse_not_found_spec.rb +4 -1
  598. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +3 -0
  599. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -0
  600. data/spec/mongoid/errors/mongoid_error_spec.rb +23 -8
  601. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -3
  602. data/spec/mongoid/errors/no_client_config_spec.rb +5 -2
  603. data/spec/mongoid/errors/no_client_database_spec.rb +6 -3
  604. data/spec/mongoid/errors/no_client_hosts_spec.rb +6 -3
  605. data/spec/mongoid/errors/no_clients_config_spec.rb +3 -0
  606. data/spec/mongoid/errors/no_environment_spec.rb +3 -0
  607. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -0
  608. data/spec/mongoid/errors/no_metadata_spec.rb +5 -2
  609. data/spec/mongoid/errors/no_parent_spec.rb +4 -1
  610. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -0
  611. data/spec/mongoid/errors/readonly_document_spec.rb +3 -0
  612. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -0
  613. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -0
  614. data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -0
  615. data/spec/mongoid/errors/unsaved_document_spec.rb +4 -1
  616. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -0
  617. data/spec/mongoid/errors/validations_spec.rb +3 -0
  618. data/spec/mongoid/extensions/array_spec.rb +37 -58
  619. data/spec/mongoid/extensions/big_decimal_spec.rb +3 -0
  620. data/spec/mongoid/extensions/binary_spec.rb +3 -0
  621. data/spec/mongoid/extensions/boolean_spec.rb +3 -0
  622. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +336 -0
  623. data/spec/mongoid/extensions/date_spec.rb +9 -160
  624. data/spec/mongoid/extensions/date_time_spec.rb +18 -60
  625. data/spec/mongoid/extensions/decimal128_spec.rb +3 -0
  626. data/spec/mongoid/extensions/false_class_spec.rb +4 -1
  627. data/spec/mongoid/extensions/float_spec.rb +18 -3
  628. data/spec/mongoid/extensions/hash_spec.rb +124 -1
  629. data/spec/mongoid/extensions/integer_spec.rb +15 -2
  630. data/spec/mongoid/extensions/module_spec.rb +3 -0
  631. data/spec/mongoid/extensions/nil_class_spec.rb +3 -0
  632. data/spec/mongoid/extensions/object_id_spec.rb +3 -0
  633. data/spec/mongoid/extensions/object_spec.rb +21 -35
  634. data/spec/mongoid/extensions/range_spec.rb +10 -0
  635. data/spec/mongoid/extensions/regexp_spec.rb +3 -0
  636. data/spec/mongoid/extensions/set_spec.rb +3 -0
  637. data/spec/mongoid/extensions/string_spec.rb +94 -32
  638. data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
  639. data/spec/mongoid/extensions/symbol_spec.rb +3 -0
  640. data/spec/mongoid/extensions/time_spec.rb +30 -0
  641. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -0
  642. data/spec/mongoid/extensions/true_class_spec.rb +4 -1
  643. data/spec/mongoid/extensions_spec.rb +3 -0
  644. data/spec/mongoid/factory_spec.rb +301 -23
  645. data/spec/mongoid/fields/foreign_key_spec.rb +27 -32
  646. data/spec/mongoid/fields/localized_spec.rb +7 -4
  647. data/spec/mongoid/fields/standard_spec.rb +3 -0
  648. data/spec/mongoid/fields_spec.rb +94 -7
  649. data/spec/mongoid/findable_spec.rb +36 -1
  650. data/spec/mongoid/indexable/specification_spec.rb +3 -0
  651. data/spec/mongoid/indexable_spec.rb +55 -14
  652. data/spec/mongoid/inspectable_spec.rb +40 -2
  653. data/spec/mongoid/interceptable_spec.rb +89 -3
  654. data/spec/mongoid/interceptable_spec_models.rb +76 -0
  655. data/spec/mongoid/loggable_spec.rb +3 -0
  656. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  657. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
  658. data/spec/mongoid/matcher/extract_attribute_spec.rb +37 -0
  659. data/spec/mongoid/persistable/creatable_spec.rb +111 -25
  660. data/spec/mongoid/persistable/deletable_spec.rb +264 -1
  661. data/spec/mongoid/persistable/destroyable_spec.rb +194 -3
  662. data/spec/mongoid/persistable/incrementable_spec.rb +17 -0
  663. data/spec/mongoid/persistable/logical_spec.rb +17 -0
  664. data/spec/mongoid/persistable/poppable_spec.rb +17 -0
  665. data/spec/mongoid/persistable/pullable_spec.rb +31 -0
  666. data/spec/mongoid/persistable/pushable_spec.rb +86 -1
  667. data/spec/mongoid/persistable/renamable_spec.rb +17 -0
  668. data/spec/mongoid/persistable/savable_spec.rb +176 -17
  669. data/spec/mongoid/persistable/settable_spec.rb +142 -10
  670. data/spec/mongoid/persistable/unsettable_spec.rb +17 -0
  671. data/spec/mongoid/persistable/updatable_spec.rb +3 -0
  672. data/spec/mongoid/persistable/upsertable_spec.rb +4 -1
  673. data/spec/mongoid/persistable_spec.rb +106 -14
  674. data/spec/mongoid/persistence_context_spec.rb +4 -1
  675. data/spec/mongoid/positional_spec.rb +3 -0
  676. data/spec/mongoid/query_cache_middleware_spec.rb +69 -0
  677. data/spec/mongoid/query_cache_spec.rb +532 -65
  678. data/spec/mongoid/relations/proxy_spec.rb +127 -124
  679. data/spec/mongoid/reloadable_spec.rb +93 -1
  680. data/spec/mongoid/scopable_spec.rb +5 -1
  681. data/spec/mongoid/selectable_spec.rb +3 -0
  682. data/spec/mongoid/serializable_spec.rb +152 -20
  683. data/spec/mongoid/shardable_models.rb +61 -0
  684. data/spec/mongoid/shardable_spec.rb +146 -26
  685. data/spec/mongoid/stateful_spec.rb +3 -0
  686. data/spec/mongoid/tasks/database_rake_spec.rb +16 -13
  687. data/spec/mongoid/tasks/database_spec.rb +4 -1
  688. data/spec/mongoid/threaded_spec.rb +3 -0
  689. data/spec/mongoid/timestamps/created/short_spec.rb +3 -0
  690. data/spec/mongoid/timestamps/created_spec.rb +3 -0
  691. data/spec/mongoid/timestamps/timeless_spec.rb +3 -0
  692. data/spec/mongoid/timestamps/updated/short_spec.rb +3 -0
  693. data/spec/mongoid/timestamps/updated_spec.rb +3 -0
  694. data/spec/mongoid/timestamps_spec.rb +3 -0
  695. data/spec/mongoid/touchable_spec.rb +575 -0
  696. data/spec/mongoid/touchable_spec_models.rb +52 -0
  697. data/spec/mongoid/traversable_spec.rb +1103 -0
  698. data/spec/mongoid/validatable/associated_spec.rb +4 -1
  699. data/spec/mongoid/validatable/format_spec.rb +3 -0
  700. data/spec/mongoid/validatable/length_spec.rb +3 -0
  701. data/spec/mongoid/validatable/numericality_spec.rb +3 -0
  702. data/spec/mongoid/validatable/presence_spec.rb +10 -6
  703. data/spec/mongoid/validatable/uniqueness_spec.rb +36 -6
  704. data/spec/mongoid/validatable_spec.rb +4 -1
  705. data/spec/mongoid_spec.rb +3 -0
  706. data/spec/rails/controller_extension/controller_runtime_spec.rb +4 -1
  707. data/spec/rails/mongoid_spec.rb +5 -2
  708. data/spec/shared/LICENSE +20 -0
  709. data/spec/shared/bin/get-mongodb-download-url +17 -0
  710. data/spec/shared/bin/s3-copy +45 -0
  711. data/spec/shared/bin/s3-upload +69 -0
  712. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  713. data/spec/shared/lib/mrss/cluster_config.rb +226 -0
  714. data/spec/shared/lib/mrss/constraints.rb +368 -0
  715. data/spec/shared/lib/mrss/docker_runner.rb +271 -0
  716. data/spec/shared/lib/mrss/lite_constraints.rb +191 -0
  717. data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
  718. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  719. data/spec/shared/lib/mrss/utils.rb +15 -0
  720. data/spec/shared/share/Dockerfile.erb +322 -0
  721. data/spec/shared/share/haproxy-1.conf +16 -0
  722. data/spec/shared/share/haproxy-2.conf +17 -0
  723. data/spec/shared/shlib/distro.sh +73 -0
  724. data/spec/shared/shlib/server.sh +317 -0
  725. data/spec/shared/shlib/set_env.sh +131 -0
  726. data/spec/spec_helper.rb +65 -58
  727. data/spec/support/authorization.rb +3 -0
  728. data/spec/support/client_registry.rb +9 -0
  729. data/spec/support/constraints.rb +54 -0
  730. data/spec/support/expectations.rb +22 -3
  731. data/spec/support/helpers.rb +11 -0
  732. data/spec/support/macros.rb +21 -0
  733. data/spec/support/models/account.rb +39 -0
  734. data/spec/support/models/acolyte.rb +20 -0
  735. data/spec/support/models/actor.rb +21 -0
  736. data/spec/support/models/actress.rb +5 -0
  737. data/spec/support/models/address.rb +86 -0
  738. data/spec/support/models/address_component.rb +8 -0
  739. data/spec/support/models/address_number.rb +9 -0
  740. data/spec/support/models/agency.rb +8 -0
  741. data/spec/support/models/agent.rb +19 -0
  742. data/spec/support/models/album.rb +21 -0
  743. data/spec/support/models/alert.rb +10 -0
  744. data/spec/support/models/animal.rb +29 -0
  745. data/spec/support/models/answer.rb +9 -0
  746. data/spec/support/models/appointment.rb +10 -0
  747. data/spec/support/models/armrest.rb +10 -0
  748. data/spec/support/models/array_field.rb +8 -0
  749. data/spec/support/models/article.rb +15 -0
  750. data/spec/support/models/artist.rb +90 -0
  751. data/spec/support/models/artwork.rb +7 -0
  752. data/spec/support/models/audio.rb +8 -0
  753. data/spec/support/models/augmentation.rb +14 -0
  754. data/spec/support/models/author.rb +9 -0
  755. data/spec/support/models/baby.rb +7 -0
  756. data/spec/support/models/band.rb +34 -0
  757. data/spec/support/models/bar.rb +13 -0
  758. data/spec/support/models/basic.rb +9 -0
  759. data/spec/support/models/bed.rb +4 -0
  760. data/spec/support/models/big_palette.rb +5 -0
  761. data/spec/support/models/birthday.rb +16 -0
  762. data/spec/support/models/bolt.rb +8 -0
  763. data/spec/support/models/bomb.rb +7 -0
  764. data/spec/support/models/book.rb +19 -0
  765. data/spec/support/models/breed.rb +7 -0
  766. data/spec/support/models/browser.rb +9 -0
  767. data/spec/support/models/building.rb +9 -0
  768. data/spec/support/models/building_address.rb +10 -0
  769. data/spec/support/models/bus.rb +10 -0
  770. data/spec/support/models/business.rb +8 -0
  771. data/spec/support/models/callback_test.rb +12 -0
  772. data/spec/support/models/canvas.rb +28 -0
  773. data/spec/support/models/car.rb +4 -0
  774. data/spec/support/models/cat.rb +11 -0
  775. data/spec/support/models/category.rb +11 -0
  776. data/spec/support/models/child.rb +7 -0
  777. data/spec/support/models/child_doc.rb +25 -0
  778. data/spec/support/models/church.rb +9 -0
  779. data/spec/support/models/circle.rb +6 -0
  780. data/spec/support/models/circuit.rb +7 -0
  781. data/spec/support/models/circus.rb +10 -0
  782. data/spec/support/models/code.rb +14 -0
  783. data/spec/support/models/coding/pull_request.rb +12 -0
  784. data/spec/support/models/coding.rb +4 -0
  785. data/spec/support/models/comment.rb +19 -0
  786. data/spec/support/models/company.rb +8 -0
  787. data/spec/support/models/consumption_period.rb +10 -0
  788. data/spec/support/models/contextable_item.rb +8 -0
  789. data/spec/support/models/contractor.rb +8 -0
  790. data/spec/support/models/cookie.rb +9 -0
  791. data/spec/support/models/country_code.rb +11 -0
  792. data/spec/support/models/courier_job.rb +7 -0
  793. data/spec/support/models/crate.rb +13 -0
  794. data/spec/support/models/customer.rb +11 -0
  795. data/spec/support/models/customer_address.rb +12 -0
  796. data/spec/support/models/deed.rb +8 -0
  797. data/spec/support/models/definition.rb +12 -0
  798. data/spec/support/models/delegating_patient.rb +16 -0
  799. data/spec/support/models/description.rb +14 -0
  800. data/spec/support/models/dictionary.rb +19 -0
  801. data/spec/support/models/division.rb +13 -0
  802. data/spec/support/models/doctor.rb +15 -0
  803. data/spec/support/models/dog.rb +10 -0
  804. data/spec/support/models/dokument.rb +9 -0
  805. data/spec/support/models/draft.rb +12 -0
  806. data/spec/support/models/dragon.rb +7 -0
  807. data/spec/support/models/driver.rb +10 -0
  808. data/spec/support/models/drug.rb +9 -0
  809. data/spec/support/models/dungeon.rb +7 -0
  810. data/spec/support/models/edit.rb +8 -0
  811. data/spec/support/models/email.rb +9 -0
  812. data/spec/support/models/employer.rb +8 -0
  813. data/spec/support/models/entry.rb +9 -0
  814. data/spec/support/models/eraser.rb +4 -0
  815. data/spec/support/models/even.rb +10 -0
  816. data/spec/support/models/event.rb +25 -0
  817. data/spec/support/models/exhibition.rb +7 -0
  818. data/spec/support/models/exhibitor.rb +9 -0
  819. data/spec/support/models/explosion.rb +7 -0
  820. data/spec/support/models/eye.rb +12 -0
  821. data/spec/support/models/eye_bowl.rb +12 -0
  822. data/spec/support/models/face.rb +11 -0
  823. data/spec/support/models/favorite.rb +9 -0
  824. data/spec/support/models/filesystem.rb +8 -0
  825. data/spec/support/models/fire_hydrant.rb +9 -0
  826. data/spec/support/models/firefox.rb +7 -0
  827. data/spec/support/models/fish.rb +10 -0
  828. data/spec/support/models/folder.rb +10 -0
  829. data/spec/support/models/folder_item.rb +12 -0
  830. data/spec/support/models/fruits.rb +37 -0
  831. data/spec/support/models/game.rb +22 -0
  832. data/spec/support/models/ghost.rb +10 -0
  833. data/spec/support/models/guitar.rb +5 -0
  834. data/spec/support/models/hole.rb +13 -0
  835. data/spec/support/models/home.rb +7 -0
  836. data/spec/support/models/house.rb +9 -0
  837. data/spec/support/models/html_writer.rb +6 -0
  838. data/spec/support/models/id_key.rb +9 -0
  839. data/spec/support/models/idnodef.rb +8 -0
  840. data/spec/support/models/image.rb +25 -0
  841. data/spec/support/models/implant.rb +19 -0
  842. data/spec/support/models/instrument.rb +9 -0
  843. data/spec/support/models/item.rb +11 -0
  844. data/spec/support/models/jar.rb +10 -0
  845. data/spec/support/models/kaleidoscope.rb +9 -0
  846. data/spec/support/models/kangaroo.rb +7 -0
  847. data/spec/support/models/label.rb +50 -0
  848. data/spec/support/models/language.rb +8 -0
  849. data/spec/support/models/lat_lng.rb +18 -0
  850. data/spec/support/models/league.rb +14 -0
  851. data/spec/support/models/learner.rb +5 -0
  852. data/spec/support/models/line_item.rb +9 -0
  853. data/spec/support/models/location.rb +11 -0
  854. data/spec/support/models/login.rb +11 -0
  855. data/spec/support/models/manufacturer.rb +10 -0
  856. data/spec/support/models/meat.rb +7 -0
  857. data/spec/support/models/membership.rb +7 -0
  858. data/spec/support/models/message.rb +14 -0
  859. data/spec/support/models/minim.rb +7 -0
  860. data/spec/support/models/mixed_drink.rb +7 -0
  861. data/spec/support/models/mop.rb +25 -0
  862. data/spec/support/models/movie.rb +16 -0
  863. data/spec/support/models/my_hash.rb +5 -0
  864. data/spec/support/models/name.rb +27 -0
  865. data/spec/support/models/name_only.rb +9 -0
  866. data/spec/support/models/node.rb +8 -0
  867. data/spec/support/models/note.rb +20 -0
  868. data/spec/support/models/nut.rb +8 -0
  869. data/spec/support/models/odd.rb +10 -0
  870. data/spec/support/models/order.rb +11 -0
  871. data/spec/support/models/ordered_post.rb +14 -0
  872. data/spec/support/models/ordered_preference.rb +9 -0
  873. data/spec/support/models/oscar.rb +17 -0
  874. data/spec/support/models/other_owner_object.rb +5 -0
  875. data/spec/support/models/override.rb +19 -0
  876. data/spec/support/models/ownable.rb +9 -0
  877. data/spec/support/models/owner.rb +11 -0
  878. data/spec/support/models/pack.rb +6 -0
  879. data/spec/support/models/page.rb +19 -0
  880. data/spec/support/models/page_question.rb +7 -0
  881. data/spec/support/models/palette.rb +10 -0
  882. data/spec/support/models/parent.rb +8 -0
  883. data/spec/support/models/parent_doc.rb +9 -0
  884. data/spec/support/models/passport.rb +9 -0
  885. data/spec/support/models/patient.rb +12 -0
  886. data/spec/support/models/pdf_writer.rb +6 -0
  887. data/spec/support/models/pencil.rb +4 -0
  888. data/spec/support/models/person.rb +230 -0
  889. data/spec/support/models/pet.rb +26 -0
  890. data/spec/support/models/pet_owner.rb +9 -0
  891. data/spec/support/models/phone.rb +13 -0
  892. data/spec/support/models/piano.rb +5 -0
  893. data/spec/support/models/pizza.rb +10 -0
  894. data/spec/support/models/player.rb +38 -0
  895. data/spec/support/models/post.rb +53 -0
  896. data/spec/support/models/post_genre.rb +9 -0
  897. data/spec/support/models/powerup.rb +14 -0
  898. data/spec/support/models/preference.rb +12 -0
  899. data/spec/support/models/princess.rb +13 -0
  900. data/spec/support/models/product.rb +20 -0
  901. data/spec/support/models/profile.rb +18 -0
  902. data/spec/support/models/pronunciation.rb +8 -0
  903. data/spec/support/models/pub.rb +9 -0
  904. data/spec/support/models/publication/encyclopedia.rb +12 -0
  905. data/spec/support/models/publication/review.rb +14 -0
  906. data/spec/support/models/publication.rb +5 -0
  907. data/spec/support/models/purchase.rb +7 -0
  908. data/spec/support/models/question.rb +11 -0
  909. data/spec/support/models/quiz.rb +10 -0
  910. data/spec/support/models/rating.rb +11 -0
  911. data/spec/support/models/record.rb +55 -0
  912. data/spec/support/models/registry.rb +7 -0
  913. data/spec/support/models/role.rb +10 -0
  914. data/spec/support/models/root_category.rb +7 -0
  915. data/spec/support/models/sandwich.rb +12 -0
  916. data/spec/support/models/scheduler.rb +10 -0
  917. data/spec/support/models/scribe.rb +8 -0
  918. data/spec/support/models/sealer.rb +8 -0
  919. data/spec/support/models/seat.rb +25 -0
  920. data/spec/support/models/seo.rb +10 -0
  921. data/spec/support/models/series.rb +8 -0
  922. data/spec/support/models/server.rb +16 -0
  923. data/spec/support/models/service.rb +25 -0
  924. data/spec/support/models/shape.rb +15 -0
  925. data/spec/support/models/shelf.rb +8 -0
  926. data/spec/support/models/shipment_address.rb +6 -0
  927. data/spec/support/models/shipping_container.rb +8 -0
  928. data/spec/support/models/shipping_pack.rb +6 -0
  929. data/spec/support/models/shirt.rb +12 -0
  930. data/spec/support/models/shop.rb +9 -0
  931. data/spec/support/models/short_agent.rb +7 -0
  932. data/spec/support/models/short_quiz.rb +8 -0
  933. data/spec/support/models/simple.rb +8 -0
  934. data/spec/support/models/slave.rb +9 -0
  935. data/spec/support/models/song.rb +11 -0
  936. data/spec/support/models/sound.rb +8 -0
  937. data/spec/support/models/spacer.rb +8 -0
  938. data/spec/support/models/square.rb +7 -0
  939. data/spec/support/models/staff.rb +10 -0
  940. data/spec/support/models/store_as_dup_test1.rb +8 -0
  941. data/spec/support/models/store_as_dup_test2.rb +8 -0
  942. data/spec/support/models/store_as_dup_test3.rb +8 -0
  943. data/spec/support/models/store_as_dup_test4.rb +8 -0
  944. data/spec/support/models/strategy.rb +6 -0
  945. data/spec/support/models/sub_item.rb +6 -0
  946. data/spec/support/models/subscription.rb +8 -0
  947. data/spec/support/models/survey.rb +8 -0
  948. data/spec/support/models/symptom.rb +9 -0
  949. data/spec/support/models/system_role.rb +7 -0
  950. data/spec/support/models/tag.rb +11 -0
  951. data/spec/support/models/target.rb +8 -0
  952. data/spec/support/models/template.rb +8 -0
  953. data/spec/support/models/thing.rb +12 -0
  954. data/spec/support/models/threadlocker.rb +8 -0
  955. data/spec/support/models/title.rb +6 -0
  956. data/spec/support/models/tool.rb +11 -0
  957. data/spec/support/models/topping.rb +8 -0
  958. data/spec/support/models/toy.rb +10 -0
  959. data/spec/support/models/track.rb +41 -0
  960. data/spec/support/models/translation.rb +8 -0
  961. data/spec/support/models/tree.rb +12 -0
  962. data/spec/support/models/truck.rb +8 -0
  963. data/spec/support/models/updatable.rb +8 -0
  964. data/spec/support/models/user.rb +24 -0
  965. data/spec/support/models/user_account.rb +13 -0
  966. data/spec/support/models/validation_callback.rb +13 -0
  967. data/spec/support/models/vehicle.rb +19 -0
  968. data/spec/support/models/version.rb +8 -0
  969. data/spec/support/models/vertex.rb +9 -0
  970. data/spec/support/models/vet_visit.rb +8 -0
  971. data/spec/support/models/video.rb +16 -0
  972. data/spec/support/models/video_game.rb +4 -0
  973. data/spec/support/models/washer.rb +8 -0
  974. data/spec/support/models/weapon.rb +14 -0
  975. data/spec/support/models/wiki_page.rb +18 -0
  976. data/spec/support/models/word.rb +18 -0
  977. data/spec/support/models/word_origin.rb +14 -0
  978. data/spec/support/models/writer.rb +14 -0
  979. data/spec/support/session_registry.rb +50 -0
  980. data/spec/support/shared/time.rb +54 -0
  981. data/spec/support/spec_config.rb +58 -0
  982. data.tar.gz.sig +0 -0
  983. metadata +1226 -814
  984. metadata.gz.sig +0 -0
  985. data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
  986. data/lib/mongoid/matchable/all.rb +0 -27
  987. data/lib/mongoid/matchable/and.rb +0 -30
  988. data/lib/mongoid/matchable/default.rb +0 -72
  989. data/lib/mongoid/matchable/elem_match.rb +0 -28
  990. data/lib/mongoid/matchable/exists.rb +0 -23
  991. data/lib/mongoid/matchable/gt.rb +0 -23
  992. data/lib/mongoid/matchable/gte.rb +0 -23
  993. data/lib/mongoid/matchable/in.rb +0 -24
  994. data/lib/mongoid/matchable/lt.rb +0 -23
  995. data/lib/mongoid/matchable/lte.rb +0 -23
  996. data/lib/mongoid/matchable/ne.rb +0 -21
  997. data/lib/mongoid/matchable/nin.rb +0 -22
  998. data/lib/mongoid/matchable/nor.rb +0 -37
  999. data/lib/mongoid/matchable/or.rb +0 -33
  1000. data/lib/mongoid/matchable/regexp.rb +0 -27
  1001. data/lib/mongoid/matchable/size.rb +0 -21
  1002. data/lib/mongoid/relations/accessors.rb +0 -267
  1003. data/lib/mongoid/relations/auto_save.rb +0 -94
  1004. data/lib/mongoid/relations/binding.rb +0 -218
  1005. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  1006. data/lib/mongoid/relations/bindings/embedded/many.rb +0 -43
  1007. data/lib/mongoid/relations/bindings/embedded/one.rb +0 -45
  1008. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  1009. data/lib/mongoid/relations/bindings/referenced/many.rb +0 -38
  1010. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  1011. data/lib/mongoid/relations/bindings/referenced/one.rb +0 -44
  1012. data/lib/mongoid/relations/bindings.rb +0 -9
  1013. data/lib/mongoid/relations/builder.rb +0 -57
  1014. data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
  1015. data/lib/mongoid/relations/builders/embedded/many.rb +0 -36
  1016. data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
  1017. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  1018. data/lib/mongoid/relations/builders/nested_attributes/one.rb +0 -126
  1019. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  1020. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  1021. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  1022. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  1023. data/lib/mongoid/relations/builders.rb +0 -106
  1024. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  1025. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  1026. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  1027. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  1028. data/lib/mongoid/relations/cascading.rb +0 -56
  1029. data/lib/mongoid/relations/constraint.rb +0 -55
  1030. data/lib/mongoid/relations/conversions.rb +0 -34
  1031. data/lib/mongoid/relations/counter_cache.rb +0 -160
  1032. data/lib/mongoid/relations/cyclic.rb +0 -107
  1033. data/lib/mongoid/relations/eager/base.rb +0 -153
  1034. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  1035. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  1036. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  1037. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  1038. data/lib/mongoid/relations/eager.rb +0 -36
  1039. data/lib/mongoid/relations/embedded/batchable.rb +0 -384
  1040. data/lib/mongoid/relations/embedded/in.rb +0 -241
  1041. data/lib/mongoid/relations/embedded/many.rb +0 -683
  1042. data/lib/mongoid/relations/embedded/one.rb +0 -235
  1043. data/lib/mongoid/relations/macros.rb +0 -367
  1044. data/lib/mongoid/relations/many.rb +0 -242
  1045. data/lib/mongoid/relations/marshalable.rb +0 -32
  1046. data/lib/mongoid/relations/metadata.rb +0 -1179
  1047. data/lib/mongoid/relations/nested_builder.rb +0 -74
  1048. data/lib/mongoid/relations/one.rb +0 -60
  1049. data/lib/mongoid/relations/options.rb +0 -49
  1050. data/lib/mongoid/relations/polymorphic.rb +0 -39
  1051. data/lib/mongoid/relations/proxy.rb +0 -215
  1052. data/lib/mongoid/relations/referenced/in.rb +0 -304
  1053. data/lib/mongoid/relations/referenced/many.rb +0 -812
  1054. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  1055. data/lib/mongoid/relations/referenced/one.rb +0 -290
  1056. data/lib/mongoid/relations/reflections.rb +0 -64
  1057. data/lib/mongoid/relations/synchronization.rb +0 -169
  1058. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  1059. data/lib/mongoid/relations/targets.rb +0 -2
  1060. data/lib/mongoid/relations/touchable.rb +0 -97
  1061. data/lib/mongoid/relations.rb +0 -148
  1062. data/spec/app/models/account.rb +0 -36
  1063. data/spec/app/models/acolyte.rb +0 -17
  1064. data/spec/app/models/actor.rb +0 -18
  1065. data/spec/app/models/actress.rb +0 -2
  1066. data/spec/app/models/address.rb +0 -79
  1067. data/spec/app/models/address_component.rb +0 -5
  1068. data/spec/app/models/address_number.rb +0 -6
  1069. data/spec/app/models/agency.rb +0 -5
  1070. data/spec/app/models/agent.rb +0 -16
  1071. data/spec/app/models/album.rb +0 -18
  1072. data/spec/app/models/alert.rb +0 -7
  1073. data/spec/app/models/animal.rb +0 -25
  1074. data/spec/app/models/answer.rb +0 -6
  1075. data/spec/app/models/appointment.rb +0 -7
  1076. data/spec/app/models/array_field.rb +0 -7
  1077. data/spec/app/models/article.rb +0 -12
  1078. data/spec/app/models/artist.rb +0 -87
  1079. data/spec/app/models/artwork.rb +0 -4
  1080. data/spec/app/models/audio.rb +0 -5
  1081. data/spec/app/models/augmentation.rb +0 -11
  1082. data/spec/app/models/author.rb +0 -6
  1083. data/spec/app/models/baby.rb +0 -4
  1084. data/spec/app/models/band.rb +0 -31
  1085. data/spec/app/models/bar.rb +0 -10
  1086. data/spec/app/models/basic.rb +0 -6
  1087. data/spec/app/models/bed.rb +0 -1
  1088. data/spec/app/models/big_palette.rb +0 -2
  1089. data/spec/app/models/birthday.rb +0 -13
  1090. data/spec/app/models/bomb.rb +0 -4
  1091. data/spec/app/models/book.rb +0 -16
  1092. data/spec/app/models/breed.rb +0 -4
  1093. data/spec/app/models/browser.rb +0 -6
  1094. data/spec/app/models/building.rb +0 -6
  1095. data/spec/app/models/building_address.rb +0 -7
  1096. data/spec/app/models/bus.rb +0 -7
  1097. data/spec/app/models/business.rb +0 -5
  1098. data/spec/app/models/callback_test.rb +0 -9
  1099. data/spec/app/models/canvas.rb +0 -25
  1100. data/spec/app/models/car.rb +0 -1
  1101. data/spec/app/models/cat.rb +0 -8
  1102. data/spec/app/models/category.rb +0 -8
  1103. data/spec/app/models/child.rb +0 -4
  1104. data/spec/app/models/child_doc.rb +0 -22
  1105. data/spec/app/models/church.rb +0 -6
  1106. data/spec/app/models/circle.rb +0 -3
  1107. data/spec/app/models/circuit.rb +0 -4
  1108. data/spec/app/models/circus.rb +0 -7
  1109. data/spec/app/models/code.rb +0 -11
  1110. data/spec/app/models/comment.rb +0 -16
  1111. data/spec/app/models/company.rb +0 -5
  1112. data/spec/app/models/consumption_period.rb +0 -7
  1113. data/spec/app/models/contextable_item.rb +0 -5
  1114. data/spec/app/models/contractor.rb +0 -5
  1115. data/spec/app/models/cookie.rb +0 -6
  1116. data/spec/app/models/country_code.rb +0 -8
  1117. data/spec/app/models/courier_job.rb +0 -4
  1118. data/spec/app/models/definition.rb +0 -9
  1119. data/spec/app/models/description.rb +0 -11
  1120. data/spec/app/models/dictionary.rb +0 -10
  1121. data/spec/app/models/division.rb +0 -10
  1122. data/spec/app/models/doctor.rb +0 -12
  1123. data/spec/app/models/dog.rb +0 -7
  1124. data/spec/app/models/dokument.rb +0 -6
  1125. data/spec/app/models/draft.rb +0 -9
  1126. data/spec/app/models/dragon.rb +0 -4
  1127. data/spec/app/models/driver.rb +0 -7
  1128. data/spec/app/models/drug.rb +0 -6
  1129. data/spec/app/models/dungeon.rb +0 -4
  1130. data/spec/app/models/edit.rb +0 -5
  1131. data/spec/app/models/email.rb +0 -6
  1132. data/spec/app/models/employer.rb +0 -5
  1133. data/spec/app/models/entry.rb +0 -6
  1134. data/spec/app/models/eraser.rb +0 -1
  1135. data/spec/app/models/even.rb +0 -7
  1136. data/spec/app/models/event.rb +0 -22
  1137. data/spec/app/models/exhibition.rb +0 -4
  1138. data/spec/app/models/exhibitor.rb +0 -6
  1139. data/spec/app/models/explosion.rb +0 -4
  1140. data/spec/app/models/eye.rb +0 -9
  1141. data/spec/app/models/eye_bowl.rb +0 -9
  1142. data/spec/app/models/face.rb +0 -8
  1143. data/spec/app/models/favorite.rb +0 -6
  1144. data/spec/app/models/filesystem.rb +0 -5
  1145. data/spec/app/models/fire_hydrant.rb +0 -6
  1146. data/spec/app/models/firefox.rb +0 -4
  1147. data/spec/app/models/fish.rb +0 -7
  1148. data/spec/app/models/folder.rb +0 -7
  1149. data/spec/app/models/folder_item.rb +0 -9
  1150. data/spec/app/models/fruits.rb +0 -34
  1151. data/spec/app/models/game.rb +0 -19
  1152. data/spec/app/models/ghost.rb +0 -7
  1153. data/spec/app/models/home.rb +0 -4
  1154. data/spec/app/models/house.rb +0 -6
  1155. data/spec/app/models/html_writer.rb +0 -3
  1156. data/spec/app/models/id_key.rb +0 -6
  1157. data/spec/app/models/image.rb +0 -22
  1158. data/spec/app/models/implant.rb +0 -16
  1159. data/spec/app/models/item.rb +0 -8
  1160. data/spec/app/models/jar.rb +0 -7
  1161. data/spec/app/models/kaleidoscope.rb +0 -6
  1162. data/spec/app/models/kangaroo.rb +0 -4
  1163. data/spec/app/models/label.rb +0 -47
  1164. data/spec/app/models/language.rb +0 -5
  1165. data/spec/app/models/lat_lng.rb +0 -15
  1166. data/spec/app/models/league.rb +0 -11
  1167. data/spec/app/models/learner.rb +0 -2
  1168. data/spec/app/models/line_item.rb +0 -6
  1169. data/spec/app/models/location.rb +0 -8
  1170. data/spec/app/models/login.rb +0 -8
  1171. data/spec/app/models/manufacturer.rb +0 -7
  1172. data/spec/app/models/meat.rb +0 -4
  1173. data/spec/app/models/membership.rb +0 -4
  1174. data/spec/app/models/message.rb +0 -11
  1175. data/spec/app/models/mixed_drink.rb +0 -4
  1176. data/spec/app/models/movie.rb +0 -13
  1177. data/spec/app/models/my_hash.rb +0 -2
  1178. data/spec/app/models/name.rb +0 -24
  1179. data/spec/app/models/node.rb +0 -5
  1180. data/spec/app/models/note.rb +0 -17
  1181. data/spec/app/models/odd.rb +0 -7
  1182. data/spec/app/models/ordered_post.rb +0 -11
  1183. data/spec/app/models/ordered_preference.rb +0 -6
  1184. data/spec/app/models/oscar.rb +0 -14
  1185. data/spec/app/models/override.rb +0 -16
  1186. data/spec/app/models/ownable.rb +0 -6
  1187. data/spec/app/models/owner.rb +0 -6
  1188. data/spec/app/models/pack.rb +0 -3
  1189. data/spec/app/models/page.rb +0 -16
  1190. data/spec/app/models/page_question.rb +0 -4
  1191. data/spec/app/models/palette.rb +0 -7
  1192. data/spec/app/models/parent.rb +0 -5
  1193. data/spec/app/models/parent_doc.rb +0 -6
  1194. data/spec/app/models/passport.rb +0 -5
  1195. data/spec/app/models/patient.rb +0 -9
  1196. data/spec/app/models/pdf_writer.rb +0 -3
  1197. data/spec/app/models/pencil.rb +0 -1
  1198. data/spec/app/models/person.rb +0 -207
  1199. data/spec/app/models/pet.rb +0 -23
  1200. data/spec/app/models/pet_owner.rb +0 -6
  1201. data/spec/app/models/phone.rb +0 -9
  1202. data/spec/app/models/pizza.rb +0 -7
  1203. data/spec/app/models/player.rb +0 -35
  1204. data/spec/app/models/post.rb +0 -50
  1205. data/spec/app/models/post_genre.rb +0 -6
  1206. data/spec/app/models/powerup.rb +0 -11
  1207. data/spec/app/models/preference.rb +0 -9
  1208. data/spec/app/models/princess.rb +0 -10
  1209. data/spec/app/models/product.rb +0 -17
  1210. data/spec/app/models/profile.rb +0 -5
  1211. data/spec/app/models/pronunciation.rb +0 -5
  1212. data/spec/app/models/pub.rb +0 -6
  1213. data/spec/app/models/purchase.rb +0 -4
  1214. data/spec/app/models/question.rb +0 -8
  1215. data/spec/app/models/quiz.rb +0 -7
  1216. data/spec/app/models/rating.rb +0 -8
  1217. data/spec/app/models/record.rb +0 -52
  1218. data/spec/app/models/registry.rb +0 -4
  1219. data/spec/app/models/role.rb +0 -7
  1220. data/spec/app/models/root_category.rb +0 -4
  1221. data/spec/app/models/sandwich.rb +0 -9
  1222. data/spec/app/models/scheduler.rb +0 -7
  1223. data/spec/app/models/seo.rb +0 -7
  1224. data/spec/app/models/series.rb +0 -4
  1225. data/spec/app/models/server.rb +0 -13
  1226. data/spec/app/models/service.rb +0 -22
  1227. data/spec/app/models/shape.rb +0 -12
  1228. data/spec/app/models/shelf.rb +0 -5
  1229. data/spec/app/models/shipment_address.rb +0 -2
  1230. data/spec/app/models/shipping_container.rb +0 -5
  1231. data/spec/app/models/shipping_pack.rb +0 -3
  1232. data/spec/app/models/shop.rb +0 -6
  1233. data/spec/app/models/short_agent.rb +0 -4
  1234. data/spec/app/models/short_quiz.rb +0 -5
  1235. data/spec/app/models/simple.rb +0 -5
  1236. data/spec/app/models/slave.rb +0 -6
  1237. data/spec/app/models/song.rb +0 -8
  1238. data/spec/app/models/sound.rb +0 -5
  1239. data/spec/app/models/square.rb +0 -4
  1240. data/spec/app/models/staff.rb +0 -7
  1241. data/spec/app/models/store_as_dup_test1.rb +0 -5
  1242. data/spec/app/models/store_as_dup_test2.rb +0 -5
  1243. data/spec/app/models/strategy.rb +0 -3
  1244. data/spec/app/models/sub_item.rb +0 -3
  1245. data/spec/app/models/subscription.rb +0 -5
  1246. data/spec/app/models/survey.rb +0 -5
  1247. data/spec/app/models/symptom.rb +0 -6
  1248. data/spec/app/models/tag.rb +0 -8
  1249. data/spec/app/models/target.rb +0 -5
  1250. data/spec/app/models/template.rb +0 -5
  1251. data/spec/app/models/thing.rb +0 -9
  1252. data/spec/app/models/title.rb +0 -3
  1253. data/spec/app/models/tool.rb +0 -8
  1254. data/spec/app/models/topping.rb +0 -5
  1255. data/spec/app/models/track.rb +0 -38
  1256. data/spec/app/models/translation.rb +0 -5
  1257. data/spec/app/models/tree.rb +0 -9
  1258. data/spec/app/models/truck.rb +0 -3
  1259. data/spec/app/models/user.rb +0 -21
  1260. data/spec/app/models/user_account.rb +0 -10
  1261. data/spec/app/models/validation_callback.rb +0 -10
  1262. data/spec/app/models/vehicle.rb +0 -11
  1263. data/spec/app/models/version.rb +0 -5
  1264. data/spec/app/models/vet_visit.rb +0 -5
  1265. data/spec/app/models/video.rb +0 -13
  1266. data/spec/app/models/video_game.rb +0 -1
  1267. data/spec/app/models/weapon.rb +0 -11
  1268. data/spec/app/models/wiki_page.rb +0 -14
  1269. data/spec/app/models/word.rb +0 -15
  1270. data/spec/app/models/word_origin.rb +0 -11
  1271. data/spec/app/models/writer.rb +0 -11
  1272. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
  1273. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  1274. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  1275. data/spec/mongoid/matchable/all_spec.rb +0 -31
  1276. data/spec/mongoid/matchable/and_spec.rb +0 -187
  1277. data/spec/mongoid/matchable/default_spec.rb +0 -130
  1278. data/spec/mongoid/matchable/elem_match_spec.rb +0 -86
  1279. data/spec/mongoid/matchable/exists_spec.rb +0 -57
  1280. data/spec/mongoid/matchable/gt_spec.rb +0 -86
  1281. data/spec/mongoid/matchable/gte_spec.rb +0 -84
  1282. data/spec/mongoid/matchable/in_spec.rb +0 -49
  1283. data/spec/mongoid/matchable/lt_spec.rb +0 -85
  1284. data/spec/mongoid/matchable/lte_spec.rb +0 -85
  1285. data/spec/mongoid/matchable/ne_spec.rb +0 -46
  1286. data/spec/mongoid/matchable/nin_spec.rb +0 -48
  1287. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  1288. data/spec/mongoid/matchable/or_spec.rb +0 -131
  1289. data/spec/mongoid/matchable/regexp_spec.rb +0 -59
  1290. data/spec/mongoid/matchable/size_spec.rb +0 -25
  1291. data/spec/mongoid/matchable_spec.rb +0 -853
  1292. data/spec/mongoid/relations/accessors_spec.rb +0 -821
  1293. data/spec/mongoid/relations/auto_save_spec.rb +0 -314
  1294. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +0 -171
  1295. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +0 -54
  1296. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +0 -77
  1297. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +0 -241
  1298. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +0 -153
  1299. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +0 -178
  1300. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +0 -131
  1301. data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
  1302. data/spec/mongoid/relations/builders/embedded/many_spec.rb +0 -132
  1303. data/spec/mongoid/relations/builders/embedded/one_spec.rb +0 -99
  1304. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +0 -233
  1305. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +0 -250
  1306. data/spec/mongoid/relations/builders/referenced/in_spec.rb +0 -230
  1307. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  1308. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  1309. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  1310. data/spec/mongoid/relations/builders_spec.rb +0 -253
  1311. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  1312. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  1313. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  1314. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  1315. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  1316. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  1317. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  1318. data/spec/mongoid/relations/counter_cache_spec.rb +0 -450
  1319. data/spec/mongoid/relations/cyclic_spec.rb +0 -178
  1320. data/spec/mongoid/relations/eager/belongs_to_spec.rb +0 -163
  1321. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +0 -133
  1322. data/spec/mongoid/relations/eager/has_many_spec.rb +0 -244
  1323. data/spec/mongoid/relations/eager/has_one_spec.rb +0 -163
  1324. data/spec/mongoid/relations/eager_spec.rb +0 -279
  1325. data/spec/mongoid/relations/embedded/dirty_spec.rb +0 -65
  1326. data/spec/mongoid/relations/embedded/in_spec.rb +0 -579
  1327. data/spec/mongoid/relations/embedded/many_spec.rb +0 -4412
  1328. data/spec/mongoid/relations/embedded/one_spec.rb +0 -1068
  1329. data/spec/mongoid/relations/macros_spec.rb +0 -1039
  1330. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  1331. data/spec/mongoid/relations/options_spec.rb +0 -35
  1332. data/spec/mongoid/relations/polymorphic_spec.rb +0 -128
  1333. data/spec/mongoid/relations/referenced/in_spec.rb +0 -1366
  1334. data/spec/mongoid/relations/referenced/many_spec.rb +0 -3816
  1335. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +0 -3577
  1336. data/spec/mongoid/relations/referenced/one_spec.rb +0 -1240
  1337. data/spec/mongoid/relations/reflections_spec.rb +0 -101
  1338. data/spec/mongoid/relations/synchronization_spec.rb +0 -495
  1339. data/spec/mongoid/relations/targets/enumerable_spec.rb +0 -1825
  1340. data/spec/mongoid/relations/touchable_spec.rb +0 -402
  1341. data/spec/mongoid/relations_spec.rb +0 -189
@@ -1,1985 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Relations::Metadata do
4
-
5
- describe "#counter_cached?" do
6
-
7
- context "when counter_cache is false" do
8
-
9
- let(:metadata) do
10
- described_class.new(
11
- name: :car,
12
- relation: Mongoid::Relations::Referenced::In,
13
- counter_cache: false
14
- )
15
- end
16
-
17
- it "returns false" do
18
- expect(metadata).to_not be_counter_cached
19
- end
20
- end
21
-
22
- context "when counter_cache is true" do
23
-
24
- let(:metadata) do
25
- described_class.new(
26
- name: :car,
27
- relation: Mongoid::Relations::Referenced::In,
28
- counter_cache: true
29
- )
30
- end
31
-
32
- it "returns true" do
33
- expect(metadata).to be_counter_cached
34
- end
35
- end
36
-
37
- context "when counter_cache is name for column" do
38
-
39
- let(:metadata) do
40
- described_class.new(
41
- name: :car,
42
- relation: Mongoid::Relations::Referenced::In,
43
- counter_cache: 'counter'
44
- )
45
- end
46
-
47
- it "returns true" do
48
- expect(metadata).to be_counter_cached
49
- end
50
- end
51
-
52
- context "when counter_cache is nil" do
53
-
54
- let(:metadata) do
55
- described_class.new(
56
- name: :car,
57
- relation: Mongoid::Relations::Referenced::In,
58
- )
59
- end
60
-
61
- it "returns false" do
62
- expect(metadata).to_not be_counter_cached
63
- end
64
- end
65
- end
66
-
67
- describe "#counter_cache_column_name" do
68
-
69
- let(:inverse_class_name) do
70
- "Wheel"
71
- end
72
-
73
- context "when the counter_cache is true" do
74
-
75
- let(:metadata) do
76
- described_class.new(
77
- name: :car,
78
- relation: Mongoid::Relations::Referenced::In,
79
- inverse_class_name: inverse_class_name,
80
- counter_cache: true
81
- )
82
- end
83
-
84
- before do
85
- expect(metadata).to receive(:inverse).and_return(:wheels)
86
- end
87
-
88
- it "returns inverse name + _count" do
89
- expect(metadata.counter_cache_column_name).to eq(
90
- "#{inverse_class_name.demodulize.underscore.pluralize}_count"
91
- )
92
- end
93
- end
94
-
95
- context "when given a custom name for counter cache" do
96
- let(:counter_cache_name) { 'counte_cache_for_wheels' }
97
- let(:metadata) do
98
- described_class.new(
99
- name: :car,
100
- relation: Mongoid::Relations::Referenced::In,
101
- inverse_class_name: inverse_class_name,
102
- counter_cache: counter_cache_name
103
- )
104
- end
105
-
106
- it "returns the name given" do
107
- expect(metadata.counter_cache_column_name).to eq(counter_cache_name)
108
- end
109
- end
110
- end
111
-
112
- describe "#autobuilding?" do
113
-
114
- context "when the option is true" do
115
-
116
- let(:metadata) do
117
- described_class.new(
118
- relation: Mongoid::Relations::Embedded::One,
119
- autobuild: true
120
- )
121
- end
122
-
123
- it "returns true" do
124
- expect(metadata).to be_autobuilding
125
- end
126
- end
127
-
128
- context "when the option is false" do
129
-
130
- let(:metadata) do
131
- described_class.new(
132
- relation: Mongoid::Relations::Embedded::One,
133
- autobuild: false
134
- )
135
- end
136
-
137
- it "returns false" do
138
- expect(metadata).to_not be_autobuilding
139
- end
140
- end
141
-
142
- context "when the option is nil" do
143
-
144
- let(:metadata) do
145
- described_class.new(
146
- relation: Mongoid::Relations::Embedded::One
147
- )
148
- end
149
-
150
- it "returns false" do
151
- expect(metadata).to_not be_autobuilding
152
- end
153
- end
154
- end
155
-
156
- describe "#builder" do
157
-
158
- let(:metadata) do
159
- described_class.new(relation: Mongoid::Relations::Embedded::One)
160
- end
161
-
162
- let(:object) do
163
- double
164
- end
165
-
166
- let(:base) do
167
- double
168
- end
169
-
170
- it "returns the builder from the relation" do
171
- expect(
172
- metadata.builder(base, object)
173
- ).to be_a_kind_of(Mongoid::Relations::Builders::Embedded::One)
174
- end
175
- end
176
-
177
- describe "#cascading_callbacks?" do
178
-
179
- context "when the option is true" do
180
-
181
- let(:metadata) do
182
- described_class.new(
183
- relation: Mongoid::Relations::Embedded::Many,
184
- cascade_callbacks: true
185
- )
186
- end
187
-
188
- it "returns true" do
189
- expect(metadata).to be_cascading_callbacks
190
- end
191
- end
192
-
193
- context "when the option is false" do
194
-
195
- let(:metadata) do
196
- described_class.new(
197
- relation: Mongoid::Relations::Embedded::Many,
198
- cascade_callbacks: false
199
- )
200
- end
201
-
202
- it "returns false" do
203
- expect(metadata).to_not be_cascading_callbacks
204
- end
205
- end
206
-
207
- context "when the option is nil" do
208
-
209
- let(:metadata) do
210
- described_class.new(
211
- relation: Mongoid::Relations::Embedded::Many
212
- )
213
- end
214
-
215
- it "returns false" do
216
- expect(metadata).to_not be_cascading_callbacks
217
- end
218
- end
219
- end
220
-
221
- describe "#cascade_strategy" do
222
-
223
- context "when no dependent option is set" do
224
-
225
- let(:metadata) do
226
- described_class.new(
227
- name: :posts,
228
- relation: Mongoid::Relations::Referenced::Many
229
- )
230
- end
231
-
232
- it "returns nil" do
233
- expect(metadata.cascade_strategy).to be_nil
234
- end
235
- end
236
-
237
- context "when dependent is delete" do
238
-
239
- let(:metadata) do
240
- described_class.new(
241
- name: :posts,
242
- relation: Mongoid::Relations::Referenced::Many,
243
- dependent: :delete
244
- )
245
- end
246
-
247
- it "returns the delete strategy" do
248
- expect(metadata.cascade_strategy).to eq(
249
- Mongoid::Relations::Cascading::Delete
250
- )
251
- end
252
- end
253
-
254
- context "when dependent is destroy" do
255
-
256
- let(:metadata) do
257
- described_class.new(
258
- name: :posts,
259
- relation: Mongoid::Relations::Referenced::Many,
260
- dependent: :destroy
261
- )
262
- end
263
-
264
- it "returns the destroy strategy" do
265
- expect(metadata.cascade_strategy).to eq(
266
- Mongoid::Relations::Cascading::Destroy
267
- )
268
- end
269
- end
270
-
271
- context "when dependent is nullify" do
272
-
273
- let(:metadata) do
274
- described_class.new(
275
- name: :posts,
276
- relation: Mongoid::Relations::Referenced::Many,
277
- dependent: :nullify
278
- )
279
- end
280
-
281
- it "returns the nullify strategy" do
282
- expect(metadata.cascade_strategy).to eq(
283
- Mongoid::Relations::Cascading::Nullify
284
- )
285
- end
286
- end
287
- end
288
-
289
- describe "#constraint" do
290
-
291
- let(:metadata) do
292
- described_class.new(
293
- relation: Mongoid::Relations::Referenced::Many,
294
- class_name: "Person"
295
- )
296
- end
297
-
298
- it "returns the constraint object" do
299
- expect(metadata.constraint).to be_a(Mongoid::Relations::Constraint)
300
- end
301
- end
302
-
303
- describe "#classify" do
304
-
305
- let(:name) do
306
- "name"
307
- end
308
-
309
- let(:metadata) do
310
- described_class.new(name: name)
311
- end
312
-
313
- let(:classified) do
314
- metadata.send(:classify)
315
- end
316
-
317
- before do
318
- expect(Mongoid::Relations::Options).to receive(:validate!).at_least(:once)
319
- end
320
-
321
- it "concatenates the result from #find_module and name.classify" do
322
- expect(metadata).to receive(:find_module).once.and_return("Fruit")
323
- expect(classified).to eq("Fruit::Name")
324
- end
325
- end
326
-
327
- describe "#find_module" do
328
-
329
- let(:name) do
330
- "name"
331
- end
332
-
333
- let(:metadata) do
334
- described_class.new(name: name, inverse_class_name: inverse_class_name)
335
- end
336
-
337
- let(:mod) do
338
- metadata.send(:find_module)
339
- end
340
-
341
- before do
342
- expect(Mongoid::Relations::Options).to receive(:validate!).at_least(:once)
343
- end
344
-
345
- context "when inverse_class_name is nil" do
346
-
347
- let(:inverse_class_name) do
348
- nil
349
- end
350
-
351
- it "returns nil" do
352
- expect(mod).to be_nil
353
- end
354
- end
355
-
356
- context "when inverse_class_name is empty" do
357
-
358
- let(:inverse_class_name) do
359
- ""
360
- end
361
-
362
- it "returns nil" do
363
- expect(mod).to be_nil
364
- end
365
- end
366
-
367
- context "when inverse_class_name is defined" do
368
-
369
- context "when inverse_class_name is in root namespace" do
370
-
371
- let(:inverse_class_name) do
372
- "Person"
373
- end
374
-
375
- context "when name isn't defined" do
376
-
377
- let(:name) do
378
- "undefined"
379
- end
380
-
381
- it "returns nil" do
382
- expect(mod).to be_nil
383
- end
384
- end
385
-
386
- context "when name is defined in root namespace" do
387
-
388
- let(:name) do
389
- "account"
390
- end
391
-
392
- it "returns root namespace" do
393
- expect(mod).to be_nil
394
- end
395
- end
396
-
397
- context "when name is defined in module Fruits" do
398
-
399
- context "when inverse_class_name is defined in the same module" do
400
-
401
- let(:inverse_class_name) do
402
- "Fruits::Apple"
403
- end
404
-
405
- let(:name) do
406
- "banana"
407
- end
408
-
409
- it "returns Fruits" do
410
- expect(mod).to eq("Fruits")
411
- end
412
- end
413
-
414
- context "when inverse_class_name is defined in a nested module" do
415
-
416
- let(:inverse_class_name) do
417
- "Fruits::Big::Ananas"
418
- end
419
-
420
- let(:name) do
421
- "banana"
422
- end
423
-
424
- it "returns Fruits" do
425
- expect(mod).to eq("Fruits")
426
- end
427
- end
428
-
429
- context "when the inverse_class_name is defined in the root namespace" do
430
-
431
- let(:inverse_class_name) do
432
- "Person"
433
- end
434
-
435
- let(:name) do
436
- "banana"
437
- end
438
-
439
- it "returns nil" do
440
- expect(mod).to be_nil
441
- end
442
- end
443
- end
444
- end
445
- end
446
- end
447
-
448
- describe "#class_name" do
449
-
450
- context "when class_name provided" do
451
-
452
- context "when the class name contains leading ::" do
453
-
454
- let(:metadata) do
455
- described_class.new(
456
- relation: Mongoid::Relations::Referenced::Many,
457
- class_name: "::Person"
458
- )
459
- end
460
-
461
- it "returns the stripped class name" do
462
- expect(metadata.class_name).to eq("Person")
463
- end
464
- end
465
-
466
- context "when the class name has no prefix" do
467
-
468
- let(:metadata) do
469
- described_class.new(
470
- relation: Mongoid::Relations::Referenced::Many,
471
- class_name: "Person"
472
- )
473
- end
474
-
475
- it "constantizes the class name" do
476
- expect(metadata.class_name).to eq("Person")
477
- end
478
- end
479
- end
480
-
481
- context "when no class_name provided" do
482
-
483
- context "when inverse_class_name is provided" do
484
-
485
- context "when inverse_class_name is a simple class name" do
486
-
487
- context "when association name is singular" do
488
-
489
- let(:relation) do
490
- Mongoid::Relations::Embedded::One
491
- end
492
-
493
- let(:metadata) do
494
- described_class.new(name: :name, relation: relation, inverse_class_name: "Person")
495
- end
496
-
497
- it "classifies and constantizes the association name and adds the module" do
498
- expect(metadata.class_name).to eq("Name")
499
- end
500
- end
501
-
502
- context "when association name is plural" do
503
-
504
- let(:relation) do
505
- Mongoid::Relations::Embedded::Many
506
- end
507
-
508
- let(:metadata) do
509
- described_class.new(name: :addresses, relation: relation, inverse_class_name: "Person")
510
- end
511
-
512
- it "classifies and constantizes the association name and adds the module" do
513
- expect(metadata.class_name).to eq("Address")
514
- end
515
- end
516
-
517
- end
518
-
519
- context "when inverse_class_name is a class name in a module" do
520
-
521
- context "when association name is singular" do
522
-
523
- let(:relation) do
524
- Mongoid::Relations::Embedded::One
525
- end
526
-
527
- let(:metadata) do
528
- described_class.new(name: :apple, relation: relation, inverse_class_name: "Fruits::Banana")
529
- end
530
-
531
- it "classifies and constantizes the association name and adds the module" do
532
- expect(metadata.class_name).to eq("Fruits::Apple")
533
- end
534
- end
535
-
536
- context "when association name is plural" do
537
-
538
- let(:relation) do
539
- Mongoid::Relations::Embedded::Many
540
- end
541
-
542
- let(:metadata) do
543
- described_class.new(name: :apples, relation: relation, inverse_class_name: "Fruits::Banana")
544
- end
545
-
546
- it "classifies and constantizes the association name and adds the module" do
547
- expect(metadata.class_name).to eq("Fruits::Apple")
548
- end
549
- end
550
-
551
- end
552
- end
553
-
554
- context "when no inverse_class_name is provided" do
555
-
556
- context "when association name is singular" do
557
-
558
- let(:relation) do
559
- Mongoid::Relations::Embedded::One
560
- end
561
-
562
- let(:metadata) do
563
- described_class.new(name: :name, relation: relation)
564
- end
565
-
566
- it "classifies and constantizes the association name" do
567
- expect(metadata.class_name).to eq("Name")
568
- end
569
- end
570
-
571
- context "when association name is plural" do
572
-
573
- let(:relation) do
574
- Mongoid::Relations::Embedded::Many
575
- end
576
-
577
- let(:metadata) do
578
- described_class.new(name: :addresses, relation: relation)
579
- end
580
-
581
- it "classifies and constantizes the association name" do
582
- expect(metadata.class_name).to eq("Address")
583
- end
584
- end
585
- end
586
- end
587
- end
588
-
589
- context "when the association is polymorphic" do
590
-
591
- let(:metadata) do
592
- described_class.new(
593
- name: :ratable,
594
- relation: Mongoid::Relations::Referenced::In,
595
- polymorphic: true,
596
- inverse_class_name: "Rating"
597
- )
598
- end
599
-
600
- it "returns the polymorphic class name" do
601
- expect(metadata.class_name).to eq("Ratable")
602
- end
603
- end
604
-
605
- describe "#destructive?" do
606
-
607
- context "when the relation has a destructive dependent option" do
608
-
609
- let(:metadata) do
610
- described_class.new(
611
- relation: Mongoid::Relations::Referenced::Many,
612
- dependent: :destroy
613
- )
614
- end
615
-
616
- it "returns true" do
617
- expect(metadata).to be_destructive
618
- end
619
- end
620
-
621
- context "when no dependent option" do
622
-
623
- let(:metadata) do
624
- described_class.new(
625
- relation: Mongoid::Relations::Referenced::Many
626
- )
627
- end
628
-
629
- it "returns false" do
630
- expect(metadata).to_not be_destructive
631
- end
632
- end
633
- end
634
-
635
- describe "#embedded?" do
636
-
637
- context "when the relation is embedded" do
638
-
639
- let(:metadata) do
640
- described_class.new(
641
- relation: Mongoid::Relations::Embedded::Many
642
- )
643
- end
644
-
645
- it "returns true" do
646
- expect(metadata).to be_embedded
647
- end
648
- end
649
-
650
- context "when the relation is not embedded" do
651
-
652
- let(:metadata) do
653
- described_class.new(
654
- relation: Mongoid::Relations::Referenced::Many
655
- )
656
- end
657
-
658
- it "returns false" do
659
- expect(metadata).to_not be_embedded
660
- end
661
- end
662
- end
663
-
664
- describe "#extension" do
665
-
666
- let(:metadata) do
667
- described_class.new(
668
- relation: Mongoid::Relations::Referenced::Many,
669
- extend: :value
670
- )
671
- end
672
-
673
- it "returns the extend property" do
674
- expect(metadata.extension).to eq(:value)
675
- end
676
- end
677
-
678
- describe "#extension?" do
679
-
680
- context "when an extends property exists" do
681
-
682
- let(:metadata) do
683
- described_class.new(
684
- relation: Mongoid::Relations::Referenced::Many,
685
- extend: :value
686
- )
687
- end
688
-
689
- it "returns true" do
690
- expect(metadata.extension?).to be true
691
- end
692
- end
693
-
694
- context "when the extend option is nil" do
695
-
696
- let(:metadata) do
697
- described_class.new(
698
- relation: Mongoid::Relations::Referenced::Many
699
- )
700
- end
701
-
702
- it "returns false" do
703
- expect(metadata.extension?).to be false
704
- end
705
- end
706
- end
707
-
708
- describe "#foreign_key" do
709
-
710
- context "when no foreign key was explicitly defined" do
711
-
712
- context "when the relation stores a foreign key" do
713
-
714
- context "when referenced in" do
715
-
716
- context "when not providing a class name" do
717
-
718
- let(:metadata) do
719
- described_class.new(
720
- name: :person,
721
- relation: Mongoid::Relations::Referenced::In
722
- )
723
- end
724
-
725
- it "returns the foreign_key" do
726
- expect(metadata.foreign_key).to eq("person_id")
727
- end
728
- end
729
-
730
- context "when providing a class name" do
731
-
732
- let(:metadata) do
733
- described_class.new(
734
- name: :person,
735
- relation: Mongoid::Relations::Referenced::In,
736
- class_name: "TheseAreNotTheDriods"
737
- )
738
- end
739
-
740
- it "returns the foreign_key" do
741
- expect(metadata.foreign_key).to eq("person_id")
742
- end
743
- end
744
-
745
- context "when the class is namespaces" do
746
-
747
- let(:metadata) do
748
- described_class.new(
749
- name: :apple,
750
- relation: Mongoid::Relations::Referenced::In,
751
- class_name: "Fruits::Apple"
752
- )
753
- end
754
-
755
- it "returns the foreign_key without the module name" do
756
- expect(metadata.foreign_key).to eq("apple_id")
757
- end
758
- end
759
- end
760
-
761
- context "when references and referenced in many" do
762
-
763
- let(:metadata) do
764
- described_class.new(
765
- name: :people,
766
- relation: Mongoid::Relations::Referenced::ManyToMany
767
- )
768
- end
769
-
770
- it "returns the foreign_key" do
771
- expect(metadata.foreign_key).to eq("person_ids")
772
- end
773
-
774
- context "given a specific foreign key" do
775
-
776
- let(:metadata) do
777
- described_class.new(
778
- name: :follower,
779
- foreign_key: :follower_list,
780
- relation: Mongoid::Relations::Referenced::ManyToMany
781
- )
782
- end
783
-
784
- it "returns the foreign_key" do
785
- expect(metadata.foreign_key).to eq("follower_list")
786
- end
787
- end
788
-
789
- context "using name as foreign key" do
790
-
791
- let(:metadata) do
792
- described_class.new(
793
- name: :followers,
794
- class_name: "Person",
795
- relation: Mongoid::Relations::Referenced::ManyToMany
796
- )
797
- end
798
-
799
- it "returns the foreign_key" do
800
- expect(metadata.foreign_key).to eq("follower_ids")
801
- end
802
- end
803
-
804
- context "when the class is namespaced" do
805
-
806
- let(:metadata) do
807
- described_class.new(
808
- name: :bananas,
809
- relation: Mongoid::Relations::Referenced::ManyToMany,
810
- inverse_class_name: "Fruits::Apple",
811
- class_name: "Fruits::Banana"
812
- )
813
- end
814
-
815
- it "returns the foreign_key without the module name" do
816
- expect(metadata.foreign_key).to eq("banana_ids")
817
- end
818
-
819
- it "returns the inverse_foreign_key without the module name" do
820
- expect(metadata.inverse_foreign_key).to eq("apple_ids")
821
- end
822
- end
823
- end
824
- end
825
-
826
- context "when the relation does not store a foreign key" do
827
-
828
- context "when references one" do
829
-
830
- let(:metadata) do
831
- described_class.new(
832
- name: :post,
833
- relation: Mongoid::Relations::Referenced::One,
834
- inverse_class_name: "Person"
835
- )
836
- end
837
-
838
- it "returns the inverse foreign key" do
839
- expect(metadata.foreign_key).to eq("person_id")
840
- end
841
- end
842
-
843
- context "when references many" do
844
-
845
- context "when an inverse_of is defined" do
846
-
847
- let(:metadata) do
848
- described_class.new(
849
- name: :created_streets,
850
- relation: Mongoid::Relations::Referenced::Many,
851
- inverse_class_name: "House",
852
- inverse_of: :creator
853
- )
854
- end
855
-
856
- it "returns the inverse_of plus suffix" do
857
- expect(metadata.foreign_key).to eq("creator_id")
858
- end
859
- end
860
-
861
- context "when the class is not namespaced" do
862
-
863
- let(:metadata) do
864
- described_class.new(
865
- name: :posts,
866
- relation: Mongoid::Relations::Referenced::Many,
867
- inverse_class_name: "Person"
868
- )
869
- end
870
-
871
- it "returns the inverse foreign key" do
872
- expect(metadata.foreign_key).to eq("person_id")
873
- end
874
- end
875
-
876
- context "when the class is namespaced" do
877
-
878
- context "when name doesnt include namespace" do
879
-
880
- let(:metadata) do
881
- described_class.new(
882
- name: :bananas,
883
- relation: Mongoid::Relations::Referenced::Many,
884
- inverse_class_name: "Fruits::Apple",
885
- class_name: "Fruits::Banana"
886
- )
887
- end
888
-
889
- it "returns the foreign_key without the module name" do
890
- expect(metadata.foreign_key).to eq("apple_id")
891
- end
892
- end
893
-
894
- context "when name include namespace" do
895
-
896
- let(:metadata) do
897
- described_class.new(
898
- name: :fruits_melons,
899
- relation: Mongoid::Relations::Referenced::Many,
900
- inverse_class_name: "Fruits::Apple",
901
- class_name: "Fruits::Melon"
902
- )
903
- end
904
-
905
- it "returns the foreign_key with the module name" do
906
- expect(metadata.foreign_key).to eq("fruit_apple_id")
907
- end
908
- end
909
- end
910
- end
911
-
912
- context "when embeds one" do
913
- let(:metadata) do
914
- described_class.new(
915
- name: :post,
916
- relation: Mongoid::Relations::Embedded::One,
917
- inverse_class_name: "Person"
918
- )
919
- end
920
-
921
- it "returns a nil foreign key" do
922
- expect(metadata.foreign_key).to be_nil
923
- end
924
- end
925
- end
926
- end
927
-
928
- context "when a foreign_key was defined" do
929
-
930
- let(:metadata) do
931
- described_class.new(
932
- name: :person,
933
- relation: Mongoid::Relations::Referenced::ManyToMany,
934
- foreign_key: "blog_post_id"
935
- )
936
- end
937
-
938
- it "returns the foreign_key" do
939
- expect(metadata.foreign_key).to eq("blog_post_id")
940
- end
941
- end
942
- end
943
-
944
- describe "#foreign_key_default" do
945
-
946
- context "when the relation stores keys in an array" do
947
-
948
- let(:metadata) do
949
- described_class.new(
950
- name: :preferences,
951
- relation: Mongoid::Relations::Referenced::ManyToMany,
952
- foreign_key: "preference_ids"
953
- )
954
- end
955
-
956
- it "returns an empty array" do
957
- expect(metadata.foreign_key_default).to be_empty
958
- end
959
- end
960
-
961
- context "when the relation stores a single key" do
962
-
963
- let(:metadata) do
964
- described_class.new(
965
- name: :person,
966
- relation: Mongoid::Relations::Referenced::In,
967
- foreign_key: "person_id"
968
- )
969
- end
970
-
971
- it "returns an empty array" do
972
- expect(metadata.foreign_key_default).to be_nil
973
- end
974
- end
975
- end
976
-
977
- describe "#foreign_key_setter" do
978
-
979
- context "when the relation is not polymorphic" do
980
-
981
- let(:metadata) do
982
- described_class.new(
983
- name: :person,
984
- relation: Mongoid::Relations::Referenced::In,
985
- foreign_key: "person_id"
986
- )
987
- end
988
-
989
- it "returns the foreign_key plus =" do
990
- expect(metadata.foreign_key_setter).to eq("person_id=")
991
- end
992
- end
993
-
994
- context "when the relation is polymorphic" do
995
-
996
- let(:metadata) do
997
- described_class.new(
998
- name: :ratings,
999
- relation: Mongoid::Relations::Referenced::Many,
1000
- as: :ratable,
1001
- inverse_class_name: "Movie"
1002
- )
1003
- end
1004
-
1005
- it "returns the polymorphic foreign_key plus =" do
1006
- expect(metadata.foreign_key_setter).to eq("ratable_id=")
1007
- end
1008
- end
1009
- end
1010
-
1011
- describe "#inverse_type" do
1012
-
1013
- context "when the relation is not polymorphic" do
1014
-
1015
- let(:metadata) do
1016
- described_class.new(
1017
- name: :person,
1018
- relation: Mongoid::Relations::Referenced::In,
1019
- foreign_key: "person_id"
1020
- )
1021
- end
1022
-
1023
- it "returns nil" do
1024
- expect(metadata.inverse_type).to be_nil
1025
- end
1026
- end
1027
-
1028
- context "when the relation is polymorphic" do
1029
-
1030
- let(:metadata) do
1031
- described_class.new(
1032
- name: :ratable,
1033
- relation: Mongoid::Relations::Referenced::In,
1034
- polymorphic: true,
1035
- inverse_class_name: "Rating"
1036
- )
1037
- end
1038
-
1039
- it "returns the polymorphic name plus type" do
1040
- expect(metadata.inverse_type).to eq("ratable_type")
1041
- end
1042
- end
1043
- end
1044
-
1045
- describe "#inverse_type_setter" do
1046
-
1047
- context "when the relation is not polymorphic" do
1048
-
1049
- let(:metadata) do
1050
- described_class.new(
1051
- name: :person,
1052
- relation: Mongoid::Relations::Referenced::In,
1053
- foreign_key: "person_id"
1054
- )
1055
- end
1056
-
1057
- it "returns nil" do
1058
- expect(metadata.inverse_type_setter).to be_nil
1059
- end
1060
- end
1061
-
1062
- context "when the relation is polymorphic" do
1063
-
1064
- let(:metadata) do
1065
- described_class.new(
1066
- name: :ratable,
1067
- relation: Mongoid::Relations::Referenced::In,
1068
- polymorphic: true,
1069
- inverse_class_name: "Rating"
1070
- )
1071
- end
1072
-
1073
- it "returns the inverse type plus =" do
1074
- expect(metadata.inverse_type_setter).to eq("ratable_type=")
1075
- end
1076
- end
1077
- end
1078
-
1079
- describe "#inverses" do
1080
-
1081
- context "when the relation is polymorphic" do
1082
-
1083
- context "when an inverse_of is defined" do
1084
-
1085
- let(:metadata) do
1086
- described_class.new(
1087
- name: :ratable,
1088
- relation: Mongoid::Relations::Referenced::In,
1089
- polymorphic: true,
1090
- inverse_of: "my_ratings"
1091
- )
1092
- end
1093
-
1094
- it "returns only the inverse_of" do
1095
- expect(metadata.inverses(nil)).to eq([ "my_ratings" ])
1096
- end
1097
- end
1098
- end
1099
- end
1100
-
1101
- describe "#indexed?" do
1102
-
1103
- context "when an index property exists" do
1104
-
1105
- let(:metadata) do
1106
- described_class.new(
1107
- index: true,
1108
- relation: Mongoid::Relations::Referenced::In
1109
- )
1110
- end
1111
-
1112
- it "returns true" do
1113
- expect(metadata.indexed?).to be true
1114
- end
1115
- end
1116
-
1117
- context "when the index option is nil" do
1118
-
1119
- let(:metadata) do
1120
- described_class.new(
1121
- relation: Mongoid::Relations::Referenced::In
1122
- )
1123
- end
1124
-
1125
- it "returns false" do
1126
- expect(metadata.indexed?).to be false
1127
- end
1128
- end
1129
-
1130
- context "when the index option is false" do
1131
-
1132
- let(:metadata) do
1133
- described_class.new(
1134
- index: false,
1135
- relation: Mongoid::Relations::Referenced::In
1136
- )
1137
- end
1138
-
1139
- it "returns false" do
1140
- expect(metadata.indexed?).to be false
1141
- end
1142
- end
1143
- end
1144
-
1145
- describe "#inverse" do
1146
-
1147
- context "when an inverse relation exists" do
1148
-
1149
- context "when the inverse has a foreign key match" do
1150
-
1151
- let(:metadata) do
1152
- User.reflect_on_association(:account)
1153
- end
1154
-
1155
- it "returns the name of the inverse with the matching foreign_key" do
1156
- expect(metadata.inverse).to eq(:creator)
1157
- end
1158
- end
1159
-
1160
- context "when multiple relations against the same class exist" do
1161
-
1162
- context "when not polymorphic" do
1163
-
1164
- let(:metadata) do
1165
- described_class.new(
1166
- inverse_class_name: "User",
1167
- name: :shop,
1168
- relation: Mongoid::Relations::Referenced::One
1169
- )
1170
- end
1171
-
1172
- it "returns the name of the inverse with the matching inverse of" do
1173
- expect(metadata.inverse).to eq(:user)
1174
- end
1175
- end
1176
-
1177
- context "when polymorphic" do
1178
-
1179
- let(:metadata) do
1180
- described_class.new(
1181
- name: :left_eye,
1182
- as: :eyeable,
1183
- inverse_class_name: "Face",
1184
- class_name: "Eye",
1185
- relation: Mongoid::Relations::Referenced::One
1186
- )
1187
- end
1188
-
1189
- it "returns the name of the relation" do
1190
- expect(metadata.inverse).to eq(:eyeable)
1191
- end
1192
- end
1193
-
1194
- context "when polymorphic on the child" do
1195
-
1196
- let(:metadata) do
1197
- described_class.new(
1198
- name: :eyeable,
1199
- polymorphic: true,
1200
- inverse_class_name: "Eye",
1201
- relation: Mongoid::Relations::Referenced::In
1202
- )
1203
- end
1204
-
1205
- it "returns nil" do
1206
- expect(metadata.inverse(Face.new)).to be_nil
1207
- end
1208
- end
1209
- end
1210
-
1211
- context "when inverse_of is defined" do
1212
-
1213
- context "when inverse_of is nil" do
1214
-
1215
- let(:metadata) do
1216
- described_class.new(
1217
- inverse_of: nil,
1218
- relation: Mongoid::Relations::Referenced::In
1219
- )
1220
- end
1221
-
1222
- it "returns nil" do
1223
- expect(metadata.inverse).to be_nil
1224
- end
1225
- end
1226
-
1227
- context "when inverse_of is a symbol" do
1228
-
1229
- let(:metadata) do
1230
- described_class.new(
1231
- inverse_of: :crazy_name,
1232
- relation: Mongoid::Relations::Referenced::In
1233
- )
1234
- end
1235
-
1236
- it "returns the name of the inverse_of property" do
1237
- expect(metadata.inverse).to eq(:crazy_name)
1238
- end
1239
- end
1240
- end
1241
-
1242
- context "when not polymorphic" do
1243
-
1244
- let(:metadata) do
1245
- described_class.new(
1246
- name: :pet,
1247
- class_name: "Animal",
1248
- inverse_class_name: "Person",
1249
- relation: Mongoid::Relations::Referenced::In
1250
- )
1251
- end
1252
-
1253
- it "returns the name of the relation" do
1254
- expect(metadata.inverse).to eq(:person)
1255
- end
1256
- end
1257
-
1258
- context "when polymorphic" do
1259
-
1260
- let(:metadata) do
1261
- described_class.new(
1262
- name: :addresses,
1263
- as: :addressable,
1264
- inverse_class_name: "Person",
1265
- relation: Mongoid::Relations::Referenced::Many
1266
- )
1267
- end
1268
-
1269
- it "returns the name of the relation" do
1270
- expect(metadata.inverse).to eq(:addressable)
1271
- end
1272
- end
1273
-
1274
- context "when polymorphic on the child" do
1275
-
1276
- let(:metadata) do
1277
- described_class.new(
1278
- name: :addressable,
1279
- polymorphic: true,
1280
- inverse_class_name: "Address",
1281
- relation: Mongoid::Relations::Referenced::In
1282
- )
1283
- end
1284
-
1285
- it "returns the name of the relation" do
1286
- expect(metadata.inverse(Person.new)).to eq(:addresses)
1287
- end
1288
- end
1289
-
1290
- context "when in a cyclic relation" do
1291
-
1292
- context "when the base name is included in the plural form" do
1293
-
1294
- let(:metadata) do
1295
- described_class.new(
1296
- name: :parent_role,
1297
- class_name: "Role",
1298
- inverse_class_name: "Role",
1299
- relation: Mongoid::Relations::Embedded::In,
1300
- cyclic: true
1301
- )
1302
- end
1303
-
1304
- it "returns the name of the relation" do
1305
- expect(metadata.inverse(Role.new)).to eq(:child_roles)
1306
- end
1307
- end
1308
-
1309
- context "when the base name is not included in the plural form" do
1310
-
1311
- let(:metadata) do
1312
- described_class.new(
1313
- name: :parent_entry,
1314
- class_name: "Entry",
1315
- inverse_class_name: "Entry",
1316
- relation: Mongoid::Relations::Embedded::In,
1317
- cyclic: true
1318
- )
1319
- end
1320
-
1321
- it "returns the name of the relation" do
1322
- expect(metadata.inverse(Entry.new)).to eq(:child_entries)
1323
- end
1324
- end
1325
- end
1326
- end
1327
- end
1328
-
1329
- context "#inverse_foreign_key" do
1330
-
1331
- context "when the inverse foreign key is not defined" do
1332
-
1333
- let(:metadata) do
1334
- described_class.new(
1335
- name: :preferences,
1336
- index: true,
1337
- dependent: :nullify,
1338
- relation: Mongoid::Relations::Referenced::ManyToMany,
1339
- inverse_class_name: "Person"
1340
- )
1341
- end
1342
-
1343
- it "returns the inverse class name plus suffix" do
1344
- expect(metadata.inverse_foreign_key).to eq("person_ids")
1345
- end
1346
- end
1347
-
1348
- context "when the inverse_of is nil" do
1349
-
1350
- let(:metadata) do
1351
- described_class.new(
1352
- name: :blogs,
1353
- class_name: "Blog",
1354
- relation: Mongoid::Relations::Referenced::ManyToMany,
1355
- inverse_of: nil
1356
- )
1357
- end
1358
-
1359
- it "returns nil" do
1360
- expect(metadata.inverse_foreign_key).to be_nil
1361
- end
1362
- end
1363
- end
1364
-
1365
- context "#inverse_klass" do
1366
-
1367
- let(:metadata) do
1368
- described_class.new(
1369
- inverse_class_name: "Person",
1370
- relation: Mongoid::Relations::Referenced::In
1371
- )
1372
- end
1373
-
1374
- it "constantizes the inverse_class_name" do
1375
- expect(metadata.inverse_klass).to eq(Person)
1376
- end
1377
- end
1378
-
1379
- context "#inverse_setter" do
1380
-
1381
- context "when the relation is not polymorphic" do
1382
-
1383
- let(:metadata) do
1384
- described_class.new(
1385
- name: :pet,
1386
- class_name: "Animal",
1387
- inverse_class_name: "Person",
1388
- relation: Mongoid::Relations::Referenced::In
1389
- )
1390
- end
1391
-
1392
- it "returns a string for the setter" do
1393
- expect(metadata.inverse_setter).to eq("person=")
1394
- end
1395
- end
1396
-
1397
- context "when the relation is polymorphic" do
1398
-
1399
- context "when multiple relations against the same class exist" do
1400
-
1401
- context "when a referenced in" do
1402
-
1403
- let(:metadata) do
1404
- described_class.new(
1405
- name: :eyeable,
1406
- polymorphic: true,
1407
- relation: Mongoid::Relations::Referenced::In
1408
- )
1409
- end
1410
-
1411
- let(:other) do
1412
- Face.new
1413
- end
1414
-
1415
- it "returns nil" do
1416
- expect(metadata.inverse_setter(other)).to be_nil
1417
- end
1418
- end
1419
-
1420
- context "when a references many" do
1421
-
1422
- let(:metadata) do
1423
- described_class.new(
1424
- name: :blue_eyes,
1425
- inverse_class_name: "EyeBowl",
1426
- as: :eyeable,
1427
- relation: Mongoid::Relations::Referenced::Many
1428
- )
1429
- end
1430
-
1431
- it "returns a string for the setter" do
1432
- expect(metadata.inverse_setter).to eq("eyeable=")
1433
- end
1434
- end
1435
- end
1436
-
1437
- context "when a referenced in" do
1438
-
1439
- let(:metadata) do
1440
- described_class.new(
1441
- name: :ratable,
1442
- inverse_class_name: "Rating",
1443
- polymorphic: true,
1444
- relation: Mongoid::Relations::Referenced::In
1445
- )
1446
- end
1447
-
1448
- let(:other) do
1449
- Movie.new
1450
- end
1451
-
1452
- it "returns a string for the setter" do
1453
- expect(metadata.inverse_setter(other)).to eq("ratings=")
1454
- end
1455
- end
1456
-
1457
- context "when a references many" do
1458
-
1459
- let(:metadata) do
1460
- described_class.new(
1461
- name: :ratings,
1462
- inverse_class_name: "Rating",
1463
- as: :ratable,
1464
- relation: Mongoid::Relations::Referenced::Many
1465
- )
1466
- end
1467
-
1468
- it "returns a string for the setter" do
1469
- expect(metadata.inverse_setter).to eq("ratable=")
1470
- end
1471
- end
1472
- end
1473
- end
1474
-
1475
- context "#key" do
1476
-
1477
- context "when relation is embedded" do
1478
-
1479
- let(:metadata) do
1480
- described_class.new(
1481
- name: :addresses,
1482
- relation: Mongoid::Relations::Embedded::Many
1483
- )
1484
- end
1485
-
1486
- it "returns the name as a string" do
1487
- expect(metadata.key).to eq("addresses")
1488
- end
1489
-
1490
- context "with a store_as option defined" do
1491
-
1492
- let(:metadata) do
1493
- described_class.new(
1494
- name: :comment,
1495
- relation: Mongoid::Relations::Embedded::Many,
1496
- store_as: "user_comments"
1497
- )
1498
- end
1499
-
1500
- it "return the name define by store_as option" do
1501
- expect(metadata.key).to eq("user_comments")
1502
- end
1503
- end
1504
- end
1505
-
1506
- context "when relation is referenced" do
1507
-
1508
- context "when relation stores foreign_key" do
1509
-
1510
- context "when the relation is not polymorphic" do
1511
-
1512
- let(:metadata) do
1513
- described_class.new(
1514
- name: :posts,
1515
- relation: Mongoid::Relations::Referenced::ManyToMany
1516
- )
1517
- end
1518
-
1519
- it "returns the foreign_key" do
1520
- expect(metadata.key).to eq("post_ids")
1521
- end
1522
- end
1523
-
1524
- context "when the relation is polymorphic" do
1525
-
1526
- let(:metadata) do
1527
- described_class.new(
1528
- name: :ratable,
1529
- relation: Mongoid::Relations::Referenced::In,
1530
- polymorphic: true
1531
- )
1532
- end
1533
-
1534
- it "returns the polymorphic foreign_key" do
1535
- expect(metadata.key).to eq("ratable_id")
1536
- end
1537
- end
1538
- end
1539
-
1540
- context "when relation does not store a foreign_key" do
1541
-
1542
- let(:metadata) do
1543
- described_class.new(
1544
- name: :addresses,
1545
- relation: Mongoid::Relations::Referenced::Many,
1546
- inverse_class_name: "Person"
1547
- )
1548
- end
1549
-
1550
- it "returns _id" do
1551
- expect(metadata.key).to eq("_id")
1552
- end
1553
- end
1554
- end
1555
- end
1556
-
1557
- describe "#options" do
1558
-
1559
- let(:metadata) do
1560
- described_class.new(
1561
- order: :rating.asc,
1562
- relation: Mongoid::Relations::Referenced::Many
1563
- )
1564
- end
1565
-
1566
- it "returns self" do
1567
- expect(metadata.options).to eq(metadata)
1568
- end
1569
- end
1570
-
1571
- describe "#order" do
1572
-
1573
- let(:metadata) do
1574
- described_class.new(
1575
- order: :rating.asc,
1576
- relation: Mongoid::Relations::Referenced::Many
1577
- )
1578
- end
1579
-
1580
- it "returns order criteria" do
1581
- expect(metadata.order).to eq(:rating.asc)
1582
- end
1583
- end
1584
-
1585
- describe "#klass" do
1586
-
1587
- context "when the class name is not namespaced" do
1588
-
1589
- let(:metadata) do
1590
- described_class.new(
1591
- class_name: "Address",
1592
- relation: Mongoid::Relations::Embedded::Many
1593
- )
1594
- end
1595
-
1596
- it "constantizes the class_name" do
1597
- expect(metadata.klass).to eq(Address)
1598
- end
1599
- end
1600
-
1601
- context "when the class name is prepended with ::" do
1602
-
1603
- let(:metadata) do
1604
- described_class.new(
1605
- class_name: "::Address",
1606
- relation: Mongoid::Relations::Embedded::Many
1607
- )
1608
- end
1609
-
1610
- it "returns the class" do
1611
- expect(metadata.klass).to eq(Address)
1612
- end
1613
- end
1614
- end
1615
-
1616
- describe "#many?" do
1617
-
1618
- context "when the relation is a many" do
1619
-
1620
- let(:metadata) do
1621
- described_class.new(relation: Mongoid::Relations::Embedded::Many)
1622
- end
1623
-
1624
- it "returns true" do
1625
- expect(metadata).to be_many
1626
- end
1627
- end
1628
-
1629
- context "when the relation is not a many" do
1630
-
1631
- let(:metadata) do
1632
- described_class.new(relation: Mongoid::Relations::Embedded::One)
1633
- end
1634
-
1635
- it "returns false" do
1636
- expect(metadata).to_not be_many
1637
- end
1638
- end
1639
- end
1640
-
1641
- describe "#macro" do
1642
-
1643
- let(:metadata) do
1644
- described_class.new(relation: Mongoid::Relations::Embedded::One)
1645
- end
1646
-
1647
- it "returns the macro from the relation" do
1648
- expect(metadata.macro).to eq(:embeds_one)
1649
- end
1650
- end
1651
-
1652
- describe "#nested_builder" do
1653
-
1654
- let(:metadata) do
1655
- described_class.new(relation: Mongoid::Relations::Embedded::One)
1656
- end
1657
-
1658
- let(:attributes) do
1659
- {}
1660
- end
1661
-
1662
- let(:options) do
1663
- {}
1664
- end
1665
-
1666
- it "returns the nested builder from the relation" do
1667
- expect(
1668
- metadata.nested_builder(attributes, options)
1669
- ).to be_a_kind_of(Mongoid::Relations::Builders::NestedAttributes::One)
1670
- end
1671
- end
1672
-
1673
- describe "#primary_key" do
1674
-
1675
- context "when no primary key exists" do
1676
-
1677
- let(:metadata) do
1678
- described_class.new(
1679
- name: :person,
1680
- inverse_class_name: "Person",
1681
- relation: Mongoid::Relations::Referenced::In
1682
- )
1683
- end
1684
-
1685
- it "returns _id" do
1686
- expect(metadata.primary_key).to eq("_id")
1687
- end
1688
- end
1689
-
1690
- context "when a primary key exists" do
1691
-
1692
- let(:metadata) do
1693
- described_class.new(
1694
- name: :person,
1695
- inverse_class_name: "Person",
1696
- relation: Mongoid::Relations::Referenced::In,
1697
- primary_key: :something_id
1698
- )
1699
- end
1700
-
1701
- it "returns the primary key" do
1702
- expect(metadata.primary_key).to eq("something_id")
1703
- end
1704
- end
1705
- end
1706
-
1707
- describe "#validate?" do
1708
-
1709
- context "when validate is provided" do
1710
-
1711
- context "when validate is true" do
1712
-
1713
- let(:metadata) do
1714
- described_class.new(
1715
- name: :posts,
1716
- inverse_class_name: "Post",
1717
- relation: Mongoid::Relations::Referenced::Many,
1718
- validate: true
1719
- )
1720
- end
1721
-
1722
- it "returns true" do
1723
- expect(metadata.validate?).to be true
1724
- end
1725
- end
1726
-
1727
- context "when validate is false" do
1728
-
1729
- let(:metadata) do
1730
- described_class.new(
1731
- name: :posts,
1732
- inverse_class_name: "Post",
1733
- relation: Mongoid::Relations::Referenced::Many,
1734
- validate: false
1735
- )
1736
- end
1737
-
1738
- it "returns false" do
1739
- expect(metadata.validate?).to be false
1740
- end
1741
- end
1742
- end
1743
-
1744
- context "when validate is not provided" do
1745
-
1746
- let(:metadata) do
1747
- described_class.new(
1748
- name: :posts,
1749
- inverse_class_name: "Post",
1750
- relation: Mongoid::Relations::Referenced::Many
1751
- )
1752
- end
1753
-
1754
- it "returns the relation default" do
1755
- expect(metadata.validate?).to be true
1756
- end
1757
- end
1758
- end
1759
-
1760
- describe "#store_as" do
1761
-
1762
- context "when store_as is define" do
1763
-
1764
- let(:metadata) do
1765
- described_class.new(
1766
- name: :comment,
1767
- relation: Mongoid::Relations::Embedded::Many,
1768
- store_as: 'user_comments'
1769
- )
1770
- end
1771
-
1772
- it "returns the value" do
1773
- expect(metadata.store_as).to eq("user_comments")
1774
- end
1775
- end
1776
-
1777
- context "when is not define" do
1778
-
1779
- let(:metadata) do
1780
- described_class.new(
1781
- name: :comments,
1782
- relation: Mongoid::Relations::Embedded::Many,
1783
- )
1784
- end
1785
-
1786
- it "returns false" do
1787
- expect(metadata.store_as).to eq("comments")
1788
- end
1789
- end
1790
- end
1791
-
1792
- describe "#determine_inverse_relation" do
1793
-
1794
- let(:class_name) do
1795
- "Person"
1796
- end
1797
-
1798
- let(:metadata) do
1799
- described_class.new(
1800
- relation: Mongoid::Relations::Referenced::In,
1801
- inverse_class_name: "Drug",
1802
- class_name: class_name,
1803
- name: :person
1804
- )
1805
- end
1806
-
1807
- let(:inverse_relation) do
1808
- metadata.send(:determine_inverse_relation)
1809
- end
1810
-
1811
- context "when no match" do
1812
-
1813
- let(:class_name) do
1814
- "Slave"
1815
- end
1816
-
1817
- it "returns nil" do
1818
- expect(inverse_relation).to be_nil
1819
- end
1820
- end
1821
-
1822
- context "when one match" do
1823
-
1824
- it "returns correct relation" do
1825
- expect(inverse_relation).to eq(:drugs)
1826
- end
1827
- end
1828
-
1829
- context "when multiple matches" do
1830
-
1831
- context "when the inverse_of is not nil" do
1832
-
1833
- before do
1834
- class_name.constantize.has_many(:evil_drugs, class_name: "Drug")
1835
- end
1836
-
1837
- after do
1838
- class_name.constantize.relations.delete("evil_drugs")
1839
- Person.reset_callbacks(:validate)
1840
- end
1841
-
1842
- it "raises AmbiguousRelationship" do
1843
- expect {
1844
- inverse_relation
1845
- }.to raise_error(Mongoid::Errors::AmbiguousRelationship)
1846
- end
1847
- end
1848
-
1849
- context "when the inverse_of is nil" do
1850
-
1851
- before do
1852
- class_name.constantize.has_many(:evil_drugs, class_name: "Drug", inverse_of: nil)
1853
- end
1854
-
1855
- after do
1856
- class_name.constantize.relations.delete("evil_drugs")
1857
- Person.reset_callbacks(:validate)
1858
- end
1859
-
1860
- it "returns the non-nil inverses" do
1861
- expect(inverse_relation).to eq(:drugs)
1862
- end
1863
- end
1864
- end
1865
- end
1866
-
1867
- describe "touchable?" do
1868
-
1869
- context "when touch is false" do
1870
-
1871
- let(:metadata) do
1872
- described_class.new(
1873
- name: :versions,
1874
- relation: Mongoid::Relations::Referenced::In,
1875
- touch: false
1876
- )
1877
- end
1878
-
1879
- it "returns false" do
1880
- expect(metadata).to_not be_touchable
1881
- end
1882
- end
1883
-
1884
- context "when touch is true" do
1885
-
1886
- let(:metadata) do
1887
- described_class.new(
1888
- name: :versions,
1889
- relation: Mongoid::Relations::Referenced::In,
1890
- touch: true
1891
- )
1892
- end
1893
-
1894
- it "returns true" do
1895
- expect(metadata).to be_touchable
1896
- end
1897
- end
1898
-
1899
- context "when touch specifies additional field" do
1900
-
1901
- let(:metadata) do
1902
- described_class.new(
1903
- name: :versions,
1904
- relation: Mongoid::Relations::Referenced::In,
1905
- touch: :changed_at
1906
- )
1907
- end
1908
-
1909
- it "returns true" do
1910
- expect(metadata).to be_touchable
1911
- end
1912
- end
1913
-
1914
- context "when touch is nil" do
1915
-
1916
- let(:metadata) do
1917
- described_class.new(
1918
- name: :versions,
1919
- relation: Mongoid::Relations::Referenced::In,
1920
- )
1921
- end
1922
-
1923
- it "returns false" do
1924
- expect(metadata).to_not be_touchable
1925
- end
1926
- end
1927
- end
1928
-
1929
- context "properties" do
1930
-
1931
- PROPERTIES = [
1932
- "as",
1933
- "cyclic",
1934
- "name",
1935
- "order"
1936
- ]
1937
-
1938
- PROPERTIES.each do |property|
1939
-
1940
- describe "##{property}" do
1941
-
1942
- let(:metadata) do
1943
- described_class.new(
1944
- property.to_sym => :value,
1945
- relation: Mongoid::Relations::Embedded::Many
1946
- )
1947
- end
1948
-
1949
- it "returns the #{property} property" do
1950
- expect(metadata.send(property)).to eq(:value)
1951
- end
1952
- end
1953
-
1954
- describe "##{property}?" do
1955
-
1956
- context "when a #{property} property exists" do
1957
-
1958
- let(:metadata) do
1959
- described_class.new(
1960
- property.to_sym => :value,
1961
- relation: Mongoid::Relations::Embedded::Many
1962
- )
1963
- end
1964
-
1965
- it "returns true" do
1966
- expect(metadata.send("#{property}?")).to be true
1967
- end
1968
- end
1969
-
1970
- context "when the #{property} property is nil" do
1971
-
1972
- let(:metadata) do
1973
- described_class.new(
1974
- relation: Mongoid::Relations::Embedded::Many
1975
- )
1976
- end
1977
-
1978
- it "returns false" do
1979
- expect(metadata.send("#{property}?")).to be false
1980
- end
1981
- end
1982
- end
1983
- end
1984
- end
1985
- end