mongoid 7.0.13 → 7.1.0.rc0

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 (860) 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 +7 -7
  5. data/LICENSE +1 -1
  6. data/README.md +24 -18
  7. data/Rakefile +7 -45
  8. data/lib/config/locales/en.yml +56 -47
  9. data/lib/mongoid.rb +8 -1
  10. data/lib/mongoid/association.rb +9 -6
  11. data/lib/mongoid/association/accessors.rb +95 -52
  12. data/lib/mongoid/association/bindable.rb +7 -5
  13. data/lib/mongoid/association/builders.rb +4 -3
  14. data/lib/mongoid/association/constrainable.rb +4 -2
  15. data/lib/mongoid/association/depending.rb +5 -2
  16. data/lib/mongoid/association/eager_loadable.rb +2 -0
  17. data/lib/mongoid/association/embedded.rb +3 -0
  18. data/lib/mongoid/association/embedded/batchable.rb +4 -2
  19. data/lib/mongoid/association/embedded/cyclic.rb +8 -6
  20. data/lib/mongoid/association/embedded/embedded_in.rb +6 -3
  21. data/lib/mongoid/association/embedded/embedded_in/binding.rb +4 -1
  22. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +8 -2
  23. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +15 -12
  24. data/lib/mongoid/association/embedded/embeds_many.rb +8 -6
  25. data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -2
  26. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +9 -3
  27. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +41 -38
  28. data/lib/mongoid/association/embedded/embeds_one.rb +8 -6
  29. data/lib/mongoid/association/embedded/embeds_one/binding.rb +5 -2
  30. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +10 -4
  31. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +17 -14
  32. data/lib/mongoid/association/macros.rb +38 -36
  33. data/lib/mongoid/association/many.rb +11 -9
  34. data/lib/mongoid/association/marshalable.rb +3 -1
  35. data/lib/mongoid/association/nested.rb +4 -1
  36. data/lib/mongoid/association/nested/many.rb +17 -15
  37. data/lib/mongoid/association/nested/nested_buildable.rb +6 -3
  38. data/lib/mongoid/association/nested/one.rb +11 -9
  39. data/lib/mongoid/association/one.rb +3 -1
  40. data/lib/mongoid/association/options.rb +9 -6
  41. data/lib/mongoid/association/proxy.rb +12 -10
  42. data/lib/mongoid/association/referenced.rb +3 -0
  43. data/lib/mongoid/association/referenced/auto_save.rb +4 -1
  44. data/lib/mongoid/association/referenced/belongs_to.rb +6 -3
  45. data/lib/mongoid/association/referenced/belongs_to/binding.rb +3 -1
  46. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +6 -3
  47. data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -0
  48. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -14
  49. data/lib/mongoid/association/referenced/counter_cache.rb +2 -0
  50. data/lib/mongoid/association/referenced/eager.rb +9 -7
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +13 -6
  52. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -6
  53. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -2
  54. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -0
  55. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +25 -18
  56. data/lib/mongoid/association/referenced/has_many.rb +7 -4
  57. data/lib/mongoid/association/referenced/has_many/binding.rb +3 -1
  58. data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -2
  59. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -0
  60. data/lib/mongoid/association/referenced/has_many/enumerable.rb +30 -3
  61. data/lib/mongoid/association/referenced/has_many/proxy.rb +43 -41
  62. data/lib/mongoid/association/referenced/has_one.rb +5 -2
  63. data/lib/mongoid/association/referenced/has_one/binding.rb +4 -2
  64. data/lib/mongoid/association/referenced/has_one/buildable.rb +8 -1
  65. data/lib/mongoid/association/referenced/has_one/eager.rb +2 -0
  66. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +11 -9
  67. data/lib/mongoid/association/referenced/has_one/proxy.rb +17 -15
  68. data/lib/mongoid/association/referenced/syncable.rb +7 -5
  69. data/lib/mongoid/association/reflections.rb +7 -5
  70. data/lib/mongoid/association/relatable.rb +17 -14
  71. data/lib/mongoid/atomic.rb +5 -13
  72. data/lib/mongoid/atomic/modifiers.rb +24 -1
  73. data/lib/mongoid/atomic/paths.rb +2 -0
  74. data/lib/mongoid/atomic/paths/embedded.rb +2 -0
  75. data/lib/mongoid/atomic/paths/embedded/many.rb +4 -2
  76. data/lib/mongoid/atomic/paths/embedded/one.rb +4 -2
  77. data/lib/mongoid/atomic/paths/root.rb +4 -2
  78. data/lib/mongoid/attributes.rb +35 -49
  79. data/lib/mongoid/attributes/dynamic.rb +2 -0
  80. data/lib/mongoid/attributes/nested.rb +7 -5
  81. data/lib/mongoid/attributes/processing.rb +8 -6
  82. data/lib/mongoid/attributes/readonly.rb +3 -1
  83. data/lib/mongoid/cacheable.rb +3 -1
  84. data/lib/mongoid/changeable.rb +3 -1
  85. data/lib/mongoid/clients.rb +2 -0
  86. data/lib/mongoid/clients/factory.rb +1 -0
  87. data/lib/mongoid/clients/options.rb +2 -0
  88. data/lib/mongoid/clients/sessions.rb +7 -20
  89. data/lib/mongoid/clients/storage_options.rb +2 -0
  90. data/lib/mongoid/clients/validators.rb +2 -0
  91. data/lib/mongoid/clients/validators/storage.rb +2 -0
  92. data/lib/mongoid/composable.rb +4 -2
  93. data/lib/mongoid/config.rb +15 -2
  94. data/lib/mongoid/config/environment.rb +2 -0
  95. data/lib/mongoid/config/options.rb +17 -12
  96. data/lib/mongoid/config/validators.rb +2 -0
  97. data/lib/mongoid/config/validators/client.rb +2 -0
  98. data/lib/mongoid/config/validators/option.rb +2 -0
  99. data/lib/mongoid/contextual.rb +2 -0
  100. data/lib/mongoid/contextual/aggregable/memory.rb +3 -1
  101. data/lib/mongoid/contextual/aggregable/mongo.rb +3 -1
  102. data/lib/mongoid/contextual/atomic.rb +24 -6
  103. data/lib/mongoid/contextual/command.rb +2 -0
  104. data/lib/mongoid/contextual/geo_near.rb +2 -1
  105. data/lib/mongoid/contextual/map_reduce.rb +2 -0
  106. data/lib/mongoid/contextual/memory.rb +4 -2
  107. data/lib/mongoid/contextual/mongo.rb +4 -0
  108. data/lib/mongoid/contextual/none.rb +2 -0
  109. data/lib/mongoid/contextual/queryable.rb +2 -0
  110. data/lib/mongoid/copyable.rb +3 -1
  111. data/lib/mongoid/criteria.rb +3 -7
  112. data/lib/mongoid/criteria/findable.rb +11 -1
  113. data/lib/mongoid/criteria/includable.rb +8 -6
  114. data/lib/mongoid/criteria/inspectable.rb +2 -0
  115. data/lib/mongoid/criteria/marshalable.rb +2 -0
  116. data/lib/mongoid/criteria/modifiable.rb +3 -2
  117. data/lib/mongoid/criteria/options.rb +2 -0
  118. data/lib/mongoid/criteria/permission.rb +2 -0
  119. data/lib/mongoid/criteria/queryable.rb +7 -2
  120. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -0
  121. data/lib/mongoid/criteria/queryable/expandable.rb +93 -0
  122. data/lib/mongoid/criteria/queryable/extensions.rb +2 -0
  123. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -1
  124. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -1
  125. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -0
  126. data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -1
  127. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -6
  128. data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -1
  129. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -1
  130. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -2
  131. data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -1
  132. data/lib/mongoid/criteria/queryable/extensions/range.rb +3 -1
  133. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +7 -5
  134. data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -1
  135. data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -1
  136. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
  137. data/lib/mongoid/criteria/queryable/extensions/time.rb +3 -1
  138. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -13
  139. data/lib/mongoid/criteria/queryable/key.rb +34 -6
  140. data/lib/mongoid/criteria/queryable/macroable.rb +3 -1
  141. data/lib/mongoid/criteria/queryable/mergeable.rb +86 -11
  142. data/lib/mongoid/criteria/queryable/optional.rb +5 -3
  143. data/lib/mongoid/criteria/queryable/options.rb +2 -0
  144. data/lib/mongoid/criteria/queryable/pipeline.rb +2 -0
  145. data/lib/mongoid/criteria/queryable/selectable.rb +264 -87
  146. data/lib/mongoid/criteria/queryable/selector.rb +38 -5
  147. data/lib/mongoid/criteria/queryable/smash.rb +2 -0
  148. data/lib/mongoid/criteria/queryable/storable.rb +228 -0
  149. data/lib/mongoid/criteria/scopable.rb +2 -0
  150. data/lib/mongoid/document.rb +4 -3
  151. data/lib/mongoid/equality.rb +3 -2
  152. data/lib/mongoid/errors.rb +3 -0
  153. data/lib/mongoid/errors/ambiguous_relationship.rb +4 -2
  154. data/lib/mongoid/errors/callback.rb +2 -0
  155. data/lib/mongoid/errors/criteria_argument_required.rb +19 -0
  156. data/lib/mongoid/errors/delete_restriction.rb +3 -2
  157. data/lib/mongoid/errors/document_not_destroyed.rb +2 -0
  158. data/lib/mongoid/errors/document_not_found.rb +2 -0
  159. data/lib/mongoid/errors/eager_load.rb +4 -2
  160. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -0
  161. data/lib/mongoid/errors/invalid_collection.rb +2 -0
  162. data/lib/mongoid/errors/invalid_config_option.rb +2 -0
  163. data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -0
  164. data/lib/mongoid/errors/invalid_field.rb +2 -0
  165. data/lib/mongoid/errors/invalid_field_option.rb +2 -0
  166. data/lib/mongoid/errors/invalid_find.rb +2 -0
  167. data/lib/mongoid/errors/invalid_includes.rb +2 -0
  168. data/lib/mongoid/errors/invalid_index.rb +2 -0
  169. data/lib/mongoid/errors/invalid_options.rb +4 -2
  170. data/lib/mongoid/errors/invalid_path.rb +2 -0
  171. data/lib/mongoid/errors/invalid_persistence_option.rb +2 -0
  172. data/lib/mongoid/errors/invalid_relation.rb +4 -2
  173. data/lib/mongoid/errors/invalid_relation_option.rb +4 -2
  174. data/lib/mongoid/errors/invalid_scope.rb +2 -0
  175. data/lib/mongoid/errors/invalid_session_use.rb +2 -0
  176. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -4
  177. data/lib/mongoid/errors/invalid_storage_options.rb +2 -0
  178. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  179. data/lib/mongoid/errors/invalid_time.rb +2 -0
  180. data/lib/mongoid/errors/invalid_value.rb +2 -0
  181. data/lib/mongoid/errors/inverse_not_found.rb +3 -1
  182. data/lib/mongoid/errors/mixed_client_configuration.rb +2 -0
  183. data/lib/mongoid/errors/mixed_relations.rb +2 -0
  184. data/lib/mongoid/errors/mongoid_error.rb +2 -0
  185. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -1
  186. data/lib/mongoid/errors/no_client_config.rb +2 -0
  187. data/lib/mongoid/errors/no_client_database.rb +2 -0
  188. data/lib/mongoid/errors/no_client_hosts.rb +2 -0
  189. data/lib/mongoid/errors/no_clients_config.rb +2 -0
  190. data/lib/mongoid/errors/no_default_client.rb +2 -0
  191. data/lib/mongoid/errors/no_environment.rb +2 -0
  192. data/lib/mongoid/errors/no_map_reduce_output.rb +2 -0
  193. data/lib/mongoid/errors/no_metadata.rb +2 -0
  194. data/lib/mongoid/errors/no_parent.rb +2 -0
  195. data/lib/mongoid/errors/readonly_attribute.rb +2 -0
  196. data/lib/mongoid/errors/readonly_document.rb +2 -0
  197. data/lib/mongoid/errors/scope_overwrite.rb +2 -0
  198. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -0
  199. data/lib/mongoid/errors/unknown_attribute.rb +2 -0
  200. data/lib/mongoid/errors/unknown_model.rb +2 -0
  201. data/lib/mongoid/errors/unsaved_document.rb +2 -0
  202. data/lib/mongoid/errors/unsupported_javascript.rb +2 -0
  203. data/lib/mongoid/errors/validations.rb +2 -0
  204. data/lib/mongoid/evolvable.rb +3 -1
  205. data/lib/mongoid/extensions.rb +2 -0
  206. data/lib/mongoid/extensions/array.rb +23 -6
  207. data/lib/mongoid/extensions/big_decimal.rb +2 -0
  208. data/lib/mongoid/extensions/boolean.rb +2 -0
  209. data/lib/mongoid/extensions/date.rb +13 -3
  210. data/lib/mongoid/extensions/date_time.rb +4 -3
  211. data/lib/mongoid/extensions/decimal128.rb +2 -0
  212. data/lib/mongoid/extensions/false_class.rb +2 -0
  213. data/lib/mongoid/extensions/float.rb +5 -3
  214. data/lib/mongoid/extensions/hash.rb +49 -11
  215. data/lib/mongoid/extensions/integer.rb +5 -3
  216. data/lib/mongoid/extensions/module.rb +2 -0
  217. data/lib/mongoid/extensions/nil_class.rb +2 -0
  218. data/lib/mongoid/extensions/object.rb +16 -4
  219. data/lib/mongoid/extensions/object_id.rb +2 -0
  220. data/lib/mongoid/extensions/range.rb +2 -0
  221. data/lib/mongoid/extensions/regexp.rb +3 -1
  222. data/lib/mongoid/extensions/set.rb +2 -0
  223. data/lib/mongoid/extensions/string.rb +18 -9
  224. data/lib/mongoid/extensions/symbol.rb +2 -0
  225. data/lib/mongoid/extensions/time.rb +14 -0
  226. data/lib/mongoid/extensions/time_with_zone.rb +14 -0
  227. data/lib/mongoid/extensions/true_class.rb +2 -0
  228. data/lib/mongoid/factory.rb +28 -5
  229. data/lib/mongoid/fields.rb +4 -3
  230. data/lib/mongoid/fields/foreign_key.rb +3 -1
  231. data/lib/mongoid/fields/localized.rb +2 -0
  232. data/lib/mongoid/fields/standard.rb +4 -2
  233. data/lib/mongoid/fields/validators.rb +2 -0
  234. data/lib/mongoid/fields/validators/macro.rb +13 -2
  235. data/lib/mongoid/findable.rb +6 -2
  236. data/lib/mongoid/indexable.rb +3 -1
  237. data/lib/mongoid/indexable/specification.rb +3 -1
  238. data/lib/mongoid/indexable/validators/options.rb +2 -0
  239. data/lib/mongoid/inspectable.rb +3 -1
  240. data/lib/mongoid/interceptable.rb +5 -5
  241. data/lib/mongoid/loggable.rb +13 -7
  242. data/lib/mongoid/matchable.rb +2 -0
  243. data/lib/mongoid/matchable/all.rb +2 -0
  244. data/lib/mongoid/matchable/and.rb +2 -0
  245. data/lib/mongoid/matchable/default.rb +2 -0
  246. data/lib/mongoid/matchable/elem_match.rb +2 -0
  247. data/lib/mongoid/matchable/eq.rb +1 -0
  248. data/lib/mongoid/matchable/exists.rb +2 -0
  249. data/lib/mongoid/matchable/gt.rb +2 -0
  250. data/lib/mongoid/matchable/gte.rb +2 -0
  251. data/lib/mongoid/matchable/in.rb +2 -0
  252. data/lib/mongoid/matchable/lt.rb +2 -0
  253. data/lib/mongoid/matchable/lte.rb +2 -0
  254. data/lib/mongoid/matchable/ne.rb +2 -0
  255. data/lib/mongoid/matchable/nin.rb +2 -0
  256. data/lib/mongoid/matchable/nor.rb +2 -1
  257. data/lib/mongoid/matchable/or.rb +2 -0
  258. data/lib/mongoid/matchable/regexp.rb +5 -2
  259. data/lib/mongoid/matchable/size.rb +2 -0
  260. data/lib/mongoid/persistable.rb +133 -15
  261. data/lib/mongoid/persistable/creatable.rb +3 -1
  262. data/lib/mongoid/persistable/deletable.rb +3 -1
  263. data/lib/mongoid/persistable/destroyable.rb +3 -1
  264. data/lib/mongoid/persistable/incrementable.rb +6 -2
  265. data/lib/mongoid/persistable/logical.rb +4 -1
  266. data/lib/mongoid/persistable/poppable.rb +3 -1
  267. data/lib/mongoid/persistable/pullable.rb +3 -1
  268. data/lib/mongoid/persistable/pushable.rb +5 -12
  269. data/lib/mongoid/persistable/renamable.rb +10 -3
  270. data/lib/mongoid/persistable/savable.rb +3 -1
  271. data/lib/mongoid/persistable/settable.rb +3 -1
  272. data/lib/mongoid/persistable/unsettable.rb +8 -3
  273. data/lib/mongoid/persistable/updatable.rb +3 -1
  274. data/lib/mongoid/persistable/upsertable.rb +3 -1
  275. data/lib/mongoid/persistence_context.rb +27 -15
  276. data/lib/mongoid/positional.rb +2 -0
  277. data/lib/mongoid/query_cache.rb +26 -69
  278. data/lib/mongoid/railtie.rb +3 -1
  279. data/lib/mongoid/railties/controller_runtime.rb +4 -1
  280. data/lib/mongoid/railties/database.rake +2 -0
  281. data/lib/mongoid/reloadable.rb +4 -2
  282. data/lib/mongoid/scopable.rb +2 -1
  283. data/lib/mongoid/selectable.rb +3 -1
  284. data/lib/mongoid/serializable.rb +13 -11
  285. data/lib/mongoid/shardable.rb +3 -1
  286. data/lib/mongoid/stateful.rb +3 -1
  287. data/lib/mongoid/tasks/database.rake +2 -0
  288. data/lib/mongoid/tasks/database.rb +2 -0
  289. data/lib/mongoid/threaded.rb +2 -0
  290. data/lib/mongoid/threaded/lifecycle.rb +2 -0
  291. data/lib/mongoid/timestamps.rb +3 -1
  292. data/lib/mongoid/timestamps/created.rb +3 -1
  293. data/lib/mongoid/timestamps/created/short.rb +2 -0
  294. data/lib/mongoid/timestamps/short.rb +2 -0
  295. data/lib/mongoid/timestamps/timeless.rb +3 -1
  296. data/lib/mongoid/timestamps/updated.rb +3 -1
  297. data/lib/mongoid/timestamps/updated/short.rb +2 -0
  298. data/lib/mongoid/touchable.rb +20 -12
  299. data/lib/mongoid/traversable.rb +4 -2
  300. data/lib/mongoid/validatable.rb +7 -5
  301. data/lib/mongoid/validatable/associated.rb +4 -2
  302. data/lib/mongoid/validatable/format.rb +2 -0
  303. data/lib/mongoid/validatable/length.rb +2 -0
  304. data/lib/mongoid/validatable/localizable.rb +2 -0
  305. data/lib/mongoid/validatable/macros.rb +2 -0
  306. data/lib/mongoid/validatable/presence.rb +4 -2
  307. data/lib/mongoid/validatable/queryable.rb +2 -0
  308. data/lib/mongoid/validatable/uniqueness.rb +5 -3
  309. data/lib/mongoid/version.rb +2 -1
  310. data/lib/rails/generators/mongoid/config/config_generator.rb +3 -8
  311. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -6
  312. data/lib/rails/generators/mongoid/model/model_generator.rb +3 -1
  313. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
  314. data/lib/rails/generators/mongoid_generator.rb +2 -0
  315. data/lib/rails/mongoid.rb +4 -2
  316. data/lib/support/ruby_version.rb +3 -0
  317. data/spec/app/models/account.rb +3 -0
  318. data/spec/app/models/acolyte.rb +3 -0
  319. data/spec/app/models/actor.rb +3 -0
  320. data/spec/app/models/actress.rb +3 -0
  321. data/spec/app/models/address.rb +3 -0
  322. data/spec/app/models/address_component.rb +3 -0
  323. data/spec/app/models/address_number.rb +3 -0
  324. data/spec/app/models/agency.rb +3 -0
  325. data/spec/app/models/agent.rb +3 -0
  326. data/spec/app/models/album.rb +3 -0
  327. data/spec/app/models/alert.rb +3 -0
  328. data/spec/app/models/animal.rb +3 -0
  329. data/spec/app/models/answer.rb +3 -0
  330. data/spec/app/models/appointment.rb +3 -0
  331. data/spec/app/models/array_field.rb +1 -0
  332. data/spec/app/models/article.rb +3 -0
  333. data/spec/app/models/artist.rb +3 -0
  334. data/spec/app/models/artwork.rb +3 -0
  335. data/spec/app/models/audio.rb +3 -0
  336. data/spec/app/models/augmentation.rb +3 -0
  337. data/spec/app/models/author.rb +3 -0
  338. data/spec/app/models/baby.rb +3 -0
  339. data/spec/app/models/band.rb +3 -0
  340. data/spec/app/models/bar.rb +3 -0
  341. data/spec/app/models/basic.rb +3 -0
  342. data/spec/app/models/bed.rb +3 -0
  343. data/spec/app/models/big_palette.rb +3 -0
  344. data/spec/app/models/birthday.rb +3 -0
  345. data/spec/app/models/bomb.rb +3 -0
  346. data/spec/app/models/book.rb +3 -0
  347. data/spec/app/models/breed.rb +3 -0
  348. data/spec/app/models/browser.rb +3 -0
  349. data/spec/app/models/building.rb +3 -0
  350. data/spec/app/models/building_address.rb +3 -0
  351. data/spec/app/models/bus.rb +3 -0
  352. data/spec/app/models/business.rb +3 -0
  353. data/spec/app/models/callback_test.rb +3 -0
  354. data/spec/app/models/canvas.rb +3 -0
  355. data/spec/app/models/car.rb +3 -0
  356. data/spec/app/models/cat.rb +3 -0
  357. data/spec/app/models/category.rb +3 -0
  358. data/spec/app/models/child.rb +3 -0
  359. data/spec/app/models/child_doc.rb +3 -0
  360. data/spec/app/models/church.rb +3 -0
  361. data/spec/app/models/circle.rb +3 -0
  362. data/spec/app/models/circuit.rb +3 -0
  363. data/spec/app/models/circus.rb +3 -0
  364. data/spec/app/models/code.rb +3 -0
  365. data/spec/app/models/comment.rb +3 -0
  366. data/spec/app/models/company.rb +3 -0
  367. data/spec/app/models/consumption_period.rb +3 -0
  368. data/spec/app/models/contextable_item.rb +3 -0
  369. data/spec/app/models/contractor.rb +3 -0
  370. data/spec/app/models/cookie.rb +3 -0
  371. data/spec/app/models/country_code.rb +3 -0
  372. data/spec/app/models/courier_job.rb +3 -0
  373. data/spec/app/models/definition.rb +3 -0
  374. data/spec/app/models/description.rb +3 -0
  375. data/spec/app/models/dictionary.rb +3 -0
  376. data/spec/app/models/division.rb +3 -0
  377. data/spec/app/models/doctor.rb +3 -0
  378. data/spec/app/models/dog.rb +3 -0
  379. data/spec/app/models/dokument.rb +3 -0
  380. data/spec/app/models/draft.rb +3 -0
  381. data/spec/app/models/dragon.rb +3 -0
  382. data/spec/app/models/driver.rb +3 -0
  383. data/spec/app/models/drug.rb +3 -0
  384. data/spec/app/models/dungeon.rb +3 -0
  385. data/spec/app/models/edit.rb +3 -0
  386. data/spec/app/models/email.rb +3 -0
  387. data/spec/app/models/employer.rb +3 -0
  388. data/spec/app/models/entry.rb +3 -0
  389. data/spec/app/models/eraser.rb +3 -0
  390. data/spec/app/models/even.rb +3 -0
  391. data/spec/app/models/event.rb +3 -0
  392. data/spec/app/models/exhibition.rb +3 -0
  393. data/spec/app/models/exhibitor.rb +3 -0
  394. data/spec/app/models/explosion.rb +3 -0
  395. data/spec/app/models/eye.rb +3 -0
  396. data/spec/app/models/eye_bowl.rb +3 -0
  397. data/spec/app/models/face.rb +3 -0
  398. data/spec/app/models/favorite.rb +3 -0
  399. data/spec/app/models/filesystem.rb +3 -0
  400. data/spec/app/models/fire_hydrant.rb +3 -0
  401. data/spec/app/models/firefox.rb +3 -0
  402. data/spec/app/models/fish.rb +3 -0
  403. data/spec/app/models/folder.rb +3 -0
  404. data/spec/app/models/folder_item.rb +3 -0
  405. data/spec/app/models/fruits.rb +3 -0
  406. data/spec/app/models/game.rb +3 -0
  407. data/spec/app/models/ghost.rb +3 -0
  408. data/spec/app/models/home.rb +3 -0
  409. data/spec/app/models/house.rb +3 -0
  410. data/spec/app/models/html_writer.rb +3 -0
  411. data/spec/app/models/id_key.rb +3 -0
  412. data/spec/app/models/image.rb +3 -0
  413. data/spec/app/models/implant.rb +3 -0
  414. data/spec/app/models/item.rb +3 -0
  415. data/spec/app/models/jar.rb +3 -0
  416. data/spec/app/models/kaleidoscope.rb +3 -0
  417. data/spec/app/models/kangaroo.rb +4 -1
  418. data/spec/app/models/label.rb +3 -0
  419. data/spec/app/models/language.rb +3 -0
  420. data/spec/app/models/lat_lng.rb +3 -0
  421. data/spec/app/models/league.rb +3 -0
  422. data/spec/app/models/learner.rb +3 -0
  423. data/spec/app/models/line_item.rb +3 -0
  424. data/spec/app/models/location.rb +3 -0
  425. data/spec/app/models/login.rb +3 -0
  426. data/spec/app/models/manufacturer.rb +3 -0
  427. data/spec/app/models/meat.rb +3 -0
  428. data/spec/app/models/membership.rb +3 -0
  429. data/spec/app/models/message.rb +3 -0
  430. data/spec/app/models/minim.rb +1 -1
  431. data/spec/app/models/mixed_drink.rb +3 -0
  432. data/spec/app/models/movie.rb +3 -0
  433. data/spec/app/models/my_hash.rb +3 -0
  434. data/spec/app/models/name.rb +3 -0
  435. data/spec/app/models/name_only.rb +9 -0
  436. data/spec/app/models/node.rb +3 -0
  437. data/spec/app/models/note.rb +3 -0
  438. data/spec/app/models/odd.rb +3 -0
  439. data/spec/app/models/ordered_post.rb +3 -0
  440. data/spec/app/models/ordered_preference.rb +3 -0
  441. data/spec/app/models/oscar.rb +3 -0
  442. data/spec/app/models/other_owner_object.rb +3 -0
  443. data/spec/app/models/override.rb +3 -0
  444. data/spec/app/models/ownable.rb +3 -0
  445. data/spec/app/models/owner.rb +3 -0
  446. data/spec/app/models/pack.rb +3 -0
  447. data/spec/app/models/page.rb +3 -0
  448. data/spec/app/models/page_question.rb +3 -0
  449. data/spec/app/models/palette.rb +3 -0
  450. data/spec/app/models/parent.rb +3 -0
  451. data/spec/app/models/parent_doc.rb +3 -0
  452. data/spec/app/models/passport.rb +3 -0
  453. data/spec/app/models/patient.rb +3 -0
  454. data/spec/app/models/pdf_writer.rb +3 -0
  455. data/spec/app/models/pencil.rb +3 -0
  456. data/spec/app/models/person.rb +3 -0
  457. data/spec/app/models/pet.rb +3 -0
  458. data/spec/app/models/pet_owner.rb +3 -0
  459. data/spec/app/models/phone.rb +3 -0
  460. data/spec/app/models/pizza.rb +3 -0
  461. data/spec/app/models/player.rb +3 -0
  462. data/spec/app/models/post.rb +3 -0
  463. data/spec/app/models/post_genre.rb +3 -0
  464. data/spec/app/models/powerup.rb +3 -0
  465. data/spec/app/models/preference.rb +3 -0
  466. data/spec/app/models/princess.rb +3 -0
  467. data/spec/app/models/product.rb +3 -0
  468. data/spec/app/models/profile.rb +3 -0
  469. data/spec/app/models/pronunciation.rb +3 -0
  470. data/spec/app/models/pub.rb +3 -0
  471. data/spec/app/models/purchase.rb +3 -0
  472. data/spec/app/models/question.rb +3 -0
  473. data/spec/app/models/quiz.rb +3 -0
  474. data/spec/app/models/rating.rb +3 -0
  475. data/spec/app/models/record.rb +3 -0
  476. data/spec/app/models/registry.rb +3 -0
  477. data/spec/app/models/role.rb +3 -0
  478. data/spec/app/models/root_category.rb +3 -0
  479. data/spec/app/models/sandwich.rb +3 -0
  480. data/spec/app/models/scheduler.rb +3 -0
  481. data/spec/app/models/seo.rb +3 -0
  482. data/spec/app/models/series.rb +3 -0
  483. data/spec/app/models/server.rb +3 -0
  484. data/spec/app/models/service.rb +3 -0
  485. data/spec/app/models/shape.rb +3 -0
  486. data/spec/app/models/shelf.rb +3 -0
  487. data/spec/app/models/shipment_address.rb +3 -0
  488. data/spec/app/models/shipping_container.rb +3 -0
  489. data/spec/app/models/shipping_pack.rb +3 -0
  490. data/spec/app/models/shop.rb +3 -0
  491. data/spec/app/models/short_agent.rb +3 -0
  492. data/spec/app/models/short_quiz.rb +3 -0
  493. data/spec/app/models/simple.rb +3 -0
  494. data/spec/app/models/slave.rb +3 -0
  495. data/spec/app/models/song.rb +3 -0
  496. data/spec/app/models/sound.rb +3 -0
  497. data/spec/app/models/square.rb +3 -0
  498. data/spec/app/models/staff.rb +3 -0
  499. data/spec/app/models/store_as_dup_test1.rb +3 -0
  500. data/spec/app/models/store_as_dup_test2.rb +3 -0
  501. data/spec/app/models/store_as_dup_test3.rb +1 -0
  502. data/spec/app/models/store_as_dup_test4.rb +1 -0
  503. data/spec/app/models/strategy.rb +3 -0
  504. data/spec/app/models/sub_item.rb +3 -0
  505. data/spec/app/models/subscription.rb +3 -0
  506. data/spec/app/models/survey.rb +3 -0
  507. data/spec/app/models/symptom.rb +3 -0
  508. data/spec/app/models/tag.rb +3 -0
  509. data/spec/app/models/target.rb +3 -0
  510. data/spec/app/models/template.rb +3 -0
  511. data/spec/app/models/thing.rb +3 -0
  512. data/spec/app/models/title.rb +3 -0
  513. data/spec/app/models/tool.rb +3 -0
  514. data/spec/app/models/topping.rb +3 -0
  515. data/spec/app/models/track.rb +3 -0
  516. data/spec/app/models/translation.rb +3 -0
  517. data/spec/app/models/tree.rb +3 -0
  518. data/spec/app/models/truck.rb +3 -0
  519. data/spec/app/models/updatable.rb +1 -0
  520. data/spec/app/models/user.rb +3 -0
  521. data/spec/app/models/user_account.rb +3 -0
  522. data/spec/app/models/validation_callback.rb +3 -0
  523. data/spec/app/models/vehicle.rb +3 -0
  524. data/spec/app/models/version.rb +3 -0
  525. data/spec/app/models/vertex.rb +4 -1
  526. data/spec/app/models/vet_visit.rb +3 -0
  527. data/spec/app/models/video.rb +3 -0
  528. data/spec/app/models/video_game.rb +3 -0
  529. data/spec/app/models/weapon.rb +3 -0
  530. data/spec/app/models/wiki_page.rb +3 -0
  531. data/spec/app/models/word.rb +3 -0
  532. data/spec/app/models/word_origin.rb +3 -0
  533. data/spec/app/models/writer.rb +3 -0
  534. data/spec/config/mongoid.yml +1 -0
  535. data/spec/integration/associations/belongs_to_spec.rb +3 -0
  536. data/spec/integration/associations/embedded_spec.rb +0 -55
  537. data/spec/integration/associations/foreign_key_spec.rb +99 -0
  538. data/spec/integration/associations/foreign_key_spec_models.rb +65 -0
  539. data/spec/integration/associations/reverse_population_spec.rb +35 -0
  540. data/spec/integration/associations/reverse_population_spec_models.rb +37 -0
  541. data/spec/integration/criteria/default_scope_spec.rb +21 -0
  542. data/spec/integration/criteria/logical_spec.rb +81 -0
  543. data/spec/integration/i18n_fallbacks_spec.rb +90 -0
  544. data/spec/lite_spec_helper.rb +11 -18
  545. data/spec/mongoid/association/accessors_spec.rb +3 -0
  546. data/spec/mongoid/association/auto_save_spec.rb +3 -0
  547. data/spec/mongoid/association/builders_spec.rb +3 -0
  548. data/spec/mongoid/association/constrainable_spec.rb +3 -0
  549. data/spec/mongoid/association/counter_cache_spec.rb +3 -0
  550. data/spec/mongoid/association/depending_spec.rb +3 -0
  551. data/spec/mongoid/association/eager_spec.rb +3 -0
  552. data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -0
  553. data/spec/mongoid/association/embedded/dirty_spec.rb +3 -0
  554. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -0
  555. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +3 -0
  556. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +3 -50
  557. data/spec/mongoid/association/embedded/embedded_in_spec.rb +4 -1
  558. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +3 -0
  559. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +3 -0
  560. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +3 -0
  561. data/spec/mongoid/association/embedded/embeds_many_models.rb +0 -19
  562. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +52 -0
  563. data/spec/mongoid/association/embedded/embeds_many_spec.rb +4 -11
  564. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +3 -0
  565. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +3 -0
  566. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +3 -0
  567. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +3 -0
  568. data/spec/mongoid/association/embedded/embeds_one_models.rb +3 -0
  569. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +29 -0
  570. data/spec/mongoid/association/embedded/embeds_one_spec.rb +6 -1
  571. data/spec/mongoid/association/macros_spec.rb +3 -0
  572. data/spec/mongoid/association/nested/many_spec.rb +3 -0
  573. data/spec/mongoid/association/nested/one_spec.rb +3 -0
  574. data/spec/mongoid/association/options_spec.rb +3 -0
  575. data/spec/mongoid/association/polymorphic_spec.rb +3 -0
  576. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -0
  577. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +3 -0
  578. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +12 -0
  579. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +3 -0
  580. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +38 -0
  581. data/spec/mongoid/association/referenced/belongs_to_spec.rb +3 -0
  582. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -0
  583. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +3 -0
  584. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +16 -0
  585. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +26 -5
  586. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -154
  587. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -2
  588. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +40 -0
  589. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +26 -2
  590. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -0
  591. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +3 -0
  592. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +18 -3
  593. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +71 -146
  594. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
  595. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4 -2
  596. data/spec/mongoid/association/referenced/has_many_models.rb +3 -0
  597. data/spec/mongoid/association/referenced/has_many_query_spec.rb +38 -0
  598. data/spec/mongoid/association/referenced/has_many_spec.rb +3 -0
  599. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +3 -0
  600. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +3 -0
  601. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -3
  602. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +3 -0
  603. data/spec/mongoid/association/referenced/has_one_models.rb +3 -0
  604. data/spec/mongoid/association/referenced/has_one_query_spec.rb +38 -0
  605. data/spec/mongoid/association/referenced/has_one_spec.rb +3 -0
  606. data/spec/mongoid/association/reflections_spec.rb +3 -0
  607. data/spec/mongoid/association/syncable_spec.rb +3 -0
  608. data/spec/mongoid/association_spec.rb +3 -0
  609. data/spec/mongoid/atomic/modifiers_spec.rb +3 -0
  610. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +3 -0
  611. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +3 -0
  612. data/spec/mongoid/atomic/paths/root_spec.rb +3 -0
  613. data/spec/mongoid/atomic/paths_spec.rb +3 -41
  614. data/spec/mongoid/atomic_spec.rb +3 -0
  615. data/spec/mongoid/attributes/nested_spec.rb +3 -0
  616. data/spec/mongoid/attributes/readonly_spec.rb +3 -0
  617. data/spec/mongoid/attributes_spec.rb +10 -260
  618. data/spec/mongoid/cacheable_spec.rb +3 -0
  619. data/spec/mongoid/changeable_spec.rb +3 -0
  620. data/spec/mongoid/clients/factory_spec.rb +38 -20
  621. data/spec/mongoid/clients/options_spec.rb +24 -13
  622. data/spec/mongoid/clients/sessions_spec.rb +7 -8
  623. data/spec/mongoid/clients/transactions_spec.rb +14 -23
  624. data/spec/mongoid/clients_spec.rb +5 -2
  625. data/spec/mongoid/composable_spec.rb +3 -0
  626. data/spec/mongoid/config/environment_spec.rb +3 -0
  627. data/spec/mongoid/config/options_spec.rb +23 -3
  628. data/spec/mongoid/config_spec.rb +39 -0
  629. data/spec/mongoid/contextual/aggregable/memory_spec.rb +3 -0
  630. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +3 -0
  631. data/spec/mongoid/contextual/atomic_spec.rb +113 -37
  632. data/spec/mongoid/contextual/geo_near_spec.rb +5 -11
  633. data/spec/mongoid/contextual/map_reduce_spec.rb +8 -20
  634. data/spec/mongoid/contextual/memory_spec.rb +3 -0
  635. data/spec/mongoid/contextual/mongo_spec.rb +58 -76
  636. data/spec/mongoid/contextual/none_spec.rb +3 -0
  637. data/spec/mongoid/copyable_spec.rb +3 -0
  638. data/spec/mongoid/copyable_spec_models.rb +3 -0
  639. data/spec/mongoid/criteria/findable_spec.rb +58 -0
  640. data/spec/mongoid/criteria/inspectable_spec.rb +3 -0
  641. data/spec/mongoid/criteria/marshalable_spec.rb +3 -0
  642. data/spec/mongoid/criteria/modifiable_spec.rb +7 -3
  643. data/spec/mongoid/criteria/options_spec.rb +3 -0
  644. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -0
  645. data/spec/mongoid/criteria/queryable/expandable_spec.rb +135 -0
  646. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +3 -0
  647. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -0
  648. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +3 -0
  649. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -0
  650. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +3 -0
  651. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +36 -17
  652. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +3 -0
  653. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +3 -0
  654. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +3 -0
  655. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +3 -0
  656. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +3 -0
  657. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +3 -0
  658. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +3 -0
  659. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -0
  660. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +10 -7
  661. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +3 -0
  662. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -1
  663. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +3 -0
  664. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +31 -35
  665. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +4 -28
  666. data/spec/mongoid/criteria/queryable/key_spec.rb +3 -0
  667. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +3 -0
  668. data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -0
  669. data/spec/mongoid/criteria/queryable/options_spec.rb +3 -0
  670. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +3 -0
  671. data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -0
  672. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +564 -156
  673. data/spec/mongoid/criteria/queryable/selectable_spec.rb +950 -2165
  674. data/spec/mongoid/criteria/queryable/selector_spec.rb +3 -0
  675. data/spec/mongoid/criteria/queryable/smash_spec.rb +3 -0
  676. data/spec/mongoid/criteria/queryable/storable_spec.rb +112 -0
  677. data/spec/mongoid/criteria/scopable_spec.rb +3 -0
  678. data/spec/mongoid/criteria_spec.rb +39 -4
  679. data/spec/mongoid/document_fields_spec.rb +0 -29
  680. data/spec/mongoid/document_query_spec.rb +39 -0
  681. data/spec/mongoid/document_spec.rb +3 -0
  682. data/spec/mongoid/equality_spec.rb +3 -0
  683. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +6 -3
  684. data/spec/mongoid/errors/callback_spec.rb +3 -0
  685. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -0
  686. data/spec/mongoid/errors/document_not_destroyed_spec.rb +3 -0
  687. data/spec/mongoid/errors/document_not_found_spec.rb +3 -0
  688. data/spec/mongoid/errors/eager_load_spec.rb +3 -0
  689. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -0
  690. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -0
  691. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -0
  692. data/spec/mongoid/errors/invalid_field_spec.rb +3 -0
  693. data/spec/mongoid/errors/invalid_find_spec.rb +3 -0
  694. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -0
  695. data/spec/mongoid/errors/invalid_index_spec.rb +3 -0
  696. data/spec/mongoid/errors/invalid_options_spec.rb +5 -2
  697. data/spec/mongoid/errors/invalid_path_spec.rb +3 -0
  698. data/spec/mongoid/errors/invalid_relation_spec.rb +5 -2
  699. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -0
  700. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -0
  701. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -0
  702. data/spec/mongoid/errors/invalid_time_spec.rb +3 -0
  703. data/spec/mongoid/errors/inverse_not_found_spec.rb +4 -1
  704. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +3 -0
  705. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -0
  706. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -0
  707. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -3
  708. data/spec/mongoid/errors/no_client_config_spec.rb +3 -0
  709. data/spec/mongoid/errors/no_client_database_spec.rb +3 -0
  710. data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -0
  711. data/spec/mongoid/errors/no_clients_config_spec.rb +3 -0
  712. data/spec/mongoid/errors/no_environment_spec.rb +3 -0
  713. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -0
  714. data/spec/mongoid/errors/no_metadata_spec.rb +5 -2
  715. data/spec/mongoid/errors/no_parent_spec.rb +4 -1
  716. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -0
  717. data/spec/mongoid/errors/readonly_document_spec.rb +3 -0
  718. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -0
  719. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -0
  720. data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -0
  721. data/spec/mongoid/errors/unsaved_document_spec.rb +4 -1
  722. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -0
  723. data/spec/mongoid/errors/validations_spec.rb +3 -0
  724. data/spec/mongoid/extensions/array_spec.rb +26 -43
  725. data/spec/mongoid/extensions/big_decimal_spec.rb +3 -0
  726. data/spec/mongoid/extensions/binary_spec.rb +3 -0
  727. data/spec/mongoid/extensions/boolean_spec.rb +3 -0
  728. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +336 -0
  729. data/spec/mongoid/extensions/date_spec.rb +9 -160
  730. data/spec/mongoid/extensions/date_time_spec.rb +18 -60
  731. data/spec/mongoid/extensions/decimal128_spec.rb +3 -0
  732. data/spec/mongoid/extensions/false_class_spec.rb +3 -0
  733. data/spec/mongoid/extensions/float_spec.rb +18 -3
  734. data/spec/mongoid/extensions/hash_spec.rb +106 -0
  735. data/spec/mongoid/extensions/integer_spec.rb +15 -2
  736. data/spec/mongoid/extensions/module_spec.rb +3 -0
  737. data/spec/mongoid/extensions/nil_class_spec.rb +3 -0
  738. data/spec/mongoid/extensions/object_id_spec.rb +3 -0
  739. data/spec/mongoid/extensions/object_spec.rb +14 -24
  740. data/spec/mongoid/extensions/range_spec.rb +3 -0
  741. data/spec/mongoid/extensions/regexp_spec.rb +3 -0
  742. data/spec/mongoid/extensions/set_spec.rb +3 -0
  743. data/spec/mongoid/extensions/string_spec.rb +60 -26
  744. data/spec/mongoid/extensions/symbol_spec.rb +3 -0
  745. data/spec/mongoid/extensions/time_spec.rb +30 -0
  746. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -0
  747. data/spec/mongoid/extensions/true_class_spec.rb +3 -0
  748. data/spec/mongoid/extensions_spec.rb +3 -0
  749. data/spec/mongoid/factory_spec.rb +29 -2
  750. data/spec/mongoid/fields/foreign_key_spec.rb +3 -0
  751. data/spec/mongoid/fields/localized_spec.rb +3 -0
  752. data/spec/mongoid/fields/standard_spec.rb +3 -0
  753. data/spec/mongoid/fields_spec.rb +18 -0
  754. data/spec/mongoid/findable_spec.rb +3 -0
  755. data/spec/mongoid/indexable/specification_spec.rb +3 -0
  756. data/spec/mongoid/indexable_spec.rb +7 -6
  757. data/spec/mongoid/inspectable_spec.rb +3 -0
  758. data/spec/mongoid/interceptable_spec.rb +3 -0
  759. data/spec/mongoid/loggable_spec.rb +3 -0
  760. data/spec/mongoid/matchable/all_spec.rb +3 -0
  761. data/spec/mongoid/matchable/and_spec.rb +3 -0
  762. data/spec/mongoid/matchable/default_spec.rb +4 -1
  763. data/spec/mongoid/matchable/elem_match_spec.rb +3 -0
  764. data/spec/mongoid/matchable/eq_spec.rb +1 -0
  765. data/spec/mongoid/matchable/exists_spec.rb +3 -0
  766. data/spec/mongoid/matchable/gt_spec.rb +3 -0
  767. data/spec/mongoid/matchable/gte_spec.rb +3 -0
  768. data/spec/mongoid/matchable/in_spec.rb +3 -0
  769. data/spec/mongoid/matchable/lt_spec.rb +3 -0
  770. data/spec/mongoid/matchable/lte_spec.rb +3 -0
  771. data/spec/mongoid/matchable/ne_spec.rb +3 -0
  772. data/spec/mongoid/matchable/nin_spec.rb +3 -0
  773. data/spec/mongoid/matchable/nor_spec.rb +1 -0
  774. data/spec/mongoid/matchable/or_spec.rb +3 -0
  775. data/spec/mongoid/matchable/regexp_spec.rb +5 -2
  776. data/spec/mongoid/matchable/size_spec.rb +3 -0
  777. data/spec/mongoid/matchable_spec.rb +5 -2
  778. data/spec/mongoid/persistable/creatable_spec.rb +3 -0
  779. data/spec/mongoid/persistable/deletable_spec.rb +3 -0
  780. data/spec/mongoid/persistable/destroyable_spec.rb +3 -0
  781. data/spec/mongoid/persistable/incrementable_spec.rb +17 -0
  782. data/spec/mongoid/persistable/logical_spec.rb +17 -0
  783. data/spec/mongoid/persistable/poppable_spec.rb +17 -0
  784. data/spec/mongoid/persistable/pullable_spec.rb +31 -0
  785. data/spec/mongoid/persistable/pushable_spec.rb +32 -55
  786. data/spec/mongoid/persistable/renamable_spec.rb +17 -0
  787. data/spec/mongoid/persistable/savable_spec.rb +7 -4
  788. data/spec/mongoid/persistable/settable_spec.rb +17 -30
  789. data/spec/mongoid/persistable/unsettable_spec.rb +17 -0
  790. data/spec/mongoid/persistable/updatable_spec.rb +3 -0
  791. data/spec/mongoid/persistable/upsertable_spec.rb +3 -0
  792. data/spec/mongoid/persistable_spec.rb +85 -8
  793. data/spec/mongoid/persistence_context_spec.rb +3 -0
  794. data/spec/mongoid/positional_spec.rb +3 -0
  795. data/spec/mongoid/query_cache_middleware_spec.rb +48 -0
  796. data/spec/mongoid/query_cache_spec.rb +12 -121
  797. data/spec/mongoid/relations/proxy_spec.rb +4 -1
  798. data/spec/mongoid/reloadable_spec.rb +3 -0
  799. data/spec/mongoid/scopable_spec.rb +4 -2
  800. data/spec/mongoid/selectable_spec.rb +3 -0
  801. data/spec/mongoid/serializable_spec.rb +3 -0
  802. data/spec/mongoid/shardable_spec.rb +3 -0
  803. data/spec/mongoid/stateful_spec.rb +3 -0
  804. data/spec/mongoid/tasks/database_rake_spec.rb +16 -13
  805. data/spec/mongoid/tasks/database_spec.rb +4 -1
  806. data/spec/mongoid/threaded_spec.rb +3 -0
  807. data/spec/mongoid/timestamps/created/short_spec.rb +3 -0
  808. data/spec/mongoid/timestamps/created_spec.rb +3 -0
  809. data/spec/mongoid/timestamps/timeless_spec.rb +3 -0
  810. data/spec/mongoid/timestamps/updated/short_spec.rb +3 -0
  811. data/spec/mongoid/timestamps/updated_spec.rb +3 -0
  812. data/spec/mongoid/timestamps_spec.rb +3 -0
  813. data/spec/mongoid/touchable_spec.rb +49 -3
  814. data/spec/mongoid/traversable_spec.rb +3 -0
  815. data/spec/mongoid/validatable/associated_spec.rb +3 -0
  816. data/spec/mongoid/validatable/format_spec.rb +3 -0
  817. data/spec/mongoid/validatable/length_spec.rb +3 -0
  818. data/spec/mongoid/validatable/numericality_spec.rb +3 -0
  819. data/spec/mongoid/validatable/presence_spec.rb +3 -0
  820. data/spec/mongoid/validatable/uniqueness_spec.rb +3 -0
  821. data/spec/mongoid/validatable_spec.rb +3 -0
  822. data/spec/mongoid_spec.rb +3 -0
  823. data/spec/rails/controller_extension/controller_runtime_spec.rb +4 -1
  824. data/spec/rails/mongoid_spec.rb +5 -2
  825. data/spec/spec_helper.rb +50 -15
  826. data/spec/support/authorization.rb +3 -0
  827. data/spec/support/cluster_config.rb +3 -3
  828. data/spec/support/constraints.rb +211 -17
  829. data/spec/support/expectations.rb +3 -0
  830. data/spec/support/macros.rb +1 -0
  831. data/spec/support/shared/time.rb +54 -0
  832. data/spec/support/spec_config.rb +7 -20
  833. metadata +508 -515
  834. metadata.gz.sig +2 -1
  835. data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
  836. data/spec/app/models/customer.rb +0 -11
  837. data/spec/app/models/customer_address.rb +0 -12
  838. data/spec/app/models/delegating_patient.rb +0 -16
  839. data/spec/integration/app_spec.rb +0 -341
  840. data/spec/integration/callbacks_models.rb +0 -49
  841. data/spec/integration/callbacks_spec.rb +0 -216
  842. data/spec/integration/criteria/date_field_spec.rb +0 -41
  843. data/spec/integration/document_spec.rb +0 -22
  844. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
  845. data/spec/mongoid/document_persistence_context_spec.rb +0 -33
  846. data/spec/shared/LICENSE +0 -20
  847. data/spec/shared/bin/get-mongodb-download-url +0 -17
  848. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  849. data/spec/shared/lib/mrss/cluster_config.rb +0 -221
  850. data/spec/shared/lib/mrss/constraints.rb +0 -354
  851. data/spec/shared/lib/mrss/docker_runner.rb +0 -265
  852. data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
  853. data/spec/shared/lib/mrss/server_version_registry.rb +0 -115
  854. data/spec/shared/lib/mrss/spec_organizer.rb +0 -162
  855. data/spec/shared/lib/mrss/utils.rb +0 -15
  856. data/spec/shared/share/Dockerfile.erb +0 -231
  857. data/spec/shared/shlib/distro.sh +0 -73
  858. data/spec/shared/shlib/server.sh +0 -290
  859. data/spec/shared/shlib/set_env.sh +0 -128
  860. data/spec/support/session_registry.rb +0 -50
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Timestamps::Created do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Timestamps::Timeless do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Timestamps::Updated::Short do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Timestamps::Updated do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Timestamps do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Touchable do
@@ -186,13 +189,13 @@ describe Mongoid::Touchable do
186
189
 
