mongoid 7.0.0 → 7.4.0

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 (1046) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +30 -30
  4. data/LICENSE +1 -0
  5. data/README.md +34 -20
  6. data/Rakefile +75 -5
  7. data/lib/config/locales/en.yml +129 -70
  8. data/lib/mongoid/association/accessors.rb +143 -80
  9. data/lib/mongoid/association/bindable.rb +7 -26
  10. data/lib/mongoid/association/builders.rb +4 -12
  11. data/lib/mongoid/association/constrainable.rb +5 -6
  12. data/lib/mongoid/association/depending.rb +31 -19
  13. data/lib/mongoid/association/eager_loadable.rb +2 -3
  14. data/lib/mongoid/association/embedded/batchable.rb +19 -45
  15. data/lib/mongoid/association/embedded/cyclic.rb +10 -17
  16. data/lib/mongoid/association/embedded/embedded_in/binding.rb +3 -7
  17. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
  18. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
  19. data/lib/mongoid/association/embedded/embedded_in.rb +6 -26
  20. data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -8
  21. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
  22. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +113 -93
  23. data/lib/mongoid/association/embedded/embeds_many.rb +8 -35
  24. data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
  25. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +9 -6
  26. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +45 -30
  27. data/lib/mongoid/association/embedded/embeds_one.rb +8 -31
  28. data/lib/mongoid/association/embedded.rb +2 -0
  29. data/lib/mongoid/association/macros.rb +44 -41
  30. data/lib/mongoid/association/many.rb +18 -32
  31. data/lib/mongoid/association/marshalable.rb +3 -6
  32. data/lib/mongoid/association/nested/many.rb +18 -27
  33. data/lib/mongoid/association/nested/nested_buildable.rb +5 -11
  34. data/lib/mongoid/association/nested/one.rb +16 -27
  35. data/lib/mongoid/association/nested.rb +3 -3
  36. data/lib/mongoid/association/one.rb +4 -11
  37. data/lib/mongoid/association/options.rb +8 -38
  38. data/lib/mongoid/association/proxy.rb +37 -36
  39. data/lib/mongoid/association/referenced/auto_save.rb +5 -11
  40. data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -9
  41. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
  42. data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
  43. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -27
  44. data/lib/mongoid/association/referenced/belongs_to.rb +14 -36
  45. data/lib/mongoid/association/referenced/counter_cache.rb +4 -15
  46. data/lib/mongoid/association/referenced/eager.rb +40 -36
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +38 -56
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -43
  52. data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
  53. data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
  54. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
  55. data/lib/mongoid/association/referenced/has_many/enumerable.rb +444 -456
  56. data/lib/mongoid/association/referenced/has_many/proxy.rb +78 -111
  57. data/lib/mongoid/association/referenced/has_many.rb +18 -42
  58. data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
  59. data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
  60. data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
  61. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -26
  62. data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -25
  63. data/lib/mongoid/association/referenced/has_one.rb +13 -33
  64. data/lib/mongoid/association/referenced/syncable.rb +7 -22
  65. data/lib/mongoid/association/referenced.rb +2 -0
  66. data/lib/mongoid/association/reflections.rb +7 -6
  67. data/lib/mongoid/association/relatable.rb +118 -78
  68. data/lib/mongoid/association.rb +8 -23
  69. data/lib/mongoid/atomic/modifiers.rb +27 -51
  70. data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
  71. data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
  72. data/lib/mongoid/atomic/paths/embedded.rb +3 -4
  73. data/lib/mongoid/atomic/paths/root.rb +4 -7
  74. data/lib/mongoid/atomic/paths.rb +2 -1
  75. data/lib/mongoid/atomic.rb +42 -47
  76. data/lib/mongoid/attributes/dynamic.rb +18 -32
  77. data/lib/mongoid/attributes/nested.rb +21 -13
  78. data/lib/mongoid/attributes/processing.rb +9 -24
  79. data/lib/mongoid/attributes/projector.rb +119 -0
  80. data/lib/mongoid/attributes/readonly.rb +3 -6
  81. data/lib/mongoid/attributes.rb +75 -81
  82. data/lib/mongoid/cacheable.rb +6 -9
  83. data/lib/mongoid/changeable.rb +6 -60
  84. data/lib/mongoid/clients/factory.rb +42 -17
  85. data/lib/mongoid/clients/options.rb +16 -17
  86. data/lib/mongoid/clients/sessions.rb +24 -12
  87. data/lib/mongoid/clients/storage_options.rb +7 -12
  88. data/lib/mongoid/clients/validators/storage.rb +2 -9
  89. data/lib/mongoid/clients/validators.rb +2 -1
  90. data/lib/mongoid/clients.rb +3 -10
  91. data/lib/mongoid/composable.rb +5 -9
  92. data/lib/mongoid/config/environment.rb +36 -14
  93. data/lib/mongoid/config/options.rb +20 -23
  94. data/lib/mongoid/config/validators/client.rb +2 -17
  95. data/lib/mongoid/config/validators/option.rb +2 -3
  96. data/lib/mongoid/config/validators.rb +2 -1
  97. data/lib/mongoid/config.rb +112 -41
  98. data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
  99. data/lib/mongoid/contextual/aggregable/mongo.rb +26 -27
  100. data/lib/mongoid/contextual/aggregable/none.rb +65 -0
  101. data/lib/mongoid/contextual/aggregable.rb +17 -0
  102. data/lib/mongoid/contextual/atomic.rb +29 -31
  103. data/lib/mongoid/contextual/command.rb +2 -5
  104. data/lib/mongoid/contextual/geo_near.rb +6 -37
  105. data/lib/mongoid/contextual/map_reduce.rb +9 -37
  106. data/lib/mongoid/contextual/memory.rb +12 -65
  107. data/lib/mongoid/contextual/mongo.rb +163 -85
  108. data/lib/mongoid/contextual/none.rb +44 -28
  109. data/lib/mongoid/contextual/queryable.rb +2 -3
  110. data/lib/mongoid/contextual.rb +7 -9
  111. data/lib/mongoid/copyable.rb +16 -10
  112. data/lib/mongoid/criteria/findable.rb +12 -15
  113. data/lib/mongoid/criteria/includable.rb +8 -15
  114. data/lib/mongoid/criteria/inspectable.rb +2 -3
  115. data/lib/mongoid/criteria/marshalable.rb +2 -5
  116. data/lib/mongoid/criteria/modifiable.rb +15 -21
  117. data/lib/mongoid/criteria/options.rb +4 -5
  118. data/lib/mongoid/criteria/permission.rb +2 -1
  119. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
  120. data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
  121. data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -27
  122. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
  123. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
  124. data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
  125. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
  126. data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -26
  127. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
  128. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -13
  129. data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
  130. data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
  131. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -16
  132. data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
  133. data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -18
  134. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
  135. data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -9
  136. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +13 -6
  137. data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
  138. data/lib/mongoid/criteria/queryable/key.rb +101 -27
  139. data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
  140. data/lib/mongoid/criteria/queryable/mergeable.rb +184 -44
  141. data/lib/mongoid/criteria/queryable/optional.rb +5 -48
  142. data/lib/mongoid/criteria/queryable/options.rb +2 -19
  143. data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
  144. data/lib/mongoid/criteria/queryable/selectable.rb +436 -158
  145. data/lib/mongoid/criteria/queryable/selector.rb +45 -55
  146. data/lib/mongoid/criteria/queryable/smash.rb +2 -11
  147. data/lib/mongoid/criteria/queryable/storable.rb +237 -0
  148. data/lib/mongoid/criteria/queryable.rb +7 -9
  149. data/lib/mongoid/criteria/scopable.rb +27 -19
  150. data/lib/mongoid/criteria.rb +86 -73
  151. data/lib/mongoid/document.rb +37 -77
  152. data/lib/mongoid/equality.rb +29 -12
  153. data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
  154. data/lib/mongoid/errors/callback.rb +2 -3
  155. data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
  156. data/lib/mongoid/errors/delete_restriction.rb +10 -13
  157. data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
  158. data/lib/mongoid/errors/document_not_found.rb +2 -9
  159. data/lib/mongoid/errors/eager_load.rb +6 -5
  160. data/lib/mongoid/errors/empty_config_file.rb +25 -0
  161. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
  162. data/lib/mongoid/errors/invalid_collection.rb +2 -1
  163. data/lib/mongoid/errors/invalid_config_file.rb +25 -0
  164. data/lib/mongoid/errors/invalid_config_option.rb +2 -3
  165. data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -3
  166. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
  167. data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
  168. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
  169. data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
  170. data/lib/mongoid/errors/invalid_field.rb +2 -5
  171. data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
  172. data/lib/mongoid/errors/invalid_field_option.rb +2 -3
  173. data/lib/mongoid/errors/invalid_find.rb +2 -3
  174. data/lib/mongoid/errors/invalid_includes.rb +2 -3
  175. data/lib/mongoid/errors/invalid_index.rb +2 -3
  176. data/lib/mongoid/errors/invalid_options.rb +4 -5
  177. data/lib/mongoid/errors/invalid_path.rb +2 -3
  178. data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
  179. data/lib/mongoid/errors/invalid_query.rb +40 -0
  180. data/lib/mongoid/errors/invalid_relation.rb +4 -9
  181. data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
  182. data/lib/mongoid/errors/invalid_scope.rb +2 -3
  183. data/lib/mongoid/errors/invalid_session_use.rb +3 -6
  184. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
  185. data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
  186. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
  187. data/lib/mongoid/errors/invalid_time.rb +2 -3
  188. data/lib/mongoid/errors/invalid_value.rb +2 -1
  189. data/lib/mongoid/errors/inverse_not_found.rb +3 -4
  190. data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
  191. data/lib/mongoid/errors/mixed_relations.rb +2 -3
  192. data/lib/mongoid/errors/mongoid_error.rb +3 -10
  193. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
  194. data/lib/mongoid/errors/no_client_config.rb +4 -5
  195. data/lib/mongoid/errors/no_client_database.rb +2 -3
  196. data/lib/mongoid/errors/no_client_hosts.rb +2 -3
  197. data/lib/mongoid/errors/no_clients_config.rb +2 -3
  198. data/lib/mongoid/errors/no_default_client.rb +3 -4
  199. data/lib/mongoid/errors/no_environment.rb +2 -3
  200. data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
  201. data/lib/mongoid/errors/no_metadata.rb +2 -3
  202. data/lib/mongoid/errors/no_parent.rb +2 -3
  203. data/lib/mongoid/errors/readonly_attribute.rb +2 -3
  204. data/lib/mongoid/errors/readonly_document.rb +3 -6
  205. data/lib/mongoid/errors/scope_overwrite.rb +2 -1
  206. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
  207. data/lib/mongoid/errors/unknown_attribute.rb +2 -3
  208. data/lib/mongoid/errors/unknown_model.rb +2 -3
  209. data/lib/mongoid/errors/unsaved_document.rb +3 -2
  210. data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
  211. data/lib/mongoid/errors/validations.rb +2 -1
  212. data/lib/mongoid/errors.rb +12 -1
  213. data/lib/mongoid/evolvable.rb +4 -5
  214. data/lib/mongoid/extensions/array.rb +28 -37
  215. data/lib/mongoid/extensions/big_decimal.rb +3 -12
  216. data/lib/mongoid/extensions/boolean.rb +3 -5
  217. data/lib/mongoid/extensions/date.rb +13 -12
  218. data/lib/mongoid/extensions/date_time.rb +4 -12
  219. data/lib/mongoid/extensions/decimal128.rb +2 -5
  220. data/lib/mongoid/extensions/false_class.rb +4 -7
  221. data/lib/mongoid/extensions/float.rb +5 -10
  222. data/lib/mongoid/extensions/hash.rb +51 -36
  223. data/lib/mongoid/extensions/integer.rb +5 -12
  224. data/lib/mongoid/extensions/module.rb +2 -3
  225. data/lib/mongoid/extensions/nil_class.rb +2 -5
  226. data/lib/mongoid/extensions/object.rb +17 -44
  227. data/lib/mongoid/extensions/object_id.rb +2 -7
  228. data/lib/mongoid/extensions/range.rb +2 -11
  229. data/lib/mongoid/extensions/regexp.rb +4 -4
  230. data/lib/mongoid/extensions/set.rb +2 -7
  231. data/lib/mongoid/extensions/string.rb +24 -42
  232. data/lib/mongoid/extensions/symbol.rb +2 -7
  233. data/lib/mongoid/extensions/time.rb +12 -9
  234. data/lib/mongoid/extensions/time_with_zone.rb +25 -7
  235. data/lib/mongoid/extensions/true_class.rb +4 -7
  236. data/lib/mongoid/extensions.rb +18 -3
  237. data/lib/mongoid/factory.rb +52 -13
  238. data/lib/mongoid/fields/foreign_key.rb +3 -22
  239. data/lib/mongoid/fields/localized.rb +2 -11
  240. data/lib/mongoid/fields/standard.rb +6 -36
  241. data/lib/mongoid/fields/validators/macro.rb +36 -18
  242. data/lib/mongoid/fields/validators.rb +2 -1
  243. data/lib/mongoid/fields.rb +115 -64
  244. data/lib/mongoid/findable.rb +59 -23
  245. data/lib/mongoid/indexable/specification.rb +3 -16
  246. data/lib/mongoid/indexable/validators/options.rb +2 -7
  247. data/lib/mongoid/indexable.rb +10 -25
  248. data/lib/mongoid/inspectable.rb +4 -11
  249. data/lib/mongoid/interceptable.rb +13 -30
  250. data/lib/mongoid/loggable.rb +13 -16
  251. data/lib/mongoid/matchable.rb +3 -150
  252. data/lib/mongoid/matcher/all.rb +22 -0
  253. data/lib/mongoid/matcher/and.rb +21 -0
  254. data/lib/mongoid/matcher/bits.rb +41 -0
  255. data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
  256. data/lib/mongoid/matcher/bits_all_set.rb +20 -0
  257. data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
  258. data/lib/mongoid/matcher/bits_any_set.rb +20 -0
  259. data/lib/mongoid/matcher/elem_match.rb +36 -0
  260. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  261. data/lib/mongoid/matcher/eq.rb +11 -0
  262. data/lib/mongoid/matcher/eq_impl.rb +67 -0
  263. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
  264. data/lib/mongoid/matcher/exists.rb +15 -0
  265. data/lib/mongoid/matcher/expression.rb +35 -0
  266. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  267. data/lib/mongoid/matcher/field_expression.rb +62 -0
  268. data/lib/mongoid/matcher/field_operator.rb +54 -0
  269. data/lib/mongoid/matcher/gt.rb +17 -0
  270. data/lib/mongoid/matcher/gte.rb +17 -0
  271. data/lib/mongoid/matcher/in.rb +25 -0
  272. data/lib/mongoid/matcher/lt.rb +17 -0
  273. data/lib/mongoid/matcher/lte.rb +17 -0
  274. data/lib/mongoid/matcher/mod.rb +17 -0
  275. data/lib/mongoid/matcher/ne.rb +16 -0
  276. data/lib/mongoid/matcher/nin.rb +11 -0
  277. data/lib/mongoid/matcher/nor.rb +25 -0
  278. data/lib/mongoid/matcher/not.rb +29 -0
  279. data/lib/mongoid/matcher/or.rb +21 -0
  280. data/lib/mongoid/matcher/regex.rb +41 -0
  281. data/lib/mongoid/matcher/size.rb +26 -0
  282. data/lib/mongoid/matcher/type.rb +99 -0
  283. data/lib/mongoid/matcher.rb +110 -0
  284. data/lib/mongoid/persistable/creatable.rb +6 -23
  285. data/lib/mongoid/persistable/deletable.rb +7 -23
  286. data/lib/mongoid/persistable/destroyable.rb +11 -10
  287. data/lib/mongoid/persistable/incrementable.rb +6 -7
  288. data/lib/mongoid/persistable/logical.rb +4 -6
  289. data/lib/mongoid/persistable/poppable.rb +3 -6
  290. data/lib/mongoid/persistable/pullable.rb +3 -8
  291. data/lib/mongoid/persistable/pushable.rb +14 -10
  292. data/lib/mongoid/persistable/renamable.rb +10 -8
  293. data/lib/mongoid/persistable/savable.rb +3 -8
  294. data/lib/mongoid/persistable/settable.rb +61 -19
  295. data/lib/mongoid/persistable/unsettable.rb +8 -8
  296. data/lib/mongoid/persistable/updatable.rb +33 -21
  297. data/lib/mongoid/persistable/upsertable.rb +4 -9
  298. data/lib/mongoid/persistable.rb +134 -39
  299. data/lib/mongoid/persistence_context.rb +51 -45
  300. data/lib/mongoid/positional.rb +3 -6
  301. data/lib/mongoid/query_cache.rb +138 -106
  302. data/lib/mongoid/railtie.rb +20 -16
  303. data/lib/mongoid/railties/controller_runtime.rb +88 -0
  304. data/lib/mongoid/railties/database.rake +9 -0
  305. data/lib/mongoid/reloadable.rb +14 -19
  306. data/lib/mongoid/scopable.rb +11 -38
  307. data/lib/mongoid/selectable.rb +8 -17
  308. data/lib/mongoid/serializable.rb +24 -29
  309. data/lib/mongoid/shardable.rb +80 -17
  310. data/lib/mongoid/stateful.rb +3 -10
  311. data/lib/mongoid/stringified_symbol.rb +52 -0
  312. data/lib/mongoid/tasks/database.rake +12 -5
  313. data/lib/mongoid/tasks/database.rb +87 -7
  314. data/lib/mongoid/threaded/lifecycle.rb +2 -21
  315. data/lib/mongoid/threaded.rb +38 -55
  316. data/lib/mongoid/timestamps/created/short.rb +2 -1
  317. data/lib/mongoid/timestamps/created.rb +3 -2
  318. data/lib/mongoid/timestamps/short.rb +2 -1
  319. data/lib/mongoid/timestamps/timeless.rb +6 -9
  320. data/lib/mongoid/timestamps/updated/short.rb +2 -1
  321. data/lib/mongoid/timestamps/updated.rb +3 -4
  322. data/lib/mongoid/timestamps.rb +3 -2
  323. data/lib/mongoid/touchable.rb +132 -0
  324. data/lib/mongoid/traversable.rb +177 -57
  325. data/lib/mongoid/validatable/associated.rb +5 -6
  326. data/lib/mongoid/validatable/format.rb +2 -1
  327. data/lib/mongoid/validatable/length.rb +2 -1
  328. data/lib/mongoid/validatable/localizable.rb +2 -3
  329. data/lib/mongoid/validatable/macros.rb +3 -8
  330. data/lib/mongoid/validatable/presence.rb +8 -13
  331. data/lib/mongoid/validatable/queryable.rb +2 -3
  332. data/lib/mongoid/validatable/uniqueness.rb +21 -34
  333. data/lib/mongoid/validatable.rb +8 -27
  334. data/lib/mongoid/version.rb +3 -2
  335. data/lib/mongoid.rb +33 -15
  336. data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
  337. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
  338. data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
  339. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
  340. data/lib/rails/generators/mongoid_generator.rb +2 -1
  341. data/lib/rails/mongoid.rb +4 -5
  342. data/spec/README.md +33 -0
  343. data/spec/config/mongoid.yml +13 -3
  344. data/spec/integration/app_spec.rb +343 -0
  345. data/spec/integration/associations/belongs_to_spec.rb +15 -0
  346. data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
  347. data/spec/integration/associations/embedded_spec.rb +268 -0
  348. data/spec/integration/associations/embeds_many_spec.rb +206 -0
  349. data/spec/integration/associations/embeds_one_spec.rb +23 -0
  350. data/spec/integration/associations/foreign_key_spec.rb +98 -0
  351. data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
  352. data/spec/integration/associations/has_many_spec.rb +128 -0
  353. data/spec/integration/associations/has_one_spec.rb +176 -0
  354. data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
  355. data/spec/integration/associations/reverse_population_spec.rb +34 -0
  356. data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
  357. data/spec/integration/associations/scope_option_spec.rb +101 -0
  358. data/spec/integration/atomic/modifiers_spec.rb +116 -0
  359. data/spec/integration/bson_regexp_raw_spec.rb +19 -0
  360. data/spec/integration/callbacks_models.rb +61 -0
  361. data/spec/integration/callbacks_spec.rb +228 -0
  362. data/spec/integration/contextual/empty_spec.rb +141 -0
  363. data/spec/integration/criteria/alias_query_spec.rb +161 -0
  364. data/spec/integration/criteria/date_field_spec.rb +40 -0
  365. data/spec/integration/criteria/default_scope_spec.rb +72 -0
  366. data/spec/integration/criteria/logical_spec.rb +124 -0
  367. data/spec/integration/criteria/range_spec.rb +265 -0
  368. data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
  369. data/spec/integration/discriminator_key_spec.rb +353 -0
  370. data/spec/integration/discriminator_value_spec.rb +206 -0
  371. data/spec/integration/document_spec.rb +51 -0
  372. data/spec/integration/i18n_fallbacks_spec.rb +89 -0
  373. data/spec/integration/matcher_examples_spec.rb +758 -0
  374. data/spec/integration/matcher_operator_data/all.yml +140 -0
  375. data/spec/integration/matcher_operator_data/and.yml +93 -0
  376. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  377. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  378. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  379. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  380. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  381. data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
  382. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  383. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  384. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  385. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  386. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  387. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  388. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  389. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  390. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  391. data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
  392. data/spec/integration/matcher_operator_data/in.yml +210 -0
  393. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  394. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  395. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  396. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  397. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  398. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  399. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  400. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  401. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  402. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  403. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  404. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  405. data/spec/integration/matcher_operator_data/not.yml +196 -0
  406. data/spec/integration/matcher_operator_data/or.yml +137 -0
  407. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  408. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  409. data/spec/integration/matcher_operator_data/size.yml +174 -0
  410. data/spec/integration/matcher_operator_data/type.yml +70 -0
  411. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  412. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  413. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  414. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  415. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  416. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  417. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  418. data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
  419. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  420. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  421. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  422. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  423. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  424. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  425. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  426. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  427. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  428. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  429. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  430. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  431. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  432. data/spec/integration/matcher_operator_spec.rb +124 -0
  433. data/spec/integration/matcher_spec.rb +283 -0
  434. data/spec/integration/server_query_spec.rb +141 -0
  435. data/spec/integration/shardable_spec.rb +148 -0
  436. data/spec/integration/stringified_symbol_field_spec.rb +203 -0
  437. data/spec/lite_spec_helper.rb +83 -0
  438. data/spec/mongoid/association/accessors_spec.rb +323 -77
  439. data/spec/mongoid/association/auto_save_spec.rb +74 -33
  440. data/spec/mongoid/association/builders_spec.rb +3 -1
  441. data/spec/mongoid/association/constrainable_spec.rb +2 -0
  442. data/spec/mongoid/association/counter_cache_spec.rb +34 -32
  443. data/spec/mongoid/association/depending_spec.rb +678 -332
  444. data/spec/mongoid/association/eager_spec.rb +6 -4
  445. data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
  446. data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
  447. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -0
  448. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +2 -0
  449. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +65 -13
  450. data/spec/mongoid/association/embedded/embedded_in_spec.rb +61 -1
  451. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
  452. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +2 -0
  453. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +672 -144
  454. data/spec/mongoid/association/embedded/embeds_many_models.rb +69 -0
  455. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
  456. data/spec/mongoid/association/embedded/embeds_many_spec.rb +13 -1
  457. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
  458. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +2 -0
  459. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
  460. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
  461. data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
  462. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
  463. data/spec/mongoid/association/embedded/embeds_one_spec.rb +49 -1
  464. data/spec/mongoid/association/macros_spec.rb +11 -9
  465. data/spec/mongoid/association/nested/many_spec.rb +2 -0
  466. data/spec/mongoid/association/nested/one_spec.rb +18 -12
  467. data/spec/mongoid/association/options_spec.rb +2 -0
  468. data/spec/mongoid/association/polymorphic_spec.rb +61 -0
  469. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -0
  470. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +57 -16
  471. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +266 -17
  472. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +99 -58
  473. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
  474. data/spec/mongoid/association/referenced/belongs_to_spec.rb +95 -12
  475. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
  476. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
  477. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +67 -4
  478. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
  479. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +351 -164
  480. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +67 -0
  481. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
  482. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +49 -5
  483. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
  484. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +23 -0
  485. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
  486. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +407 -121
  487. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
  488. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +681 -340
  489. data/spec/mongoid/association/referenced/has_many_models.rb +95 -0
  490. data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
  491. data/spec/mongoid/association/referenced/has_many_spec.rb +26 -3
  492. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
  493. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -7
  494. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
  495. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +28 -26
  496. data/spec/mongoid/association/referenced/has_one_models.rb +97 -0
  497. data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
  498. data/spec/mongoid/association/referenced/has_one_spec.rb +144 -5
  499. data/spec/mongoid/association/reflections_spec.rb +2 -0
  500. data/spec/mongoid/association/syncable_spec.rb +33 -31
  501. data/spec/mongoid/association_spec.rb +2 -0
  502. data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
  503. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
  504. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
  505. data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
  506. data/spec/mongoid/atomic/paths_spec.rb +107 -12
  507. data/spec/mongoid/atomic_spec.rb +31 -6
  508. data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
  509. data/spec/mongoid/attributes/nested_spec.rb +87 -69
  510. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  511. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  512. data/spec/mongoid/attributes/projector_spec.rb +44 -0
  513. data/spec/mongoid/attributes/readonly_spec.rb +24 -22
  514. data/spec/mongoid/attributes_spec.rb +382 -35
  515. data/spec/mongoid/cacheable_spec.rb +3 -1
  516. data/spec/mongoid/changeable_spec.rb +60 -35
  517. data/spec/mongoid/clients/factory_spec.rb +148 -34
  518. data/spec/mongoid/clients/options_spec.rb +102 -66
  519. data/spec/mongoid/clients/sessions_spec.rb +39 -29
  520. data/spec/mongoid/clients/transactions_spec.rb +415 -0
  521. data/spec/mongoid/clients_spec.rb +78 -16
  522. data/spec/mongoid/composable_spec.rb +2 -0
  523. data/spec/mongoid/config/environment_spec.rb +88 -8
  524. data/spec/mongoid/config/options_spec.rb +22 -3
  525. data/spec/mongoid/config_spec.rb +280 -2
  526. data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
  527. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
  528. data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
  529. data/spec/mongoid/contextual/atomic_spec.rb +242 -81
  530. data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
  531. data/spec/mongoid/contextual/map_reduce_spec.rb +24 -7
  532. data/spec/mongoid/contextual/memory_spec.rb +25 -23
  533. data/spec/mongoid/contextual/mongo_spec.rb +491 -144
  534. data/spec/mongoid/contextual/none_spec.rb +9 -81
  535. data/spec/mongoid/copyable_spec.rb +261 -30
  536. data/spec/mongoid/copyable_spec_models.rb +47 -0
  537. data/spec/mongoid/criteria/findable_spec.rb +77 -20
  538. data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
  539. data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
  540. data/spec/mongoid/criteria/modifiable_spec.rb +100 -48
  541. data/spec/mongoid/criteria/options_spec.rb +2 -0
  542. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
  543. data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
  544. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
  545. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +5 -3
  546. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
  547. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
  548. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
  549. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
  550. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
  551. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
  552. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
  553. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
  554. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
  555. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +53 -0
  556. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
  557. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
  558. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
  559. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
  560. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
  561. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +3 -1
  562. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
  563. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +42 -23
  564. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +30 -1
  565. data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
  566. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
  567. data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
  568. data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
  569. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
  570. data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
  571. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2069 -0
  572. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
  573. data/spec/mongoid/criteria/queryable/selectable_spec.rb +994 -2900
  574. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
  575. data/spec/mongoid/criteria/queryable/selector_spec.rb +41 -2
  576. data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
  577. data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
  578. data/spec/mongoid/criteria/scopable_spec.rb +210 -0
  579. data/spec/mongoid/criteria_projection_spec.rb +410 -0
  580. data/spec/mongoid/criteria_spec.rb +807 -464
  581. data/spec/mongoid/document_fields_spec.rb +113 -0
  582. data/spec/mongoid/document_persistence_context_spec.rb +32 -0
  583. data/spec/mongoid/document_query_spec.rb +89 -0
  584. data/spec/mongoid/document_spec.rb +182 -28
  585. data/spec/mongoid/equality_spec.rb +144 -41
  586. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
  587. data/spec/mongoid/errors/callback_spec.rb +2 -0
  588. data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
  589. data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
  590. data/spec/mongoid/errors/document_not_found_spec.rb +2 -0
  591. data/spec/mongoid/errors/eager_load_spec.rb +2 -0
  592. data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
  593. data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
  594. data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
  595. data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
  596. data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
  597. data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
  598. data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
  599. data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
  600. data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
  601. data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
  602. data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
  603. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
  604. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
  605. data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
  606. data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
  607. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
  608. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
  609. data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
  610. data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
  611. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
  612. data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
  613. data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
  614. data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
  615. data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
  616. data/spec/mongoid/errors/no_environment_spec.rb +2 -0
  617. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
  618. data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
  619. data/spec/mongoid/errors/no_parent_spec.rb +3 -1
  620. data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
  621. data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
  622. data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
  623. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
  624. data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
  625. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
  626. data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
  627. data/spec/mongoid/errors/validations_spec.rb +2 -0
  628. data/spec/mongoid/extensions/array_spec.rb +25 -43
  629. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -9
  630. data/spec/mongoid/extensions/binary_spec.rb +2 -0
  631. data/spec/mongoid/extensions/boolean_spec.rb +2 -0
  632. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
  633. data/spec/mongoid/extensions/date_spec.rb +8 -160
  634. data/spec/mongoid/extensions/date_time_spec.rb +17 -60
  635. data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
  636. data/spec/mongoid/extensions/false_class_spec.rb +3 -1
  637. data/spec/mongoid/extensions/float_spec.rb +17 -3
  638. data/spec/mongoid/extensions/hash_spec.rb +105 -0
  639. data/spec/mongoid/extensions/integer_spec.rb +14 -2
  640. data/spec/mongoid/extensions/module_spec.rb +2 -0
  641. data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
  642. data/spec/mongoid/extensions/object_id_spec.rb +2 -0
  643. data/spec/mongoid/extensions/object_spec.rb +13 -24
  644. data/spec/mongoid/extensions/range_spec.rb +2 -0
  645. data/spec/mongoid/extensions/regexp_spec.rb +25 -0
  646. data/spec/mongoid/extensions/set_spec.rb +2 -0
  647. data/spec/mongoid/extensions/string_spec.rb +95 -34
  648. data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
  649. data/spec/mongoid/extensions/symbol_spec.rb +2 -0
  650. data/spec/mongoid/extensions/time_spec.rb +29 -0
  651. data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
  652. data/spec/mongoid/extensions/true_class_spec.rb +3 -1
  653. data/spec/mongoid/extensions_spec.rb +16 -2
  654. data/spec/mongoid/factory_spec.rb +287 -27
  655. data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
  656. data/spec/mongoid/fields/localized_spec.rb +6 -4
  657. data/spec/mongoid/fields/standard_spec.rb +2 -0
  658. data/spec/mongoid/fields_spec.rb +419 -37
  659. data/spec/mongoid/findable_spec.rb +54 -20
  660. data/spec/mongoid/indexable/specification_spec.rb +2 -0
  661. data/spec/mongoid/indexable_spec.rb +36 -6
  662. data/spec/mongoid/inspectable_spec.rb +39 -2
  663. data/spec/mongoid/interceptable_spec.rb +168 -96
  664. data/spec/mongoid/interceptable_spec_models.rb +76 -0
  665. data/spec/mongoid/loggable_spec.rb +2 -0
  666. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  667. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
  668. data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
  669. data/spec/mongoid/persistable/creatable_spec.rb +112 -27
  670. data/spec/mongoid/persistable/deletable_spec.rb +273 -11
  671. data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
  672. data/spec/mongoid/persistable/incrementable_spec.rb +29 -13
  673. data/spec/mongoid/persistable/logical_spec.rb +19 -3
  674. data/spec/mongoid/persistable/poppable_spec.rb +19 -3
  675. data/spec/mongoid/persistable/pullable_spec.rb +36 -6
  676. data/spec/mongoid/persistable/pushable_spec.rb +91 -7
  677. data/spec/mongoid/persistable/renamable_spec.rb +18 -2
  678. data/spec/mongoid/persistable/savable_spec.rb +188 -25
  679. data/spec/mongoid/persistable/settable_spec.rb +182 -17
  680. data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
  681. data/spec/mongoid/persistable/updatable_spec.rb +45 -23
  682. data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
  683. data/spec/mongoid/persistable_spec.rb +85 -9
  684. data/spec/mongoid/persistence_context_spec.rb +3 -1
  685. data/spec/mongoid/positional_spec.rb +2 -0
  686. data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
  687. data/spec/mongoid/query_cache_spec.rb +575 -48
  688. data/spec/mongoid/relations/proxy_spec.rb +9 -7
  689. data/spec/mongoid/reloadable_spec.rb +298 -20
  690. data/spec/mongoid/scopable_spec.rb +82 -22
  691. data/spec/mongoid/selectable_spec.rb +8 -6
  692. data/spec/mongoid/serializable_spec.rb +160 -29
  693. data/spec/mongoid/shardable_models.rb +61 -0
  694. data/spec/mongoid/shardable_spec.rb +116 -17
  695. data/spec/mongoid/stateful_spec.rb +3 -1
  696. data/spec/mongoid/tasks/database_rake_spec.rb +15 -13
  697. data/spec/mongoid/tasks/database_spec.rb +3 -1
  698. data/spec/mongoid/threaded_spec.rb +72 -2
  699. data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
  700. data/spec/mongoid/timestamps/created_spec.rb +3 -1
  701. data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
  702. data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
  703. data/spec/mongoid/timestamps/updated_spec.rb +5 -3
  704. data/spec/mongoid/timestamps_spec.rb +8 -6
  705. data/spec/mongoid/{association/touchable_spec.rb → touchable_spec.rb} +206 -38
  706. data/spec/mongoid/touchable_spec_models.rb +53 -0
  707. data/spec/mongoid/traversable_spec.rb +1167 -1
  708. data/spec/mongoid/validatable/associated_spec.rb +2 -0
  709. data/spec/mongoid/validatable/format_spec.rb +2 -0
  710. data/spec/mongoid/validatable/length_spec.rb +2 -0
  711. data/spec/mongoid/validatable/numericality_spec.rb +2 -0
  712. data/spec/mongoid/validatable/presence_spec.rb +28 -22
  713. data/spec/mongoid/validatable/uniqueness_spec.rb +102 -73
  714. data/spec/mongoid/validatable_spec.rb +5 -3
  715. data/spec/mongoid_spec.rb +2 -0
  716. data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
  717. data/spec/rails/mongoid_spec.rb +4 -2
  718. data/spec/shared/LICENSE +20 -0
  719. data/spec/shared/bin/get-mongodb-download-url +17 -0
  720. data/spec/shared/bin/s3-copy +45 -0
  721. data/spec/shared/bin/s3-upload +69 -0
  722. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  723. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  724. data/spec/shared/lib/mrss/constraints.rb +386 -0
  725. data/spec/shared/lib/mrss/docker_runner.rb +271 -0
  726. data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
  727. data/spec/shared/lib/mrss/lite_constraints.rb +199 -0
  728. data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
  729. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  730. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  731. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  732. data/spec/shared/lib/mrss/utils.rb +15 -0
  733. data/spec/shared/share/Dockerfile.erb +339 -0
  734. data/spec/shared/share/haproxy-1.conf +16 -0
  735. data/spec/shared/share/haproxy-2.conf +17 -0
  736. data/spec/shared/shlib/distro.sh +74 -0
  737. data/spec/shared/shlib/server.sh +379 -0
  738. data/spec/shared/shlib/set_env.sh +132 -0
  739. data/spec/spec_helper.rb +69 -80
  740. data/spec/support/authorization.rb +2 -0
  741. data/spec/support/client_registry.rb +9 -0
  742. data/spec/support/constraints.rb +53 -0
  743. data/spec/support/expectations.rb +21 -3
  744. data/spec/support/helpers.rb +11 -0
  745. data/spec/support/macros.rb +42 -0
  746. data/spec/{app → support}/models/account.rb +3 -1
  747. data/spec/{app → support}/models/acolyte.rb +2 -0
  748. data/spec/{app → support}/models/actor.rb +3 -1
  749. data/spec/support/models/actress.rb +4 -0
  750. data/spec/{app → support}/models/address.rb +6 -0
  751. data/spec/{app → support}/models/address_component.rb +2 -0
  752. data/spec/{app → support}/models/address_number.rb +2 -0
  753. data/spec/{app → support}/models/agency.rb +2 -0
  754. data/spec/{app → support}/models/agent.rb +2 -0
  755. data/spec/{app → support}/models/album.rb +2 -0
  756. data/spec/{app → support}/models/alert.rb +2 -0
  757. data/spec/{app → support}/models/animal.rb +2 -0
  758. data/spec/{app → support}/models/answer.rb +2 -0
  759. data/spec/{app → support}/models/appointment.rb +2 -0
  760. data/spec/support/models/armrest.rb +9 -0
  761. data/spec/support/models/array_field.rb +7 -0
  762. data/spec/{app → support}/models/article.rb +2 -0
  763. data/spec/{app → support}/models/artist.rb +4 -0
  764. data/spec/{app → support}/models/artwork.rb +2 -0
  765. data/spec/support/models/audible_sound.rb +3 -0
  766. data/spec/{app → support}/models/audio.rb +2 -0
  767. data/spec/{app → support}/models/augmentation.rb +2 -0
  768. data/spec/{app → support}/models/author.rb +2 -0
  769. data/spec/{app → support}/models/baby.rb +2 -0
  770. data/spec/{app → support}/models/band.rb +6 -0
  771. data/spec/{app → support}/models/bar.rb +2 -0
  772. data/spec/{app → support}/models/basic.rb +2 -0
  773. data/spec/support/models/bed.rb +3 -0
  774. data/spec/{app → support}/models/big_palette.rb +2 -0
  775. data/spec/{app → support}/models/birthday.rb +2 -0
  776. data/spec/support/models/bolt.rb +7 -0
  777. data/spec/{app → support}/models/bomb.rb +2 -0
  778. data/spec/{app → support}/models/book.rb +2 -0
  779. data/spec/{app → support}/models/breed.rb +2 -0
  780. data/spec/{app → support}/models/browser.rb +3 -1
  781. data/spec/{app → support}/models/building.rb +2 -0
  782. data/spec/{app → support}/models/building_address.rb +2 -0
  783. data/spec/{app → support}/models/bus.rb +2 -0
  784. data/spec/{app → support}/models/business.rb +2 -0
  785. data/spec/{app → support}/models/callback_test.rb +2 -0
  786. data/spec/{app → support}/models/canvas.rb +3 -1
  787. data/spec/support/models/car.rb +3 -0
  788. data/spec/{app → support}/models/cat.rb +2 -0
  789. data/spec/{app → support}/models/category.rb +2 -0
  790. data/spec/{app → support}/models/child.rb +2 -0
  791. data/spec/{app → support}/models/child_doc.rb +5 -3
  792. data/spec/{app → support}/models/church.rb +2 -0
  793. data/spec/{app → support}/models/circle.rb +2 -0
  794. data/spec/{app → support}/models/circuit.rb +2 -0
  795. data/spec/{app → support}/models/circus.rb +2 -0
  796. data/spec/{app → support}/models/code.rb +2 -0
  797. data/spec/support/models/coding/pull_request.rb +11 -0
  798. data/spec/support/models/coding.rb +3 -0
  799. data/spec/{app → support}/models/comment.rb +2 -0
  800. data/spec/{app → support}/models/company.rb +2 -0
  801. data/spec/{app → support}/models/consumption_period.rb +2 -0
  802. data/spec/{app → support}/models/contextable_item.rb +2 -0
  803. data/spec/{app → support}/models/contractor.rb +2 -0
  804. data/spec/{app → support}/models/cookie.rb +2 -0
  805. data/spec/{app → support}/models/country_code.rb +4 -0
  806. data/spec/{app → support}/models/courier_job.rb +2 -0
  807. data/spec/support/models/crate.rb +12 -0
  808. data/spec/support/models/customer.rb +10 -0
  809. data/spec/support/models/customer_address.rb +11 -0
  810. data/spec/support/models/deed.rb +7 -0
  811. data/spec/{app → support}/models/definition.rb +2 -0
  812. data/spec/support/models/delegating_patient.rb +15 -0
  813. data/spec/{app → support}/models/description.rb +2 -0
  814. data/spec/{app → support}/models/dictionary.rb +8 -0
  815. data/spec/{app → support}/models/division.rb +2 -0
  816. data/spec/{app → support}/models/doctor.rb +2 -0
  817. data/spec/{app → support}/models/dog.rb +2 -0
  818. data/spec/{app → support}/models/dokument.rb +2 -0
  819. data/spec/{app → support}/models/draft.rb +2 -0
  820. data/spec/{app → support}/models/dragon.rb +2 -0
  821. data/spec/{app → support}/models/driver.rb +3 -1
  822. data/spec/{app → support}/models/drug.rb +2 -0
  823. data/spec/{app → support}/models/dungeon.rb +2 -0
  824. data/spec/{app → support}/models/edit.rb +2 -0
  825. data/spec/{app → support}/models/email.rb +2 -0
  826. data/spec/{app → support}/models/employer.rb +2 -0
  827. data/spec/{app → support}/models/entry.rb +2 -0
  828. data/spec/support/models/eraser.rb +3 -0
  829. data/spec/{app → support}/models/even.rb +2 -0
  830. data/spec/{app → support}/models/event.rb +2 -0
  831. data/spec/{app → support}/models/exhibition.rb +2 -0
  832. data/spec/{app → support}/models/exhibitor.rb +2 -0
  833. data/spec/{app → support}/models/explosion.rb +2 -0
  834. data/spec/{app → support}/models/eye.rb +2 -0
  835. data/spec/{app → support}/models/eye_bowl.rb +2 -0
  836. data/spec/{app → support}/models/face.rb +2 -0
  837. data/spec/{app → support}/models/favorite.rb +2 -0
  838. data/spec/{app → support}/models/filesystem.rb +2 -0
  839. data/spec/{app → support}/models/fire_hydrant.rb +2 -0
  840. data/spec/{app → support}/models/firefox.rb +2 -0
  841. data/spec/{app → support}/models/fish.rb +2 -0
  842. data/spec/{app → support}/models/folder.rb +2 -0
  843. data/spec/{app → support}/models/folder_item.rb +2 -0
  844. data/spec/{app → support}/models/fruits.rb +2 -0
  845. data/spec/{app → support}/models/game.rb +2 -0
  846. data/spec/{app → support}/models/ghost.rb +2 -0
  847. data/spec/support/models/guitar.rb +4 -0
  848. data/spec/support/models/hole.rb +12 -0
  849. data/spec/{app → support}/models/home.rb +2 -0
  850. data/spec/{app → support}/models/house.rb +2 -0
  851. data/spec/{app → support}/models/html_writer.rb +2 -0
  852. data/spec/{app → support}/models/id_key.rb +2 -0
  853. data/spec/support/models/idnodef.rb +7 -0
  854. data/spec/{app → support}/models/image.rb +2 -0
  855. data/spec/{app → support}/models/implant.rb +2 -0
  856. data/spec/support/models/instrument.rb +8 -0
  857. data/spec/{app → support}/models/item.rb +3 -1
  858. data/spec/{app → support}/models/jar.rb +2 -0
  859. data/spec/{app → support}/models/kaleidoscope.rb +2 -0
  860. data/spec/{app → support}/models/kangaroo.rb +3 -1
  861. data/spec/{app → support}/models/label.rb +4 -1
  862. data/spec/{app → support}/models/language.rb +2 -0
  863. data/spec/{app → support}/models/lat_lng.rb +2 -0
  864. data/spec/{app → support}/models/league.rb +2 -0
  865. data/spec/support/models/learner.rb +4 -0
  866. data/spec/{app → support}/models/line_item.rb +2 -0
  867. data/spec/{app → support}/models/location.rb +2 -0
  868. data/spec/{app → support}/models/login.rb +2 -0
  869. data/spec/{app → support}/models/manufacturer.rb +2 -0
  870. data/spec/{app → support}/models/meat.rb +2 -0
  871. data/spec/{app → support}/models/membership.rb +2 -0
  872. data/spec/{app → support}/models/message.rb +2 -0
  873. data/spec/support/models/minim.rb +6 -0
  874. data/spec/{app → support}/models/mixed_drink.rb +2 -0
  875. data/spec/support/models/mop.rb +24 -0
  876. data/spec/{app → support}/models/movie.rb +2 -0
  877. data/spec/support/models/my_hash.rb +4 -0
  878. data/spec/{app → support}/models/name.rb +2 -0
  879. data/spec/support/models/name_only.rb +8 -0
  880. data/spec/{app → support}/models/node.rb +2 -0
  881. data/spec/{app → support}/models/note.rb +2 -0
  882. data/spec/support/models/nut.rb +7 -0
  883. data/spec/{app → support}/models/odd.rb +2 -0
  884. data/spec/support/models/order.rb +12 -0
  885. data/spec/{app → support}/models/ordered_post.rb +3 -1
  886. data/spec/{app → support}/models/ordered_preference.rb +2 -0
  887. data/spec/{app → support}/models/oscar.rb +2 -0
  888. data/spec/support/models/other_owner_object.rb +4 -0
  889. data/spec/{app → support}/models/override.rb +2 -0
  890. data/spec/{app → support}/models/ownable.rb +2 -0
  891. data/spec/{app → support}/models/owner.rb +4 -0
  892. data/spec/{app → support}/models/pack.rb +2 -0
  893. data/spec/{app → support}/models/page.rb +2 -0
  894. data/spec/{app → support}/models/page_question.rb +2 -0
  895. data/spec/{app → support}/models/palette.rb +3 -1
  896. data/spec/{app → support}/models/parent.rb +2 -0
  897. data/spec/{app → support}/models/parent_doc.rb +2 -0
  898. data/spec/support/models/passport.rb +13 -0
  899. data/spec/{app → support}/models/patient.rb +2 -0
  900. data/spec/{app → support}/models/pdf_writer.rb +2 -0
  901. data/spec/support/models/pencil.rb +3 -0
  902. data/spec/{app → support}/models/person.rb +21 -1
  903. data/spec/{app → support}/models/pet.rb +2 -0
  904. data/spec/{app → support}/models/pet_owner.rb +2 -0
  905. data/spec/{app → support}/models/phone.rb +5 -1
  906. data/spec/support/models/piano.rb +4 -0
  907. data/spec/{app → support}/models/pizza.rb +2 -0
  908. data/spec/{app → support}/models/player.rb +2 -0
  909. data/spec/{app → support}/models/post.rb +2 -0
  910. data/spec/{app → support}/models/post_genre.rb +2 -0
  911. data/spec/{app → support}/models/powerup.rb +2 -0
  912. data/spec/{app → support}/models/preference.rb +2 -0
  913. data/spec/{app → support}/models/princess.rb +2 -0
  914. data/spec/{app → support}/models/product.rb +2 -0
  915. data/spec/support/models/profile.rb +17 -0
  916. data/spec/{app → support}/models/pronunciation.rb +2 -0
  917. data/spec/{app → support}/models/pub.rb +2 -0
  918. data/spec/support/models/publication/encyclopedia.rb +11 -0
  919. data/spec/support/models/publication/review.rb +13 -0
  920. data/spec/support/models/publication.rb +4 -0
  921. data/spec/{app → support}/models/purchase.rb +2 -0
  922. data/spec/support/models/purchased_item.rb +10 -0
  923. data/spec/{app → support}/models/question.rb +2 -0
  924. data/spec/{app → support}/models/quiz.rb +2 -0
  925. data/spec/{app → support}/models/rating.rb +2 -0
  926. data/spec/{app → support}/models/record.rb +2 -0
  927. data/spec/{app → support}/models/registry.rb +2 -0
  928. data/spec/{app → support}/models/role.rb +2 -0
  929. data/spec/{app → support}/models/root_category.rb +2 -0
  930. data/spec/{app → support}/models/sandwich.rb +2 -0
  931. data/spec/{app → support}/models/scheduler.rb +2 -0
  932. data/spec/support/models/scribe.rb +7 -0
  933. data/spec/support/models/sealer.rb +7 -0
  934. data/spec/support/models/seat.rb +24 -0
  935. data/spec/{app → support}/models/seo.rb +2 -0
  936. data/spec/support/models/series.rb +7 -0
  937. data/spec/{app → support}/models/server.rb +2 -0
  938. data/spec/{app → support}/models/service.rb +2 -0
  939. data/spec/{app → support}/models/shape.rb +4 -2
  940. data/spec/{app → support}/models/shelf.rb +2 -0
  941. data/spec/{app → support}/models/shipment_address.rb +2 -0
  942. data/spec/{app → support}/models/shipping_container.rb +2 -0
  943. data/spec/{app → support}/models/shipping_pack.rb +2 -0
  944. data/spec/support/models/shirt.rb +11 -0
  945. data/spec/{app → support}/models/shop.rb +2 -0
  946. data/spec/{app → support}/models/short_agent.rb +2 -0
  947. data/spec/{app → support}/models/short_quiz.rb +2 -0
  948. data/spec/{app → support}/models/simple.rb +2 -0
  949. data/spec/{app → support}/models/slave.rb +2 -0
  950. data/spec/{app → support}/models/song.rb +2 -0
  951. data/spec/{app → support}/models/sound.rb +2 -0
  952. data/spec/support/models/spacer.rb +7 -0
  953. data/spec/{app → support}/models/square.rb +2 -0
  954. data/spec/{app → support}/models/staff.rb +2 -0
  955. data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
  956. data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
  957. data/spec/support/models/store_as_dup_test3.rb +7 -0
  958. data/spec/support/models/store_as_dup_test4.rb +7 -0
  959. data/spec/{app → support}/models/strategy.rb +2 -0
  960. data/spec/{app → support}/models/sub_item.rb +2 -0
  961. data/spec/{app → support}/models/subscription.rb +2 -0
  962. data/spec/{app → support}/models/survey.rb +2 -0
  963. data/spec/{app → support}/models/symptom.rb +2 -0
  964. data/spec/support/models/system_role.rb +7 -0
  965. data/spec/{app → support}/models/tag.rb +2 -0
  966. data/spec/{app → support}/models/target.rb +2 -0
  967. data/spec/{app → support}/models/template.rb +2 -0
  968. data/spec/{app → support}/models/thing.rb +2 -0
  969. data/spec/support/models/threadlocker.rb +7 -0
  970. data/spec/{app → support}/models/title.rb +2 -0
  971. data/spec/{app → support}/models/tool.rb +4 -2
  972. data/spec/{app → support}/models/topping.rb +2 -0
  973. data/spec/support/models/toy.rb +9 -0
  974. data/spec/{app → support}/models/track.rb +2 -0
  975. data/spec/{app → support}/models/translation.rb +2 -0
  976. data/spec/{app → support}/models/tree.rb +2 -0
  977. data/spec/support/models/truck.rb +7 -0
  978. data/spec/support/models/updatable.rb +7 -0
  979. data/spec/{app → support}/models/user.rb +2 -0
  980. data/spec/{app → support}/models/user_account.rb +2 -0
  981. data/spec/{app → support}/models/validation_callback.rb +2 -0
  982. data/spec/support/models/vehicle.rb +18 -0
  983. data/spec/{app → support}/models/version.rb +2 -0
  984. data/spec/{app → support}/models/vertex.rb +3 -1
  985. data/spec/{app → support}/models/vet_visit.rb +2 -0
  986. data/spec/{app → support}/models/video.rb +2 -0
  987. data/spec/support/models/video_game.rb +3 -0
  988. data/spec/support/models/washer.rb +7 -0
  989. data/spec/{app → support}/models/weapon.rb +2 -0
  990. data/spec/{app → support}/models/wiki_page.rb +3 -0
  991. data/spec/{app → support}/models/word.rb +2 -0
  992. data/spec/{app → support}/models/word_origin.rb +2 -0
  993. data/spec/{app → support}/models/writer.rb +4 -2
  994. data/spec/support/shared/time.rb +53 -0
  995. data/spec/support/spec_config.rb +60 -0
  996. data.tar.gz.sig +0 -0
  997. metadata +1131 -686
  998. metadata.gz.sig +0 -0
  999. data/lib/mongoid/association/touchable.rb +0 -97
  1000. data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
  1001. data/lib/mongoid/matchable/all.rb +0 -27
  1002. data/lib/mongoid/matchable/and.rb +0 -30
  1003. data/lib/mongoid/matchable/default.rb +0 -72
  1004. data/lib/mongoid/matchable/elem_match.rb +0 -34
  1005. data/lib/mongoid/matchable/exists.rb +0 -23
  1006. data/lib/mongoid/matchable/gt.rb +0 -23
  1007. data/lib/mongoid/matchable/gte.rb +0 -23
  1008. data/lib/mongoid/matchable/in.rb +0 -24
  1009. data/lib/mongoid/matchable/lt.rb +0 -23
  1010. data/lib/mongoid/matchable/lte.rb +0 -23
  1011. data/lib/mongoid/matchable/ne.rb +0 -21
  1012. data/lib/mongoid/matchable/nin.rb +0 -22
  1013. data/lib/mongoid/matchable/or.rb +0 -33
  1014. data/lib/mongoid/matchable/regexp.rb +0 -27
  1015. data/lib/mongoid/matchable/size.rb +0 -21
  1016. data/lib/support/ruby_version.rb +0 -26
  1017. data/spec/app/models/actress.rb +0 -2
  1018. data/spec/app/models/bed.rb +0 -1
  1019. data/spec/app/models/car.rb +0 -1
  1020. data/spec/app/models/eraser.rb +0 -1
  1021. data/spec/app/models/learner.rb +0 -2
  1022. data/spec/app/models/my_hash.rb +0 -2
  1023. data/spec/app/models/passport.rb +0 -5
  1024. data/spec/app/models/pencil.rb +0 -1
  1025. data/spec/app/models/profile.rb +0 -5
  1026. data/spec/app/models/series.rb +0 -4
  1027. data/spec/app/models/truck.rb +0 -3
  1028. data/spec/app/models/vehicle.rb +0 -11
  1029. data/spec/app/models/video_game.rb +0 -1
  1030. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
  1031. data/spec/mongoid/matchable/all_spec.rb +0 -31
  1032. data/spec/mongoid/matchable/and_spec.rb +0 -187
  1033. data/spec/mongoid/matchable/default_spec.rb +0 -130
  1034. data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
  1035. data/spec/mongoid/matchable/exists_spec.rb +0 -57
  1036. data/spec/mongoid/matchable/gt_spec.rb +0 -86
  1037. data/spec/mongoid/matchable/gte_spec.rb +0 -84
  1038. data/spec/mongoid/matchable/in_spec.rb +0 -49
  1039. data/spec/mongoid/matchable/lt_spec.rb +0 -85
  1040. data/spec/mongoid/matchable/lte_spec.rb +0 -85
  1041. data/spec/mongoid/matchable/ne_spec.rb +0 -46
  1042. data/spec/mongoid/matchable/nin_spec.rb +0 -48
  1043. data/spec/mongoid/matchable/or_spec.rb +0 -131
  1044. data/spec/mongoid/matchable/regexp_spec.rb +0 -59
  1045. data/spec/mongoid/matchable/size_spec.rb +0 -25
  1046. data/spec/mongoid/matchable_spec.rb +0 -828
