mongoid 7.3.5 → 7.5.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 (895) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +17 -17
  4. data/README.md +3 -3
  5. data/lib/config/locales/en.yml +28 -20
  6. data/lib/mongoid/association/accessors.rb +0 -27
  7. data/lib/mongoid/association/bindable.rb +0 -21
  8. data/lib/mongoid/association/builders.rb +0 -9
  9. data/lib/mongoid/association/constrainable.rb +0 -3
  10. data/lib/mongoid/association/depending.rb +0 -7
  11. data/lib/mongoid/association/eager_loadable.rb +0 -3
  12. data/lib/mongoid/association/embedded/batchable.rb +12 -59
  13. data/lib/mongoid/association/embedded/cyclic.rb +2 -11
  14. data/lib/mongoid/association/embedded/embedded_in/binding.rb +0 -7
  15. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +0 -3
  16. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +0 -13
  17. data/lib/mongoid/association/embedded/embedded_in.rb +0 -23
  18. data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -7
  19. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +0 -3
  20. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +31 -44
  21. data/lib/mongoid/association/embedded/embeds_many.rb +0 -31
  22. data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
  23. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +0 -3
  24. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +26 -14
  25. data/lib/mongoid/association/embedded/embeds_one.rb +0 -27
  26. data/lib/mongoid/association/embedded.rb +0 -1
  27. data/lib/mongoid/association/macros.rb +26 -5
  28. data/lib/mongoid/association/many.rb +0 -17
  29. data/lib/mongoid/association/marshalable.rb +0 -5
  30. data/lib/mongoid/association/nested/many.rb +0 -11
  31. data/lib/mongoid/association/nested/nested_buildable.rb +0 -9
  32. data/lib/mongoid/association/nested/one.rb +1 -16
  33. data/lib/mongoid/association/nested.rb +0 -3
  34. data/lib/mongoid/association/one.rb +1 -10
  35. data/lib/mongoid/association/options.rb +0 -33
  36. data/lib/mongoid/association/proxy.rb +0 -21
  37. data/lib/mongoid/association/referenced/auto_save.rb +0 -9
  38. data/lib/mongoid/association/referenced/belongs_to/binding.rb +0 -7
  39. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +4 -5
  40. data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
  41. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +0 -13
  42. data/lib/mongoid/association/referenced/belongs_to.rb +9 -34
  43. data/lib/mongoid/association/referenced/counter_cache.rb +2 -15
  44. data/lib/mongoid/association/referenced/eager.rb +3 -24
  45. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +12 -39
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +11 -38
  50. data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
  51. data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
  52. data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
  53. data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -64
  54. data/lib/mongoid/association/referenced/has_many/proxy.rb +20 -63
  55. data/lib/mongoid/association/referenced/has_many.rb +12 -39
  56. data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
  57. data/lib/mongoid/association/referenced/has_one/buildable.rb +3 -4
  58. data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
  59. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -15
  60. data/lib/mongoid/association/referenced/has_one/proxy.rb +0 -9
  61. data/lib/mongoid/association/referenced/has_one.rb +9 -32
  62. data/lib/mongoid/association/referenced/syncable.rb +0 -17
  63. data/lib/mongoid/association/referenced.rb +0 -1
  64. data/lib/mongoid/association/reflections.rb +0 -1
  65. data/lib/mongoid/association/relatable.rb +0 -61
  66. data/lib/mongoid/association.rb +0 -17
  67. data/lib/mongoid/atomic/modifiers.rb +4 -51
  68. data/lib/mongoid/atomic/paths/embedded/many.rb +0 -24
  69. data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
  70. data/lib/mongoid/atomic/paths/embedded.rb +0 -3
  71. data/lib/mongoid/atomic/paths/root.rb +0 -5
  72. data/lib/mongoid/atomic/paths.rb +0 -1
  73. data/lib/mongoid/atomic.rb +1 -42
  74. data/lib/mongoid/attributes/dynamic.rb +0 -17
  75. data/lib/mongoid/attributes/nested.rb +0 -5
  76. data/lib/mongoid/attributes/processing.rb +1 -18
  77. data/lib/mongoid/attributes/projector.rb +0 -1
  78. data/lib/mongoid/attributes/readonly.rb +0 -5
  79. data/lib/mongoid/attributes.rb +0 -33
  80. data/lib/mongoid/cacheable.rb +1 -6
  81. data/lib/mongoid/changeable.rb +3 -59
  82. data/lib/mongoid/clients/factory.rb +0 -7
  83. data/lib/mongoid/clients/options.rb +0 -5
  84. data/lib/mongoid/clients/sessions.rb +0 -7
  85. data/lib/mongoid/clients/storage_options.rb +0 -7
  86. data/lib/mongoid/clients/validators/storage.rb +0 -9
  87. data/lib/mongoid/clients/validators.rb +0 -1
  88. data/lib/mongoid/clients.rb +0 -9
  89. data/lib/mongoid/composable.rb +0 -7
  90. data/lib/mongoid/config/environment.rb +21 -6
  91. data/lib/mongoid/config/options.rb +0 -11
  92. data/lib/mongoid/config/validators/client.rb +0 -17
  93. data/lib/mongoid/config/validators/option.rb +0 -3
  94. data/lib/mongoid/config/validators.rb +0 -1
  95. data/lib/mongoid/config.rb +43 -30
  96. data/lib/mongoid/contextual/aggregable/memory.rb +14 -11
  97. data/lib/mongoid/contextual/aggregable/mongo.rb +15 -20
  98. data/lib/mongoid/contextual/aggregable/none.rb +65 -0
  99. data/lib/mongoid/contextual/aggregable.rb +17 -0
  100. data/lib/mongoid/contextual/atomic.rb +0 -25
  101. data/lib/mongoid/contextual/command.rb +0 -5
  102. data/lib/mongoid/contextual/geo_near.rb +1 -34
  103. data/lib/mongoid/contextual/map_reduce.rb +0 -31
  104. data/lib/mongoid/contextual/memory.rb +147 -70
  105. data/lib/mongoid/contextual/mongo.rb +249 -103
  106. data/lib/mongoid/contextual/none.rb +83 -28
  107. data/lib/mongoid/contextual/queryable.rb +0 -3
  108. data/lib/mongoid/contextual.rb +0 -5
  109. data/lib/mongoid/copyable.rb +0 -5
  110. data/lib/mongoid/criteria/findable.rb +0 -13
  111. data/lib/mongoid/criteria/includable.rb +0 -9
  112. data/lib/mongoid/criteria/inspectable.rb +0 -3
  113. data/lib/mongoid/criteria/marshalable.rb +0 -5
  114. data/lib/mongoid/criteria/modifiable.rb +0 -19
  115. data/lib/mongoid/criteria/options.rb +0 -3
  116. data/lib/mongoid/criteria/permission.rb +0 -1
  117. data/lib/mongoid/criteria/queryable/aggregable.rb +0 -13
  118. data/lib/mongoid/criteria/queryable/expandable.rb +0 -1
  119. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -25
  120. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +0 -3
  121. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +0 -3
  122. data/lib/mongoid/criteria/queryable/extensions/date.rb +0 -7
  123. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +0 -5
  124. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -24
  125. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
  126. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +0 -11
  127. data/lib/mongoid/criteria/queryable/extensions/object.rb +1 -28
  128. data/lib/mongoid/criteria/queryable/extensions/range.rb +38 -16
  129. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +0 -9
  130. data/lib/mongoid/criteria/queryable/extensions/set.rb +0 -3
  131. data/lib/mongoid/criteria/queryable/extensions/string.rb +0 -17
  132. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +0 -9
  133. data/lib/mongoid/criteria/queryable/extensions/time.rb +0 -7
  134. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +0 -7
  135. data/lib/mongoid/criteria/queryable/extensions.rb +0 -1
  136. data/lib/mongoid/criteria/queryable/key.rb +1 -14
  137. data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
  138. data/lib/mongoid/criteria/queryable/mergeable.rb +22 -30
  139. data/lib/mongoid/criteria/queryable/optional.rb +0 -45
  140. data/lib/mongoid/criteria/queryable/options.rb +0 -19
  141. data/lib/mongoid/criteria/queryable/pipeline.rb +0 -13
  142. data/lib/mongoid/criteria/queryable/selectable.rb +45 -76
  143. data/lib/mongoid/criteria/queryable/selector.rb +0 -17
  144. data/lib/mongoid/criteria/queryable/smash.rb +0 -11
  145. data/lib/mongoid/criteria/queryable/storable.rb +6 -2
  146. data/lib/mongoid/criteria/queryable.rb +0 -7
  147. data/lib/mongoid/criteria/scopable.rb +25 -19
  148. data/lib/mongoid/criteria.rb +2 -57
  149. data/lib/mongoid/document.rb +1 -50
  150. data/lib/mongoid/equality.rb +26 -10
  151. data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
  152. data/lib/mongoid/errors/callback.rb +0 -3
  153. data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
  154. data/lib/mongoid/errors/delete_restriction.rb +0 -3
  155. data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
  156. data/lib/mongoid/errors/document_not_found.rb +23 -15
  157. data/lib/mongoid/errors/eager_load.rb +0 -3
  158. data/lib/mongoid/errors/empty_config_file.rb +0 -1
  159. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
  160. data/lib/mongoid/errors/invalid_collection.rb +0 -1
  161. data/lib/mongoid/errors/invalid_config_file.rb +0 -1
  162. data/lib/mongoid/errors/invalid_config_option.rb +0 -3
  163. data/lib/mongoid/errors/invalid_dependent_strategy.rb +0 -3
  164. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +0 -1
  165. data/lib/mongoid/errors/invalid_elem_match_operator.rb +0 -1
  166. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +0 -1
  167. data/lib/mongoid/errors/invalid_expression_operator.rb +0 -1
  168. data/lib/mongoid/errors/invalid_field.rb +0 -5
  169. data/lib/mongoid/errors/invalid_field_operator.rb +0 -1
  170. data/lib/mongoid/errors/invalid_field_option.rb +0 -3
  171. data/lib/mongoid/errors/invalid_find.rb +0 -3
  172. data/lib/mongoid/errors/invalid_includes.rb +0 -3
  173. data/lib/mongoid/errors/invalid_index.rb +0 -3
  174. data/lib/mongoid/errors/invalid_options.rb +0 -3
  175. data/lib/mongoid/errors/invalid_path.rb +0 -3
  176. data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
  177. data/lib/mongoid/errors/invalid_query.rb +0 -1
  178. data/lib/mongoid/errors/invalid_relation.rb +0 -7
  179. data/lib/mongoid/errors/invalid_relation_option.rb +0 -3
  180. data/lib/mongoid/errors/invalid_scope.rb +0 -3
  181. data/lib/mongoid/errors/invalid_session_use.rb +1 -6
  182. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
  183. data/lib/mongoid/errors/invalid_storage_options.rb +0 -3
  184. data/lib/mongoid/errors/invalid_storage_parent.rb +0 -3
  185. data/lib/mongoid/errors/invalid_time.rb +0 -3
  186. data/lib/mongoid/errors/invalid_value.rb +0 -1
  187. data/lib/mongoid/errors/inverse_not_found.rb +0 -3
  188. data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
  189. data/lib/mongoid/errors/mixed_relations.rb +0 -3
  190. data/lib/mongoid/errors/mongoid_error.rb +0 -9
  191. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +0 -3
  192. data/lib/mongoid/errors/no_client_config.rb +0 -3
  193. data/lib/mongoid/errors/no_client_database.rb +0 -3
  194. data/lib/mongoid/errors/no_client_hosts.rb +0 -3
  195. data/lib/mongoid/errors/no_clients_config.rb +0 -3
  196. data/lib/mongoid/errors/no_default_client.rb +0 -3
  197. data/lib/mongoid/errors/no_environment.rb +0 -3
  198. data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
  199. data/lib/mongoid/errors/no_metadata.rb +0 -3
  200. data/lib/mongoid/errors/no_parent.rb +0 -3
  201. data/lib/mongoid/errors/readonly_attribute.rb +0 -3
  202. data/lib/mongoid/errors/readonly_document.rb +1 -6
  203. data/lib/mongoid/errors/scope_overwrite.rb +0 -1
  204. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +0 -1
  205. data/lib/mongoid/errors/unknown_attribute.rb +0 -3
  206. data/lib/mongoid/errors/unknown_model.rb +0 -3
  207. data/lib/mongoid/errors/unsaved_document.rb +1 -2
  208. data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
  209. data/lib/mongoid/errors/validations.rb +0 -1
  210. data/lib/mongoid/errors.rb +0 -1
  211. data/lib/mongoid/evolvable.rb +0 -3
  212. data/lib/mongoid/extensions/array.rb +3 -29
  213. data/lib/mongoid/extensions/big_decimal.rb +0 -11
  214. data/lib/mongoid/extensions/boolean.rb +0 -3
  215. data/lib/mongoid/extensions/date.rb +0 -9
  216. data/lib/mongoid/extensions/date_time.rb +0 -9
  217. data/lib/mongoid/extensions/decimal128.rb +0 -5
  218. data/lib/mongoid/extensions/false_class.rb +1 -6
  219. data/lib/mongoid/extensions/float.rb +0 -7
  220. data/lib/mongoid/extensions/hash.rb +0 -27
  221. data/lib/mongoid/extensions/integer.rb +0 -9
  222. data/lib/mongoid/extensions/module.rb +0 -3
  223. data/lib/mongoid/extensions/nil_class.rb +0 -5
  224. data/lib/mongoid/extensions/object.rb +1 -40
  225. data/lib/mongoid/extensions/object_id.rb +0 -7
  226. data/lib/mongoid/extensions/range.rb +0 -11
  227. data/lib/mongoid/extensions/regexp.rb +0 -3
  228. data/lib/mongoid/extensions/set.rb +0 -7
  229. data/lib/mongoid/extensions/string.rb +1 -30
  230. data/lib/mongoid/extensions/symbol.rb +0 -7
  231. data/lib/mongoid/extensions/time.rb +0 -11
  232. data/lib/mongoid/extensions/time_with_zone.rb +13 -9
  233. data/lib/mongoid/extensions/true_class.rb +1 -6
  234. data/lib/mongoid/extensions.rb +15 -3
  235. data/lib/mongoid/factory.rb +1 -2
  236. data/lib/mongoid/fields/foreign_key.rb +0 -21
  237. data/lib/mongoid/fields/localized.rb +0 -11
  238. data/lib/mongoid/fields/standard.rb +0 -33
  239. data/lib/mongoid/fields/validators/macro.rb +0 -9
  240. data/lib/mongoid/fields/validators.rb +0 -1
  241. data/lib/mongoid/fields.rb +191 -60
  242. data/lib/mongoid/findable.rb +20 -10
  243. data/lib/mongoid/indexable/specification.rb +0 -15
  244. data/lib/mongoid/indexable/validators/options.rb +0 -7
  245. data/lib/mongoid/indexable.rb +1 -18
  246. data/lib/mongoid/inspectable.rb +1 -10
  247. data/lib/mongoid/interceptable.rb +0 -25
  248. data/lib/mongoid/loggable.rb +0 -9
  249. data/lib/mongoid/matchable.rb +0 -5
  250. data/lib/mongoid/matcher/eq_impl.rb +37 -2
  251. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +6 -1
  252. data/lib/mongoid/persistable/creatable.rb +1 -20
  253. data/lib/mongoid/persistable/deletable.rb +0 -17
  254. data/lib/mongoid/persistable/destroyable.rb +0 -7
  255. data/lib/mongoid/persistable/incrementable.rb +0 -5
  256. data/lib/mongoid/persistable/logical.rb +0 -5
  257. data/lib/mongoid/persistable/poppable.rb +0 -5
  258. data/lib/mongoid/persistable/pullable.rb +0 -7
  259. data/lib/mongoid/persistable/pushable.rb +0 -7
  260. data/lib/mongoid/persistable/renamable.rb +0 -5
  261. data/lib/mongoid/persistable/savable.rb +0 -7
  262. data/lib/mongoid/persistable/settable.rb +0 -5
  263. data/lib/mongoid/persistable/unsettable.rb +0 -5
  264. data/lib/mongoid/persistable/updatable.rb +2 -17
  265. data/lib/mongoid/persistable/upsertable.rb +0 -7
  266. data/lib/mongoid/persistable.rb +0 -23
  267. data/lib/mongoid/persistence_context.rb +0 -27
  268. data/lib/mongoid/positional.rb +0 -5
  269. data/lib/mongoid/query_cache.rb +0 -33
  270. data/lib/mongoid/railtie.rb +0 -15
  271. data/lib/mongoid/railties/controller_runtime.rb +0 -1
  272. data/lib/mongoid/reloadable.rb +4 -16
  273. data/lib/mongoid/scopable.rb +6 -34
  274. data/lib/mongoid/selectable.rb +0 -9
  275. data/lib/mongoid/serializable.rb +0 -15
  276. data/lib/mongoid/shardable.rb +0 -7
  277. data/lib/mongoid/stateful.rb +0 -9
  278. data/lib/mongoid/stringified_symbol.rb +2 -3
  279. data/lib/mongoid/tasks/database.rb +0 -5
  280. data/lib/mongoid/threaded/lifecycle.rb +0 -21
  281. data/lib/mongoid/threaded.rb +0 -55
  282. data/lib/mongoid/timestamps/created/short.rb +0 -1
  283. data/lib/mongoid/timestamps/created.rb +0 -1
  284. data/lib/mongoid/timestamps/short.rb +0 -1
  285. data/lib/mongoid/timestamps/timeless.rb +0 -7
  286. data/lib/mongoid/timestamps/updated/short.rb +0 -1
  287. data/lib/mongoid/timestamps/updated.rb +0 -3
  288. data/lib/mongoid/timestamps.rb +0 -1
  289. data/lib/mongoid/touchable.rb +0 -7
  290. data/lib/mongoid/traversable.rb +67 -53
  291. data/lib/mongoid/validatable/associated.rb +0 -3
  292. data/lib/mongoid/validatable/format.rb +0 -1
  293. data/lib/mongoid/validatable/length.rb +0 -1
  294. data/lib/mongoid/validatable/localizable.rb +0 -3
  295. data/lib/mongoid/validatable/macros.rb +0 -7
  296. data/lib/mongoid/validatable/presence.rb +1 -8
  297. data/lib/mongoid/validatable/queryable.rb +0 -3
  298. data/lib/mongoid/validatable/uniqueness.rb +15 -30
  299. data/lib/mongoid/validatable.rb +1 -22
  300. data/lib/mongoid/version.rb +1 -2
  301. data/lib/mongoid/warnings.rb +29 -0
  302. data/lib/mongoid.rb +1 -15
  303. data/lib/rails/generators/mongoid/config/config_generator.rb +0 -1
  304. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -3
  305. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  306. data/lib/rails/generators/mongoid_generator.rb +0 -1
  307. data/lib/rails/mongoid.rb +0 -3
  308. data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
  309. data/spec/integration/app_spec.rb +20 -15
  310. data/spec/integration/associations/belongs_to_spec.rb +0 -1
  311. data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
  312. data/spec/integration/associations/embedded_spec.rb +0 -1
  313. data/spec/integration/associations/embeds_many_spec.rb +0 -1
  314. data/spec/integration/associations/embeds_one_spec.rb +0 -1
  315. data/spec/integration/associations/foreign_key_spec.rb +0 -1
  316. data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
  317. data/spec/integration/associations/has_many_spec.rb +0 -1
  318. data/spec/integration/associations/has_one_spec.rb +0 -1
  319. data/spec/integration/associations/nested_attributes_assignment_spec.rb +0 -1
  320. data/spec/integration/associations/reverse_population_spec.rb +0 -1
  321. data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
  322. data/spec/integration/associations/scope_option_spec.rb +101 -0
  323. data/spec/integration/atomic/modifiers_spec.rb +0 -1
  324. data/spec/integration/bson_regexp_raw_spec.rb +0 -1
  325. data/spec/integration/callbacks_models.rb +12 -0
  326. data/spec/integration/callbacks_spec.rb +18 -6
  327. data/spec/integration/contextual/empty_spec.rb +0 -1
  328. data/spec/integration/criteria/alias_query_spec.rb +161 -0
  329. data/spec/integration/criteria/date_field_spec.rb +0 -1
  330. data/spec/integration/criteria/default_scope_spec.rb +51 -0
  331. data/spec/integration/criteria/logical_spec.rb +30 -0
  332. data/spec/integration/criteria/range_spec.rb +265 -0
  333. data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
  334. data/spec/integration/discriminator_key_spec.rb +0 -1
  335. data/spec/integration/discriminator_value_spec.rb +0 -1
  336. data/spec/integration/document_spec.rb +0 -1
  337. data/spec/integration/i18n_fallbacks_spec.rb +15 -2
  338. data/spec/integration/matcher_examples_spec.rb +0 -1
  339. data/spec/integration/matcher_operator_spec.rb +27 -3
  340. data/spec/integration/matcher_spec.rb +95 -1
  341. data/spec/integration/server_query_spec.rb +0 -1
  342. data/spec/integration/shardable_spec.rb +0 -1
  343. data/spec/integration/stringified_symbol_field_spec.rb +14 -1
  344. data/spec/lite_spec_helper.rb +1 -2
  345. data/spec/mongoid/association/accessors_spec.rb +44 -15
  346. data/spec/mongoid/association/auto_save_spec.rb +72 -34
  347. data/spec/mongoid/association/builders_spec.rb +1 -2
  348. data/spec/mongoid/association/constrainable_spec.rb +0 -1
  349. data/spec/mongoid/association/counter_cache_spec.rb +32 -33
  350. data/spec/mongoid/association/depending_spec.rb +12 -13
  351. data/spec/mongoid/association/eager_spec.rb +4 -5
  352. data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
  353. data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
  354. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +0 -1
  355. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +0 -1
  356. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +13 -14
  357. data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
  358. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
  359. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +0 -1
  360. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +384 -156
  361. data/spec/mongoid/association/embedded/embeds_many_models.rb +0 -122
  362. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +0 -1
  363. data/spec/mongoid/association/embedded/embeds_many_spec.rb +0 -1
  364. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
  365. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +0 -1
  366. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +21 -22
  367. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
  368. data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
  369. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
  370. data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -1
  371. data/spec/mongoid/association/macros_spec.rb +9 -10
  372. data/spec/mongoid/association/nested/many_spec.rb +0 -1
  373. data/spec/mongoid/association/nested/one_spec.rb +0 -1
  374. data/spec/mongoid/association/options_spec.rb +0 -1
  375. data/spec/mongoid/association/polymorphic_spec.rb +0 -1
  376. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +0 -1
  377. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +55 -17
  378. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
  379. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +57 -53
  380. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +0 -1
  381. data/spec/mongoid/association/referenced/belongs_to_spec.rb +22 -2
  382. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +0 -1
  383. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
  384. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
  385. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
  386. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +179 -162
  387. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +18 -1
  388. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
  389. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +21 -1
  390. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +0 -1
  391. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +21 -1
  392. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
  393. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +113 -33
  394. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
  395. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +225 -178
  396. data/spec/mongoid/association/referenced/has_many_models.rb +18 -1
  397. data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
  398. data/spec/mongoid/association/referenced/has_many_spec.rb +21 -1
  399. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
  400. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +51 -8
  401. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
  402. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +26 -27
  403. data/spec/mongoid/association/referenced/has_one_models.rb +18 -1
  404. data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
  405. data/spec/mongoid/association/referenced/has_one_spec.rb +21 -1
  406. data/spec/mongoid/association/reflections_spec.rb +0 -1
  407. data/spec/mongoid/association/syncable_spec.rb +31 -32
  408. data/spec/mongoid/association_spec.rb +0 -1
  409. data/spec/mongoid/atomic/modifiers_spec.rb +0 -1
  410. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
  411. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
  412. data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
  413. data/spec/mongoid/atomic/paths_spec.rb +0 -1
  414. data/spec/mongoid/atomic_spec.rb +28 -7
  415. data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
  416. data/spec/mongoid/attributes/nested_spec.rb +66 -67
  417. data/spec/mongoid/attributes/projector_spec.rb +5 -2
  418. data/spec/mongoid/attributes/readonly_spec.rb +22 -23
  419. data/spec/mongoid/attributes_spec.rb +32 -33
  420. data/spec/mongoid/cacheable_spec.rb +1 -2
  421. data/spec/mongoid/changeable_spec.rb +35 -36
  422. data/spec/mongoid/clients/factory_spec.rb +11 -13
  423. data/spec/mongoid/clients/options_spec.rb +5 -5
  424. data/spec/mongoid/clients/sessions_spec.rb +22 -23
  425. data/spec/mongoid/clients/transactions_spec.rb +49 -27
  426. data/spec/mongoid/clients_spec.rb +6 -7
  427. data/spec/mongoid/composable_spec.rb +0 -1
  428. data/spec/mongoid/config/environment_spec.rb +39 -2
  429. data/spec/mongoid/config/options_spec.rb +0 -1
  430. data/spec/mongoid/config_spec.rb +154 -4
  431. data/spec/mongoid/contextual/aggregable/memory_spec.rb +51 -12
  432. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
  433. data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
  434. data/spec/mongoid/contextual/atomic_spec.rb +46 -47
  435. data/spec/mongoid/contextual/geo_near_spec.rb +17 -18
  436. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -3
  437. data/spec/mongoid/contextual/memory_spec.rb +849 -89
  438. data/spec/mongoid/contextual/mongo_spec.rb +1185 -160
  439. data/spec/mongoid/contextual/none_spec.rb +43 -72
  440. data/spec/mongoid/copyable_spec.rb +12 -13
  441. data/spec/mongoid/copyable_spec_models.rb +0 -1
  442. data/spec/mongoid/criteria/findable_spec.rb +23 -24
  443. data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
  444. data/spec/mongoid/criteria/marshalable_spec.rb +0 -1
  445. data/spec/mongoid/criteria/modifiable_spec.rb +36 -37
  446. data/spec/mongoid/criteria/options_spec.rb +0 -1
  447. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
  448. data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -1
  449. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +0 -1
  450. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +0 -1
  451. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -1
  452. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +0 -1
  453. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +0 -1
  454. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +0 -1
  455. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -1
  456. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
  457. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -1
  458. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
  459. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
  460. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
  461. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
  462. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
  463. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +0 -1
  464. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +0 -1
  465. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
  466. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +0 -1
  467. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -1
  468. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +0 -1
  469. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +0 -1
  470. data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
  471. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +0 -1
  472. data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -2
  473. data/spec/mongoid/criteria/queryable/options_spec.rb +0 -1
  474. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
  475. data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
  476. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -1
  477. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +0 -1
  478. data/spec/mongoid/criteria/queryable/selectable_spec.rb +227 -55
  479. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +0 -1
  480. data/spec/mongoid/criteria/queryable/selector_spec.rb +0 -1
  481. data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
  482. data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
  483. data/spec/mongoid/criteria/scopable_spec.rb +127 -1
  484. data/spec/mongoid/criteria_projection_spec.rb +3 -4
  485. data/spec/mongoid/criteria_spec.rb +523 -187
  486. data/spec/mongoid/document_fields_spec.rb +0 -1
  487. data/spec/mongoid/document_persistence_context_spec.rb +0 -1
  488. data/spec/mongoid/document_query_spec.rb +0 -1
  489. data/spec/mongoid/document_spec.rb +11 -33
  490. data/spec/mongoid/equality_spec.rb +142 -41
  491. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
  492. data/spec/mongoid/errors/callback_spec.rb +0 -1
  493. data/spec/mongoid/errors/delete_restriction_spec.rb +0 -1
  494. data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
  495. data/spec/mongoid/errors/document_not_found_spec.rb +49 -1
  496. data/spec/mongoid/errors/eager_load_spec.rb +0 -1
  497. data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
  498. data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -1
  499. data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
  500. data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
  501. data/spec/mongoid/errors/invalid_field_spec.rb +0 -1
  502. data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
  503. data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
  504. data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
  505. data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
  506. data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
  507. data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
  508. data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
  509. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
  510. data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
  511. data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
  512. data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
  513. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
  514. data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
  515. data/spec/mongoid/errors/mongoid_error_spec.rb +1 -2
  516. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
  517. data/spec/mongoid/errors/no_client_config_spec.rb +0 -1
  518. data/spec/mongoid/errors/no_client_database_spec.rb +0 -1
  519. data/spec/mongoid/errors/no_client_hosts_spec.rb +0 -1
  520. data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
  521. data/spec/mongoid/errors/no_environment_spec.rb +0 -1
  522. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
  523. data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
  524. data/spec/mongoid/errors/no_parent_spec.rb +0 -1
  525. data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
  526. data/spec/mongoid/errors/readonly_document_spec.rb +0 -1
  527. data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
  528. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +0 -1
  529. data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
  530. data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
  531. data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
  532. data/spec/mongoid/errors/validations_spec.rb +0 -1
  533. data/spec/mongoid/extensions/array_spec.rb +0 -1
  534. data/spec/mongoid/extensions/big_decimal_spec.rb +0 -1
  535. data/spec/mongoid/extensions/binary_spec.rb +0 -1
  536. data/spec/mongoid/extensions/boolean_spec.rb +0 -1
  537. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +0 -1
  538. data/spec/mongoid/extensions/date_spec.rb +0 -1
  539. data/spec/mongoid/extensions/date_time_spec.rb +0 -1
  540. data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
  541. data/spec/mongoid/extensions/false_class_spec.rb +0 -1
  542. data/spec/mongoid/extensions/float_spec.rb +0 -1
  543. data/spec/mongoid/extensions/hash_spec.rb +0 -1
  544. data/spec/mongoid/extensions/integer_spec.rb +0 -1
  545. data/spec/mongoid/extensions/module_spec.rb +0 -1
  546. data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
  547. data/spec/mongoid/extensions/object_id_spec.rb +0 -1
  548. data/spec/mongoid/extensions/object_spec.rb +0 -1
  549. data/spec/mongoid/extensions/range_spec.rb +0 -1
  550. data/spec/mongoid/extensions/regexp_spec.rb +0 -1
  551. data/spec/mongoid/extensions/set_spec.rb +0 -1
  552. data/spec/mongoid/extensions/string_spec.rb +2 -3
  553. data/spec/mongoid/extensions/stringified_symbol_spec.rb +0 -1
  554. data/spec/mongoid/extensions/symbol_spec.rb +0 -1
  555. data/spec/mongoid/extensions/time_spec.rb +0 -1
  556. data/spec/mongoid/extensions/time_with_zone_spec.rb +0 -1
  557. data/spec/mongoid/extensions/true_class_spec.rb +0 -1
  558. data/spec/mongoid/extensions_spec.rb +14 -3
  559. data/spec/mongoid/factory_spec.rb +1 -1
  560. data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
  561. data/spec/mongoid/fields/localized_spec.rb +0 -1
  562. data/spec/mongoid/fields/standard_spec.rb +0 -1
  563. data/spec/mongoid/fields_spec.rb +326 -31
  564. data/spec/mongoid/findable_spec.rb +51 -22
  565. data/spec/mongoid/indexable/specification_spec.rb +0 -1
  566. data/spec/mongoid/indexable_spec.rb +0 -1
  567. data/spec/mongoid/inspectable_spec.rb +0 -1
  568. data/spec/mongoid/interceptable_spec.rb +102 -95
  569. data/spec/mongoid/loggable_spec.rb +0 -1
  570. data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -2
  571. data/spec/mongoid/persistable/creatable_spec.rb +2 -3
  572. data/spec/mongoid/persistable/deletable_spec.rb +18 -19
  573. data/spec/mongoid/persistable/destroyable_spec.rb +8 -9
  574. data/spec/mongoid/persistable/incrementable_spec.rb +8 -9
  575. data/spec/mongoid/persistable/logical_spec.rb +4 -5
  576. data/spec/mongoid/persistable/poppable_spec.rb +4 -5
  577. data/spec/mongoid/persistable/pullable_spec.rb +8 -9
  578. data/spec/mongoid/persistable/pushable_spec.rb +8 -9
  579. data/spec/mongoid/persistable/renamable_spec.rb +3 -4
  580. data/spec/mongoid/persistable/savable_spec.rb +15 -11
  581. data/spec/mongoid/persistable/settable_spec.rb +9 -10
  582. data/spec/mongoid/persistable/unsettable_spec.rb +4 -5
  583. data/spec/mongoid/persistable/updatable_spec.rb +41 -24
  584. data/spec/mongoid/persistable/upsertable_spec.rb +1 -2
  585. data/spec/mongoid/persistable_spec.rb +1 -2
  586. data/spec/mongoid/persistence_context_spec.rb +0 -1
  587. data/spec/mongoid/positional_spec.rb +0 -1
  588. data/spec/mongoid/query_cache_middleware_spec.rb +1 -2
  589. data/spec/mongoid/query_cache_spec.rb +30 -8
  590. data/spec/mongoid/relations/proxy_spec.rb +6 -7
  591. data/spec/mongoid/reloadable_spec.rb +209 -23
  592. data/spec/mongoid/scopable_spec.rb +54 -22
  593. data/spec/mongoid/selectable_spec.rb +6 -7
  594. data/spec/mongoid/serializable_spec.rb +9 -10
  595. data/spec/mongoid/shardable_spec.rb +2 -3
  596. data/spec/mongoid/stateful_spec.rb +1 -2
  597. data/spec/mongoid/tasks/database_rake_spec.rb +0 -1
  598. data/spec/mongoid/tasks/database_spec.rb +0 -1
  599. data/spec/mongoid/threaded_spec.rb +2 -3
  600. data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
  601. data/spec/mongoid/timestamps/created_spec.rb +1 -2
  602. data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
  603. data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
  604. data/spec/mongoid/timestamps/updated_spec.rb +3 -4
  605. data/spec/mongoid/timestamps_spec.rb +6 -7
  606. data/spec/mongoid/touchable_spec.rb +15 -20
  607. data/spec/mongoid/touchable_spec_models.rb +0 -1
  608. data/spec/mongoid/traversable_spec.rb +65 -2
  609. data/spec/mongoid/validatable/associated_spec.rb +0 -1
  610. data/spec/mongoid/validatable/format_spec.rb +0 -1
  611. data/spec/mongoid/validatable/length_spec.rb +0 -1
  612. data/spec/mongoid/validatable/numericality_spec.rb +0 -1
  613. data/spec/mongoid/validatable/presence_spec.rb +26 -23
  614. data/spec/mongoid/validatable/uniqueness_spec.rb +67 -68
  615. data/spec/mongoid/validatable_spec.rb +2 -3
  616. data/spec/mongoid_spec.rb +0 -1
  617. data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -1
  618. data/spec/rails/mongoid_spec.rb +0 -1
  619. data/spec/shared/lib/mrss/constraints.rb +10 -17
  620. data/spec/shared/lib/mrss/docker_runner.rb +23 -3
  621. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  622. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  623. data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
  624. data/spec/shared/share/Dockerfile.erb +56 -54
  625. data/spec/shared/shlib/config.sh +27 -0
  626. data/spec/shared/shlib/distro.sh +2 -1
  627. data/spec/shared/shlib/server.sh +46 -21
  628. data/spec/shared/shlib/set_env.sh +43 -5
  629. data/spec/spec_helper.rb +12 -22
  630. data/spec/support/authorization.rb +0 -1
  631. data/spec/support/constraints.rb +0 -1
  632. data/spec/support/expectations.rb +0 -1
  633. data/spec/support/macros.rb +31 -1
  634. data/spec/support/models/account.rb +1 -2
  635. data/spec/support/models/acolyte.rb +0 -1
  636. data/spec/support/models/actor.rb +0 -1
  637. data/spec/support/models/actress.rb +0 -1
  638. data/spec/support/models/address.rb +0 -1
  639. data/spec/support/models/address_component.rb +0 -1
  640. data/spec/support/models/address_number.rb +0 -1
  641. data/spec/support/models/agency.rb +0 -1
  642. data/spec/support/models/agent.rb +0 -1
  643. data/spec/support/models/album.rb +0 -1
  644. data/spec/support/models/alert.rb +0 -1
  645. data/spec/support/models/animal.rb +0 -1
  646. data/spec/support/models/answer.rb +0 -1
  647. data/spec/support/models/appointment.rb +0 -1
  648. data/spec/support/models/armrest.rb +0 -1
  649. data/spec/support/models/array_field.rb +0 -1
  650. data/spec/support/models/article.rb +0 -1
  651. data/spec/support/models/artist.rb +2 -1
  652. data/spec/support/models/artwork.rb +0 -1
  653. data/spec/support/models/audio.rb +0 -1
  654. data/spec/support/models/augmentation.rb +0 -1
  655. data/spec/support/models/author.rb +0 -1
  656. data/spec/support/models/baby.rb +0 -1
  657. data/spec/support/models/band.rb +4 -1
  658. data/spec/support/models/bar.rb +0 -1
  659. data/spec/support/models/basic.rb +0 -1
  660. data/spec/support/models/bed.rb +0 -1
  661. data/spec/support/models/big_palette.rb +0 -1
  662. data/spec/support/models/birthday.rb +0 -1
  663. data/spec/support/models/bolt.rb +0 -1
  664. data/spec/support/models/bomb.rb +0 -1
  665. data/spec/support/models/book.rb +0 -1
  666. data/spec/support/models/breed.rb +0 -1
  667. data/spec/support/models/browser.rb +0 -1
  668. data/spec/support/models/building.rb +0 -1
  669. data/spec/support/models/building_address.rb +0 -1
  670. data/spec/support/models/bus.rb +0 -1
  671. data/spec/support/models/business.rb +0 -1
  672. data/spec/support/models/callback_test.rb +0 -1
  673. data/spec/support/models/canvas.rb +0 -1
  674. data/spec/support/models/car.rb +0 -1
  675. data/spec/support/models/cat.rb +0 -1
  676. data/spec/support/models/category.rb +0 -1
  677. data/spec/support/models/child.rb +0 -1
  678. data/spec/support/models/child_doc.rb +3 -4
  679. data/spec/support/models/church.rb +0 -1
  680. data/spec/support/models/circle.rb +0 -1
  681. data/spec/support/models/circuit.rb +0 -1
  682. data/spec/support/models/circus.rb +0 -1
  683. data/spec/support/models/code.rb +2 -1
  684. data/spec/support/models/coding/pull_request.rb +0 -1
  685. data/spec/support/models/coding.rb +0 -1
  686. data/spec/support/models/comment.rb +0 -1
  687. data/spec/support/models/company.rb +0 -1
  688. data/spec/support/models/consumption_period.rb +0 -1
  689. data/spec/support/models/contextable_item.rb +0 -1
  690. data/spec/support/models/contractor.rb +0 -1
  691. data/spec/support/models/cookie.rb +0 -1
  692. data/spec/support/models/country_code.rb +2 -1
  693. data/spec/support/models/courier_job.rb +0 -1
  694. data/spec/support/models/crate.rb +0 -1
  695. data/spec/support/models/customer.rb +0 -1
  696. data/spec/support/models/customer_address.rb +0 -1
  697. data/spec/support/models/deed.rb +0 -1
  698. data/spec/support/models/definition.rb +0 -1
  699. data/spec/support/models/delegating_patient.rb +0 -1
  700. data/spec/support/models/description.rb +0 -1
  701. data/spec/support/models/dictionary.rb +0 -1
  702. data/spec/support/models/division.rb +0 -1
  703. data/spec/support/models/doctor.rb +0 -1
  704. data/spec/support/models/dog.rb +0 -1
  705. data/spec/support/models/dokument.rb +0 -1
  706. data/spec/support/models/draft.rb +0 -1
  707. data/spec/support/models/dragon.rb +0 -1
  708. data/spec/support/models/driver.rb +0 -1
  709. data/spec/support/models/drug.rb +0 -1
  710. data/spec/support/models/dungeon.rb +0 -1
  711. data/spec/support/models/edit.rb +0 -1
  712. data/spec/support/models/email.rb +0 -1
  713. data/spec/support/models/employer.rb +0 -1
  714. data/spec/support/models/entry.rb +0 -1
  715. data/spec/support/models/eraser.rb +0 -1
  716. data/spec/support/models/even.rb +0 -1
  717. data/spec/support/models/event.rb +0 -1
  718. data/spec/support/models/exhibition.rb +0 -1
  719. data/spec/support/models/exhibitor.rb +0 -1
  720. data/spec/support/models/explosion.rb +0 -1
  721. data/spec/support/models/eye.rb +0 -1
  722. data/spec/support/models/eye_bowl.rb +0 -1
  723. data/spec/support/models/face.rb +0 -1
  724. data/spec/support/models/favorite.rb +0 -1
  725. data/spec/support/models/filesystem.rb +0 -1
  726. data/spec/support/models/fire_hydrant.rb +0 -1
  727. data/spec/support/models/firefox.rb +0 -1
  728. data/spec/support/models/fish.rb +0 -1
  729. data/spec/support/models/folder.rb +0 -1
  730. data/spec/support/models/folder_item.rb +0 -1
  731. data/spec/support/models/fruits.rb +0 -1
  732. data/spec/support/models/game.rb +0 -1
  733. data/spec/support/models/ghost.rb +0 -1
  734. data/spec/support/models/guitar.rb +0 -1
  735. data/spec/support/models/hole.rb +0 -1
  736. data/spec/support/models/home.rb +0 -1
  737. data/spec/support/models/house.rb +0 -1
  738. data/spec/support/models/html_writer.rb +0 -1
  739. data/spec/support/models/id_key.rb +0 -1
  740. data/spec/support/models/idnodef.rb +0 -1
  741. data/spec/support/models/image.rb +0 -1
  742. data/spec/support/models/implant.rb +0 -1
  743. data/spec/support/models/instrument.rb +0 -1
  744. data/spec/support/models/item.rb +0 -1
  745. data/spec/support/models/jar.rb +0 -1
  746. data/spec/support/models/kaleidoscope.rb +0 -1
  747. data/spec/support/models/kangaroo.rb +0 -1
  748. data/spec/support/models/label.rb +2 -2
  749. data/spec/support/models/language.rb +0 -1
  750. data/spec/support/models/lat_lng.rb +0 -1
  751. data/spec/support/models/league.rb +0 -1
  752. data/spec/support/models/learner.rb +0 -1
  753. data/spec/support/models/line_item.rb +0 -1
  754. data/spec/support/models/location.rb +0 -1
  755. data/spec/support/models/login.rb +0 -1
  756. data/spec/support/models/manufacturer.rb +0 -1
  757. data/spec/support/models/meat.rb +0 -1
  758. data/spec/support/models/membership.rb +1 -1
  759. data/spec/support/models/message.rb +0 -1
  760. data/spec/support/models/minim.rb +0 -1
  761. data/spec/support/models/mixed_drink.rb +0 -1
  762. data/spec/support/models/mop.rb +0 -1
  763. data/spec/support/models/movie.rb +0 -1
  764. data/spec/support/models/my_hash.rb +0 -1
  765. data/spec/support/models/name.rb +0 -1
  766. data/spec/support/models/name_only.rb +0 -1
  767. data/spec/support/models/node.rb +0 -1
  768. data/spec/support/models/note.rb +0 -1
  769. data/spec/support/models/nut.rb +0 -1
  770. data/spec/support/models/odd.rb +0 -1
  771. data/spec/support/models/order.rb +2 -1
  772. data/spec/support/models/ordered_post.rb +1 -2
  773. data/spec/support/models/ordered_preference.rb +0 -1
  774. data/spec/support/models/oscar.rb +0 -1
  775. data/spec/support/models/other_owner_object.rb +0 -1
  776. data/spec/support/models/override.rb +0 -1
  777. data/spec/support/models/ownable.rb +0 -1
  778. data/spec/support/models/owner.rb +0 -1
  779. data/spec/support/models/pack.rb +0 -1
  780. data/spec/support/models/page.rb +0 -1
  781. data/spec/support/models/page_question.rb +0 -1
  782. data/spec/support/models/palette.rb +0 -1
  783. data/spec/support/models/parent.rb +0 -1
  784. data/spec/support/models/parent_doc.rb +0 -1
  785. data/spec/support/models/passport.rb +5 -1
  786. data/spec/support/models/patient.rb +0 -1
  787. data/spec/support/models/pdf_writer.rb +0 -1
  788. data/spec/support/models/pencil.rb +0 -1
  789. data/spec/support/models/person.rb +1 -1
  790. data/spec/support/models/pet.rb +0 -1
  791. data/spec/support/models/pet_owner.rb +0 -1
  792. data/spec/support/models/phone.rb +2 -2
  793. data/spec/support/models/piano.rb +0 -1
  794. data/spec/support/models/pizza.rb +0 -1
  795. data/spec/support/models/player.rb +0 -1
  796. data/spec/support/models/post.rb +0 -1
  797. data/spec/support/models/post_genre.rb +0 -1
  798. data/spec/support/models/powerup.rb +0 -1
  799. data/spec/support/models/preference.rb +0 -1
  800. data/spec/support/models/princess.rb +0 -1
  801. data/spec/support/models/product.rb +0 -1
  802. data/spec/support/models/profile.rb +0 -1
  803. data/spec/support/models/pronunciation.rb +0 -1
  804. data/spec/support/models/pub.rb +0 -1
  805. data/spec/support/models/publication/encyclopedia.rb +0 -1
  806. data/spec/support/models/publication/review.rb +0 -1
  807. data/spec/support/models/publication.rb +0 -1
  808. data/spec/support/models/purchase.rb +0 -1
  809. data/spec/support/models/purchased_item.rb +10 -0
  810. data/spec/support/models/question.rb +0 -1
  811. data/spec/support/models/quiz.rb +0 -1
  812. data/spec/support/models/rating.rb +0 -1
  813. data/spec/support/models/record.rb +0 -1
  814. data/spec/support/models/registry.rb +0 -1
  815. data/spec/support/models/role.rb +0 -1
  816. data/spec/support/models/root_category.rb +0 -1
  817. data/spec/support/models/sandwich.rb +0 -1
  818. data/spec/support/models/scheduler.rb +0 -1
  819. data/spec/support/models/scribe.rb +0 -1
  820. data/spec/support/models/sealer.rb +0 -1
  821. data/spec/support/models/seat.rb +0 -1
  822. data/spec/support/models/seo.rb +0 -1
  823. data/spec/support/models/series.rb +0 -1
  824. data/spec/support/models/server.rb +0 -1
  825. data/spec/support/models/service.rb +0 -1
  826. data/spec/support/models/shape.rb +0 -1
  827. data/spec/support/models/shelf.rb +0 -1
  828. data/spec/support/models/shipment_address.rb +0 -1
  829. data/spec/support/models/shipping_container.rb +0 -1
  830. data/spec/support/models/shipping_pack.rb +0 -1
  831. data/spec/support/models/shirt.rb +0 -1
  832. data/spec/support/models/shop.rb +0 -1
  833. data/spec/support/models/short_agent.rb +0 -1
  834. data/spec/support/models/short_quiz.rb +0 -1
  835. data/spec/support/models/simple.rb +0 -1
  836. data/spec/support/models/slave.rb +0 -1
  837. data/spec/support/models/song.rb +0 -1
  838. data/spec/support/models/sound.rb +0 -1
  839. data/spec/support/models/spacer.rb +0 -1
  840. data/spec/support/models/square.rb +0 -1
  841. data/spec/support/models/staff.rb +0 -1
  842. data/spec/support/models/store_as_dup_test1.rb +0 -1
  843. data/spec/support/models/store_as_dup_test2.rb +0 -1
  844. data/spec/support/models/store_as_dup_test3.rb +0 -1
  845. data/spec/support/models/store_as_dup_test4.rb +0 -1
  846. data/spec/support/models/strategy.rb +0 -1
  847. data/spec/support/models/sub_item.rb +0 -1
  848. data/spec/support/models/subscription.rb +0 -1
  849. data/spec/support/models/survey.rb +0 -1
  850. data/spec/support/models/symptom.rb +0 -1
  851. data/spec/support/models/tag.rb +0 -1
  852. data/spec/support/models/target.rb +0 -1
  853. data/spec/support/models/template.rb +0 -1
  854. data/spec/support/models/thing.rb +0 -1
  855. data/spec/support/models/threadlocker.rb +0 -1
  856. data/spec/support/models/title.rb +0 -1
  857. data/spec/support/models/tool.rb +0 -1
  858. data/spec/support/models/topping.rb +0 -1
  859. data/spec/support/models/toy.rb +0 -1
  860. data/spec/support/models/track.rb +0 -1
  861. data/spec/support/models/translation.rb +0 -1
  862. data/spec/support/models/tree.rb +0 -1
  863. data/spec/support/models/truck.rb +0 -1
  864. data/spec/support/models/updatable.rb +0 -1
  865. data/spec/support/models/user.rb +0 -1
  866. data/spec/support/models/user_account.rb +0 -1
  867. data/spec/support/models/validation_callback.rb +0 -1
  868. data/spec/support/models/vehicle.rb +0 -1
  869. data/spec/support/models/version.rb +0 -1
  870. data/spec/support/models/vertex.rb +0 -1
  871. data/spec/support/models/vet_visit.rb +0 -1
  872. data/spec/support/models/video.rb +0 -1
  873. data/spec/support/models/video_game.rb +0 -1
  874. data/spec/support/models/washer.rb +0 -1
  875. data/spec/support/models/weapon.rb +0 -1
  876. data/spec/support/models/wiki_page.rb +0 -1
  877. data/spec/support/models/word.rb +0 -1
  878. data/spec/support/models/word_origin.rb +0 -1
  879. data/spec/support/models/writer.rb +0 -1
  880. data/spec/support/schema_maps/schema_map_aws.json +17 -0
  881. data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  882. data/spec/support/schema_maps/schema_map_azure.json +17 -0
  883. data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  884. data/spec/support/schema_maps/schema_map_gcp.json +17 -0
  885. data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  886. data/spec/support/schema_maps/schema_map_kmip.json +17 -0
  887. data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  888. data/spec/support/schema_maps/schema_map_local.json +18 -0
  889. data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
  890. data/spec/support/shared/time.rb +0 -1
  891. data/spec/support/spec_config.rb +7 -1
  892. data.tar.gz.sig +0 -0
  893. metadata +51 -11
  894. metadata.gz.sig +0 -0
  895. data/lib/support/ruby_version.rb +0 -29
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
3
2
 