187
190
  context "when record is new" do
188
191
 
189
- let(:agent) do
192
+ let!(:agent) do
190
193
  Agent.new(updated_at: 2.days.ago)
191
194
  end
192
195
 
193
196
  context "when no attribute is provided" do
194
197
 
195
- let!(:touched) do
198
+ let(:touched) do
196
199
  agent.touch
197
200
  end
198
201
 
@@ -203,7 +206,7 @@ describe Mongoid::Touchable do
203
206
 
204
207
  context "when an attribute is provided" do
205
208
 
206
- let!(:touched) do
209
+ let(:touched) do
207
210
  agent.touch(:dob)
208
211
  end
209
212
 
@@ -213,6 +216,49 @@ describe Mongoid::Touchable do
213
216
  end
214
217
  end
215
218
 
219
+ context "when record is destroyed" do
220
+
221
+ let!(:agent) do
222
+ Agent.create!(updated_at: 2.days.ago).tap do |agent|
223
+ agent.destroy
224
+ end
225
+ end
226
+
227
+ let(:frozen_error_cls) do
228
+ if RUBY_VERSION >= '2.5'
229
+ FrozenError
230
+ else
231
+ RuntimeError
232
+ end
233
+ end
234
+
235
+ context "when no attribute is provided" do
236
+
237
+ let(:touched) do
238
+ agent.touch
239
+ end
240
+
241
+ it "raises FrozenError" do
242
+ expect do
243
+ touched
244
+ end.to raise_error(frozen_error_cls)
245
+ end
246
+ end
247
+
248
+ context "when an attribute is provided" do
249
+
250
+ let(:touched) do
251
+ agent.touch(:dob)
252
+ end
253
+
254
+ it "raises FrozenError" do
255
+ expect do
256
+ touched
257
+ end.to raise_error(frozen_error_cls)
258
+ end
259
+ end
260
+ end
261
+
216
262
  context "when creating the child" do