@@ -1,9 +1,10 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
3
+ require "mongoid/fields/validators/macro"
4
+
2
5
  module Mongoid
3
6
 
4
- # Provides behaviour around traversing the document graph.
5
- #
6
- # @since 4.0.0
7
+ # Provides behavior around traversing the document graph.
7
8
  module Traversable
8
9
  extend ActiveSupport::Concern
9
10
 
@@ -15,53 +16,181 @@ module Mongoid
15
16
  @__parent = p
16
17
  end
17
18
 
18
- # Get all child +Documents+ to this +Document+, going n levels deep if
19
- # necessary. This is used when calling update persistence operations from
19
+ # Module used for prepending to the various discriminator_*= methods
20
+ #
21
+ # @api private
22
+ module DiscriminatorAssignment
23
+ def discriminator_key=(value)
24
+ if hereditary?
25
+ raise Errors::InvalidDiscriminatorKeyTarget.new(self, self.superclass)
26
+ end
27
+
28
+ _mongoid_clear_types
29
+
30
+ if value
31
+ Mongoid::Fields::Validators::Macro.validate_field_name(self, value)
32
+ value = value.to_s
33
+ super
34
+ else
35
+ # When discriminator key is set to nil, replace the class's definition
36
+ # of the discriminator key reader (provided by class_attribute earlier)
37
+ # and re-delegate to Mongoid.
38
+ class << self
39
+ delegate :discriminator_key, to: ::Mongoid
40
+ end
41
+ end
42
+
43
+ # This condition checks if the new discriminator key would overwrite
44
+ # an existing field.
45
+ # This condition also checks if the class has any descendants, because
46
+ # if it doesn't then it doesn't need a discriminator key.
47
+ if !fields.has_key?(self.discriminator_key) && !descendants.empty?
48
+ default_proc = lambda { self.class.discriminator_value }
49
+ field(self.discriminator_key, default: default_proc, type: String)
50
+ end
51
+ end
52
+
53
+ def discriminator_value=(value)
54
+ value ||= self.name
55
+ _mongoid_clear_types
56
+ add_discriminator_mapping(value)
57
+ @discriminator_value = value
58
+ end
59
+ end
60
+
61
+ # Module used for prepending the discriminator_value method.
62
+ #
63
+ # A separate module was needed because the subclasses of this class
64
+ # need to be manually prepended with the discriminator_value and can't
65
+ # rely on being a class_attribute because the .discriminator_value
66
+ # method is overridden by every subclass in the inherited method.
67
+ #
68
+ # @api private
69
+ module DiscriminatorRetrieval
70
+
71
+ # Get the name on the reading side if the discriminator_value is nil
72
+ def discriminator_value
73
+ @discriminator_value || self.name
74
+ end
75
+ end
76
+
77
+ included do
78
+ class_attribute :discriminator_key, instance_accessor: false
79
+
80
+ class << self
81
+ delegate :discriminator_key, to: ::Mongoid
82
+ prepend DiscriminatorAssignment
83
+ include DiscriminatorRetrieval
84
+
85
+ # @api private
86
+ #
87
+ # @return [ Hash<String, Class> ] The current mapping of discriminator_values to classes
88
+ attr_accessor :discriminator_mapping
89
+ end
90
+
91
+ # Add a discriminator mapping to the parent class. This mapping is used when
92
+ # receiving a document to identify its class.
93
+ #
94
+ # @param [ String ] value The discriminator_value that was just set
95
+ # @param [ Class ] The class the discriminator_value was set on
96
+ #
97
+ # @api private
98
+ def self.add_discriminator_mapping(value, klass=self)
99
+ self.discriminator_mapping ||= {}
100
+ self.discriminator_mapping[value] = klass
101
+ superclass.add_discriminator_mapping(value, klass) if hereditary?
102
+ end
103
+
104
+ # Get the discriminator mapping from the parent class. This method returns nil if there
105
+ # is no mapping for the given value.
106
+ #
107
+ # @param [ String ] value The discriminator_value to retrieve
108
+ #
109
+ # @return [ Class | nil ] klass The class corresponding to the given discriminator_value. If
110
+ # the value is not in the mapping, this method returns nil.
111
+ #
112
+ # @api private
113
+ def self.get_discriminator_mapping(value)
114
+ self.discriminator_mapping[value] if self.discriminator_mapping
115
+ end
116
+ end
117
+
118
+ # Get all child +Documents+ to this +Document+
119
+ #
120
+ # @return [ Array<Document> ] All child documents in the hierarchy.
121
+ #
122
+ # @api private
123
+ def _children
124
+ @__children ||= collect_children
125
+ end
126
+
127
+ # Get all descendant +Documents+ of this +Document+ recursively.
128
+ # This is used when calling update persistence operations from
20
129
  # the root document, where changes in the entire tree need to be
