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,97 +1,94 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Association
4
5
 
5
- # This module contains all the behaviour related to accessing relations
6
+ # This module contains all the behavior related to accessing associations
6
7
  # through the getters and setters, and how to delegate to builders to
7
8
  # create new ones.
8
9
  module Accessors
9
10
  extend ActiveSupport::Concern
10
11
 
11
- # Builds the related document and creates the relation unless the
12
- # document is nil, then sets the relation on this document.
12
+ # Builds the related document and creates the association unless the
13
+ # document is nil, then sets the association on this document.
13
14
  #
14
- # @example Build the relation.
15
+ # @example Build the association.
15
16
  # person.__build__(:addresses, { :_id => 1 }, association)
16
17
  #
17
- # @param [ String, Symbol ] name The name of the relation.
18
+ # @param [ String, Symbol ] name The name of the association.
18
19
  # @param [ Hash, BSON::ObjectId ] object The id or attributes to use.
19
20
  # @param [ Association ] association The association metadata.
21
+ # @param [ Hash ] selected_fields Fields which were retrieved via #only.
22
+ # If selected_fields is specified, fields not listed in it will not be
23
+ # accessible in the built document.
20
24
  #
21
- # @return [ Proxy ] The relation.
22
- #
23
- # @since 2.0.0.rc.1
24
- def __build__(name, object, association)
25
- relation = create_relation(object, association)
25
+ # @return [ Proxy ] The association.
26
+ def __build__(name, object, association, selected_fields = nil)
27
+ relation = create_relation(object, association, selected_fields)
26
28
  set_relation(name, relation)
27
29
  end
28
30
 
29
- # Create a relation from an object and association.
31
+ # Create an association from an object and association metadata.
30
32
  #
31
- # @example Create the relation.
33
+ # @example Create the association.
32
34
  # person.create_relation(document, association)
33
35
  #
34
- # @param [ Document, Array<Document> ] object The relation target.
36
+ # @param [ Document, Array<Document> ] object The association target.
35
37
  # @param [ Association ] association The association metadata.
38
+ # @param [ Hash ] selected_fields Fields which were retrieved via #only.
39
+ # If selected_fields is specified, fields not listed in it will not be
40
+ # accessible in the created association document.
36
41
  #
37
- # @return [ Proxy ] The relation.
38
- #
39
- # @since 2.0.0.rc.1
40
- def create_relation(object, association)
42
+ # @return [ Proxy ] The association.
43
+ def create_relation(object, association, selected_fields = nil)
41
44
  type = @attributes[association.inverse_type]
42
- target = association.build(self, object, type)
45
+ target = association.build(self, object, type, selected_fields)
43
46
  target ? association.create_relation(self, target) : nil
44
47
  end
45
48
 
46
- # Resets the criteria inside the relation proxy. Used by many-to-many
47
- # relations to keep the underlying ids array in sync.
49
+ # Resets the criteria inside the association proxy. Used by many-to-many
50
+ # associations to keep the underlying ids array in sync.
48
51
  #
49
- # @example Reset the relation criteria.
52
+ # @example Reset the association criteria.
50
53
  # person.reset_relation_criteria(:preferences)
51
54
  #
52
- # @param [ Symbol ] name The name of the relation.
53
- #
54
- # @since 3.0.14
55
+ # @param [ Symbol ] name The name of the association.
55
56
  def reset_relation_criteria(name)
56
57
  if instance_variable_defined?("@_#{name}")
57
58
  send(name).reset_unloaded
58
59
  end
59
60
  end
60
61
 
61
- # Set the supplied relation to an instance variable on the class with the
62
+ # Set the supplied association to an instance variable on the class with the
62
63
  # provided name. Used as a helper just for code cleanliness.
63
64
  #
64
65
  # @example Set the proxy on the document.
65
66
  # person.set(:addresses, addresses)
66
67
  #
67
- # @param [ String, Symbol ] name The name of the relation.
68
- # @param [ Proxy ] relation The relation to set.
69
- #
70
- # @return [ Proxy ] The relation.
68
+ # @param [ String, Symbol ] name The name of the association.
69
+ # @param [ Proxy ] relation The association to set.
71
70
  #