217
263
 
218
264
  let(:time) do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Traversable do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Validatable::AssociatedValidator do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Validatable::FormatValidator do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Validatable::LengthValidator do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe ActiveModel::Validations::NumericalityValidator do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Validatable::PresenceValidator do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Validatable::UniquenessValidator do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid::Validatable do
data/spec/mongoid_spec.rb CHANGED
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe Mongoid do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
  require "mongoid/railties/controller_runtime"
3
6
 
@@ -107,4 +110,4 @@ describe "Mongoid::Railties::ControllerRuntime" do
107
110
  expect(messages).to eq(["MongoDB: 42.1ms"])
108
111
  end
109
112
 
110
- end
113
+ end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  require "spec_helper"
2
5
 
3
6
  describe "Rails::Mongoid" do
@@ -76,7 +79,7 @@ describe "Rails::Mongoid" do
76
79
  context "when models exist in subdirectories" do
77
80
 
78
81
  let(:files) do
79
- [ "/rails/root/app/models/mongoid/behaviour.rb" ]
82
+ [ "/rails/root/app/models/mongoid/behavior.rb" ]
80
83
  end
81
84
 
82
85
  before do
@@ -84,7 +87,7 @@ describe "Rails::Mongoid" do
84
87
  end
85
88
 
86
89
  it "requires the models by subdirectory and basename" do