21
130
  # determined. Note that persistence from the embedded documents will
22
131
  # always be preferred, since they are optimized calls... This operation
23
132
  # can get expensive in domains with large hierarchies.
24
133
  #
25
- # @example Get all the document's children.
26
- # person._children
134
+ # @return [ Array<Document> ] All descendant documents in the hierarchy.
27
135
  #
28
- # @return [ Array<Document> ] All child documents in the hierarchy.
29
- def _children
30
- @__children ||= collect_children
136
+ # @api private
137
+ def _descendants
138
+ @__descendants ||= collect_descendants
31
139
  end
32
140
 
33
141
  # Collect all the children of this document.
34
142
  #
35
- # @example Collect all the children.
36
- # document.collect_children
37
- #
38
143
  # @return [ Array<Document> ] The children.
39
144
  #
40
- # @since 2.4.0
145
+ # @api private
41
146
  def collect_children
42
147
  children = []
43
148
  embedded_relations.each_pair do |name, association|
44
149
  without_autobuild do
45
150
  child = send(name)
46
- Array.wrap(child).each do |doc|
47
- children.push(doc)
48
- children.concat(doc._children)
49
- end if child
151
+ if child
152
+ children += Array.wrap(child)
153
+ end
50
154
  end
51
155
  end
52
156
  children