72
- # @since 2.0.0.rc.1
71
+ # @return [ Proxy ] The association.
73
72
  def set_relation(name, relation)
74
73
  instance_variable_set("@_#{name}", relation)
75
74
  end
76
75
 
77
76
  private
78
77
 
79
- # Get the relation. Extracted out from the getter method to avoid
78
+ # Get the association. Extracted out from the getter method to avoid
80
79
  # infinite recursion when overriding the getter.
81
80
  #
82
81
  # @api private
83
82
  #
84
- # @example Get the relation.
83
+ # @example Get the association.
85
84
  # document.get_relation(:name, association)
86
85
  #
87
- # @param [ Symbol ] name The name of the relation.
86
+ # @param [ Symbol ] name The name of the association.
88
87
  # @param [ Association ] association The association metadata.
89
- # @param [ Object ] object The object used to build the relation.
90
- # @param [ true, false ] reload If the relation is to be reloaded.
88
+ # @param [ Object ] object The object used to build the association.
89
+ # @param [ true, false ] reload If the association is to be reloaded.
91
90
  #
92
- # @return [ Proxy ] The relation.
93
- #
94
- # @since 3.0.16
91
+ # @return [ Proxy ] The association.
95
92
  def get_relation(name, association, object, reload = false)
96
93
  if !reload && (value = ivar(name)) != false
97
94
  value
@@ -101,13 +98,95 @@ module Mongoid
101
98
  if object && needs_no_database_query?(object, association)
102
99
  __build__(name, object, association)
103
100
  else
104
- __build__(name, attributes[association.key], association)
101
+ selected_fields = _mongoid_filter_selected_fields(association.key)
102
+ __build__(name, attributes[association.key], association, selected_fields)
105
103
  end
106
104
  end
107
105
  end
108
106
  end
109
107
  end
110
108
 
109
+ # Returns a subset of __selected_fields attribute applicable to the
110
+ # (embedded) association with the given key, or nil if no projection
111
+ # is to be performed.
112
+ #
113
+ # Also returns nil if exclusionary projection was requested but it does
114
+ # not exclude the field of the association.
115
+ #
116
+ # For example, if __selected_fields is {'a' => 1, 'b.c' => 2, 'b.c.f' => 3},
117
+ # and assoc_key is 'b', return value would be {'c' => 2, 'c.f' => 3}.
118
+ #
119
+ # @param [ String ] assoc_key
120
+ #
121
+ # @return [ Hash | nil ]
122
+ #
123
+ # @api private
124
+ def _mongoid_filter_selected_fields(assoc_key)
125
+ return nil unless __selected_fields
126
+
127
+ # If the list of fields was specified using #without instead of #only
128
+ # and the provided list does not include the association, any of its
129
+ # fields should be allowed.
130
+ if __selected_fields.values.all? { |v| v == 0 } &&
131
+ __selected_fields.keys.none? { |k| k.split('.', 2).first == assoc_key }
132
+ then
133
+ return nil
134
+ end
135
+
136
+ projecting_assoc = false
137
+
138
+ filtered = {}
139
+ __selected_fields.each do |k, v|
140
+ bits = k.split('.')
141
+
142
+ # If we are asked to project an association, we need all of that
143
+ # association's fields. However, we may be asked to project
144
+ # an association *and* its fields in the same query. In this case
145
+ # behavior differs according to server version:
146
+ #
147
+ # 4.2 and lower take the most recent projection specification, meaning
148
+ # projecting foo followed by foo.bar effectively projects foo.bar and
149
+ # projecting foo.bar followed by foo effectively projects foo.
150
+ # To match this behavior we need to track when we are being asked
151
+ # to project the association and when we are asked to project a field,
152
+ # and if we are asked to project the association last we need to
153
+ # remove any field projections.
154
+ #
155
+ # 4.4 (and presumably higher) do not allow projection to be on an
156
+ # association and its field, so it doesn't matter what we do. Hence
157
+ # we just need to handle the 4.2 and lower case correctly.
158
+ if bits.first == assoc_key
159
+ # Projecting the entire association OR some of its fields
160
+ if bits.length > 1
161
+ # Projecting a field
162
+ bits.shift
163
+ filtered[bits.join('.')] = v
164
+ projecting_assoc = false
165
+ else
166
+ # Projecting the entire association
167
+ projecting_assoc = true
168
+ end
169
+ end
170
+ end
171
+
172
+ if projecting_assoc
173
+ # The last projection was of the entire association; we may have
174
+ # also been projecting fields, but discard the field projections
175
+ # and return nil indicating we want the entire association.
176
+ return nil
177
+ end
178
+
179
+ # Positional projection is specified as "foo.$". In this case the
180
+ # document that the $ is referring to should be retrieved with all
181
+ # fields. See https://docs.mongodb.com/manual/reference/operator/projection/positional/
182
+ # and https://jira.mongodb.org/browse/MONGOID-4769.
183
+ if filtered.keys == %w($)
184
+ filtered = nil
185
+ end
186
+
187
+ filtered
188
+ end
189
+
111
190
  def needs_no_database_query?(object, association)