4
3
  require "mongoid/contextual/aggregable/memory"
5
4
  require "mongoid/association/eager_loadable"
@@ -27,8 +26,6 @@ module Mongoid
27
26
  # @param [ Array ] other The other array.
28
27
  #
29
28
  # @return [ true, false ] If the objects are equal.
30
- #
31
- # @since 3.0.0
32
29
  def ==(other)
33
30
  return false unless other.respond_to?(:entries)
34
31
  entries == other.entries
@@ -40,8 +37,6 @@ module Mongoid
40
37
  # context.delete
41
38
  #
42
39
  # @return [ nil ] Nil.
43
- #
44
- # @since 3.0.0
45
40
  def delete
46
41
  deleted = count
47
42
  removed = map do |doc|
@@ -64,8 +59,6 @@ module Mongoid
64
59
  # context.destroy
65
60
  #
66
61
  # @return [ nil ] Nil.
67
- #
68
- # @since 3.0.0
69
62
  def destroy
70
63
  deleted = count
71
64
  each do |doc|
@@ -84,10 +77,12 @@ module Mongoid
84
77
  # @param [ String, Symbol ] field The name of the field.
85
78
  #
86
79
  # @return [ Array<Object> ] The distinct values for the field.
87
- #
88
- # @since 3.0.0
89
80
  def distinct(field)