53
157
  end
54
158
 
55
- # Marks all children as being persisted.
159
+ # Collect all the descendants of this document.
56
160
  #
57
- # @example Flag all the children.
58
- # document.flag_children_persisted
161
+ # @return [ Array<Document> ] The descendants.
59
162
  #
60
- # @return [ Array<Document> ] The flagged children.
163
+ # @api private
164
+ def collect_descendants
165
+ children = []
166
+ to_expand = []
167
+ expanded = {}
168
+ embedded_relations.each_pair do |name, association|
169
+ without_autobuild do
170
+ child = send(name)
171
+ if child
172
+ to_expand += Array.wrap(child)
173
+ end
174
+ end
175
+ end
176
+ until to_expand.empty?
177
+ expanding = to_expand
178
+ to_expand = []
179
+ expanding.each do |child|
180
+ next if expanded[child]
181
+ expanded[child] = true
182
+ children << child
183
+ to_expand += child._children
184
+ end
185
+ end
186
+ children
187
+ end
188
+
189
+ # Marks all descendants as being persisted.
61
190
  #
62
- # @since 3.0.7
63
- def flag_children_persisted
64
- _children.each do |child|
191
+ # @return [ Array<Document> ] The flagged descendants.
192
+ def flag_descendants_persisted
193
+ _descendants.each do |child|
65
194
  child.new_record = false
