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