mongoid 7.0.6 → 7.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (849) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +13 -13
  5. data/README.md +23 -17
  6. data/Rakefile +2 -0
  7. data/lib/config/locales/en.yml +60 -51
  8. data/lib/mongoid.rb +10 -2
  9. data/lib/mongoid/association.rb +9 -6
  10. data/lib/mongoid/association/accessors.rb +95 -52
  11. data/lib/mongoid/association/bindable.rb +7 -5
  12. data/lib/mongoid/association/builders.rb +4 -3
  13. data/lib/mongoid/association/constrainable.rb +4 -2
  14. data/lib/mongoid/association/depending.rb +5 -2
  15. data/lib/mongoid/association/eager_loadable.rb +2 -0
  16. data/lib/mongoid/association/embedded.rb +3 -0
  17. data/lib/mongoid/association/embedded/batchable.rb +4 -2
  18. data/lib/mongoid/association/embedded/cyclic.rb +8 -6
  19. data/lib/mongoid/association/embedded/embedded_in.rb +6 -3
  20. data/lib/mongoid/association/embedded/embedded_in/binding.rb +4 -1
  21. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +8 -2
  22. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +15 -12
  23. data/lib/mongoid/association/embedded/embeds_many.rb +9 -5
  24. data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -2
  25. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +9 -3
  26. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +50 -47
  27. data/lib/mongoid/association/embedded/embeds_one.rb +9 -5
  28. data/lib/mongoid/association/embedded/embeds_one/binding.rb +5 -2
  29. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +10 -4
  30. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +17 -14
  31. data/lib/mongoid/association/macros.rb +38 -36
  32. data/lib/mongoid/association/many.rb +14 -11
  33. data/lib/mongoid/association/marshalable.rb +3 -1
  34. data/lib/mongoid/association/nested.rb +4 -1
  35. data/lib/mongoid/association/nested/many.rb +17 -15
  36. data/lib/mongoid/association/nested/nested_buildable.rb +6 -3
  37. data/lib/mongoid/association/nested/one.rb +11 -9
  38. data/lib/mongoid/association/one.rb +3 -1
  39. data/lib/mongoid/association/options.rb +9 -6
  40. data/lib/mongoid/association/proxy.rb +31 -14
  41. data/lib/mongoid/association/referenced.rb +3 -0
  42. data/lib/mongoid/association/referenced/auto_save.rb +4 -1
  43. data/lib/mongoid/association/referenced/belongs_to.rb +6 -3
  44. data/lib/mongoid/association/referenced/belongs_to/binding.rb +3 -1
  45. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +6 -3
  46. data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -2
  47. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -14
  48. data/lib/mongoid/association/referenced/counter_cache.rb +2 -0
  49. data/lib/mongoid/association/referenced/eager.rb +37 -15
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +13 -6
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -6
  52. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -2
  53. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -0
  54. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +25 -18
  55. data/lib/mongoid/association/referenced/has_many.rb +7 -4
  56. data/lib/mongoid/association/referenced/has_many/binding.rb +3 -1
  57. data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -2
  58. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -0
  59. data/lib/mongoid/association/referenced/has_many/enumerable.rb +11 -4
  60. data/lib/mongoid/association/referenced/has_many/proxy.rb +46 -43
  61. data/lib/mongoid/association/referenced/has_one.rb +5 -2
  62. data/lib/mongoid/association/referenced/has_one/binding.rb +4 -2
  63. data/lib/mongoid/association/referenced/has_one/buildable.rb +8 -1
  64. data/lib/mongoid/association/referenced/has_one/eager.rb +2 -0
  65. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +11 -9
  66. data/lib/mongoid/association/referenced/has_one/proxy.rb +17 -15
  67. data/lib/mongoid/association/referenced/syncable.rb +7 -5
  68. data/lib/mongoid/association/reflections.rb +7 -5
  69. data/lib/mongoid/association/relatable.rb +17 -14
  70. data/lib/mongoid/atomic.rb +15 -3
  71. data/lib/mongoid/atomic/modifiers.rb +24 -1
  72. data/lib/mongoid/atomic/paths.rb +2 -0
  73. data/lib/mongoid/atomic/paths/embedded.rb +2 -0
  74. data/lib/mongoid/atomic/paths/embedded/many.rb +4 -2
  75. data/lib/mongoid/atomic/paths/embedded/one.rb +4 -2
  76. data/lib/mongoid/atomic/paths/root.rb +4 -2
  77. data/lib/mongoid/attributes.rb +14 -13
  78. data/lib/mongoid/attributes/dynamic.rb +2 -0
  79. data/lib/mongoid/attributes/nested.rb +7 -5
  80. data/lib/mongoid/attributes/processing.rb +8 -6
  81. data/lib/mongoid/attributes/readonly.rb +3 -1
  82. data/lib/mongoid/cacheable.rb +3 -1
  83. data/lib/mongoid/changeable.rb +3 -1
  84. data/lib/mongoid/clients.rb +2 -0
  85. data/lib/mongoid/clients/factory.rb +1 -0
  86. data/lib/mongoid/clients/options.rb +2 -0
  87. data/lib/mongoid/clients/sessions.rb +3 -0
  88. data/lib/mongoid/clients/storage_options.rb +2 -0
  89. data/lib/mongoid/clients/validators.rb +2 -0
  90. data/lib/mongoid/clients/validators/storage.rb +2 -0
  91. data/lib/mongoid/composable.rb +4 -2
  92. data/lib/mongoid/config.rb +53 -10
  93. data/lib/mongoid/config/environment.rb +2 -0
  94. data/lib/mongoid/config/options.rb +20 -12
  95. data/lib/mongoid/config/validators.rb +2 -0
  96. data/lib/mongoid/config/validators/client.rb +2 -0
  97. data/lib/mongoid/config/validators/option.rb +2 -0
  98. data/lib/mongoid/contextual.rb +7 -4
  99. data/lib/mongoid/contextual/aggregable/memory.rb +3 -1
  100. data/lib/mongoid/contextual/aggregable/mongo.rb +3 -1
  101. data/lib/mongoid/contextual/atomic.rb +24 -6
  102. data/lib/mongoid/contextual/command.rb +2 -0
  103. data/lib/mongoid/contextual/geo_near.rb +5 -3
  104. data/lib/mongoid/contextual/map_reduce.rb +5 -2
  105. data/lib/mongoid/contextual/memory.rb +4 -2
  106. data/lib/mongoid/contextual/mongo.rb +6 -1
  107. data/lib/mongoid/contextual/none.rb +2 -0
  108. data/lib/mongoid/contextual/queryable.rb +2 -0
  109. data/lib/mongoid/copyable.rb +3 -1
  110. data/lib/mongoid/criteria.rb +25 -4
  111. data/lib/mongoid/criteria/findable.rb +11 -1
  112. data/lib/mongoid/criteria/includable.rb +8 -6
  113. data/lib/mongoid/criteria/inspectable.rb +2 -0
  114. data/lib/mongoid/criteria/marshalable.rb +2 -0
  115. data/lib/mongoid/criteria/modifiable.rb +4 -1
  116. data/lib/mongoid/criteria/options.rb +2 -0
  117. data/lib/mongoid/criteria/permission.rb +2 -0
  118. data/lib/mongoid/criteria/queryable.rb +7 -2
  119. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -0
  120. data/lib/mongoid/criteria/queryable/expandable.rb +93 -0
  121. data/lib/mongoid/criteria/queryable/extensions.rb +2 -0
  122. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -1
  123. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -1
  124. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -0
  125. data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -1
  126. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -6
  127. data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -1
  128. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -1
  129. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -2
  130. data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -1
  131. data/lib/mongoid/criteria/queryable/extensions/range.rb +3 -1
  132. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +7 -5
  133. data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -1
  134. data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -1
  135. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
  136. data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -2
  137. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -1
  138. data/lib/mongoid/criteria/queryable/key.rb +34 -6
  139. data/lib/mongoid/criteria/queryable/macroable.rb +3 -1
  140. data/lib/mongoid/criteria/queryable/mergeable.rb +153 -11
  141. data/lib/mongoid/criteria/queryable/optional.rb +5 -3
  142. data/lib/mongoid/criteria/queryable/options.rb +2 -0
  143. data/lib/mongoid/criteria/queryable/pipeline.rb +5 -2
  144. data/lib/mongoid/criteria/queryable/selectable.rb +374 -90
  145. data/lib/mongoid/criteria/queryable/selector.rb +38 -5
  146. data/lib/mongoid/criteria/queryable/smash.rb +2 -0
  147. data/lib/mongoid/criteria/queryable/storable.rb +233 -0
  148. data/lib/mongoid/criteria/scopable.rb +2 -0
  149. data/lib/mongoid/document.rb +2 -0
  150. data/lib/mongoid/equality.rb +3 -2
  151. data/lib/mongoid/errors.rb +3 -0
  152. data/lib/mongoid/errors/ambiguous_relationship.rb +4 -2
  153. data/lib/mongoid/errors/callback.rb +2 -0
  154. data/lib/mongoid/errors/criteria_argument_required.rb +19 -0
  155. data/lib/mongoid/errors/delete_restriction.rb +3 -2
  156. data/lib/mongoid/errors/document_not_destroyed.rb +2 -0
  157. data/lib/mongoid/errors/document_not_found.rb +2 -0
  158. data/lib/mongoid/errors/eager_load.rb +6 -2
  159. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -0
  160. data/lib/mongoid/errors/invalid_collection.rb +2 -0
  161. data/lib/mongoid/errors/invalid_config_option.rb +2 -0
  162. data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -0
  163. data/lib/mongoid/errors/invalid_field.rb +2 -0
  164. data/lib/mongoid/errors/invalid_field_option.rb +2 -0
  165. data/lib/mongoid/errors/invalid_find.rb +2 -0
  166. data/lib/mongoid/errors/invalid_includes.rb +2 -0
  167. data/lib/mongoid/errors/invalid_index.rb +2 -0
  168. data/lib/mongoid/errors/invalid_options.rb +4 -2
  169. data/lib/mongoid/errors/invalid_path.rb +2 -0
  170. data/lib/mongoid/errors/invalid_persistence_option.rb +2 -0
  171. data/lib/mongoid/errors/invalid_relation.rb +4 -2
  172. data/lib/mongoid/errors/invalid_relation_option.rb +4 -2
  173. data/lib/mongoid/errors/invalid_scope.rb +2 -0
  174. data/lib/mongoid/errors/invalid_session_use.rb +2 -0
  175. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -4
  176. data/lib/mongoid/errors/invalid_storage_options.rb +2 -0
  177. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  178. data/lib/mongoid/errors/invalid_time.rb +2 -0
  179. data/lib/mongoid/errors/invalid_value.rb +2 -0
  180. data/lib/mongoid/errors/inverse_not_found.rb +3 -1
  181. data/lib/mongoid/errors/mixed_client_configuration.rb +2 -0
  182. data/lib/mongoid/errors/mixed_relations.rb +2 -0
  183. data/lib/mongoid/errors/mongoid_error.rb +2 -0
  184. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -1
  185. data/lib/mongoid/errors/no_client_config.rb +2 -0
  186. data/lib/mongoid/errors/no_client_database.rb +2 -0
  187. data/lib/mongoid/errors/no_client_hosts.rb +2 -0
  188. data/lib/mongoid/errors/no_clients_config.rb +2 -0
  189. data/lib/mongoid/errors/no_default_client.rb +2 -0
  190. data/lib/mongoid/errors/no_environment.rb +2 -0
  191. data/lib/mongoid/errors/no_map_reduce_output.rb +2 -0
  192. data/lib/mongoid/errors/no_metadata.rb +2 -0
  193. data/lib/mongoid/errors/no_parent.rb +2 -0
  194. data/lib/mongoid/errors/readonly_attribute.rb +2 -0
  195. data/lib/mongoid/errors/readonly_document.rb +2 -0
  196. data/lib/mongoid/errors/scope_overwrite.rb +2 -0
  197. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -0
  198. data/lib/mongoid/errors/unknown_attribute.rb +2 -0
  199. data/lib/mongoid/errors/unknown_model.rb +2 -0
  200. data/lib/mongoid/errors/unsaved_document.rb +2 -0
  201. data/lib/mongoid/errors/unsupported_javascript.rb +2 -0
  202. data/lib/mongoid/errors/validations.rb +2 -0
  203. data/lib/mongoid/evolvable.rb +3 -1
  204. data/lib/mongoid/extensions.rb +2 -0
  205. data/lib/mongoid/extensions/array.rb +23 -6
  206. data/lib/mongoid/extensions/big_decimal.rb +2 -0
  207. data/lib/mongoid/extensions/boolean.rb +2 -0
  208. data/lib/mongoid/extensions/date.rb +13 -3
  209. data/lib/mongoid/extensions/date_time.rb +4 -3
  210. data/lib/mongoid/extensions/decimal128.rb +2 -0
  211. data/lib/mongoid/extensions/false_class.rb +2 -0
  212. data/lib/mongoid/extensions/float.rb +5 -3
  213. data/lib/mongoid/extensions/hash.rb +51 -9
  214. data/lib/mongoid/extensions/integer.rb +5 -3
  215. data/lib/mongoid/extensions/module.rb +2 -0
  216. data/lib/mongoid/extensions/nil_class.rb +2 -0
  217. data/lib/mongoid/extensions/object.rb +16 -4
  218. data/lib/mongoid/extensions/object_id.rb +2 -0
  219. data/lib/mongoid/extensions/range.rb +2 -0
  220. data/lib/mongoid/extensions/regexp.rb +3 -1
  221. data/lib/mongoid/extensions/set.rb +2 -0
  222. data/lib/mongoid/extensions/string.rb +18 -9
  223. data/lib/mongoid/extensions/symbol.rb +2 -0
  224. data/lib/mongoid/extensions/time.rb +14 -0
  225. data/lib/mongoid/extensions/time_with_zone.rb +14 -0
  226. data/lib/mongoid/extensions/true_class.rb +2 -0
  227. data/lib/mongoid/factory.rb +28 -5
  228. data/lib/mongoid/fields.rb +5 -2
  229. data/lib/mongoid/fields/foreign_key.rb +3 -1
  230. data/lib/mongoid/fields/localized.rb +2 -0
  231. data/lib/mongoid/fields/standard.rb +6 -3
  232. data/lib/mongoid/fields/validators.rb +2 -0
  233. data/lib/mongoid/fields/validators/macro.rb +13 -2
  234. data/lib/mongoid/findable.rb +9 -4
  235. data/lib/mongoid/indexable.rb +3 -1
  236. data/lib/mongoid/indexable/specification.rb +3 -1
  237. data/lib/mongoid/indexable/validators/options.rb +2 -0
  238. data/lib/mongoid/inspectable.rb +3 -1
  239. data/lib/mongoid/interceptable.rb +9 -3
  240. data/lib/mongoid/loggable.rb +13 -7
  241. data/lib/mongoid/matchable.rb +2 -0
  242. data/lib/mongoid/matchable/all.rb +2 -0
  243. data/lib/mongoid/matchable/and.rb +2 -0
  244. data/lib/mongoid/matchable/default.rb +2 -0
  245. data/lib/mongoid/matchable/elem_match.rb +2 -0
  246. data/lib/mongoid/matchable/eq.rb +1 -0
  247. data/lib/mongoid/matchable/exists.rb +2 -0
  248. data/lib/mongoid/matchable/gt.rb +2 -0
  249. data/lib/mongoid/matchable/gte.rb +2 -0
  250. data/lib/mongoid/matchable/in.rb +2 -0
  251. data/lib/mongoid/matchable/lt.rb +2 -0
  252. data/lib/mongoid/matchable/lte.rb +2 -0
  253. data/lib/mongoid/matchable/ne.rb +2 -0
  254. data/lib/mongoid/matchable/nin.rb +2 -0
  255. data/lib/mongoid/matchable/nor.rb +2 -1
  256. data/lib/mongoid/matchable/or.rb +2 -0
  257. data/lib/mongoid/matchable/regexp.rb +5 -2
  258. data/lib/mongoid/matchable/size.rb +2 -0
  259. data/lib/mongoid/persistable.rb +133 -15
  260. data/lib/mongoid/persistable/creatable.rb +3 -1
  261. data/lib/mongoid/persistable/deletable.rb +3 -1
  262. data/lib/mongoid/persistable/destroyable.rb +3 -1
  263. data/lib/mongoid/persistable/incrementable.rb +6 -2
  264. data/lib/mongoid/persistable/logical.rb +4 -1
  265. data/lib/mongoid/persistable/poppable.rb +3 -1
  266. data/lib/mongoid/persistable/pullable.rb +3 -1
  267. data/lib/mongoid/persistable/pushable.rb +14 -3
  268. data/lib/mongoid/persistable/renamable.rb +10 -3
  269. data/lib/mongoid/persistable/savable.rb +3 -1
  270. data/lib/mongoid/persistable/settable.rb +3 -1
  271. data/lib/mongoid/persistable/unsettable.rb +8 -3
  272. data/lib/mongoid/persistable/updatable.rb +3 -1
  273. data/lib/mongoid/persistable/upsertable.rb +3 -1
  274. data/lib/mongoid/persistence_context.rb +27 -15
  275. data/lib/mongoid/positional.rb +2 -0
  276. data/lib/mongoid/query_cache.rb +10 -9
  277. data/lib/mongoid/railtie.rb +3 -1
  278. data/lib/mongoid/railties/controller_runtime.rb +4 -1
  279. data/lib/mongoid/railties/database.rake +9 -0
  280. data/lib/mongoid/reloadable.rb +4 -2
  281. data/lib/mongoid/scopable.rb +2 -1
  282. data/lib/mongoid/selectable.rb +3 -1
  283. data/lib/mongoid/serializable.rb +23 -13
  284. data/lib/mongoid/shardable.rb +59 -5
  285. data/lib/mongoid/stateful.rb +3 -1
  286. data/lib/mongoid/tasks/database.rake +12 -5
  287. data/lib/mongoid/tasks/database.rb +50 -0
  288. data/lib/mongoid/threaded.rb +2 -0
  289. data/lib/mongoid/threaded/lifecycle.rb +2 -0
  290. data/lib/mongoid/timestamps.rb +3 -1
  291. data/lib/mongoid/timestamps/created.rb +3 -1
  292. data/lib/mongoid/timestamps/created/short.rb +2 -0
  293. data/lib/mongoid/timestamps/short.rb +2 -0
  294. data/lib/mongoid/timestamps/timeless.rb +6 -2
  295. data/lib/mongoid/timestamps/updated.rb +3 -1
  296. data/lib/mongoid/timestamps/updated/short.rb +2 -0
  297. data/lib/mongoid/touchable.rb +20 -12
  298. data/lib/mongoid/traversable.rb +4 -2
  299. data/lib/mongoid/validatable.rb +7 -5
  300. data/lib/mongoid/validatable/associated.rb +4 -2
  301. data/lib/mongoid/validatable/format.rb +2 -0
  302. data/lib/mongoid/validatable/length.rb +2 -0
  303. data/lib/mongoid/validatable/localizable.rb +2 -0
  304. data/lib/mongoid/validatable/macros.rb +2 -0
  305. data/lib/mongoid/validatable/presence.rb +4 -2
  306. data/lib/mongoid/validatable/queryable.rb +2 -0
  307. data/lib/mongoid/validatable/uniqueness.rb +5 -3
  308. data/lib/mongoid/version.rb +2 -1
  309. data/lib/rails/generators/mongoid/config/config_generator.rb +2 -0
  310. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +44 -29
  311. data/lib/rails/generators/mongoid/model/model_generator.rb +3 -1
  312. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
  313. data/lib/rails/generators/mongoid_generator.rb +2 -0
  314. data/lib/rails/mongoid.rb +4 -2
  315. data/lib/support/ruby_version.rb +3 -0
  316. data/spec/app/models/account.rb +3 -0
  317. data/spec/app/models/acolyte.rb +3 -0
  318. data/spec/app/models/actor.rb +3 -0
  319. data/spec/app/models/actress.rb +3 -0
  320. data/spec/app/models/address.rb +3 -0
  321. data/spec/app/models/address_component.rb +3 -0
  322. data/spec/app/models/address_number.rb +3 -0
  323. data/spec/app/models/agency.rb +3 -0
  324. data/spec/app/models/agent.rb +3 -0
  325. data/spec/app/models/album.rb +3 -0
  326. data/spec/app/models/alert.rb +3 -0
  327. data/spec/app/models/animal.rb +3 -0
  328. data/spec/app/models/answer.rb +3 -0
  329. data/spec/app/models/appointment.rb +3 -0
  330. data/spec/app/models/array_field.rb +1 -0
  331. data/spec/app/models/article.rb +3 -0
  332. data/spec/app/models/artist.rb +3 -0
  333. data/spec/app/models/artwork.rb +3 -0
  334. data/spec/app/models/audio.rb +3 -0
  335. data/spec/app/models/augmentation.rb +3 -0
  336. data/spec/app/models/author.rb +3 -0
  337. data/spec/app/models/baby.rb +3 -0
  338. data/spec/app/models/band.rb +3 -0
  339. data/spec/app/models/bar.rb +3 -0
  340. data/spec/app/models/basic.rb +3 -0
  341. data/spec/app/models/bed.rb +3 -0
  342. data/spec/app/models/big_palette.rb +3 -0
  343. data/spec/app/models/birthday.rb +3 -0
  344. data/spec/app/models/bomb.rb +3 -0
  345. data/spec/app/models/book.rb +3 -0
  346. data/spec/app/models/breed.rb +3 -0
  347. data/spec/app/models/browser.rb +3 -0
  348. data/spec/app/models/building.rb +3 -0
  349. data/spec/app/models/building_address.rb +3 -0
  350. data/spec/app/models/bus.rb +3 -0
  351. data/spec/app/models/business.rb +3 -0
  352. data/spec/app/models/callback_test.rb +3 -0
  353. data/spec/app/models/canvas.rb +3 -0
  354. data/spec/app/models/car.rb +3 -0
  355. data/spec/app/models/cat.rb +3 -0
  356. data/spec/app/models/category.rb +3 -0
  357. data/spec/app/models/child.rb +3 -0
  358. data/spec/app/models/child_doc.rb +3 -0
  359. data/spec/app/models/church.rb +3 -0
  360. data/spec/app/models/circle.rb +3 -0
  361. data/spec/app/models/circuit.rb +3 -0
  362. data/spec/app/models/circus.rb +3 -0
  363. data/spec/app/models/code.rb +3 -0
  364. data/spec/app/models/coding.rb +4 -0
  365. data/spec/app/models/coding/pull_request.rb +12 -0
  366. data/spec/app/models/comment.rb +3 -0
  367. data/spec/app/models/company.rb +3 -0
  368. data/spec/app/models/consumption_period.rb +3 -0
  369. data/spec/app/models/contextable_item.rb +3 -0
  370. data/spec/app/models/contractor.rb +3 -0
  371. data/spec/app/models/cookie.rb +3 -0
  372. data/spec/app/models/country_code.rb +3 -0
  373. data/spec/app/models/courier_job.rb +3 -0
  374. data/spec/app/models/definition.rb +3 -0
  375. data/spec/app/models/delegating_patient.rb +16 -0
  376. data/spec/app/models/description.rb +3 -0
  377. data/spec/app/models/dictionary.rb +3 -0
  378. data/spec/app/models/division.rb +3 -0
  379. data/spec/app/models/doctor.rb +3 -0
  380. data/spec/app/models/dog.rb +3 -0
  381. data/spec/app/models/dokument.rb +3 -0
  382. data/spec/app/models/draft.rb +3 -0
  383. data/spec/app/models/dragon.rb +3 -0
  384. data/spec/app/models/driver.rb +3 -0
  385. data/spec/app/models/drug.rb +3 -0
  386. data/spec/app/models/dungeon.rb +3 -0
  387. data/spec/app/models/edit.rb +3 -0
  388. data/spec/app/models/email.rb +3 -0
  389. data/spec/app/models/employer.rb +3 -0
  390. data/spec/app/models/entry.rb +3 -0
  391. data/spec/app/models/eraser.rb +3 -0
  392. data/spec/app/models/even.rb +3 -0
  393. data/spec/app/models/event.rb +3 -0
  394. data/spec/app/models/exhibition.rb +3 -0
  395. data/spec/app/models/exhibitor.rb +3 -0
  396. data/spec/app/models/explosion.rb +3 -0
  397. data/spec/app/models/eye.rb +3 -0
  398. data/spec/app/models/eye_bowl.rb +3 -0
  399. data/spec/app/models/face.rb +3 -0
  400. data/spec/app/models/favorite.rb +3 -0
  401. data/spec/app/models/filesystem.rb +3 -0
  402. data/spec/app/models/fire_hydrant.rb +3 -0
  403. data/spec/app/models/firefox.rb +3 -0
  404. data/spec/app/models/fish.rb +3 -0
  405. data/spec/app/models/folder.rb +3 -0
  406. data/spec/app/models/folder_item.rb +3 -0
  407. data/spec/app/models/fruits.rb +3 -0
  408. data/spec/app/models/game.rb +3 -0
  409. data/spec/app/models/ghost.rb +3 -0
  410. data/spec/app/models/home.rb +3 -0
  411. data/spec/app/models/house.rb +3 -0
  412. data/spec/app/models/html_writer.rb +3 -0
  413. data/spec/app/models/id_key.rb +3 -0
  414. data/spec/app/models/image.rb +3 -0
  415. data/spec/app/models/implant.rb +3 -0
  416. data/spec/app/models/item.rb +3 -0
  417. data/spec/app/models/jar.rb +3 -0
  418. data/spec/app/models/kaleidoscope.rb +3 -0
  419. data/spec/app/models/kangaroo.rb +4 -1
  420. data/spec/app/models/label.rb +3 -0
  421. data/spec/app/models/language.rb +3 -0
  422. data/spec/app/models/lat_lng.rb +3 -0
  423. data/spec/app/models/league.rb +3 -0
  424. data/spec/app/models/learner.rb +3 -0
  425. data/spec/app/models/line_item.rb +3 -0
  426. data/spec/app/models/location.rb +3 -0
  427. data/spec/app/models/login.rb +3 -0
  428. data/spec/app/models/manufacturer.rb +3 -0
  429. data/spec/app/models/meat.rb +3 -0
  430. data/spec/app/models/membership.rb +3 -0
  431. data/spec/app/models/message.rb +3 -0
  432. data/spec/app/models/minim.rb +1 -1
  433. data/spec/app/models/mixed_drink.rb +3 -0
  434. data/spec/app/models/movie.rb +3 -0
  435. data/spec/app/models/my_hash.rb +3 -0
  436. data/spec/app/models/name.rb +3 -0
  437. data/spec/app/models/name_only.rb +9 -0
  438. data/spec/app/models/node.rb +3 -0
  439. data/spec/app/models/note.rb +3 -0
  440. data/spec/app/models/odd.rb +3 -0
  441. data/spec/app/models/ordered_post.rb +3 -0
  442. data/spec/app/models/ordered_preference.rb +3 -0
  443. data/spec/app/models/oscar.rb +3 -0
  444. data/spec/app/models/other_owner_object.rb +3 -0
  445. data/spec/app/models/override.rb +3 -0
  446. data/spec/app/models/ownable.rb +3 -0
  447. data/spec/app/models/owner.rb +3 -0
  448. data/spec/app/models/pack.rb +3 -0
  449. data/spec/app/models/page.rb +3 -0
  450. data/spec/app/models/page_question.rb +3 -0
  451. data/spec/app/models/palette.rb +3 -0
  452. data/spec/app/models/parent.rb +3 -0
  453. data/spec/app/models/parent_doc.rb +3 -0
  454. data/spec/app/models/passport.rb +3 -0
  455. data/spec/app/models/patient.rb +3 -0
  456. data/spec/app/models/pdf_writer.rb +3 -0
  457. data/spec/app/models/pencil.rb +3 -0
  458. data/spec/app/models/person.rb +3 -0
  459. data/spec/app/models/pet.rb +3 -0
  460. data/spec/app/models/pet_owner.rb +3 -0
  461. data/spec/app/models/phone.rb +3 -0
  462. data/spec/app/models/pizza.rb +3 -0
  463. data/spec/app/models/player.rb +3 -0
  464. data/spec/app/models/post.rb +3 -0
  465. data/spec/app/models/post_genre.rb +3 -0
  466. data/spec/app/models/powerup.rb +3 -0
  467. data/spec/app/models/preference.rb +3 -0
  468. data/spec/app/models/princess.rb +3 -0
  469. data/spec/app/models/product.rb +3 -0
  470. data/spec/app/models/profile.rb +3 -0
  471. data/spec/app/models/pronunciation.rb +3 -0
  472. data/spec/app/models/pub.rb +3 -0
  473. data/spec/app/models/publication.rb +5 -0
  474. data/spec/app/models/publication/encyclopedia.rb +12 -0
  475. data/spec/app/models/publication/review.rb +14 -0
  476. data/spec/app/models/purchase.rb +3 -0
  477. data/spec/app/models/question.rb +3 -0
  478. data/spec/app/models/quiz.rb +3 -0
  479. data/spec/app/models/rating.rb +3 -0
  480. data/spec/app/models/record.rb +3 -0
  481. data/spec/app/models/registry.rb +3 -0
  482. data/spec/app/models/role.rb +3 -0
  483. data/spec/app/models/root_category.rb +3 -0
  484. data/spec/app/models/sandwich.rb +3 -0
  485. data/spec/app/models/scheduler.rb +3 -0
  486. data/spec/app/models/seo.rb +3 -0
  487. data/spec/app/models/series.rb +3 -0
  488. data/spec/app/models/server.rb +3 -0
  489. data/spec/app/models/service.rb +3 -0
  490. data/spec/app/models/shape.rb +3 -0
  491. data/spec/app/models/shelf.rb +3 -0
  492. data/spec/app/models/shipment_address.rb +3 -0
  493. data/spec/app/models/shipping_container.rb +3 -0
  494. data/spec/app/models/shipping_pack.rb +3 -0
  495. data/spec/app/models/shop.rb +3 -0
  496. data/spec/app/models/short_agent.rb +3 -0
  497. data/spec/app/models/short_quiz.rb +3 -0
  498. data/spec/app/models/simple.rb +3 -0
  499. data/spec/app/models/slave.rb +3 -0
  500. data/spec/app/models/song.rb +3 -0
  501. data/spec/app/models/sound.rb +3 -0
  502. data/spec/app/models/square.rb +3 -0
  503. data/spec/app/models/staff.rb +3 -0
  504. data/spec/app/models/store_as_dup_test1.rb +3 -0
  505. data/spec/app/models/store_as_dup_test2.rb +3 -0
  506. data/spec/app/models/store_as_dup_test3.rb +1 -0
  507. data/spec/app/models/store_as_dup_test4.rb +1 -0
  508. data/spec/app/models/strategy.rb +3 -0
  509. data/spec/app/models/sub_item.rb +3 -0
  510. data/spec/app/models/subscription.rb +3 -0
  511. data/spec/app/models/survey.rb +3 -0
  512. data/spec/app/models/symptom.rb +3 -0
  513. data/spec/app/models/tag.rb +3 -0
  514. data/spec/app/models/target.rb +3 -0
  515. data/spec/app/models/template.rb +3 -0
  516. data/spec/app/models/thing.rb +3 -0
  517. data/spec/app/models/title.rb +3 -0
  518. data/spec/app/models/tool.rb +3 -0
  519. data/spec/app/models/topping.rb +3 -0
  520. data/spec/app/models/track.rb +3 -0
  521. data/spec/app/models/translation.rb +3 -0
  522. data/spec/app/models/tree.rb +3 -0
  523. data/spec/app/models/truck.rb +3 -0
  524. data/spec/app/models/updatable.rb +1 -0
  525. data/spec/app/models/user.rb +3 -0
  526. data/spec/app/models/user_account.rb +3 -0
  527. data/spec/app/models/validation_callback.rb +3 -0
  528. data/spec/app/models/vehicle.rb +3 -0
  529. data/spec/app/models/version.rb +3 -0
  530. data/spec/app/models/vertex.rb +4 -1
  531. data/spec/app/models/vet_visit.rb +3 -0
  532. data/spec/app/models/video.rb +3 -0
  533. data/spec/app/models/video_game.rb +3 -0
  534. data/spec/app/models/weapon.rb +3 -0
  535. data/spec/app/models/wiki_page.rb +3 -0
  536. data/spec/app/models/word.rb +3 -0
  537. data/spec/app/models/word_origin.rb +3 -0
  538. data/spec/app/models/writer.rb +3 -0
  539. data/spec/config/mongoid.yml +1 -0
  540. data/spec/integration/app_spec.rb +192 -0
  541. data/spec/integration/associations/belongs_to_spec.rb +3 -0
  542. data/spec/integration/associations/embedded_spec.rb +175 -0
  543. data/spec/integration/associations/foreign_key_spec.rb +99 -0
  544. data/spec/integration/associations/foreign_key_spec_models.rb +65 -0
  545. data/spec/integration/associations/reverse_population_spec.rb +35 -0
  546. data/spec/integration/associations/reverse_population_spec_models.rb +37 -0
  547. data/spec/integration/criteria/default_scope_spec.rb +21 -0
  548. data/spec/integration/criteria/logical_spec.rb +94 -0
  549. data/spec/integration/document_spec.rb +22 -0
  550. data/spec/integration/i18n_fallbacks_spec.rb +90 -0
  551. data/spec/integration/shardable_spec.rb +133 -0
  552. data/spec/lite_spec_helper.rb +20 -5
  553. data/spec/mongoid/association/accessors_spec.rb +3 -0
  554. data/spec/mongoid/association/auto_save_spec.rb +3 -0
  555. data/spec/mongoid/association/builders_spec.rb +3 -0
  556. data/spec/mongoid/association/constrainable_spec.rb +3 -0
  557. data/spec/mongoid/association/counter_cache_spec.rb +3 -0
  558. data/spec/mongoid/association/depending_spec.rb +3 -0
  559. data/spec/mongoid/association/eager_spec.rb +3 -0
  560. data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -0
  561. data/spec/mongoid/association/embedded/dirty_spec.rb +3 -0
  562. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -0
  563. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +3 -0
  564. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +3 -0
  565. data/spec/mongoid/association/embedded/embedded_in_spec.rb +4 -1
  566. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +3 -0
  567. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +3 -0
  568. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +3 -0
  569. data/spec/mongoid/association/embedded/embeds_many_models.rb +53 -0
  570. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +52 -0
  571. data/spec/mongoid/association/embedded/embeds_many_spec.rb +14 -1
  572. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +3 -0
  573. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +3 -0
  574. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +3 -0
  575. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +3 -0
  576. data/spec/mongoid/association/embedded/embeds_one_models.rb +3 -0
  577. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +29 -0
  578. data/spec/mongoid/association/embedded/embeds_one_spec.rb +4 -3
  579. data/spec/mongoid/association/macros_spec.rb +3 -0
  580. data/spec/mongoid/association/nested/many_spec.rb +3 -0
  581. data/spec/mongoid/association/nested/one_spec.rb +3 -0
  582. data/spec/mongoid/association/options_spec.rb +3 -0
  583. data/spec/mongoid/association/polymorphic_spec.rb +3 -0
  584. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -0
  585. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +3 -0
  586. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +205 -10
  587. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +3 -0
  588. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +38 -0
  589. data/spec/mongoid/association/referenced/belongs_to_spec.rb +3 -0
  590. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -0
  591. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +3 -0
  592. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +16 -0
  593. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +26 -5
  594. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +39 -15
  595. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -2
  596. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +40 -0
  597. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +26 -2
  598. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -0
  599. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +3 -0
  600. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +18 -3
  601. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +3 -0
  602. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
  603. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +5 -1
  604. data/spec/mongoid/association/referenced/has_many_models.rb +3 -0
  605. data/spec/mongoid/association/referenced/has_many_query_spec.rb +38 -0
  606. data/spec/mongoid/association/referenced/has_many_spec.rb +3 -0
  607. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +3 -0
  608. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +3 -0
  609. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -3
  610. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +3 -0
  611. data/spec/mongoid/association/referenced/has_one_models.rb +3 -0
  612. data/spec/mongoid/association/referenced/has_one_query_spec.rb +38 -0
  613. data/spec/mongoid/association/referenced/has_one_spec.rb +3 -0
  614. data/spec/mongoid/association/reflections_spec.rb +3 -0
  615. data/spec/mongoid/association/syncable_spec.rb +3 -0
  616. data/spec/mongoid/association_spec.rb +3 -0
  617. data/spec/mongoid/atomic/modifiers_spec.rb +3 -0
  618. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +3 -0
  619. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +3 -0
  620. data/spec/mongoid/atomic/paths/root_spec.rb +3 -0
  621. data/spec/mongoid/atomic/paths_spec.rb +3 -0
  622. data/spec/mongoid/atomic_spec.rb +3 -0
  623. data/spec/mongoid/attributes/nested_spec.rb +3 -0
  624. data/spec/mongoid/attributes/readonly_spec.rb +3 -0
  625. data/spec/mongoid/attributes_spec.rb +3 -0
  626. data/spec/mongoid/cacheable_spec.rb +3 -0
  627. data/spec/mongoid/changeable_spec.rb +26 -0
  628. data/spec/mongoid/clients/factory_spec.rb +38 -20
  629. data/spec/mongoid/clients/options_spec.rb +26 -15
  630. data/spec/mongoid/clients/sessions_spec.rb +11 -4
  631. data/spec/mongoid/clients/transactions_spec.rb +26 -11
  632. data/spec/mongoid/clients_spec.rb +5 -2
  633. data/spec/mongoid/composable_spec.rb +3 -0
  634. data/spec/mongoid/config/environment_spec.rb +3 -0
  635. data/spec/mongoid/config/options_spec.rb +23 -3
  636. data/spec/mongoid/config_spec.rb +39 -0
  637. data/spec/mongoid/contextual/aggregable/memory_spec.rb +3 -0
  638. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +3 -0
  639. data/spec/mongoid/contextual/atomic_spec.rb +120 -10
  640. data/spec/mongoid/contextual/geo_near_spec.rb +3 -0
  641. data/spec/mongoid/contextual/map_reduce_spec.rb +23 -5
  642. data/spec/mongoid/contextual/memory_spec.rb +3 -0
  643. data/spec/mongoid/contextual/mongo_spec.rb +81 -53
  644. data/spec/mongoid/contextual/none_spec.rb +3 -0
  645. data/spec/mongoid/copyable_spec.rb +3 -0
  646. data/spec/mongoid/copyable_spec_models.rb +3 -0
  647. data/spec/mongoid/criteria/findable_spec.rb +58 -0
  648. data/spec/mongoid/criteria/inspectable_spec.rb +3 -0
  649. data/spec/mongoid/criteria/marshalable_spec.rb +3 -0
  650. data/spec/mongoid/criteria/modifiable_spec.rb +7 -3
  651. data/spec/mongoid/criteria/options_spec.rb +3 -0
  652. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -0
  653. data/spec/mongoid/criteria/queryable/expandable_spec.rb +135 -0
  654. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +3 -0
  655. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -0
  656. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +3 -0
  657. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -0
  658. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +3 -0
  659. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +36 -17
  660. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +3 -0
  661. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +3 -0
  662. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +3 -0
  663. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +3 -0
  664. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +3 -0
  665. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +3 -0
  666. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +3 -0
  667. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -0
  668. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +10 -7
  669. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +3 -0
  670. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -1
  671. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +3 -0
  672. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +24 -16
  673. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +3 -0
  674. data/spec/mongoid/criteria/queryable/key_spec.rb +3 -0
  675. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +48 -12
  676. data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -0
  677. data/spec/mongoid/criteria/queryable/options_spec.rb +3 -0
  678. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +3 -0
  679. data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -0
  680. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1348 -281
  681. data/spec/mongoid/criteria/queryable/selectable_spec.rb +996 -2159
  682. data/spec/mongoid/criteria/queryable/selector_spec.rb +3 -0
  683. data/spec/mongoid/criteria/queryable/smash_spec.rb +3 -0
  684. data/spec/mongoid/criteria/queryable/storable_spec.rb +190 -0
  685. data/spec/mongoid/criteria/scopable_spec.rb +3 -0
  686. data/spec/mongoid/criteria_spec.rb +73 -2
  687. data/spec/mongoid/document_persistence_context_spec.rb +33 -0
  688. data/spec/mongoid/document_query_spec.rb +39 -0
  689. data/spec/mongoid/document_spec.rb +3 -0
  690. data/spec/mongoid/equality_spec.rb +3 -0
  691. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +6 -3
  692. data/spec/mongoid/errors/callback_spec.rb +3 -0
  693. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -0
  694. data/spec/mongoid/errors/document_not_destroyed_spec.rb +3 -0
  695. data/spec/mongoid/errors/document_not_found_spec.rb +3 -0
  696. data/spec/mongoid/errors/eager_load_spec.rb +3 -0
  697. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -0
  698. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -0
  699. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -0
  700. data/spec/mongoid/errors/invalid_field_spec.rb +3 -0
  701. data/spec/mongoid/errors/invalid_find_spec.rb +3 -0
  702. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -0
  703. data/spec/mongoid/errors/invalid_index_spec.rb +3 -0
  704. data/spec/mongoid/errors/invalid_options_spec.rb +5 -2
  705. data/spec/mongoid/errors/invalid_path_spec.rb +3 -0
  706. data/spec/mongoid/errors/invalid_relation_spec.rb +5 -2
  707. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -0
  708. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -0
  709. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -0
  710. data/spec/mongoid/errors/invalid_time_spec.rb +3 -0
  711. data/spec/mongoid/errors/inverse_not_found_spec.rb +4 -1
  712. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +3 -0
  713. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -0
  714. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -0
  715. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -3
  716. data/spec/mongoid/errors/no_client_config_spec.rb +3 -0
  717. data/spec/mongoid/errors/no_client_database_spec.rb +3 -0
  718. data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -0
  719. data/spec/mongoid/errors/no_clients_config_spec.rb +3 -0
  720. data/spec/mongoid/errors/no_environment_spec.rb +3 -0
  721. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -0
  722. data/spec/mongoid/errors/no_metadata_spec.rb +5 -2
  723. data/spec/mongoid/errors/no_parent_spec.rb +4 -1
  724. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -0
  725. data/spec/mongoid/errors/readonly_document_spec.rb +3 -0
  726. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -0
  727. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -0
  728. data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -0
  729. data/spec/mongoid/errors/unsaved_document_spec.rb +4 -1
  730. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -0
  731. data/spec/mongoid/errors/validations_spec.rb +3 -0
  732. data/spec/mongoid/extensions/array_spec.rb +26 -43
  733. data/spec/mongoid/extensions/big_decimal_spec.rb +3 -0
  734. data/spec/mongoid/extensions/binary_spec.rb +3 -0
  735. data/spec/mongoid/extensions/boolean_spec.rb +3 -0
  736. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +336 -0
  737. data/spec/mongoid/extensions/date_spec.rb +9 -160
  738. data/spec/mongoid/extensions/date_time_spec.rb +18 -60
  739. data/spec/mongoid/extensions/decimal128_spec.rb +3 -0
  740. data/spec/mongoid/extensions/false_class_spec.rb +3 -0
  741. data/spec/mongoid/extensions/float_spec.rb +18 -3
  742. data/spec/mongoid/extensions/hash_spec.rb +106 -0
  743. data/spec/mongoid/extensions/integer_spec.rb +15 -2
  744. data/spec/mongoid/extensions/module_spec.rb +3 -0
  745. data/spec/mongoid/extensions/nil_class_spec.rb +3 -0
  746. data/spec/mongoid/extensions/object_id_spec.rb +3 -0
  747. data/spec/mongoid/extensions/object_spec.rb +14 -24
  748. data/spec/mongoid/extensions/range_spec.rb +3 -0
  749. data/spec/mongoid/extensions/regexp_spec.rb +3 -0
  750. data/spec/mongoid/extensions/set_spec.rb +3 -0
  751. data/spec/mongoid/extensions/string_spec.rb +60 -26
  752. data/spec/mongoid/extensions/symbol_spec.rb +3 -0
  753. data/spec/mongoid/extensions/time_spec.rb +30 -0
  754. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -0
  755. data/spec/mongoid/extensions/true_class_spec.rb +3 -0
  756. data/spec/mongoid/extensions_spec.rb +3 -0
  757. data/spec/mongoid/factory_spec.rb +27 -0
  758. data/spec/mongoid/fields/foreign_key_spec.rb +3 -0
  759. data/spec/mongoid/fields/localized_spec.rb +3 -0
  760. data/spec/mongoid/fields/standard_spec.rb +3 -0
  761. data/spec/mongoid/fields_spec.rb +18 -0
  762. data/spec/mongoid/findable_spec.rb +3 -0
  763. data/spec/mongoid/indexable/specification_spec.rb +3 -0
  764. data/spec/mongoid/indexable_spec.rb +9 -4
  765. data/spec/mongoid/inspectable_spec.rb +3 -0
  766. data/spec/mongoid/interceptable_spec.rb +65 -0
  767. data/spec/mongoid/interceptable_spec_models.rb +76 -0
  768. data/spec/mongoid/loggable_spec.rb +3 -0
  769. data/spec/mongoid/matchable/all_spec.rb +3 -0
  770. data/spec/mongoid/matchable/and_spec.rb +3 -0
  771. data/spec/mongoid/matchable/default_spec.rb +4 -1
  772. data/spec/mongoid/matchable/elem_match_spec.rb +3 -0
  773. data/spec/mongoid/matchable/eq_spec.rb +1 -0
  774. data/spec/mongoid/matchable/exists_spec.rb +3 -0
  775. data/spec/mongoid/matchable/gt_spec.rb +3 -0
  776. data/spec/mongoid/matchable/gte_spec.rb +3 -0
  777. data/spec/mongoid/matchable/in_spec.rb +3 -0
  778. data/spec/mongoid/matchable/lt_spec.rb +3 -0
  779. data/spec/mongoid/matchable/lte_spec.rb +3 -0
  780. data/spec/mongoid/matchable/ne_spec.rb +3 -0
  781. data/spec/mongoid/matchable/nin_spec.rb +3 -0
  782. data/spec/mongoid/matchable/nor_spec.rb +1 -0
  783. data/spec/mongoid/matchable/or_spec.rb +3 -0
  784. data/spec/mongoid/matchable/regexp_spec.rb +5 -2
  785. data/spec/mongoid/matchable/size_spec.rb +3 -0
  786. data/spec/mongoid/matchable_spec.rb +5 -2
  787. data/spec/mongoid/persistable/creatable_spec.rb +3 -0
  788. data/spec/mongoid/persistable/deletable_spec.rb +3 -0
  789. data/spec/mongoid/persistable/destroyable_spec.rb +3 -0
  790. data/spec/mongoid/persistable/incrementable_spec.rb +17 -0
  791. data/spec/mongoid/persistable/logical_spec.rb +17 -0
  792. data/spec/mongoid/persistable/poppable_spec.rb +17 -0
  793. data/spec/mongoid/persistable/pullable_spec.rb +31 -0
  794. data/spec/mongoid/persistable/pushable_spec.rb +86 -1
  795. data/spec/mongoid/persistable/renamable_spec.rb +17 -0
  796. data/spec/mongoid/persistable/savable_spec.rb +3 -0
  797. data/spec/mongoid/persistable/settable_spec.rb +17 -0
  798. data/spec/mongoid/persistable/unsettable_spec.rb +17 -0
  799. data/spec/mongoid/persistable/updatable_spec.rb +3 -0
  800. data/spec/mongoid/persistable/upsertable_spec.rb +3 -0
  801. data/spec/mongoid/persistable_spec.rb +85 -8
  802. data/spec/mongoid/persistence_context_spec.rb +3 -0
  803. data/spec/mongoid/positional_spec.rb +3 -0
  804. data/spec/mongoid/query_cache_middleware_spec.rb +48 -0
  805. data/spec/mongoid/query_cache_spec.rb +5 -45
  806. data/spec/mongoid/relations/proxy_spec.rb +4 -1
  807. data/spec/mongoid/reloadable_spec.rb +3 -0
  808. data/spec/mongoid/scopable_spec.rb +5 -1
  809. data/spec/mongoid/selectable_spec.rb +3 -0
  810. data/spec/mongoid/serializable_spec.rb +132 -18
  811. data/spec/mongoid/shardable_models.rb +61 -0
  812. data/spec/mongoid/shardable_spec.rb +72 -16
  813. data/spec/mongoid/stateful_spec.rb +3 -0
  814. data/spec/mongoid/tasks/database_rake_spec.rb +16 -13
  815. data/spec/mongoid/tasks/database_spec.rb +4 -1
  816. data/spec/mongoid/threaded_spec.rb +3 -0
  817. data/spec/mongoid/timestamps/created/short_spec.rb +3 -0
  818. data/spec/mongoid/timestamps/created_spec.rb +3 -0
  819. data/spec/mongoid/timestamps/timeless_spec.rb +3 -0
  820. data/spec/mongoid/timestamps/updated/short_spec.rb +3 -0
  821. data/spec/mongoid/timestamps/updated_spec.rb +3 -0
  822. data/spec/mongoid/timestamps_spec.rb +3 -0
  823. data/spec/mongoid/touchable_spec.rb +49 -3
  824. data/spec/mongoid/traversable_spec.rb +3 -0
  825. data/spec/mongoid/validatable/associated_spec.rb +3 -0
  826. data/spec/mongoid/validatable/format_spec.rb +3 -0
  827. data/spec/mongoid/validatable/length_spec.rb +3 -0
  828. data/spec/mongoid/validatable/numericality_spec.rb +3 -0
  829. data/spec/mongoid/validatable/presence_spec.rb +3 -0
  830. data/spec/mongoid/validatable/uniqueness_spec.rb +3 -0
  831. data/spec/mongoid/validatable_spec.rb +3 -0
  832. data/spec/mongoid_spec.rb +3 -0
  833. data/spec/rails/controller_extension/controller_runtime_spec.rb +4 -1
  834. data/spec/rails/mongoid_spec.rb +5 -2
  835. data/spec/spec_helper.rb +21 -44
  836. data/spec/support/authorization.rb +3 -0
  837. data/spec/support/child_process_helper.rb +76 -0
  838. data/spec/support/cluster_config.rb +3 -3
  839. data/spec/support/constraints.rb +185 -30
  840. data/spec/support/expectations.rb +6 -1
  841. data/spec/support/helpers.rb +11 -0
  842. data/spec/support/lite_constraints.rb +22 -0
  843. data/spec/support/macros.rb +1 -0
  844. data/spec/support/shared/time.rb +54 -0
  845. data/spec/support/spec_config.rb +15 -4
  846. metadata +544 -472
  847. metadata.gz.sig +0 -0
  848. data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
  849. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
  module Persistable