87
- expect(Rails::Mongoid).to receive(:load_model).with("mongoid/behaviour")
90
+ expect(Rails::Mongoid).to receive(:load_model).with("mongoid/behavior")
88
91
  Rails::Mongoid.preload_models(app)
89
92
  end
90
93
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # encoding: utf-8
2
3
 
3
4
  require 'lite_spec_helper'
4
5
 
@@ -17,9 +18,9 @@ else
17
18
  end
18
19
 
19
20
  # When testing locally we use the database named mongoid_test. However when
20
- # tests are running in parallel on Travis we need to use different database
21
- # names for each process running since we do not have transactions and want a
22
- # clean slate before each spec run.
21
+ # tests are running in parallel in a CI environment we need to use different
22
+ # database names for each process running since we do not have transactions
23
+ # and want a clean slate before each spec run.
23
24
  def database_id
24
25
  "mongoid_test"
25
26
  end
@@ -33,10 +34,9 @@ require 'support/expectations'
33
34
  require 'support/macros'
34
35
  require 'support/cluster_config'
35
36
  require 'support/constraints'
36
- require 'mrss/constraints'
37
37
 
38
- # Give MongoDB time to start up on the travis ci environment.
39
- if (ENV['CI'] == 'travis' || ENV['CI'] == 'evergreen')
38
+ # Give MongoDB servers time to start up in CI environments
39
+ if SpecConfig.instance.ci?
40
40
  starting = true