66
195
  end
67
196
  end
@@ -98,8 +227,6 @@ module Mongoid
98
227
  # document.remove_child(child)
99
228
  #
100
229
  # @param [ Document ] child The child (embedded) document to remove.
101
- #
102
- # @since 2.0.0.beta.1
103
230
  def remove_child(child)
104
231
  name = child.association_name
105
232
  if child.embedded_one?
@@ -110,37 +237,28 @@ module Mongoid
110
237
  end
111
238
  end
112
239
 
113
- # After children are persisted we can call this to move all their changes
114
- # and flag them as persisted in one call.
115
- #
116
- # @example Reset the children.
117
- # document.reset_persisted_children
240
+ # After descendants are persisted we can call this to move all their
241
+ # changes and flag them as persisted in one call.
118
242
  #
119
- # @return [ Array<Document> ] The children.
120
- #
121
- # @since 2.1.0
122
- def reset_persisted_children
123
- _children.each do |child|
243
+ # @return [ Array<Document> ] The descendants.
244
+ def reset_persisted_descendants
245
+ _descendants.each do |child|
124
246
  child.move_changes
125
247
  child.new_record = false
126
248
  end
127
- _reset_memoized_children!
249
+ _reset_memoized_descendants!
128
250
  end
129
251
 
130
- # Resets the memoized children on the object. Called internally when an
252
+ # Resets the memoized descendants on the object. Called internally when an
131
253
  # embedded array changes size.