4
6
 
5
- # Defines behaviour for persistence operations that upsert documents.
7
+ # Defines behavior for persistence operations that upsert documents.
6
8
  #
7
9
  # @since 4.0.0
8
10
  module Upsertable
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  module Mongoid
2
5
 
3
6
  # Object encapsulating logic for setting/getting a collection and database name
@@ -107,13 +110,22 @@ module Mongoid
107
110
  #
108
111
  # @since 6.0.0
109
112
  def client
110
- client_options = send(:client_options)
111
- if client_options[:read].is_a?(Symbol)
112
- client_options = client_options.merge(read: {mode: client_options[:read]})
113
+ @client ||= begin
114
+ client = Clients.with_name(client_name)
115
+ if database_name_option
116
+ client = client.use(database_name)
117
+ end
118
+ unless client_options.empty?
119
+ client = client.with(client_options)
120
+ end
121
+ client
113
122
  end
114
- @client ||= (client = Clients.with_name(client_name)
115
- client = client.use(database_name) if database_name_option
116
- client.with(client_options))
123
+ end
124
+
125
+ def client_name
126
+ @client_name ||= options[:client] ||
127
+ Threaded.client_override ||
128
+ storage_options && __evaluate__(storage_options[:client])
117
129
  end
118
130
 
119
131
  # Determine if this persistence context is equal to another.