41
41
  client = Mongo::Client.new(SpecConfig.instance.addresses)
42
42
  while starting
@@ -76,6 +76,37 @@ CONFIG = {
76
76
  }
77
77
  }
78
78
 
79
+ def non_legacy_server?
80
+ Mongoid::Clients.default.cluster.servers.first.features.write_command_enabled?
81
+ end
82
+
83
+ def testing_replica_set?
84
+ Mongoid::Clients.default.cluster.replica_set?
85
+ end
86
+
87
+ def collation_supported?
88
+ Mongoid::Clients.default.cluster.next_primary.features.collation_enabled?
89
+ end
90
+ alias :decimal128_supported? :collation_supported?
91
+
92
+ def array_filters_supported?
93
+ Mongoid::Clients.default.cluster.next_primary.features.array_filters_enabled?
94
+ end
95
+ alias :sessions_supported? :array_filters_supported?
96
+
97
+ def transactions_supported?
98
+ features = Mongoid::Clients.default.cluster.next_primary.features
99
+ features.respond_to?(:transactions_enabled?) && features.transactions_enabled?
100
+ end
101
+
102
+ def testing_transactions?
103
+ transactions_supported? && if Gem::Version.new(ClusterConfig.instance.fcv_ish) >= Gem::Version.new('4.2')
104
+ %i(replica_set sharded).include?(ClusterConfig.instance.topology)
105
+ else
106
+ ClusterConfig.instance.topology == :replica_set
107
+ end
108
+ end
109
+
79
110
  # Set the database that the spec suite connects to.