90
- documents.map{ |doc| doc.send(field) }.uniq
81
+ if Mongoid.legacy_pluck_distinct
82
+ documents.map{ |doc| doc.send(field) }.uniq
83
+ else
84
+ pluck(field).uniq
85
+ end
91
86
  end
92
87
 
93
88
  # Iterate over the context. If provided a block, yield to a Mongoid
@@ -99,8 +94,6 @@ module Mongoid
99
94
  # end
100
95
  #
101
96
  # @return [ Enumerator ] The enumerator.
102
- #
103
- # @since 3.0.0
104
97
  def each
105
98
  if block_given?
106
99
  documents_for_iteration.each do |doc|
@@ -118,8 +111,6 @@ module Mongoid
118
111
  # context.exists?
119
112
  #
120
113
  # @return [ true, false ] If the count is more than zero.
121
- #
122
- # @since 3.0.0
123
114
  def exists?
124
115
  count > 0
125
116
  end
@@ -129,11 +120,16 @@ module Mongoid
129
120
  # @example Get the first document.
130
121
  # context.first
131
122
  #
132
- # @return [ Document ] The first document.
123
+ # @param [ Integer | Hash ] limit_or_opts The number of documents to
124
+ # return, or a hash of options.
133
125
  #
134
- # @since 3.0.0
135
- def first(*args)
136
- eager_load([documents.first]).first
126
+ # @return [ Document ] The first document.
127
+ def first(limit_or_opts = nil)
128
+ if limit_or_opts.nil? || limit_or_opts.is_a?(Hash)
129
+ eager_load([documents.first]).first
130
+ else
131
+ eager_load(documents.first(limit_or_opts))
132
+ end
137
133
  end