@@ -133,12 +145,6 @@ module Mongoid
133
145
 
134
146
  private
135
147
 
136
- def client_name
137
- @client_name ||= options[:client] ||
138
- Threaded.client_override ||
139
- storage_options && __evaluate__(storage_options[:client])
140
- end
141
-
142
148
  def set_options!(opts)
143
149
  @options ||= opts.each.reduce({}) do |_options, (key, value)|
144
150
  unless VALID_OPTIONS.include?(key.to_sym)
@@ -154,9 +160,15 @@ module Mongoid
154
160
  end
155
161
 
156
162
  def client_options
157
- @client_options ||= options.select do |k, v|
158
- Mongo::Client::VALID_OPTIONS.include?(k.to_sym)
159
- end
163
+ @client_options ||= begin
164
+ opts = options.select do |k, v|
165
+ Mongo::Client::VALID_OPTIONS.include?(k.to_sym)
166
+ end
167
+ if opts[:read].is_a?(Symbol)
168
+ opts[:read] = {mode: opts[:read]}
169
+ end
170
+ opts
171
+ end
160
172
  end
161
173
 
162
174
  def database_name_option
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
 
4
6
  # This module is responsible for taking update selectors and switching out
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
 
4
6
  # A cache of database queries on a per-request basis.
@@ -166,14 +168,15 @@ module Mongoid
166
168
  @coll_name ||= result.namespace.sub("#{database.name}.", '') if result.namespace