80
111
  Mongoid.configure do |config|
81
112
  config.load_configuration(CONFIG)
@@ -110,22 +141,26 @@ end
110
141
 
111
142
  I18n.config.enforce_available_locales = false
112
143
 
144
+ # The user must be created before any of the tests are loaded, until
145
+ # https://jira.mongodb.org/browse/MONGOID-4827 is implemented.
146
+ client = Mongo::Client.new(SpecConfig.instance.addresses, server_selection_timeout: 3.03)
147
+ begin
148
+ # Create the root user administrator as the first user to be added to the
149
+ # database. This user will need to be authenticated in order to add any
150
+ # more users to any other databases.
151
+ client.database.users.create(MONGOID_ROOT_USER)
152
+ rescue Mongo::Error::OperationFailure => e
153
+ ensure
154
+ client.close
155
+ end
156
+
113
157
  RSpec.configure do |config|
114
158
  config.raise_errors_for_deprecations!
115
159
  config.include(Mongoid::Expectations)
116
- config.extend(Mrss::Constraints)
117
160
  config.extend(Constraints)
118
161
  config.extend(Mongoid::Macros)
119
162
 
120
163
  config.before(:suite) do
121
- client = Mongo::Client.new(SpecConfig.instance.addresses, server_selection_timeout: 3.03)
122
- begin
123
- # Create the root user administrator as the first user to be added to the
124
- # database. This user will need to be authenticated in order to add any
125
- # more users to any other databases.
126
- client.database.users.create(MONGOID_ROOT_USER)
127
- rescue Exception => e
128
- end
129
164
  Mongoid.purge!