138
134
  alias :one :first
139
135
  alias :find_first :first
@@ -144,8 +140,6 @@ module Mongoid
144
140
  # Memory.new(criteria)
145
141
  #
146
142
  # @param [ Criteria ] criteria The criteria.
147
- #
148
- # @since 3.0.0
149
143
  def initialize(criteria)
150
144
  @criteria, @klass = criteria, criteria.klass
151
145
  @documents = criteria.documents.select do |doc|
@@ -165,8 +159,6 @@ module Mongoid
165
159
  # @param [ Hash ] incs The operations.
166
160
  #
167
161
  # @return [ Enumerator ] The enumerator.
168
- #
169
- # @since 7.0.0
170
162
  def inc(incs)
171
163
  each do |document|
172
164
  document.inc(incs)
@@ -178,11 +170,52 @@ module Mongoid
178
170
  # @example Get the last document.
179
171
  # context.last
180
172
  #
173
+ # @param [ Integer | Hash ] limit_or_opts The number of documents to
174
+ # return, or a hash of options.
175
+ #
176
+ # @option limit_or_opts [ :none ] :id_sort This option is deprecated.
177
+ # Don't apply a sort on _id if no other sort is defined on the criteria.
178
+ #
181
179
  # @return [ Document ] The last document.
180
+ def last(limit_or_opts = nil)
181
+ if limit_or_opts.nil? || limit_or_opts.is_a?(Hash)
182
+ eager_load([documents.last]).first
183
+ else
184
+ eager_load(documents.last(limit_or_opts))
185
+ end
186
+ end
187
+
188
+ # Take the given number of documents from the database.
189
+ #
190
+ # @example Take a document.
191
+ # context.take
192
+ #
193
+ # @param [ Integer | nil ] limit The number of documents to take or nil.
194
+ #
195
+ # @return [ Document ] The document.
196
+ def take(limit = nil)
197
+ if limit
198
+ eager_load(documents.take(limit))
199
+ else
200
+ eager_load([documents.first]).first
201
+ end
202
+ end
203
+
204
+ # Take the given number of documents from the database.
205
+ #
206
+ # @example Take a document.
207
+ # context.take
208
+ #
209
+ # @return [ Document ] The document.
182
210
  #