167
169
  documents = result.documents
168
170
  if @cursor_id.zero? && !@after_first_batch
169
- (@cached_documents ||= []).concat(documents)
171
+ @cached_documents ||= []
172
+ @cached_documents.concat(documents)
170
173
  end
171
174
  @after_first_batch = true
172
175
  documents
173
176
  end
174
177
  end
175
178
 
176
- # Included to add behaviour for clearing out the query cache on certain
179
+ # Included to add behavior for clearing out the query cache on certain
177
180
  # operations.
178
181
  #
179
182
  # @since 4.0.0
@@ -181,12 +184,10 @@ module Mongoid
181
184
 
182
185
  def alias_query_cache_clear(*method_names)
183
186
  method_names.each do |method_name|
184
- class_eval <<-CODE, __FILE__, __LINE__ + 1
185
- def #{method_name}_with_clear_cache(*args)
186
- QueryCache.clear_cache
187
- #{method_name}_without_clear_cache(*args)
188
- end
189
- CODE
187
+ define_method("#{method_name}_with_clear_cache") do |*args|
188
+ QueryCache.clear_cache
189
+ send("#{method_name}_without_clear_cache", *args)
190
+ end
190
191
 
191
192
  alias_method "#{method_name}_without_clear_cache", method_name
192
193
  alias_method method_name, "#{method_name}_with_clear_cache"