112
191
  object.is_a?(Document) && !object.embedded? &&
113
192
  object._id == attributes[association.key]
@@ -119,8 +198,6 @@ module Mongoid
119
198
  # document.without_autobuild?
120
199
  #
121
200
  # @return [ true, false ] If autobuild is disabled.
122
- #
123
- # @since 3.0.0
124
201
  def without_autobuild?
125
202
  Threaded.executing?(:without_autobuild)
126
203
  end
@@ -133,8 +210,6 @@ module Mongoid
133
210
  # end
134
211
  #
135
212
  # @return [ Object ] The result of the yield.
136
- #
137
- # @since 3.0.0
138
213
  def without_autobuild
139
214
  Threaded.begin_execution("without_autobuild")
140
215
  yield
@@ -151,18 +226,16 @@ module Mongoid
151
226
  # @param [ Array ] args The arguments.
152
227
  #
153
228
  # @return [ Array<Hash> ] The attributes and options.
154
- #
155
- # @since 2.3.4
156
229
  def parse_args(*args)
157
230
  [args.first || {}, args.size > 1 ? args[1] : {}]
158
231
  end
159
232
 
160
- # Adds the existence check for relations.
233
+ # Adds the existence check for associations.
161
234
  #
162
235
  # @example Add the existence check.
163
236
  # Person.define_existence_check!(association)
164
237
  #
165
- # @example Check if a relation exists.
238
+ # @example Check if an association exists.
166
239
  # person = Person.new
167
240
  # person.has_game?
168
241
  # person.game?
@@ -170,8 +243,6 @@ module Mongoid
170
243
  # @param [ Association ] association The association.
171
244
  #
172
245
  # @return [ Class ] The model being set up.
173
- #
174
- # @since 3.0.0
175
246
  def self.define_existence_check!(association)
176
247
  name = association.name
177
248
  association.inverse_class.tap do |klass|
@@ -184,18 +255,16 @@ module Mongoid
184
255
  end
185
256
  end
186
257
 
187
- # Defines the getter for the relation. Nothing too special here: just
188
- # return the instance variable for the relation if it exists or build
258
+ # Defines the getter for the association. Nothing too special here: just
259
+ # return the instance variable for the association if it exists or build
189
260
  # the thing.
190
261
  #
191
- # @example Set up the getter for the relation.
262
+ # @example Set up the getter for the association.
192
263
  # Person.define_getter!(association)
193
264
  #
194
- # @param [ Association ] association The association metadata for the relation.
265
+ # @param [ Association ] association The association metadata for the association.
195
266
  #
196
267
  # @return [ Class ] The class being set up.
197
- #
198
- # @since 2.0.0.rc.1
199
268
  def self.define_getter!(association)
200
269
  name = association.name
201
270
  association.inverse_class.tap do |klass|
@@ -209,37 +278,35 @@ module Mongoid
209
278
  end
210
279
  end
211
280
 
212
- # Defines the getter for the ids of documents in the relation. Should
213
- # be specify only for referenced many relations.
281
+ # Defines the getter for the ids of documents in the association. Should
282
+ # be specify only for referenced many associations.
214
283
  #
215
- # @example Set up the ids getter for the relation.
284
+ # @example Set up the ids getter for the association.
216
285
  # Person.define_ids_getter!(association)