183
- # @since 3.0.0
184
- def last
185
- eager_load([documents.last]).first
211
+ # @raises [ Mongoid::Errors::DocumentNotFound ] raises when there are no
212
+ # documents to take.
213
+ def take!
214
+ if documents.empty?
215
+ raise Errors::DocumentNotFound.new(klass, nil, nil)
216
+ else
217
+ eager_load([documents.first]).first
218
+ end
186
219
  end
187
220
 
188
221
  # Get the length of matching documents in the context.
@@ -191,8 +224,6 @@ module Mongoid
191
224
  # context.length
192
225
  #
193
226
  # @return [ Integer ] The matching length.
194
- #
195
- # @since 3.0.0
196
227
  def length
197
228
  documents.length
198
229
  end
@@ -206,22 +237,41 @@ module Mongoid
206
237
  # @param [ Integer ] value The number of documents to return.
207
238
  #
208
239
  # @return [ Mongo ] The context.
209
- #
210
- # @since 3.0.0
211
240
  def limit(value)
212
241
  self.limiting = value
213
242
  self
214
243
  end
215
244
 
216
245
  def pluck(*fields)
217
- fields = Array.wrap(fields)
218
- documents.map do |doc|
219
- if fields.size == 1
220
- doc[fields.first]
221
- else
222
- fields.map { |n| doc[n] }.compact
246
+ if Mongoid.legacy_pluck_distinct
247
+ documents.pluck(*fields)
248
+ else
249
+ documents.map do |d|
250
+ if fields.length == 1
251
+ retrieve_value_at_path(d, fields.first)
252
+ else
253
+ fields.map do |field|
254
+ retrieve_value_at_path(d, field)
255
+ end
256
+ end
223
257
  end