@@ -262,7 +263,7 @@ module Mongoid
262
263
  end
263
264
  end
264
265
 
265
- # Adds behaviour to the query cache for collections.
266
+ # Adds behavior to the query cache for collections.
266
267
  #
267
268
  # @since 5.0.0
268
269
  module Collection
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  require "rails"
3
5
  require "rails/mongoid"
4
6
 
@@ -40,7 +42,7 @@ module Rails
40
42
  # @example Set up configuration in the Rails app.
41
43
  # module MyApplication
42
44
  # class Application < Rails::Application
43
- # config.mongoid.logger = Logger.new($stdout, :warn)
45
+ # config.mongoid.logger = Logger.new(STDERR, :warn)
44
46
  # end
45
47
  # end
46
48
  #
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  module Mongoid
2
5
  module Railties
3
6
  module ControllerRuntime
@@ -83,4 +86,4 @@ module Mongoid
83
86
 
84
87
  end
85
88
  end
86
- end
89
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  load 'mongoid/tasks/database.rake'
2
4
 
3
5
  namespace :db do
@@ -58,13 +60,20 @@ namespace :db do
58
60
  end
59
61
 
60
62
  unless Rake::Task.task_defined?("db:create_indexes")
63
+ desc "Create indexes specified in Mongoid models"
61
64
  task :create_indexes => "mongoid:create_indexes"