132
254
  #
133
- # @api semiprivate
134
- #
135
- # @example Reset the memoized children.
136
- # document._reset_memoized_children!
137
- #
138
255
  # @return [ nil ] nil.
139
256
  #
140
- # @since 5.0.0
141
- def _reset_memoized_children!
142
- _parent._reset_memoized_children! if _parent
257
+ # @api private
258
+ def _reset_memoized_descendants!
259
+ _parent._reset_memoized_descendants! if _parent
143
260
  @__children = nil
261
+ @__descendants = nil
144
262
  end
145
263
 
146
264
  # Return the root document in the object graph. If the current document
@@ -162,8 +280,6 @@ module Mongoid
162
280
  # document._root?
163
281
  #
164
282
  # @return [ true, false ] If the document is the root.
165
- #
166
- # @since 3.1.0
167
283
  def _root?
168
284
  _parent ? false : true
169
285
  end
@@ -181,15 +297,13 @@ module Mongoid
181
297
  end
182
298
 
183
299
  # When inheriting, we want to copy the fields from the parent class and
184
- # set the on the child to start, mimicking the behaviour of the old
300
+ # set the on the child to start, mimicking the behavior of the old
185
301
  # class_inheritable_accessor that was deprecated in Rails edge.
186
302
  #
187
303
  # @example Inherit from this class.