224
- end.compact
258
+ end
259
+ end
260
+
261
+ # Tally the field values in memory.
262
+ #
263
+ # @example Get the counts of values in memory.
264
+ # context.tally(:name)
265
+ #
266
+ # @param [ String | Symbol ] field Field to tally.
267
+ #
268
+ # @return [ Hash ] The hash of counts.
269
+ def tally(field)
270
+ return documents.each_with_object({}) do |d, acc|
271
+ v = retrieve_value_at_path(d, field)
272
+ acc[v] ||= 0
273
+ acc[v] += 1
274
+ end
225
275
  end
226
276
 
227
277
  # Skips the provided number of documents.
@@ -232,8 +282,6 @@ module Mongoid
232
282
  # @param [ Integer ] value The number of documents to skip.
233
283
  #
234
284
  # @return [ Mongo ] The context.
235
- #
236
- # @since 3.0.0
237
285
  def skip(value)
238
286
  self.skipping = value
239
287
  self
@@ -248,8 +296,6 @@ module Mongoid
248
296
  # pairs.
249
297
  #
250
298
  # @return [ Mongo ] The context.
251
- #
252
- # @since 3.0.0
253
299
  def sort(values)
254
300
  in_place_sort(values) and self
255
301
  end
@@ -262,8 +308,6 @@ module Mongoid
262
308
  # @param [ Hash ] attributes The new attributes for the document.