62
65
  end
63
66
 
64
67
  unless Rake::Task.task_defined?("db:remove_indexes")
68
+ desc "Remove indexes specified in Mongoid models"
65
69
  task :remove_indexes => "mongoid:remove_indexes"
66
70
  end
67
71
 
72
+ unless Rake::Task.task_defined?("db:shard_collections")
73
+ desc "Shard collections with shard keys specified in Mongoid models"
74
+ task :shard_collections => "mongoid:shard_collections"
75
+ end
76
+
68
77
  namespace :mongoid do
69
78
  task :load_models do
70
79
  ::Rails.application.eager_load! if defined?(::Rails)
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
 
4
- # This module handles reloading behaviour of documents.
6
+ # This module handles reloading behavior of documents.
5
7
  #
6
8
  # @since 4.0.0
7
9
  module Reloadable
@@ -37,7 +39,7 @@ module Mongoid
37
39
  private
38
40
 
39
41
  # Reload the document, determining if it's embedded or not and what
40
- # behaviour to use.
42
+ # behavior to use.
41
43
  #
42
44
  # @example Reload the document.
43
45
  # document._reload
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
2
3
 
3
4
  module Mongoid
4
5
 
5
- # This module contains behaviour for all Mongoid scoping - named scopes,
6
+ # This module contains behavior for all Mongoid scoping - named scopes,
6
7
  # default scopes, and criteria accessors via scoped and unscoped.