217
286
  #
218
- # @param [ Association ] association The association metadata for the relation.
287
+ # @param [ Association ] association The association metadata for the association.
219
288
  #
220
289
  # @return [ Class ] The class being set up.
221
290
  def self.define_ids_getter!(association)
222
291
  ids_method = "#{association.name.to_s.singularize}_ids"
223
292
  association.inverse_class.tap do |klass|
224
293
  klass.re_define_method(ids_method) do
225
- send(association.name).only(:id).map(&:id)
294
+ send(association.name).only(:_id).map(&:_id)
226
295
  end
227
296
  end
228
297
  end
229
298
 
230
- # Defines the setter for the relation. This does a few things based on
299
+ # Defines the setter for the association. This does a few things based on
231
300
  # some conditions. If there is an existing association, a target
232
- # substitution will take place, otherwise a new relation will be
301
+ # substitution will take place, otherwise a new association will be
233
302
  # created with the supplied target.
234
303
  #
235
- # @example Set up the setter for the relation.
304
+ # @example Set up the setter for the association.
236
305
  # Person.define_setter!(association)
237
306
  #
238
- # @param [ Association ] association The association metadata for the relation.
307
+ # @param [ Association ] association The association metadata for the association.
239
308
  #
240
309
  # @return [ Class ] The class being set up.
241
- #
242
- # @since 2.0.0.rc.1
243
310
  def self.define_setter!(association)
244
311
  name = association.name
245
312
  association.inverse_class.tap do |klass|
@@ -261,15 +328,15 @@ module Mongoid
261
328
  end
262
329
 
263
330
  # Defines the setter method that allows you to set documents
264
- # in this relation by their ids. The defined setter, finds
265
- # documents with given ids and invokes regular relation setter
331
+ # in this association by their ids. The defined setter, finds
332
+ # documents with given ids and invokes regular association setter
266
333
  # with found documents. Ids setters should be defined only for
267
- # referenced many relations.
334
+ # referenced many associations.
268
335
  #
269
- # @example Set up the id_setter for the relation.
336
+ # @example Set up the id_setter for the association.
270
337
  # Person.define_ids_setter!(association)
271
338
  #
272
- # @param [ Association ] association The association for the relation.
339
+ # @param [ Association ] association The association for the association.
273
340
  #
274
341
  # @return [ Class ] The class being set up.
275
342
  def self.define_ids_setter!(association)
@@ -281,17 +348,15 @@ module Mongoid
281
348
  end
282
349
  end
283
350
 
284
- # Defines a builder method for an embeds_one relation. This is
351
+ # Defines a builder method for an embeds_one association. This is
285
352
  # defined as #build_name.
286
353
  #
287
354
  # @example
288
355
  # Person.define_builder!(association)
289
356
  #
290
- # @param [ Association ] association The association for the relation.
357
+ # @param [ Association ] association The association for the association.
291
358
  #
292
359
  # @return [ Class ] The class being set up.
293
- #
294
- # @since 2.0.0.rc.1
295
360
  def self.define_builder!(association)
296
361
  name = association.name
297
362
  association.inverse_class.tap do |klass|
@@ -307,18 +372,16 @@ module Mongoid
307
372
  end
308
373
  end
309
374
 
310
- # Defines a creator method for an embeds_one relation. This is
375
+ # Defines a creator method for an embeds_one association. This is
311
376
  # defined as #create_name. After the object is built it will
312
377
  # immediately save.
313
378
  #
314
379
  # @example
315
380
  # Person.define_creator!(association)
316
381
  #
317
- # @param [ Association ] association The association for the relation.
382
+ # @param [ Association ] association The association for the association.
318
383
  #
319
384
  # @return [ Class ] The class being set up.
320
- #
321
- # @since 2.0.0.rc.1
322
385
  def self.define_creator!(association)
323
386
  name = association.name
324
387
  association.inverse_class.tap do |klass|
@@ -1,8 +1,9 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Association
4
5
 
5
- # Superclass for all objects that bind relations together.
6
+ # Superclass for all objects that bind associations together.
6
7
  module Bindable
7
8
  include Threaded::Lifecycle