263
309
  #
264
310
  # @return [ nil, false ] False if no attributes were provided.
265
- #
266
- # @since 3.0.0
267
311
  def update(attributes = nil)
268
312
  update_documents(attributes, [ first ])
269
313
  end
@@ -276,8 +320,6 @@ module Mongoid
276
320
  # @param [ Hash ] attributes The new attributes for each document.
277
321
  #
278
322
  # @return [ nil, false ] False if no attributes were provided.
279
- #
280
- # @since 3.0.0
281
323
  def update_all(attributes = nil)
282
324
  update_documents(attributes, entries)
283
325
  end
@@ -292,8 +334,6 @@ module Mongoid
292
334
  # context.documents_for_iteration
293
335
  #
294
336
  # @return [ Array<Document> ] The docs to iterate.
295
- #
296
- # @since 3.1.0
297
337
  def documents_for_iteration
298
338
  docs = documents[skipping || 0, limiting || documents.length] || []
299
339
  if eager_loadable?
@@ -311,8 +351,6 @@ module Mongoid
311
351
  #
312
352
  # @param [ Hash ] attributes The attributes.
313
353
  # @param [ Array<Document> ] docs The docs to update.
314
- #
315
- # @since 3.0.4
316
354
  def update_documents(attributes, docs)
317
355
  return false if !attributes || docs.empty?