7
8
  #
8
9
  # @since 4.0.0
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
 
4
- # Provides behaviour for generating the selector for a specific document.
6
+ # Provides behavior for generating the selector for a specific document.
5
7
  #
6
8
  # @since 4.0.0
7
9
  module Selectable
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
 
4
- # This module provides the extra behaviour for including relations in JSON
6
+ # This module provides the extra behavior for including associations in JSON
5
7
  # and XML serialization.
6
8
  #
7
9
  # @since 4.0.0
@@ -11,8 +13,16 @@ module Mongoid
11
13
  # We need to redefine where the JSON configuration is getting defined,
12
14
  # similar to +ActiveRecord+.
13
15
  included do
14
- undef_method :include_root_in_json
15
- delegate :include_root_in_json, to: ::Mongoid
16
+
17
+ class << self
18
+ # Note that this intentionally only delegates :include_root_in_json
19
+ # and not :include_root_in_json? - delegating the latter produces
20
+ # wrong behavior.
21
+ # Also note that this intentionally uses the ActiveSupport delegation
22
+ # functionality and not the Ruby standard library one.
23
+ # See https://jira.mongodb.org/browse/MONGOID-4849.
24
+ delegate :include_root_in_json, to: ::Mongoid
25
+ end
16
26
  end
17
27
 