8
9
 
@@ -16,8 +17,6 @@ module Mongoid
16
17
  # @param [ Document ] base The base of the binding.
17
18
  # @param [ Document, Array<Document> ] target The target of the binding.
18
19
  # @param [ Association ] association The association metadata.
19
- #
20
- # @since 2.0.0.rc.1
21
20
  def initialize(base, target, association)
22
21
  @_base, @_target, @_association = base, target, association
23
22
  end
@@ -30,8 +29,6 @@ module Mongoid
30
29
  # end
31
30
  #
32
31
  # @return [ Object ] The result of the yield.
33
- #
34
- # @since 3.0.0
35
32
  def binding
36
33
  unless _binding?
37
34
  _binding do
@@ -52,8 +49,6 @@ module Mongoid
52
49
  # @param [ Document ] doc The document getting bound.
53
50
  #
54
51
  # @raise [ Errors::InverseNotFound ] If no inverse found.
55
- #
56
- # @since 3.0.0
57
52
  def check_inverse!(doc)
58
53
  unless _association.bindable?(doc)
59
54
  raise Errors::InverseNotFound.new(
@@ -75,8 +70,6 @@ module Mongoid
75
70
  #
76
71
  # @param [ Document ] keyed The document that stores the foreign key.
77
72
  # @param [ Object ] id The id of the bound document.
78
- #
79
- # @since 3.0.0
80
73
  def bind_foreign_key(keyed, id)
81
74
  unless keyed.frozen?
82
75
  keyed.you_must(_association.foreign_key_setter, id)
@@ -84,7 +77,7 @@ module Mongoid
84
77
  end
85
78
 
86
79
  # Set the type of the related document on the foreign type field, used
87
- # when relations are polymorphic.
80
+ # when associations are polymorphic.
88
81
  #
89
82
  # @api private
90
83
  #
@@ -93,8 +86,6 @@ module Mongoid
93
86
  #
94
87
  # @param [ Document ] typed The document that stores the type field.
95
88
  # @param [ String ] name The name of the model.
96
- #
97
- # @since 3.0.0
98
89
  def bind_polymorphic_type(typed, name)
99
90
  if _association.type
100
91
  typed.you_must(_association.type_setter, name)
@@ -102,7 +93,7 @@ module Mongoid
102
93
  end
103
94
 
104
95
  # Set the type of the related document on the foreign type field, used
105
- # when relations are polymorphic.
96
+ # when associations are polymorphic.
106
97
  #
107
98
  # @api private
108
99
  #
@@ -111,8 +102,6 @@ module Mongoid
111
102
  #
112
103
  # @param [ Document ] typed The document that stores the type field.
113
104
  # @param [ String ] name The name of the model.
114
- #
115
- # @since 3.0.0
116
105
  def bind_polymorphic_inverse_type(typed, name)
117
106
  if _association.inverse_type
118
107
  typed.you_must(_association.inverse_type_setter, name)
@@ -129,15 +118,13 @@ module Mongoid
129
118
  #
130
119
  # @param [ Document ] doc The base document.
131
120
  # @param [ Document ] inverse The inverse document.
132
- #
133
- # @since 3.0.0
134
121
  def bind_inverse(doc, inverse)
135
122
  if doc.respond_to?(_association.inverse_setter)
136
123
  doc.you_must(_association.inverse_setter, inverse)
137
124
  end
138
125
  end
139
126
 
140
- # Bind the provided document with the base from the parent relation.
127
+ # Bind the provided document with the base from the parent association.
141
128
  #
142
129
  # @api private
143
130
  #
@@ -145,8 +132,6 @@ module Mongoid
145
132
  # binding.bind_from_relational_parent(doc)
146
133
  #
147
134
  # @param [ Document ] doc The document to bind.
148
- #
149
- # @since 3.0.0
150
135
  def bind_from_relational_parent(doc)
151
136
  check_inverse!(doc)
152
137
  bind_foreign_key(doc, record_id(_base))
@@ -168,8 +153,6 @@ module Mongoid
168
153
  # binding.set_base_association
169
154
  #
170
155
  # @return [ true, false ] If the association changed.
171
- #
172
- # @since 2.4.4
173
156
  def set_base_association
174
157
  inverse_association = _association.inverse_association(_target)
175
158
  if inverse_association != _association && !inverse_association.nil?
@@ -177,7 +160,7 @@ module Mongoid
177
160
  end
178
161
  end
179
162
 
180
- # Bind the provided document with the base from the parent relation.
163
+ # Bind the provided document with the base from the parent association.
181
164
  #
182
165
  # @api private
183
166
  #
@@ -185,8 +168,6 @@ module Mongoid
185
168
  # unbinding.unbind_from_relational_parent(doc)
186
169
  #
187
170
  # @param [ Document ] doc The document to unbind.
188
- #
189
- # @since 3.0.0
190
171
  def unbind_from_relational_parent(doc)
191
172
  check_inverse!(doc)
192
173
  bind_foreign_key(doc, nil)
@@ -1,10 +1,10 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Mongoid
4
4
  module Association
5
5
 
6
6
  # This module is responsible for defining the build and create methods used
7
- # in one to one relations.
7
+ # in one to one associations.
8
8
  #
9
9
  # @example Methods that get created.
10
10
  #
@@ -16,8 +16,6 @@ module Mongoid
16
16
  # # The following methods get created:
17
17
  # person.build_name({ :first_name => "Durran" })
18
18
  # person.create_name({ :first_name => "Durran" })
19
- #
20
- # @since 2.0.0.rc.1
21
19
  module Builders
22
20
  extend ActiveSupport::Concern
23
21
 
@@ -32,8 +30,6 @@ module Mongoid
32
30
  # @param [ Array ] args The arguments.
33
31
  #
34
32
  # @return [ Array<Hash> ] The attributes and options.
35
- #
36
- # @since 2.3.4
37
33
  def parse_args(*args)
38
34
  [ args.first || {}, args.size > 1 ? args[1] : {} ]
39
35
  end
@@ -43,11 +39,9 @@ module Mongoid
43
39
  # @example
44
40
  # Person.define_builder!(association)
45
41
  #
46
- # @param [ Association ] association The association metadata for the relation.
42
+ # @param [ Association ] association The association metadata for the association.
47
43
  #
48
44
  # @return [ Class ] The class being set up.
49
- #
50
- # @since 2.0.0.rc.1
51
45
  def self.define_builder!(association)
52
46
  association.inverse_class.tap do |klass|
53
47
  klass.re_define_method("build_#{association.name}") do |*args|
@@ -68,11 +62,9 @@ module Mongoid
68
62
  # @example
69
63
  # Person.define_creator!(association)
70
64
  #
71
- # @param [ Association ] association The association metadata for the relation.
65
+ # @param [ Association ] association The association metadata for the association.
72
66
  #
73
67
  # @return [ Class ] The class being set up.
74
- #
75
- # @since 2.0.0.rc.1
76
68
  def self.define_creator!(association)
77
69
  association.inverse_class.tap do |klass|
78
70
  klass.re_define_method("create_#{association.name}") do |*args|
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  module Mongoid
3
4
  module Association
4
5
 
@@ -8,7 +9,7 @@ module Mongoid
8
9
  module Constrainable
9
10
 
10
11
  # Convert the supplied object to the appropriate type to set as the
11
- # foreign key for a relation.
12
+ # foreign key for an association.
12
13
  #
13
14
  # @example Convert the object.
14
15
  # constraint.convert("12345")
@@ -16,8 +17,6 @@ module Mongoid
16
17
  # @param [ Object ] object The object to convert.
17
18
  #
18
19
  # @return [ Object ] The object cast to the correct type.
19
- #
20
- # @since 2.0.0.rc.7
21
20
  def convert_to_foreign_key(object)
22
21
  return convert_polymorphic(object) if polymorphic?
23
22
  field = relation_class.fields["_id"]
@@ -31,10 +30,10 @@ module Mongoid
31
30
  end
32
31
 
33
32
  private
34
-
33
+
35
34
  def convert_polymorphic(object)
36
35
  if object.is_a?(Mongoid::Document)
37
- object.id
36
+ object._id
38
37
  else
39
38
  BSON::ObjectId.mongoize(object)
40
39
  end