130
165
  end
131
166
 
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  # Set up a root user so we can set up authentication on a database level.
2
5
  MONGOID_ROOT_USER = Mongo::Auth::User.new(
3
6
  database: Mongo::Database::ADMIN,
@@ -99,7 +99,7 @@ class ClusterConfig
99
99
  if topology == :sharded
100
100
  shards = client.use(:admin).command(listShards: 1).first
101
101
  shard = shards['shards'].first
102
- address_str = shard['host'].sub(/\A.*\//, '').sub(/,.*/, '')
102
+ address_str = shard['host'].sub(/^.*\//, '').sub(/,.*/, '')
103
103
  client = ClusterTools.instance.direct_client(address_str,
104
104
  SpecConfig.instance.test_options.merge(SpecConfig.instance.auth_options).merge(connect: :direct))
105
105
  end
@@ -133,8 +133,8 @@ class ClusterConfig
133
133
 
134
134
  @topology ||= begin
135
135
  topology = client.cluster.topology.class.name.sub(/.*::/, '')
136
- topology = topology.gsub(/([A-Z])/) { |match| '_' + match.downcase }.sub(/\A_/, '')
137
- if topology =~ /\Areplica_set/
136
+ topology = topology.gsub(/([A-Z])/) { |match| '_' + match.downcase }.sub(/^_/, '')
137
+ if topology =~ /^replica_set/
138
138
  topology = 'replica_set'
139
139
  end
140
140
  topology.to_sym
@@ -4,42 +4,236 @@
4
4
  module Constraints
5
5
  RAILS_VERSION = ActiveSupport.version.to_s.split('.')[0..1].join('.').freeze
6
6
 
7
- def require_driver_query_cache
8
- before(:all) do
9
- if !defined?(Mongo::QueryCache)
10
- skip "Driver version #{Mongo::VERSION} does not support query cache"
7
+ def min_rails_version(version)
8
+ unless version =~ /^\d+\.\d+$/
9
+ raise ArgumentError, "Version can only be major.minor: #{version}"
10
+ end
11
+
12
+ before do
13
+ if version > RAILS_VERSION
14
+ skip "Rails version #{version} or higher required, we have #{RAILS_VERSION}"
11
15
  end
12
16
  end
13
17
  end
14
18
 
15
- def require_mongoid_query_cache
16
- before (:all) do
17
- if defined?(Mongo::QueryCache)
18
- skip "Mongoid uses the driver query cache in driver versions that support it"
19
+ def max_rails_version(version)
20
+ unless version =~ /^\d+\.\d+$/
21
+ raise ArgumentError, "Version can only be major.minor: #{version}"
22
+ end
23
+
24
+ before do
25
+ if version < RAILS_VERSION
26
+ skip "Rails version #{version} or lower required, we have #{RAILS_VERSION}"
19
27
  end
20
28
  end
21
29
  end
22
30
 
23
- def min_rails_version(version)
24
- unless version =~ /\A\d+\.\d+\z/
31
+ def min_server_version(version)
32
+ unless version =~ /^\d+\.\d+$/
25
33
  raise ArgumentError, "Version can only be major.minor: #{version}"
26
34
  end
27
35
 
28
- before(:all) do
29
- if version > RAILS_VERSION
30
- skip "Rails version #{version} or higher required, we have #{RAILS_VERSION}"
36
+ before do
37
+ if version > ClusterConfig.instance.server_version
38
+ skip "Server version #{version} or higher required, we have #{ClusterConfig.instance.server_version}"
31
39
  end
32
40
  end
33
41
  end
34
42
 
35
- def max_rails_version(version)
36
- unless version =~ /\A\d+\.\d+\z/
43
+ def max_server_version(version)
44
+ unless version =~ /^\d+\.\d+$/
37
45
  raise ArgumentError, "Version can only be major.minor: #{version}"
38
46
  end
39
47
 
48
+ before do
49
+ if version < ClusterConfig.instance.short_server_version
50
+ skip "Server version #{version} or lower required, we have #{ClusterConfig.instance.server_version}"
51
+ end
52
+ end
53
+ end
54
+
55
+ def require_topology(*topologies)
56
+ invalid_topologies = topologies - [:single, :replica_set, :sharded]
57
+ unless invalid_topologies.empty?
58
+ raise ArgumentError, "Invalid topologies requested: #{invalid_topologies.join(', ')}"
59
+ end
40
60
  before(:all) do
41
- if version < RAILS_VERSION
42
- skip "Rails version #{version} or lower required, we have #{RAILS_VERSION}"
61
+ unless topologies.include?(topology = ClusterConfig.instance.topology)
62
+ skip "Topology #{topologies.join(' or ')} required, we have #{topology}"
63
+ end
64
+ end
65
+ end
66
+
67
+ def max_example_run_time(timeout)
68
+ around do |example|
69
+ TimeoutInterrupt.timeout(timeout, TimeoutInterrupt::Error.new("Test execution terminated after #{timeout} seconds")) do
70
+ example.run
71
+ end
72
+ end
73
+ end
74
+
75
+ def require_transaction_support
76
+ min_server_fcv '4.0'
77
+ require_topology :replica_set
78
+ end
79
+
80
+ def require_tls
81
+ before(:all) do
82
+ unless SpecConfig.instance.ssl?
83
+ skip "SSL not enabled"
84
+ end
85
+ end
86
+ end
87
+
88
+ def require_no_tls
89
+ before(:all) do
90
+ if SpecConfig.instance.ssl?
91
+ skip "SSL enabled"
92
+ end
93
+ end
94
+ end
95
+
96
+ def require_local_tls
97
+ require_tls
98
+ end
99
+
100
+ def require_no_retry_writes
101
+ before(:all) do
102
+ if SpecConfig.instance.retry_writes?
103
+ skip "Retry writes is enabled"
104
+ end
105
+ end
106
+ end
107
+
108
+ def require_compression
109
+ before(:all) do
110
+ if SpecConfig.instance.compressors.nil?
111
+ skip "Compression is not enabled"
112
+ end
113
+ end
114
+ end
115
+
116
+ def require_no_compression
117
+ before(:all) do
118
+ if SpecConfig.instance.compressors
119
+ skip "Compression is enabled"
120
+ end
121
+ end
122
+ end
123
+
124
+ def ruby_version_gte(version)
125
+ before(:all) do
126
+ if RUBY_VERSION < version
127
+ skip "Ruby version #{version} or higher required"
128
+ end
129
+ end
130
+ end
131
+
132
+ def ruby_version_lt(version)
133
+ before(:all) do
134
+ if RUBY_VERSION >= version
135
+ skip "Ruby version less than #{version} required"
136
+ end
137
+ end
138
+ end
139
+
140
+ def require_auth
141
+ before(:all) do
142
+ unless ENV['AUTH'] == 'auth' || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
143
+ skip "Auth required"
144
+ end
145
+ end
146
+ end
147
+
148
+ def require_no_auth
149
+ before(:all) do
150
+ if ENV['AUTH'] == 'auth' || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
151
+ skip "Auth not allowed"
152
+ end
153
+ end
154
+ end
155
+
156
+ def require_no_x509_auth
157
+ before(:all) do
158
+ if SpecConfig.instance.x509_auth?
159
+ skip "X.509 auth not allowed"
160
+ end
161
+ end
162
+ end
163
+
164
+ # Can the driver specify a write concern that won't be overridden?
165
+ # (mongos 4.0+ overrides the write concern)
166
+ def require_set_write_concern
167
+ before(:all) do
168
+ if ClusterConfig.instance.topology == :sharded && ClusterConfig.instance.short_server_version >= '4.0'
169
+ skip "mongos 4.0+ overrides write concern"
170
+ end
171
+ end
172
+ end
173
+
174
+ def require_multi_shard
175
+ before(:all) do
176
+ if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length == 1
177
+ skip 'Test requires a minimum of two shards if run in sharded topology'
178
+ end
179
+ end
180
+ end
181
+
182
+ def require_no_multi_shard
183
+ before(:all) do
184
+ if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length > 1
185
+ skip 'Test requires a single shard if run in sharded topology'
186
+ end
187
+ end
188
+ end
189
+
190
+ def require_wired_tiger
191
+ before(:all) do
192
+ if ClusterConfig.instance.storage_engine != :wired_tiger
193
+ skip 'Test requires WiredTiger storage engine'
194
+ end
195
+ end
196
+ end
197
+
198
+ def require_wired_tiger_on_36
199
+ before(:all) do
200
+ if ClusterConfig.instance.short_server_version >= '3.6'
201
+ if ClusterConfig.instance.storage_engine != :wired_tiger
202
+ skip 'Test requires WiredTiger storage engine on 3.6+ servers'
203
+ end
204
+ end
205
+ end
206
+ end
207
+
208
+ def require_mmapv1
209
+ before(:all) do
210
+ if ClusterConfig.instance.storage_engine != :mmapv1
211
+ skip 'Test requires MMAPv1 storage engine'
212
+ end
213
+ end
214
+ end
215
+
216
+ def require_enterprise
217
+ before(:all) do
218
+ unless ClusterConfig.instance.enterprise?
219
+ skip 'Test requires enterprise build of MongoDB'
220
+ end
221
+ end
222
+ end
223
+
224
+ # Integration tests for SRV polling require internet connectivity to
225
+ # look up SRV records and a sharded cluster configured on default port on
226
+ # localhost (localhost:27017, localhost:27018).
227
+ def require_default_port_deployment
228
+ # Because the DNS records at test1.test.build.10gen.cc point to
229
+ # localhost:27017 & localhost:27018, the test suite must have been
230
+ # configured to use these addresses
231
+ before(:all) do
232
+ have_default_port = SpecConfig.instance.addresses.any? do |address|
233
+ %w(127.0.0.1 127.0.0.1:27017 localhost localhost:27017).include?(address)
234
+ end
235
+ unless have_default_port
236
+ skip 'This test requires the test suite to be configured for localhost:27017'
43
237
  end
44
238
  end
45
239
  end