188
304
  # Person.inherited(Doctor)
189
305
  #
190
306
  # @param [ Class ] subclass The inheriting class.
191
- #
192
- # @since 2.0.0.rc.6
193
307
  def inherited(subclass)
194
308
  super
195
309
  @_type = nil
@@ -199,14 +313,20 @@ module Mongoid
199
313
  subclass.pre_processed_defaults = pre_processed_defaults.dup
200
314
  subclass.post_processed_defaults = post_processed_defaults.dup
201
315
  subclass._declared_scopes = Hash.new { |hash,key| self._declared_scopes[key] }
316
+ subclass.discriminator_value = subclass.name
317
+
318
+ # We need to do this here because the discriminator_value method is
319
+ # overridden in the subclass above.
320
+ class << subclass
321
+ include DiscriminatorRetrieval
322
+ end
202
323
 
203
324
  # We only need the _type field if inheritance is in play, but need to
204
325
  # add to the root class as well for backwards compatibility.
205
- unless fields.has_key?("_type")
206
- field(:_type, default: self.name, type: String)
326
+ unless fields.has_key?(self.discriminator_key)
327
+ default_proc = lambda { self.class.discriminator_value }
328
+ field(self.discriminator_key, default: default_proc, type: String)
207
329
  end
208
- subclass_default = subclass.name || ->{ self.class.name }
209
- subclass.field(:_type, default: subclass_default, type: String, overwrite: true)
210
330
  end
211
331
  end
212
332
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Validatable
4
5
 
@@ -24,10 +25,8 @@ module Mongoid
24
25
  # validator.validate_each(document, :name, name)
25
26
  #
26
27
  # @param [ Document ] document The document to validate.
27
- # @param [ Symbol ] attribute The relation to validate.
28
- # @param [ Object ] value The value of the relation.
29
- #
30
- # @since 2.0.0
28
+ # @param [ Symbol ] attribute The association to validate.
29
+ # @param [ Object ] value The value of the association.
31
30
  def validate_each(document, attribute, value)
32
31
  begin
33
32
  document.begin_validate
@@ -41,7 +40,7 @@ module Mongoid
41
40
  ensure
42
41
  document.exit_validate
43
42
  end
44
- document.errors.add(attribute, :invalid, options) unless valid
43
+ document.errors.add(attribute, :invalid, **options) unless valid
45
44
  end
46
45
  end
47
46
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Validatable
4
5
 
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Validatable
4
5
 
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Validatable
4
5
 
@@ -13,8 +14,6 @@ module Mongoid
13
14
  # @param [ Document ] document The document.
14
15
  # @param [ Symbol, String ] attribute The attribute to validate.
15
16
  # @param [ Object ] value The attribute value.
16
- #
17
- # @since 2.4.2
18
17
  def validate_each(document, attribute, value)
19
18
  field = document.fields[document.database_field_name(attribute)]
20
19
  if field.try(:localized?) && !value.blank?
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Validatable
4
5
  module Macros
@@ -48,12 +49,10 @@ module Mongoid
48
49
  # include Mongoid::Document
49
50
  # field :title
50
51
  #
51
- # validates_format_of :title, with: /^[a-z0-9 \-_]*$/i
52
+ # validates_format_of :title, with: /\A[a-z0-9 \-_]*\z/i
52
53
  # end
53
54
  #
54
55
  # @param [ Array ] args The names of the fields to validate.
55
- #
56
- # @since 2.4.0
57
56
  def validates_format_of(*args)
58
57
  validates_with(FormatValidator, _merge_attributes(args))
59
58
  end
@@ -69,8 +68,6 @@ module Mongoid
69
68
  # end
70
69
  #
71
70
  # @param [ Array ] args The names of the fields to validate.
72
- #
73
- # @since 2.4.0
74
71
  def validates_length_of(*args)
75
72
  validates_with(LengthValidator, _merge_attributes(args))
76
73
  end
@@ -86,8 +83,6 @@ module Mongoid
86
83
  # end
87
84
  #
88
85
  # @param [ Array ] args The names of the fields to validate.