18
28
  # Gets the document as a serializable hash, used by ActiveModel's JSON
@@ -26,7 +36,7 @@ module Mongoid
26
36
  #
27
37
  # @param [ Hash ] options The options to pass.
28
38
  #
29
- # @option options [ Symbol ] :include What relations to include.
39
+ # @option options [ Symbol ] :include What associations to include.
30
40
  # @option options [ Symbol ] :only Limit the fields to only these.
31
41
  # @option options [ Symbol ] :except Dont include these fields.
32
42
  # @option options [ Symbol ] :methods What methods to include.
@@ -80,7 +90,7 @@ module Mongoid
80
90
  names
81
91
  end
82
92
 
83
- # Serialize a single attribute. Handles relations, fields, and dynamic
93
+ # Serialize a single attribute. Handles associations, fields, and dynamic
84
94
  # attributes.
85
95
  #
86
96
  # @api private
@@ -107,16 +117,16 @@ module Mongoid
107
117
  end
108
118
  end
109
119
 
110
- # For each of the provided include options, get the relation needed and
120
+ # For each of the provided include options, get the association needed and
111
121
  # provide it in the hash.
112
122
  #
113
- # @example Serialize the included relations.
123
+ # @example Serialize the included associations.
114
124
  # document.serialize_relations({}, :include => :addresses)
115
125
  #
116
126
  # @param [ Hash ] attributes The attributes to serialize.
117
127
  # @param [ Hash ] options The serialization options.
118
128
  #
119
- # @option options [ Symbol ] :include What relations to include
129
+ # @option options [ Symbol ] :include What associations to include
120
130
  # @option options [ Symbol ] :only Limit the fields to only these.
121
131
  # @option options [ Symbol ] :except Dont include these fields.
122
132
  #
@@ -135,12 +145,12 @@ module Mongoid
135
145
  # Since the inclusions can be a hash, symbol, or array of symbols, this is
136
146
  # provided as a convenience to parse out the names.
137
147
  #
138
- # @example Get the relation names.
148
+ # @example Get the association names.
139
149
  # document.relation_names(:include => [ :addresses ])
140
150
  #
141
151
  # @param [ Hash, Symbol, Array<Symbol> ] inclusions The inclusions.
142
152
  #
143
- # @return [ Array<Symbol> ] The names of the included relations.
153
+ # @return [ Array<Symbol> ] The names of the included associations.
144
154
  #
145
155
  # @since 2.0.0.rc.6
146
156
  def relation_names(inclusions)
@@ -150,14 +160,14 @@ module Mongoid
150
160
  # Since the inclusions can be a hash, symbol, or array of symbols, this is
151
161
  # provided as a convenience to parse out the options.
152
162
  #
153
- # @example Get the relation options.
163
+ # @example Get the association options.
154
164
  # document.relation_names(:include => [ :addresses ])
155
165
  #
156
166
  # @param [ Hash, Symbol, Array<Symbol> ] inclusions The inclusions.
157
167
  # @param [ Hash ] options The options.
158
- # @param [ Symbol ] name The name of the relation.
168
+ # @param [ Symbol ] name The name of the association.
159
169
  #
160
- # @return [ Hash ] The options for the relation.
170
+ # @return [ Hash ] The options for the association.
161
171
  #
162
172
  # @since 2.0.0.rc.6
163
173
  def relation_options(inclusions, options, name)
@@ -1,15 +1,41 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
 
4
- # This module contains behaviour for adding shard key fields to updates.
6
+ # This module contains behavior for adding shard key fields to updates.
5
7
  #
6
8
  # @since 4.0.0
7
9
  module Shardable
8
10
  extend ActiveSupport::Concern
9
11
 
10
12
  included do
13
+ # Returns the list of shard key fields, if shard key was declared on
14
+ # this model. If no shard key was declared, returns an empty array.
15
+ #
16
+ # @return [ Array<Symbol> ] List of shard key fields.
17
+ # @api public
11
18
  cattr_accessor :shard_key_fields
12
19
  self.shard_key_fields = []
20
+
21
+ # Returns the shard configuration, which is a hash with the following
22
+ # (symbol) keys:
23
+ #
24
+ # - keys: A hash mapping (symbol) field names to values, defining the
25
+ # shard key. Values can be either the integer 1 for ranged sharding
26
+ # or the string "hashed" for hashed sharding.
27
+ # - options: A hash containing options for shardCollections command.
28
+ #
29
+ # If shard key was not declared via the +shard_key+ macro, +shard_config+
30
+ # attribute is nil.
31
+ #
32
+ # @example Get the shard configuration.
33
+ # Model.shard_config
34
+ # # => {key: {foo: 1, bar: 1}, options: {unique: true}}
35
+ #
36
+ # @return [ Hash | nil ] Shard configuration.
37
+ # @api public
38
+ cattr_accessor :shard_config
13
39
  end
14
40
 
15
41
  # Get the shard key fields.
@@ -53,14 +79,42 @@ module Mongoid
53
79
  # field :first_name, :type => String
54
80
  # field :last_name, :type => String
55
81
  #
56
- # shard_key :first_name, :last_name
82
+ # shard_key first_name: 1, last_name: 1
57
83
  # end
58
84
  #
59
85
  # @since 2.0.0
60
- def shard_key(*names)
61
- names.each do |name|
62
- self.shard_key_fields << self.database_field_name(name).to_sym
86
+ def shard_key(*args)
87
+ unless args.first.is_a?(Hash)
88
+ # Shorthand syntax
89
+ if args.last.is_a?(Hash)
90
+ raise ArgumentError, 'Shorthand shard_key syntax does not permit options'
91
+ end
92
+
93
+ spec = Hash[args.map do |name|
94
+ [name, 1]
95
+ end]
96
+
97
+ return shard_key(spec)
98
+ end
99
+
100
+ if args.length > 2
101
+ raise ArgumentError, 'Full shard_key syntax requires 1 or 2 arguments'
63
102
  end
103
+
104
+ spec, options = args
105
+
106
+ spec = Hash[spec.map do |name, value|
107
+ if value.is_a?(Symbol)
108
+ value = value.to_s
109
+ end
110
+ [database_field_name(name).to_sym, value]
111
+ end]
112
+
113
+ self.shard_key_fields = spec.keys
114
+ self.shard_config = {
115
+ key: spec.freeze,
116
+ options: (options || {}).dup.freeze,
117
+ }.freeze
64
118
  end
65
119
  end
66
120
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
 
4
- # This module contains the behaviour for getting the various states a
6
+ # This module contains the behavior for getting the various states a
5
7
  # document can transition through.
6
8
  module Stateful
7
9
 
@@ -1,29 +1,36 @@
1
+ # frozen_string_literal: true
2
+
1
3
  namespace :db do
2
4
  namespace :mongoid do
3
5
  task :load_models do
4
6
  end
5
7
 
6
- desc "Create the indexes defined on your mongoid models"
8
+ desc "Create indexes specified in Mongoid models"
7
9
  task :create_indexes => [:environment, :load_models] do
8
10
  ::Mongoid::Tasks::Database.create_indexes
9
11
  end
10
12
 
11
- desc "Remove indexes that exist in the database but aren't specified on the models"
13
+ desc "Remove indexes that exist in the database but are not specified in Mongoid models"
12
14
  task :remove_undefined_indexes => [:environment, :load_models] do
13
15
  ::Mongoid::Tasks::Database.remove_undefined_indexes
14
16
  end
15
17
 
16
- desc "Remove the indexes defined on your mongoid models without questions!"
18
+ desc "Remove indexes specified in Mongoid models"
17
19
  task :remove_indexes => [:environment, :load_models] do
18
20
  ::Mongoid::Tasks::Database.remove_indexes
19
21
  end
20
22
 
21
- desc "Drops the default client database"
23
+ desc "Shard collections with shard keys specified in Mongoid models"
24
+ task :shard_collections => [:environment, :load_models] do
25
+ ::Mongoid::Tasks::Database.shard_collections
26
+ end
27
+
28
+ desc "Drop the database of the default Mongoid client"
22
29
  task :drop => :environment do
23
30
  ::Mongoid::Clients.default.database.drop
24
31
  end
25
32
 
26
- desc "Drop all collections except the system collections"
33
+ desc "Drop all non-system collections"
27
34
  task :purge => :environment do
28
35
  ::Mongoid.purge!
29
36
  end