318
356
  updates = { "$set" => {}}
@@ -332,8 +370,6 @@ module Mongoid
332
370
  # @example Get the limiting value.
333
371
  #
334
372
  # @return [ Integer ] The limit.
335
- #
336
- # @since 3.0.0
337
373
  def limiting
338
374
  defined?(@limiting) ? @limiting : nil
339
375
  end
@@ -347,36 +383,30 @@ module Mongoid
347
383
  # @param [ Integer ] value The limit.
348
384
  #
349
385
  # @return [ Integer ] The limit.
350
- #
351
- # @since 3.0.0
352
386
  def limiting=(value)
353
387
  @limiting = value
354
388
  end
355
389
 
356
- # Get the skiping value.
390
+ # Get the skipping value.
357
391
  #
358
392
  # @api private
359
393
  #
360
- # @example Get the skiping value.
394
+ # @example Get the skipping value.
361
395
  #
362
396
  # @return [ Integer ] The skip.
363
- #
364
- # @since 3.0.0
365
397
  def skipping
366
398
  defined?(@skipping) ? @skipping : nil
367
399
  end
368
400
 
369
- # Set the skiping value.
401
+ # Set the skipping value.
370
402
  #
371
403
  # @api private
372
404
  #
373
- # @example Set the skiping value.
405
+ # @example Set the skipping value.
374
406
  #
375
407
  # @param [ Integer ] value The skip.
376
408
  #
377
409
  # @return [ Integer ] The skip.
378
- #
379
- # @since 3.0.0
380
410
  def skipping=(value)
381
411
  @skipping = value
382
412
  end
@@ -389,8 +419,6 @@ module Mongoid
389
419
  # context.apply_options
390
420
  #
391
421
  # @return [ Memory ] self.
392
- #
393
- # @since 3.0.0
394
422
  def apply_options
395
423
  raise Errors::InMemoryCollationNotSupported.new if criteria.options[:collation]
396
424
  skip(criteria.options[:skip]).limit(criteria.options[:limit])
@@ -400,8 +428,6 @@ module Mongoid
400
428
  #
401
429
  # @example Apply the sorting params.
402
430
  # context.apply_sorting
403
- #
404
- # @since 3.0.0
405
431
  def apply_sorting
406
432
  if spec = criteria.options[:sort]
407
433
  in_place_sort(spec)
@@ -419,8 +445,6 @@ module Mongoid
419
445
  # @param [ Object ] b The first object.
420
446
  #
421
447
  # @return [ Integer ] The comparison value.
422
- #
423
- # @since 3.0.0
424
448
  def compare(a, b)
425
449
  case
426
450
  when a.nil? then b.nil? ? 0 : 1
@@ -435,8 +459,6 @@ module Mongoid
435
459
  # context.in_place_sort(name: 1)
436
460
  #
437
461
  # @param [ Hash ] values The field/direction sorting pairs.
438
- #
439
- # @since 3.0.0
440
462
  def in_place_sort(values)
441
463
  documents.sort! do |a, b|
442
464
  values.map do |field, direction|
@@ -454,8 +476,6 @@ module Mongoid
454
476
  # context.prepare_remove(doc)
455
477
  #
456
478
  # @param [ Document ] doc The document.
457
- #
458
- # @since 3.0.0
459
479
  def prepare_remove(doc)
460
480
  @selector ||= root.atomic_selector
461
481
  @path ||= doc.atomic_path
@@ -469,6 +489,63 @@ module Mongoid
469
489
  def _session
470
490
  @criteria.send(:_session)
471
491
  end
492
+
493
+ # Retrieve the value for the current document at the given field path.
494
+ #
495
+ # For example, if I have the following models:
496
+ #
497
+ # User has_many Accounts
498
+ # address is a hash on Account
499
+ #
500
+ # u = User.new(accounts: [ Account.new(address: { street: "W 50th" }) ])
501
+ # retrieve_value_at_path(u, "user.accounts.address.street")
502
+ # # => [ "W 50th" ]
503
+ #
504
+ # Note that the result is in an array since accounts is an array. If it
505
+ # was nested in two arrays the result would be in a 2D array.
506
+ #
507
+ # @param [ Object ] document The object to traverse the field path.
508
+ # @param [ String ] field_path The dotted string that represents the path
509
+ # to the value.
510
+ #
511
+ # @return [ Object | nil ] The value at the given field path or nil if it
512
+ # doesn't exist.
513
+ def retrieve_value_at_path(document, field_path)
514
+ return if field_path.blank? || !document
515
+ segment, remaining = field_path.to_s.split('.', 2)
516
+
517
+ curr = if document.is_a?(Document)
518
+ # Retrieves field for segment to check localization. Only does one
519
+ # iteration since there's no dots
520
+ res = if remaining
521
+ field = document.class.traverse_association_tree(segment)
522
+ # If this is a localized field, and there are remaining, get the
523
+ # _translations hash so that we can get the specified translation in
524
+ # the remaining
525
+ if field&.localized?
526
+ document.send("#{segment}_translations")
527
+ end
528
+ end
529
+ meth = klass.aliased_associations[segment] || segment
530
+ res.nil? ? document.try(meth) : res
531
+ elsif document.is_a?(Hash)
532
+ # TODO: Remove the indifferent access when implementing MONGOID-5410.
533
+ document.key?(segment.to_s) ?
534
+ document[segment.to_s] :
535
+ document[segment.to_sym]
536
+ else
537
+ nil
538
+ end
539
+
540
+ return curr unless remaining
541
+
542
+ if curr.is_a?(Array)
543
+ # compact is used for consistency with server behavior.
544
+ curr.map { |d| retrieve_value_at_path(d, remaining) }.compact
545
+ else
546
+ retrieve_value_at_path(curr, remaining)
547
+ end
548
+ end
472
549
  end
473
550
  end
474
551
  end