89
- #
90
- # @since 2.4.0
91
86
  def validates_presence_of(*args)
92
87
  validates_with(PresenceValidator, _merge_attributes(args))
93
88
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Validatable
4
5
 
@@ -23,8 +24,6 @@ module Mongoid
23
24
  # @param [ Document ] document The document to validate.
24
25
  # @param [ Symbol ] attribute The attribute name.
25
26
  # @param [ Object ] value The current value of the field.
26
- #
27
- # @since 2.4.0
28
27
  def validate_each(document, attribute, value)
29
28
  field = document.fields[document.database_field_name(attribute)]
30
29
  if field.try(:localized?) && !value.blank?
@@ -32,34 +31,32 @@ module Mongoid
32
31
  document.errors.add(
33
32
  attribute,
34
33
  :blank_in_locale,
35
- options.merge(location: _locale)
34
+ **options.merge(location: _locale)
36
35
  ) if not_present?(_value)
37
36
  end
38
37
  elsif document.relations.has_key?(attribute.to_s)
39
38
  if relation_or_fk_missing?(document, attribute, value)
40
- document.errors.add(attribute, :blank, options)
39
+ document.errors.add(attribute, :blank, **options)
41
40
  end
42
41
  else
43
- document.errors.add(attribute, :blank, options) if not_present?(value)
42
+ document.errors.add(attribute, :blank, **options) if not_present?(value)
44
43
  end
45
44
  end
46
45
 
47
46
  private
48
47
 
49
- # Returns true if the relation is blank or the foreign key is blank.
48
+ # Returns true if the association is blank or the foreign key is blank.
50
49
  #
51
50
  # @api private
52
51
  #
53
- # @example Check is the relation or fk is blank.
54
- # validator.relation_or_fk_mising(doc, :name, "")
52
+ # @example Check is the association or fk is blank.
53
+ # validator.relation_or_fk_missing(doc, :name, "")
55
54
  #
56
55
  # @param [ Document ] doc The document.
57
56
  # @param [ Symbol ] attr The attribute.
58
57
  # @param [ Object ] value The value.
59
58
  #
60
59
  # @return [ true, false ] If the doc is missing.
61
- #
62
- # @since 3.0.0
63
60
  def relation_or_fk_missing?(doc, attr, value)
64
61
  return true if value.blank? && doc.send(attr).blank?
65
62
  association = doc.relations[attr.to_s]
@@ -76,8 +73,6 @@ module Mongoid
76
73
  # @param [ Object ] value The value.
77
74
  #
78
75
  # @return [ true, false ] If the value is not present.
79
- #
80
- # @since 3.0.5
81
76
  def not_present?(value)
82
77
  value.blank? && value != false
83
78
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Validatable
4
5
  module Queryable
@@ -14,8 +15,6 @@ module Mongoid
14
15
  # @param [ Document ] document The document being validated.
15
16
  #
16
17
  # @return [ Object ] The result of the yield.
17
- #
18
- # @since 3.0.2
19
18
  def with_query(document)
20
19
  klass = document.class
21
20
  begin
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Validatable
4
5
 
@@ -36,8 +37,6 @@ module Mongoid
36
37
  # @param [ Object ] value The value of the field.
37
38
  #
38
39
  # @return [ Errors ] The errors.
39
- #
40
- # @since 1.0.0
41
40
  def validate_each(document, attribute, value)
42
41
  with_query(document) do
43
42
  attrib, val = to_validate(document, attribute, value)
@@ -62,11 +61,9 @@ module Mongoid
62
61
  # @param [ Document ] document The document to validate.
63
62
  # @param [ Symbol ] attribute The name of the attribute.
64
63
  # @param [ Object ] value The value of the object.
65
- #
66
- # @since 2.4.10
67
64
  def add_error(document, attribute, value)
68
65
  document.errors.add(
69
- attribute, :taken, options.except(:case_sensitive, :scope).merge(value: value)
66
+ attribute, :taken, **options.except(:case_sensitive, :scope).merge(value: value)
70
67
  )
71
68
  end
72
69
 
@@ -78,8 +75,6 @@ module Mongoid
78
75
  # validator.case_sensitive?
79
76
  #
80
77
  # @return [ true, false ] If the validation is case sensitive.
81
- #
82
- # @since 2.3.0
83
78
  def case_sensitive?
84
79
  !(options[:case_sensitive] == false)
85
80
  end
@@ -97,11 +92,23 @@ module Mongoid
97
92
  # @param [ Object ] value The value of the object.
98
93
  #
99
94
  # @return [ Criteria ] The criteria.
100
- #
101
- # @since 2.4.10
102
95
  def create_criteria(base, document, attribute, value)
103
96
  criteria = scope(base.unscoped, document, attribute)
104
- criteria.selector.update(criterion(document, attribute, value.mongoize))
97
+ field = document.fields[document.database_field_name(attribute)]
98
+
99
+ # In the past, we were calling value.mongoize in all cases, which
100
+ # would call Object's mongoize method. This is a problem for StringifiedSymbol,
101
+ # because a Symbol should mongoize to a String, but calling .mongoize
102
+ # on a Symbol mongoizes it to a Symbol.
103
+ # Therefore, we call the field's mongoize in all cases except when the
104
+ # field is localized, because by the time we arrive at this code, the
105
+ # value is already in the form of { lang => translation } and calling
106
+ # the field's mongoize will nest that further into { lang =>
107
+ # "\{ lang => translation \}"} (assuming the field type is a string).
108
+ # Therefore, we call Object's mongoize method so it returns the hash as
109
+ # it is.
110
+ mongoized = field.try(:localized?) ? value.mongoize : field.mongoize(value)
111
+ criteria.selector.update(criterion(document, attribute, mongoized))
105
112
  criteria
106
113
  end
107
114
 
@@ -117,8 +124,6 @@ module Mongoid
117
124
  # @param [ Object ] value The value of the object.
118
125
  #
119
126
  # @return [ Criteria ] The uniqueness criteria.
120
- #
121
- # @since 2.3.0
122
127
  def criterion(document, attribute, value)
123
128
  field = document.database_field_name(attribute)
124
129
 
@@ -145,10 +150,8 @@ module Mongoid
145
150
  # @param [ Object ] value The value to filter.
146
151
  #
147
152
  # @return [ Object, Regexp ] The value, filtered or not.
148
- #
149
- # @since 2.3.0
150
153
  def filter(value)
151
- !case_sensitive? && value ? /\A#{Regexp.escape(value.to_s)}$/i : value
154
+ !case_sensitive? && value ? /\A#{Regexp.escape(value.to_s)}\z/i : value
152
155
  end
153
156
 
154
157
  # Scope the criteria to the scope options provided.
@@ -162,8 +165,6 @@ module Mongoid
162
165
  # @param [ Document ] document The document being validated.
163
166
  #
164
167
  # @return [ Criteria ] The scoped criteria.
165
- #
166
- # @since 2.3.0
167
168
  def scope(criteria, document, _attribute)
168
169
  Array.wrap(options[:scope]).each do |item|
169
170
  name = document.database_field_name(item)
@@ -182,8 +183,6 @@ module Mongoid
182
183
  # @param [ Document ] document The embedded document.
183
184
  #
184
185
  # @return [ true, false ] If the validation should be skipped.
185
- #
186
- # @since 2.3.0
187
186
  def skip_validation?(document)
188
187
  !document._parent || document.embedded_one?
189
188
  end
@@ -198,8 +197,6 @@ module Mongoid
198
197
  # @param [ Document ] document The embedded document.
199
198
  #
200
199
  # @return [ true, false ] If the scope reference has changed.
201
- #
202
- # @since
203
200
  def scope_value_changed?(document)
204
201
  Array.wrap(options[:scope]).any? do |item|
205
202
  document.send("attribute_changed?", item.to_s)
@@ -207,8 +204,8 @@ module Mongoid
207
204
  end
208
205
 
209
206
  # Get the name of the field and the value to validate. This is for the
210
- # case when we validate a relation via the relation name and not the key,
211
- # we need to send the key name and value to the db, not the relation
207
+ # case when we validate an association via the association name and not the key,
208
+ # we need to send the key name and value to the db, not the association
212
209
  # object.
213
210
  #
214
211
  # @api private
@@ -221,8 +218,6 @@ module Mongoid
221
218
  # @param [ Object ] value The value of the attribute.
222
219
  #
223
220
  # @return [ Array<Object, Object> ] The field and value.
224
- #
225
- # @since 2.4.4
226
221
  def to_validate(document, attribute, value)
227
222
  association = document.relations[attribute.to_s]
228
223
  if association && association.stores_foreign_key?
@@ -242,8 +237,6 @@ module Mongoid
242
237
  # @param [ Document ] document The document.
243
238
  # @param [ Symbol ] attribute The attribute name.
244
239
  # @param [ Object ] value The value.
245
- #
246
- # @since 2.4.10
247
240
  def validate_embedded(document, attribute, value)
248
241
  return if skip_validation?(document)
249
242
  relation = document._parent.send(document.association_name)
@@ -262,8 +255,6 @@ module Mongoid
262
255
  # @param [ Document ] document The document.
263
256
  # @param [ Symbol ] attribute The attribute name.
264
257
  # @param [ Object ] value The value.
265
- #
266
- # @since 2.4.10
267
258
  def validate_root(document, attribute, value)
268
259
  klass = document.class
269
260
 
@@ -287,8 +278,6 @@ module Mongoid
287
278
  # @param [ Symbol ] attribute The attribute to validate.
288
279
  #
289
280
  # @return [ true, false ] If we need to validate.
290
- #
291
- # @since 2.4.4
292
281
  def validation_required?(document, attribute)
293
282
  document.new_record? ||
294
283
  document.send("attribute_changed?", attribute.to_s) ||
@@ -306,8 +295,6 @@ module Mongoid
306
295
  # @param [ Symbol ] attribute The attribute to validate.
307
296
  #
308
297
  # @return [ true, false ] If the attribute is localized.
309
- #
310
- # @since 4.0.0
311
298
  def localized?(document, attribute)
312
299
  document.fields[document.database_field_name(attribute)].try(:localized?)
313
300
  end