mongoid 9.0.11 → 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (997) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -8
  3. data/README.md +5 -11
  4. data/Rakefile +35 -38
  5. data/lib/config/locales/en.yml +11 -0
  6. data/lib/mongoid/association/accessors.rb +19 -26
  7. data/lib/mongoid/association/bindable.rb +43 -45
  8. data/lib/mongoid/association/builders.rb +18 -15
  9. data/lib/mongoid/association/constrainable.rb +3 -5
  10. data/lib/mongoid/association/depending.rb +34 -38
  11. data/lib/mongoid/association/eager.rb +47 -13
  12. data/lib/mongoid/association/eager_loadable.rb +152 -24
  13. data/lib/mongoid/association/embedded/batchable.rb +28 -30
  14. data/lib/mongoid/association/embedded/cyclic.rb +8 -11
  15. data/lib/mongoid/association/embedded/eager.rb +1 -6
  16. data/lib/mongoid/association/embedded/embedded_in/binding.rb +6 -9
  17. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -3
  18. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -0
  19. data/lib/mongoid/association/embedded/embedded_in.rb +25 -22
  20. data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -2
  21. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +2 -3
  22. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
  23. data/lib/mongoid/association/embedded/embeds_many.rb +24 -21
  24. data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -2
  25. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +2 -6
  26. data/lib/mongoid/association/embedded/embeds_one.rb +20 -18
  27. data/lib/mongoid/association/embedded.rb +0 -1
  28. data/lib/mongoid/association/macros.rb +3 -7
  29. data/lib/mongoid/association/many.rb +75 -3
  30. data/lib/mongoid/association/marshalable.rb +0 -3
  31. data/lib/mongoid/association/nested/many.rb +18 -13
  32. data/lib/mongoid/association/nested/nested_buildable.rb +6 -9
  33. data/lib/mongoid/association/nested/one.rb +4 -7
  34. data/lib/mongoid/association/nested.rb +1 -3
  35. data/lib/mongoid/association/one.rb +0 -3
  36. data/lib/mongoid/association/options.rb +8 -7
  37. data/lib/mongoid/association/referenced/auto_save.rb +0 -2
  38. data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
  39. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
  40. data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
  41. data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
  42. data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
  43. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
  44. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
  45. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
  47. data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
  48. data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
  49. data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
  50. data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
  51. data/lib/mongoid/association/referenced/has_many/proxy.rb +10 -6
  52. data/lib/mongoid/association/referenced/has_many.rb +30 -24
  53. data/lib/mongoid/association/referenced/has_one/binding.rb +0 -2
  54. data/lib/mongoid/association/referenced/has_one/buildable.rb +11 -9
  55. data/lib/mongoid/association/referenced/has_one/eager.rb +0 -3
  56. data/lib/mongoid/association/referenced/has_one.rb +26 -21
  57. data/lib/mongoid/association/referenced/syncable.rb +30 -34
  58. data/lib/mongoid/association/referenced.rb +0 -1
  59. data/lib/mongoid/association/reflections.rb +0 -3
  60. data/lib/mongoid/association/relatable.rb +69 -66
  61. data/lib/mongoid/association.rb +12 -15
  62. data/lib/mongoid/atomic/modifiers.rb +65 -25
  63. data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
  64. data/lib/mongoid/atomic/paths/embedded/one.rb +2 -4
  65. data/lib/mongoid/atomic/paths/embedded.rb +3 -6
  66. data/lib/mongoid/atomic/paths/root.rb +1 -4
  67. data/lib/mongoid/atomic/paths.rb +2 -3
  68. data/lib/mongoid/atomic.rb +0 -3
  69. data/lib/mongoid/attributes/dynamic.rb +6 -7
  70. data/lib/mongoid/attributes/nested.rb +8 -10
  71. data/lib/mongoid/attributes/projector.rb +7 -20
  72. data/lib/mongoid/attributes/readonly.rb +6 -11
  73. data/lib/mongoid/attributes.rb +18 -34
  74. data/lib/mongoid/cacheable.rb +24 -6
  75. data/lib/mongoid/clients/factory.rb +12 -15
  76. data/lib/mongoid/clients/options.rb +2 -5
  77. data/lib/mongoid/clients/sessions.rb +50 -60
  78. data/lib/mongoid/clients/storage_options.rb +1 -4
  79. data/lib/mongoid/clients/validators/storage.rb +2 -3
  80. data/lib/mongoid/clients/validators.rb +1 -2
  81. data/lib/mongoid/clients.rb +8 -11
  82. data/lib/mongoid/collection_configurable.rb +10 -14
  83. data/lib/mongoid/composable.rb +30 -34
  84. data/lib/mongoid/config/defaults.rb +7 -4
  85. data/lib/mongoid/config/encryption.rb +1 -3
  86. data/lib/mongoid/config/environment.rb +7 -16
  87. data/lib/mongoid/config/introspection.rb +14 -16
  88. data/lib/mongoid/config/options.rb +16 -10
  89. data/lib/mongoid/config/validators/async_query_executor.rb +3 -6
  90. data/lib/mongoid/config/validators/client.rb +12 -15
  91. data/lib/mongoid/config/validators/option.rb +3 -5
  92. data/lib/mongoid/config/validators.rb +3 -4
  93. data/lib/mongoid/config.rb +132 -42
  94. data/lib/mongoid/contextual/aggregable/memory.rb +2 -4
  95. data/lib/mongoid/contextual/aggregable/mongo.rb +20 -22
  96. data/lib/mongoid/contextual/aggregable/none.rb +2 -4
  97. data/lib/mongoid/contextual/aggregable.rb +5 -7
  98. data/lib/mongoid/contextual/atomic.rb +20 -24
  99. data/lib/mongoid/contextual/command.rb +0 -3
  100. data/lib/mongoid/contextual/map_reduce.rb +12 -16
  101. data/lib/mongoid/contextual/memory.rb +72 -65
  102. data/lib/mongoid/contextual/mongo/documents_loader.rb +2 -3
  103. data/lib/mongoid/contextual/mongo.rb +169 -85
  104. data/lib/mongoid/contextual/none.rb +9 -9
  105. data/lib/mongoid/contextual/queryable.rb +1 -4
  106. data/lib/mongoid/contextual.rb +18 -7
  107. data/lib/mongoid/copyable.rb +7 -9
  108. data/lib/mongoid/criteria/findable.rb +5 -7
  109. data/lib/mongoid/criteria/includable.rb +37 -8
  110. data/lib/mongoid/criteria/inspectable.rb +2 -5
  111. data/lib/mongoid/criteria/marshalable.rb +4 -8
  112. data/lib/mongoid/criteria/modifiable.rb +3 -11
  113. data/lib/mongoid/criteria/options.rb +0 -3
  114. data/lib/mongoid/criteria/permission.rb +34 -37
  115. data/lib/mongoid/criteria/queryable/aggregable.rb +9 -10
  116. data/lib/mongoid/criteria/queryable/expandable.rb +4 -9
  117. data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -10
  118. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
  119. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -4
  120. data/lib/mongoid/criteria/queryable/extensions/date.rb +2 -6
  121. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +3 -7
  122. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -4
  123. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +20 -11
  124. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -11
  125. data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -8
  126. data/lib/mongoid/criteria/queryable/extensions/range.rb +6 -9
  127. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -12
  128. data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -6
  129. data/lib/mongoid/criteria/queryable/extensions/string.rb +5 -9
  130. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -7
  131. data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -6
  132. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +2 -12
  133. data/lib/mongoid/criteria/queryable/extensions.rb +18 -21
  134. data/lib/mongoid/criteria/queryable/key.rb +12 -18
  135. data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
  136. data/lib/mongoid/criteria/queryable/mergeable.rb +31 -39
  137. data/lib/mongoid/criteria/queryable/optional.rb +17 -18
  138. data/lib/mongoid/criteria/queryable/options.rb +20 -9
  139. data/lib/mongoid/criteria/queryable/pipeline.rb +6 -9
  140. data/lib/mongoid/criteria/queryable/selectable.rb +131 -193
  141. data/lib/mongoid/criteria/queryable/selector.rb +20 -29
  142. data/lib/mongoid/criteria/queryable/smash.rb +1 -6
  143. data/lib/mongoid/criteria/queryable/storable.rb +20 -39
  144. data/lib/mongoid/criteria/queryable.rb +25 -15
  145. data/lib/mongoid/criteria/scopable.rb +5 -11
  146. data/lib/mongoid/criteria/translator.rb +5 -8
  147. data/lib/mongoid/criteria.rb +109 -54
  148. data/lib/mongoid/deprecable.rb +1 -4
  149. data/lib/mongoid/deprecation.rb +2 -6
  150. data/lib/mongoid/document.rb +1 -1
  151. data/lib/mongoid/encryptable.rb +1 -2
  152. data/lib/mongoid/equality.rb +4 -5
  153. data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
  154. data/lib/mongoid/errors/attribute_not_loaded.rb +1 -4
  155. data/lib/mongoid/errors/callback.rb +1 -4
  156. data/lib/mongoid/errors/create_collection_failure.rb +8 -11
  157. data/lib/mongoid/errors/criteria_argument_required.rb +2 -5
  158. data/lib/mongoid/errors/delete_restriction.rb +1 -4
  159. data/lib/mongoid/errors/document_not_destroyed.rb +1 -4
  160. data/lib/mongoid/errors/document_not_found.rb +16 -21
  161. data/lib/mongoid/errors/drop_collection_failure.rb +7 -10
  162. data/lib/mongoid/errors/empty_config_file.rb +1 -4
  163. data/lib/mongoid/errors/immutable_attribute.rb +1 -4
  164. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -4
  165. data/lib/mongoid/errors/invalid_async_query_executor.rb +2 -5
  166. data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +2 -5
  167. data/lib/mongoid/errors/invalid_collection.rb +1 -3
  168. data/lib/mongoid/errors/invalid_config_file.rb +1 -4
  169. data/lib/mongoid/errors/invalid_config_option.rb +2 -5
  170. data/lib/mongoid/errors/invalid_dependent_strategy.rb +6 -10
  171. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +2 -4
  172. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -4
  173. data/lib/mongoid/errors/invalid_elem_match_operator.rb +5 -9
  174. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +1 -4
  175. data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +1 -4
  176. data/lib/mongoid/errors/invalid_expression_operator.rb +3 -7
  177. data/lib/mongoid/errors/invalid_field.rb +2 -5
  178. data/lib/mongoid/errors/invalid_field_operator.rb +5 -9
  179. data/lib/mongoid/errors/invalid_field_option.rb +2 -5
  180. data/lib/mongoid/errors/invalid_field_type.rb +1 -4
  181. data/lib/mongoid/errors/invalid_find.rb +1 -4
  182. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -4
  183. data/lib/mongoid/errors/invalid_includes.rb +3 -6
  184. data/lib/mongoid/errors/invalid_index.rb +1 -4
  185. data/lib/mongoid/errors/invalid_options.rb +1 -4
  186. data/lib/mongoid/errors/invalid_path.rb +1 -4
  187. data/lib/mongoid/errors/invalid_persistence_option.rb +4 -7
  188. data/lib/mongoid/errors/invalid_query.rb +6 -11
  189. data/lib/mongoid/errors/invalid_relation.rb +10 -13
  190. data/lib/mongoid/errors/invalid_relation_option.rb +4 -7
  191. data/lib/mongoid/errors/invalid_scope.rb +1 -4
  192. data/lib/mongoid/errors/invalid_session_nesting.rb +0 -3
  193. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +2 -4
  194. data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
  195. data/lib/mongoid/errors/invalid_time.rb +1 -4
  196. data/lib/mongoid/errors/invalid_transaction_nesting.rb +0 -3
  197. data/lib/mongoid/errors/inverse_not_found.rb +1 -4
  198. data/lib/mongoid/errors/mixed_client_configuration.rb +1 -4
  199. data/lib/mongoid/errors/mixed_relations.rb +1 -3
  200. data/lib/mongoid/errors/mongoid_error.rb +7 -11
  201. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
  202. data/lib/mongoid/errors/no_client_config.rb +1 -4
  203. data/lib/mongoid/errors/no_client_database.rb +1 -4
  204. data/lib/mongoid/errors/no_client_hosts.rb +1 -4
  205. data/lib/mongoid/errors/no_clients_config.rb +1 -4
  206. data/lib/mongoid/errors/no_default_client.rb +1 -4
  207. data/lib/mongoid/errors/no_environment.rb +1 -4
  208. data/lib/mongoid/errors/no_map_reduce_output.rb +1 -4
  209. data/lib/mongoid/errors/no_metadata.rb +1 -4
  210. data/lib/mongoid/errors/no_parent.rb +1 -4
  211. data/lib/mongoid/errors/readonly_attribute.rb +1 -4
  212. data/lib/mongoid/errors/readonly_document.rb +1 -4
  213. data/lib/mongoid/errors/rollback.rb +0 -2
  214. data/lib/mongoid/errors/scope_overwrite.rb +2 -4
  215. data/lib/mongoid/errors/sessions_not_supported.rb +0 -3
  216. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -3
  217. data/lib/mongoid/errors/transaction_error.rb +0 -3
  218. data/lib/mongoid/errors/transactions_not_supported.rb +0 -3
  219. data/lib/mongoid/errors/unknown_attribute.rb +1 -4
  220. data/lib/mongoid/errors/unknown_model.rb +1 -4
  221. data/lib/mongoid/errors/unregistered_class.rb +1 -1
  222. data/lib/mongoid/errors/unsaved_document.rb +1 -3
  223. data/lib/mongoid/errors/unsupported_isolation_level.rb +22 -0
  224. data/lib/mongoid/errors/unsupported_javascript.rb +1 -4
  225. data/lib/mongoid/errors/validations.rb +3 -5
  226. data/lib/mongoid/errors.rb +72 -72
  227. data/lib/mongoid/evolvable.rb +0 -3
  228. data/lib/mongoid/extensions/array.rb +5 -7
  229. data/lib/mongoid/extensions/big_decimal.rb +6 -7
  230. data/lib/mongoid/extensions/binary.rb +3 -6
  231. data/lib/mongoid/extensions/boolean.rb +4 -7
  232. data/lib/mongoid/extensions/bson_document.rb +28 -0
  233. data/lib/mongoid/extensions/date.rb +10 -14
  234. data/lib/mongoid/extensions/date_time.rb +2 -6
  235. data/lib/mongoid/extensions/decimal128.rb +1 -5
  236. data/lib/mongoid/extensions/false_class.rb +3 -5
  237. data/lib/mongoid/extensions/float.rb +5 -10
  238. data/lib/mongoid/extensions/hash.rb +5 -10
  239. data/lib/mongoid/extensions/integer.rb +5 -10
  240. data/lib/mongoid/extensions/module.rb +1 -4
  241. data/lib/mongoid/extensions/nil_class.rb +0 -1
  242. data/lib/mongoid/extensions/object.rb +9 -14
  243. data/lib/mongoid/extensions/object_id.rb +2 -6
  244. data/lib/mongoid/extensions/range.rb +14 -15
  245. data/lib/mongoid/extensions/raw_value.rb +0 -3
  246. data/lib/mongoid/extensions/regexp.rb +3 -6
  247. data/lib/mongoid/extensions/set.rb +3 -4
  248. data/lib/mongoid/extensions/string.rb +8 -12
  249. data/lib/mongoid/extensions/symbol.rb +3 -7
  250. data/lib/mongoid/extensions/time.rb +24 -26
  251. data/lib/mongoid/extensions/time_with_zone.rb +4 -7
  252. data/lib/mongoid/extensions/true_class.rb +3 -5
  253. data/lib/mongoid/extensions.rb +26 -26
  254. data/lib/mongoid/factory.rb +5 -9
  255. data/lib/mongoid/fields/encrypted.rb +0 -1
  256. data/lib/mongoid/fields/foreign_key.rb +9 -10
  257. data/lib/mongoid/fields/localized.rb +12 -12
  258. data/lib/mongoid/fields/standard.rb +5 -7
  259. data/lib/mongoid/fields/validators/macro.rb +23 -34
  260. data/lib/mongoid/fields/validators.rb +1 -2
  261. data/lib/mongoid/fields.rb +151 -58
  262. data/lib/mongoid/findable.rb +82 -53
  263. data/lib/mongoid/indexable/specification.rb +20 -6
  264. data/lib/mongoid/indexable/validators/options.rb +33 -40
  265. data/lib/mongoid/indexable.rb +26 -25
  266. data/lib/mongoid/inspectable.rb +4 -7
  267. data/lib/mongoid/interceptable.rb +41 -40
  268. data/lib/mongoid/loadable.rb +17 -18
  269. data/lib/mongoid/loggable.rb +4 -8
  270. data/lib/mongoid/matchable.rb +0 -2
  271. data/lib/mongoid/matcher/all.rb +2 -5
  272. data/lib/mongoid/matcher/and.rb +0 -3
  273. data/lib/mongoid/matcher/bits.rb +13 -8
  274. data/lib/mongoid/matcher/bits_all_clear.rb +1 -3
  275. data/lib/mongoid/matcher/bits_all_set.rb +1 -3
  276. data/lib/mongoid/matcher/bits_any_clear.rb +1 -3
  277. data/lib/mongoid/matcher/bits_any_set.rb +1 -3
  278. data/lib/mongoid/matcher/elem_match.rb +13 -15
  279. data/lib/mongoid/matcher/elem_match_expression.rb +0 -3
  280. data/lib/mongoid/matcher/eq.rb +0 -3
  281. data/lib/mongoid/matcher/eq_impl.rb +12 -17
  282. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +4 -7
  283. data/lib/mongoid/matcher/exists.rb +1 -4
  284. data/lib/mongoid/matcher/expression.rb +5 -10
  285. data/lib/mongoid/matcher/expression_operator.rb +1 -3
  286. data/lib/mongoid/matcher/field_expression.rb +10 -13
  287. data/lib/mongoid/matcher/field_operator.rb +4 -6
  288. data/lib/mongoid/matcher/gt.rb +0 -3
  289. data/lib/mongoid/matcher/gte.rb +0 -3
  290. data/lib/mongoid/matcher/in.rb +9 -12
  291. data/lib/mongoid/matcher/lt.rb +0 -3
  292. data/lib/mongoid/matcher/lte.rb +0 -3
  293. data/lib/mongoid/matcher/mod.rb +4 -8
  294. data/lib/mongoid/matcher/ne.rb +0 -3
  295. data/lib/mongoid/matcher/nin.rb +0 -3
  296. data/lib/mongoid/matcher/nor.rb +1 -6
  297. data/lib/mongoid/matcher/not.rb +0 -3
  298. data/lib/mongoid/matcher/or.rb +0 -3
  299. data/lib/mongoid/matcher/regex.rb +11 -14
  300. data/lib/mongoid/matcher/size.rb +2 -5
  301. data/lib/mongoid/matcher/type.rb +32 -37
  302. data/lib/mongoid/matcher.rb +7 -15
  303. data/lib/mongoid/model_resolver.rb +1 -0
  304. data/lib/mongoid/persistable/creatable.rb +23 -7
  305. data/lib/mongoid/persistable/deletable.rb +6 -7
  306. data/lib/mongoid/persistable/destroyable.rb +2 -6
  307. data/lib/mongoid/persistable/incrementable.rb +1 -3
  308. data/lib/mongoid/persistable/logical.rb +3 -5
  309. data/lib/mongoid/persistable/maxable.rb +2 -4
  310. data/lib/mongoid/persistable/minable.rb +2 -4
  311. data/lib/mongoid/persistable/multipliable.rb +1 -3
  312. data/lib/mongoid/persistable/poppable.rb +2 -4
  313. data/lib/mongoid/persistable/pullable.rb +3 -5
  314. data/lib/mongoid/persistable/pushable.rb +5 -7
  315. data/lib/mongoid/persistable/renamable.rb +1 -3
  316. data/lib/mongoid/persistable/savable.rb +0 -3
  317. data/lib/mongoid/persistable/settable.rb +4 -13
  318. data/lib/mongoid/persistable/unsettable.rb +1 -3
  319. data/lib/mongoid/persistable/updatable.rb +16 -24
  320. data/lib/mongoid/persistable/upsertable.rb +8 -10
  321. data/lib/mongoid/persistable.rb +28 -27
  322. data/lib/mongoid/persistence_context.rb +34 -41
  323. data/lib/mongoid/pluckable.rb +0 -2
  324. data/lib/mongoid/positional.rb +5 -11
  325. data/lib/mongoid/railtie.rb +16 -22
  326. data/lib/mongoid/railties/console_sandbox.rb +6 -8
  327. data/lib/mongoid/railties/controller_runtime.rb +7 -11
  328. data/lib/mongoid/railties/database.rake +42 -44
  329. data/lib/mongoid/scopable.rb +23 -31
  330. data/lib/mongoid/search_indexable.rb +330 -0
  331. data/lib/mongoid/selectable.rb +1 -3
  332. data/lib/mongoid/serializable.rb +6 -8
  333. data/lib/mongoid/shardable.rb +8 -17
  334. data/lib/mongoid/stateful.rb +5 -10
  335. data/lib/mongoid/stringified_symbol.rb +5 -9
  336. data/lib/mongoid/tasks/database.rake +31 -32
  337. data/lib/mongoid/tasks/database.rb +28 -30
  338. data/lib/mongoid/tasks/encryption.rb +10 -15
  339. data/lib/mongoid/threaded/lifecycle.rb +6 -9
  340. data/lib/mongoid/threaded.rb +132 -32
  341. data/lib/mongoid/timestamps/created/short.rb +2 -3
  342. data/lib/mongoid/timestamps/created.rb +1 -2
  343. data/lib/mongoid/timestamps/short.rb +0 -1
  344. data/lib/mongoid/timestamps/timeless.rb +8 -13
  345. data/lib/mongoid/timestamps/updated/short.rb +2 -3
  346. data/lib/mongoid/timestamps/updated.rb +2 -5
  347. data/lib/mongoid/timestamps.rb +4 -6
  348. data/lib/mongoid/touchable.rb +19 -11
  349. data/lib/mongoid/traversable.rb +3 -2
  350. data/lib/mongoid/validatable/associated.rb +1 -5
  351. data/lib/mongoid/validatable/format.rb +0 -2
  352. data/lib/mongoid/validatable/length.rb +0 -2
  353. data/lib/mongoid/validatable/localizable.rb +0 -3
  354. data/lib/mongoid/validatable/macros.rb +0 -2
  355. data/lib/mongoid/validatable/numericality.rb +24 -3
  356. data/lib/mongoid/validatable/presence.rb +8 -10
  357. data/lib/mongoid/validatable/queryable.rb +0 -3
  358. data/lib/mongoid/validatable/uniqueness.rb +12 -14
  359. data/lib/mongoid/validatable.rb +15 -20
  360. data/lib/mongoid/version.rb +1 -1
  361. data/lib/mongoid/warnings.rb +10 -11
  362. data/lib/mongoid.rb +30 -34
  363. data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
  364. data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
  365. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
  366. data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
  367. data/lib/rails/generators/mongoid_generator.rb +6 -10
  368. data/lib/rails/mongoid.rb +1 -3
  369. data/spec/integration/active_job_spec.rb +1 -2
  370. data/spec/integration/app_spec.rb +142 -178
  371. data/spec/integration/associations/belongs_to_spec.rb +30 -28
  372. data/spec/integration/associations/embedded_dirty_spec.rb +0 -1
  373. data/spec/integration/associations/embedded_spec.rb +41 -43
  374. data/spec/integration/associations/embeds_many_spec.rb +46 -29
  375. data/spec/integration/associations/embeds_one_spec.rb +2 -1
  376. data/spec/integration/associations/foreign_key_spec.rb +10 -11
  377. data/spec/integration/associations/foreign_key_spec_models.rb +8 -9
  378. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +16 -13
  379. data/spec/integration/associations/has_many_spec.rb +17 -18
  380. data/spec/integration/associations/has_one_spec.rb +42 -45
  381. data/spec/integration/associations/nested_attributes_assignment_spec.rb +36 -39
  382. data/spec/integration/associations/reverse_population_spec.rb +4 -5
  383. data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
  384. data/spec/integration/associations/scope_option_spec.rb +18 -20
  385. data/spec/integration/atomic/modifiers_spec.rb +72 -52
  386. data/spec/integration/bson_regexp_raw_spec.rb +2 -3
  387. data/spec/integration/caching_spec.rb +68 -0
  388. data/spec/integration/callbacks_models.rb +11 -9
  389. data/spec/integration/callbacks_spec.rb +78 -80
  390. data/spec/integration/contextual/empty_spec.rb +19 -20
  391. data/spec/integration/criteria/alias_query_spec.rb +12 -19
  392. data/spec/integration/criteria/date_field_spec.rb +1 -2
  393. data/spec/integration/criteria/default_scope_spec.rb +23 -18
  394. data/spec/integration/criteria/logical_spec.rb +18 -19
  395. data/spec/integration/criteria/range_spec.rb +77 -86
  396. data/spec/integration/criteria/raw_value_spec.rb +122 -109
  397. data/spec/integration/criteria/time_with_zone_spec.rb +33 -24
  398. data/spec/integration/discriminator_key_spec.rb +85 -85
  399. data/spec/integration/discriminator_value_spec.rb +70 -73
  400. data/spec/integration/document_spec.rb +9 -10
  401. data/spec/integration/dots_and_dollars_spec.rb +104 -119
  402. data/spec/integration/encryption_spec.rb +8 -11
  403. data/spec/integration/i18n_fallbacks_spec.rb +7 -8
  404. data/spec/integration/isolation_state_spec.rb +241 -0
  405. data/spec/integration/matcher_examples_spec.rb +145 -168
  406. data/spec/integration/matcher_operator_data/in.yml +6 -6
  407. data/spec/integration/matcher_operator_spec.rb +16 -26
  408. data/spec/integration/matcher_spec.rb +31 -32
  409. data/spec/integration/persistence/collection_options_spec.rb +0 -2
  410. data/spec/integration/persistence/range_field_spec.rb +24 -2
  411. data/spec/integration/server_query_spec.rb +43 -37
  412. data/spec/integration/shardable_spec.rb +10 -11
  413. data/spec/integration/stringified_symbol_field_spec.rb +28 -43
  414. data/spec/lite_spec_helper.rb +11 -12
  415. data/spec/mongoid/association/accessors_spec.rb +197 -285
  416. data/spec/mongoid/association/auto_save_spec.rb +62 -93
  417. data/spec/mongoid/association/builders_spec.rb +121 -74
  418. data/spec/mongoid/association/constrainable_spec.rb +9 -22
  419. data/spec/mongoid/association/counter_cache_spec.rb +71 -104
  420. data/spec/mongoid/association/depending_spec.rb +166 -208
  421. data/spec/mongoid/association/eager_spec.rb +416 -80
  422. data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
  423. data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
  424. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
  425. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
  426. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
  427. data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
  428. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
  429. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
  430. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
  431. data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
  432. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
  433. data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
  434. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
  435. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
  436. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
  437. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
  438. data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
  439. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
  440. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
  441. data/spec/mongoid/association/macros_spec.rb +213 -300
  442. data/spec/mongoid/association/nested/many_spec.rb +51 -73
  443. data/spec/mongoid/association/nested/one_spec.rb +56 -80
  444. data/spec/mongoid/association/options_spec.rb +187 -310
  445. data/spec/mongoid/association/polymorphic_spec.rb +35 -53
  446. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
  447. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
  448. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
  449. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
  450. data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
  451. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
  452. data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
  453. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
  454. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
  455. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
  456. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
  457. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -975
  458. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +9 -9
  459. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +5 -6
  460. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +59 -177
  461. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +29 -43
  462. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +53 -53
  463. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +104 -67
  464. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +431 -675
  465. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -2
  466. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -11
  467. data/spec/mongoid/association/referenced/has_many_models.rb +1 -2
  468. data/spec/mongoid/association/referenced/has_many_query_spec.rb +3 -4
  469. data/spec/mongoid/association/referenced/has_many_spec.rb +44 -188
  470. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +26 -38
  471. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +28 -29
  472. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +29 -42
  473. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +270 -332
  474. data/spec/mongoid/association/referenced/has_one_models.rb +1 -2
  475. data/spec/mongoid/association/referenced/has_one_query_spec.rb +3 -4
  476. data/spec/mongoid/association/referenced/has_one_spec.rb +40 -188
  477. data/spec/mongoid/association/reflections_spec.rb +14 -24
  478. data/spec/mongoid/association/syncable_spec.rb +102 -125
  479. data/spec/mongoid/association_spec.rb +47 -70
  480. data/spec/mongoid/atomic/modifiers_spec.rb +184 -197
  481. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +39 -52
  482. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +35 -49
  483. data/spec/mongoid/atomic/paths/root_spec.rb +9 -15
  484. data/spec/mongoid/atomic/paths_spec.rb +81 -117
  485. data/spec/mongoid/atomic_spec.rb +156 -171
  486. data/spec/mongoid/attributes/dynamic_spec.rb +5 -6
  487. data/spec/mongoid/attributes/nested_spec.rb +1219 -1692
  488. data/spec/mongoid/attributes/nested_spec_models.rb +8 -9
  489. data/spec/mongoid/attributes/projector_spec.rb +2 -6
  490. data/spec/mongoid/attributes/readonly_spec.rb +73 -97
  491. data/spec/mongoid/attributes_spec.rb +669 -826
  492. data/spec/mongoid/cacheable_spec.rb +74 -44
  493. data/spec/mongoid/changeable_spec.rb +591 -733
  494. data/spec/mongoid/clients/factory_spec.rb +122 -154
  495. data/spec/mongoid/clients/options_spec.rb +40 -59
  496. data/spec/mongoid/clients/sessions_spec.rb +25 -44
  497. data/spec/mongoid/clients/transactions_spec.rb +33 -50
  498. data/spec/mongoid/clients/transactions_spec_models.rb +3 -4
  499. data/spec/mongoid/clients_spec.rb +265 -355
  500. data/spec/mongoid/collection_configurable_spec.rb +9 -12
  501. data/spec/mongoid/composable_spec.rb +2 -9
  502. data/spec/mongoid/config/defaults_spec.rb +24 -31
  503. data/spec/mongoid/config/encryption_spec.rb +54 -57
  504. data/spec/mongoid/config/environment_spec.rb +30 -40
  505. data/spec/mongoid/config/introspection_spec.rb +42 -37
  506. data/spec/mongoid/config/options_spec.rb +14 -21
  507. data/spec/mongoid/config_spec.rb +145 -195
  508. data/spec/mongoid/contextual/aggregable/memory_spec.rb +98 -135
  509. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +4 -7
  510. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +149 -187
  511. data/spec/mongoid/contextual/aggregable/none_spec.rb +14 -16
  512. data/spec/mongoid/contextual/atomic_spec.rb +223 -271
  513. data/spec/mongoid/contextual/map_reduce_spec.rb +110 -138
  514. data/spec/mongoid/contextual/memory_spec.rb +706 -854
  515. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +12 -13
  516. data/spec/mongoid/contextual/mongo_spec.rb +1008 -1213
  517. data/spec/mongoid/contextual/none_spec.rb +54 -59
  518. data/spec/mongoid/contextual/short_circuit_spec.rb +139 -0
  519. data/spec/mongoid/copyable_spec.rb +254 -300
  520. data/spec/mongoid/copyable_spec_models.rb +0 -1
  521. data/spec/mongoid/criteria/findable_spec.rb +322 -387
  522. data/spec/mongoid/criteria/includable_spec.rb +421 -372
  523. data/spec/mongoid/criteria/includable_spec_models.rb +16 -7
  524. data/spec/mongoid/criteria/inspectable_spec.rb +11 -14
  525. data/spec/mongoid/criteria/marshalable_spec.rb +11 -14
  526. data/spec/mongoid/criteria/modifiable_spec.rb +366 -512
  527. data/spec/mongoid/criteria/options_spec.rb +2 -7
  528. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +112 -141
  529. data/spec/mongoid/criteria/queryable/expandable_spec.rb +8 -11
  530. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +127 -184
  531. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +123 -60
  532. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +84 -117
  533. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +44 -65
  534. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +86 -108
  535. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +94 -33
  536. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +103 -138
  537. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +95 -34
  538. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +25 -38
  539. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +26 -28
  540. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +32 -54
  541. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +136 -130
  542. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +16 -24
  543. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +15 -24
  544. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +12 -19
  545. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -63
  546. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +28 -42
  547. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +73 -96
  548. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +71 -92
  549. data/spec/mongoid/criteria/queryable/key_spec.rb +32 -36
  550. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +44 -49
  551. data/spec/mongoid/criteria/queryable/optional_spec.rb +373 -486
  552. data/spec/mongoid/criteria/queryable/options_spec.rb +172 -123
  553. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +65 -87
  554. data/spec/mongoid/criteria/queryable/queryable_spec.rb +41 -53
  555. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +576 -680
  556. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +7 -11
  557. data/spec/mongoid/criteria/queryable/selectable_spec.rb +807 -998
  558. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +154 -191
  559. data/spec/mongoid/criteria/queryable/selector_spec.rb +294 -390
  560. data/spec/mongoid/criteria/queryable/smash_spec.rb +6 -11
  561. data/spec/mongoid/criteria/queryable/storable_spec.rb +54 -81
  562. data/spec/mongoid/criteria/queryable_mql_spec.rb +92 -0
  563. data/spec/mongoid/criteria/scopable_spec.rb +102 -138
  564. data/spec/mongoid/criteria/translator_spec.rb +59 -60
  565. data/spec/mongoid/criteria_projection_spec.rb +81 -99
  566. data/spec/mongoid/criteria_spec.rb +935 -950
  567. data/spec/mongoid/document_fields_spec.rb +28 -30
  568. data/spec/mongoid/document_persistence_context_spec.rb +13 -15
  569. data/spec/mongoid/document_query_spec.rb +9 -12
  570. data/spec/mongoid/document_spec.rb +317 -409
  571. data/spec/mongoid/equality_spec.rb +69 -102
  572. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
  573. data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
  574. data/spec/mongoid/errors/callback_spec.rb +8 -11
  575. data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
  576. data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
  577. data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
  578. data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
  579. data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
  580. data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
  581. data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
  582. data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
  583. data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
  584. data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
  585. data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
  586. data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
  587. data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
  588. data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
  589. data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
  590. data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
  591. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
  592. data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
  593. data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
  594. data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
  595. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
  596. data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
  597. data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
  598. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
  599. data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
  600. data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
  601. data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
  602. data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
  603. data/spec/mongoid/errors/no_environment_spec.rb +8 -11
  604. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
  605. data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
  606. data/spec/mongoid/errors/no_parent_spec.rb +7 -10
  607. data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
  608. data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
  609. data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
  610. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
  611. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
  612. data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
  613. data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
  614. data/spec/mongoid/errors/validations_spec.rb +11 -14
  615. data/spec/mongoid/extensions/array_spec.rb +70 -92
  616. data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
  617. data/spec/mongoid/extensions/binary_spec.rb +21 -32
  618. data/spec/mongoid/extensions/boolean_spec.rb +52 -75
  619. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
  620. data/spec/mongoid/extensions/date_spec.rb +26 -38
  621. data/spec/mongoid/extensions/date_time_spec.rb +22 -32
  622. data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
  623. data/spec/mongoid/extensions/false_class_spec.rb +10 -17
  624. data/spec/mongoid/extensions/float_spec.rb +40 -61
  625. data/spec/mongoid/extensions/hash_spec.rb +46 -64
  626. data/spec/mongoid/extensions/integer_spec.rb +40 -61
  627. data/spec/mongoid/extensions/module_spec.rb +13 -18
  628. data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
  629. data/spec/mongoid/extensions/object_id_spec.rb +159 -247
  630. data/spec/mongoid/extensions/object_spec.rb +31 -47
  631. data/spec/mongoid/extensions/range_spec.rb +112 -115
  632. data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
  633. data/spec/mongoid/extensions/regexp_spec.rb +23 -36
  634. data/spec/mongoid/extensions/set_spec.rb +38 -49
  635. data/spec/mongoid/extensions/string_spec.rb +118 -167
  636. data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
  637. data/spec/mongoid/extensions/symbol_spec.rb +12 -20
  638. data/spec/mongoid/extensions/time_spec.rb +160 -202
  639. data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
  640. data/spec/mongoid/extensions/true_class_spec.rb +10 -17
  641. data/spec/mongoid/factory_spec.rb +125 -148
  642. data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
  643. data/spec/mongoid/fields/localized_spec.rb +140 -185
  644. data/spec/mongoid/fields/standard_spec.rb +43 -59
  645. data/spec/mongoid/fields_spec.rb +751 -620
  646. data/spec/mongoid/findable_spec.rb +260 -228
  647. data/spec/mongoid/indexable/specification_spec.rb +42 -58
  648. data/spec/mongoid/indexable_spec.rb +260 -264
  649. data/spec/mongoid/inspectable_spec.rb +45 -55
  650. data/spec/mongoid/interceptable_spec.rb +784 -922
  651. data/spec/mongoid/interceptable_spec_models.rb +35 -35
  652. data/spec/mongoid/loading_spec.rb +47 -43
  653. data/spec/mongoid/loggable_spec.rb +3 -6
  654. data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
  655. data/spec/mongoid/mongoizable_spec.rb +81 -90
  656. data/spec/mongoid/monkey_patches_spec.rb +4 -0
  657. data/spec/mongoid/persistable/creatable_spec.rb +181 -220
  658. data/spec/mongoid/persistable/deletable_spec.rb +139 -179
  659. data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
  660. data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
  661. data/spec/mongoid/persistable/logical_spec.rb +48 -61
  662. data/spec/mongoid/persistable/maxable_spec.rb +45 -44
  663. data/spec/mongoid/persistable/minable_spec.rb +45 -44
  664. data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
  665. data/spec/mongoid/persistable/poppable_spec.rb +47 -60
  666. data/spec/mongoid/persistable/pullable_spec.rb +79 -103
  667. data/spec/mongoid/persistable/pushable_spec.rb +106 -131
  668. data/spec/mongoid/persistable/renamable_spec.rb +52 -65
  669. data/spec/mongoid/persistable/savable_spec.rb +152 -189
  670. data/spec/mongoid/persistable/settable_spec.rb +121 -145
  671. data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
  672. data/spec/mongoid/persistable/updatable_spec.rb +185 -232
  673. data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
  674. data/spec/mongoid/persistable_spec.rb +132 -139
  675. data/spec/mongoid/persistence_context_spec.rb +31 -89
  676. data/spec/mongoid/positional_spec.rb +67 -79
  677. data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
  678. data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
  679. data/spec/mongoid/relations/proxy_spec.rb +0 -1
  680. data/spec/mongoid/reloadable_spec.rb +250 -145
  681. data/spec/mongoid/scopable_spec.rb +319 -398
  682. data/spec/mongoid/search_indexable_spec.rb +446 -41
  683. data/spec/mongoid/selectable_spec.rb +36 -51
  684. data/spec/mongoid/serializable_spec.rb +269 -312
  685. data/spec/mongoid/shardable_models.rb +5 -5
  686. data/spec/mongoid/shardable_spec.rb +44 -46
  687. data/spec/mongoid/stateful_spec.rb +55 -75
  688. data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
  689. data/spec/mongoid/tasks/database_spec.rb +80 -80
  690. data/spec/mongoid/tasks/encryption_spec.rb +22 -20
  691. data/spec/mongoid/threaded_spec.rb +57 -83
  692. data/spec/mongoid/timestamps/created/short_spec.rb +12 -16
  693. data/spec/mongoid/timestamps/created_spec.rb +16 -20
  694. data/spec/mongoid/timestamps/timeless_spec.rb +31 -43
  695. data/spec/mongoid/timestamps/updated/short_spec.rb +21 -28
  696. data/spec/mongoid/timestamps/updated_spec.rb +18 -25
  697. data/spec/mongoid/timestamps_spec.rb +171 -188
  698. data/spec/mongoid/timestamps_spec_models.rb +12 -13
  699. data/spec/mongoid/touchable_spec.rb +330 -294
  700. data/spec/mongoid/touchable_spec_models.rb +35 -37
  701. data/spec/mongoid/traversable_spec.rb +435 -471
  702. data/spec/mongoid/validatable/associated_spec.rb +42 -60
  703. data/spec/mongoid/validatable/format_spec.rb +24 -34
  704. data/spec/mongoid/validatable/length_spec.rb +62 -86
  705. data/spec/mongoid/validatable/numericality_spec.rb +114 -23
  706. data/spec/mongoid/validatable/presence_spec.rb +149 -203
  707. data/spec/mongoid/validatable/uniqueness_spec.rb +632 -830
  708. data/spec/mongoid/validatable_spec.rb +71 -103
  709. data/spec/mongoid/warnings_spec.rb +5 -9
  710. data/spec/mongoid_spec.rb +25 -41
  711. data/spec/rails/controller_extension/controller_runtime_spec.rb +45 -49
  712. data/spec/rails/mongoid_spec.rb +15 -15
  713. data/spec/shared/lib/mrss/cluster_config.rb +5 -40
  714. data/spec/shared/lib/mrss/constraints.rb +7 -46
  715. data/spec/shared/lib/mrss/docker_runner.rb +10 -21
  716. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -31
  717. data/spec/shared/lib/mrss/release/candidate.rb +18 -12
  718. data/spec/shared/lib/mrss/server_version_registry.rb +1 -5
  719. data/spec/shared/share/Dockerfile.erb +6 -8
  720. data/spec/shared/shlib/server.sh +0 -50
  721. data/spec/shared/shlib/set_env.sh +4 -10
  722. data/spec/spec_helper.rb +54 -31
  723. data/spec/support/authorization.rb +0 -1
  724. data/spec/support/client_registry.rb +1 -2
  725. data/spec/support/constraints.rb +8 -25
  726. data/spec/support/crypt/models.rb +7 -8
  727. data/spec/support/crypt.rb +6 -9
  728. data/spec/support/expectations.rb +21 -7
  729. data/spec/support/feature_sandbox.rb +1 -4
  730. data/spec/support/helpers.rb +0 -1
  731. data/spec/support/immutable_ids.rb +20 -21
  732. data/spec/support/macros.rb +1 -3
  733. data/spec/support/models/account.rb +4 -5
  734. data/spec/support/models/acolyte.rb +5 -5
  735. data/spec/support/models/actor.rb +3 -3
  736. data/spec/support/models/actress.rb +0 -1
  737. data/spec/support/models/address.rb +11 -11
  738. data/spec/support/models/address_component.rb +1 -1
  739. data/spec/support/models/address_number.rb +1 -1
  740. data/spec/support/models/agency.rb +1 -1
  741. data/spec/support/models/agent.rb +1 -1
  742. data/spec/support/models/album.rb +1 -2
  743. data/spec/support/models/alert.rb +1 -1
  744. data/spec/support/models/animal.rb +4 -5
  745. data/spec/support/models/answer.rb +1 -1
  746. data/spec/support/models/appointment.rb +2 -2
  747. data/spec/support/models/armrest.rb +0 -1
  748. data/spec/support/models/array_field.rb +0 -1
  749. data/spec/support/models/article.rb +0 -1
  750. data/spec/support/models/artist.rb +16 -12
  751. data/spec/support/models/artwork.rb +1 -1
  752. data/spec/support/models/audible_sound.rb +0 -1
  753. data/spec/support/models/audio.rb +2 -2
  754. data/spec/support/models/augmentation.rb +1 -2
  755. data/spec/support/models/author.rb +1 -1
  756. data/spec/support/models/baby.rb +1 -1
  757. data/spec/support/models/band.rb +0 -1
  758. data/spec/support/models/bar.rb +2 -2
  759. data/spec/support/models/basic.rb +0 -1
  760. data/spec/support/models/bed.rb +0 -1
  761. data/spec/support/models/big_palette.rb +0 -1
  762. data/spec/support/models/birthday.rb +3 -5
  763. data/spec/support/models/bolt.rb +0 -1
  764. data/spec/support/models/bomb.rb +1 -1
  765. data/spec/support/models/book.rb +1 -1
  766. data/spec/support/models/breed.rb +1 -1
  767. data/spec/support/models/browser.rb +1 -2
  768. data/spec/support/models/building.rb +0 -1
  769. data/spec/support/models/building_address.rb +1 -1
  770. data/spec/support/models/bus.rb +1 -1
  771. data/spec/support/models/business.rb +2 -2
  772. data/spec/support/models/callback_test.rb +1 -1
  773. data/spec/support/models/canvas.rb +5 -6
  774. data/spec/support/models/car.rb +0 -1
  775. data/spec/support/models/cat.rb +0 -2
  776. data/spec/support/models/catalog.rb +0 -1
  777. data/spec/support/models/category.rb +1 -1
  778. data/spec/support/models/child.rb +1 -1
  779. data/spec/support/models/child_doc.rb +5 -6
  780. data/spec/support/models/church.rb +1 -1
  781. data/spec/support/models/circle.rb +0 -1
  782. data/spec/support/models/circuit.rb +2 -2
  783. data/spec/support/models/circus.rb +0 -1
  784. data/spec/support/models/code.rb +2 -1
  785. data/spec/support/models/coding/pull_request.rb +0 -1
  786. data/spec/support/models/coding.rb +0 -1
  787. data/spec/support/models/comment.rb +0 -1
  788. data/spec/support/models/company.rb +0 -1
  789. data/spec/support/models/consumption_period.rb +0 -1
  790. data/spec/support/models/contextable_item.rb +1 -1
  791. data/spec/support/models/contractor.rb +1 -1
  792. data/spec/support/models/cookie.rb +0 -1
  793. data/spec/support/models/country_code.rb +2 -3
  794. data/spec/support/models/courier_job.rb +2 -2
  795. data/spec/support/models/cover.rb +0 -1
  796. data/spec/support/models/crate.rb +0 -1
  797. data/spec/support/models/customer.rb +0 -1
  798. data/spec/support/models/customer_address.rb +0 -1
  799. data/spec/support/models/deed.rb +1 -1
  800. data/spec/support/models/definition.rb +1 -1
  801. data/spec/support/models/delegating_patient.rb +0 -1
  802. data/spec/support/models/description.rb +0 -1
  803. data/spec/support/models/dictionary.rb +1 -1
  804. data/spec/support/models/division.rb +2 -2
  805. data/spec/support/models/doctor.rb +0 -1
  806. data/spec/support/models/dog.rb +2 -2
  807. data/spec/support/models/dokument.rb +1 -1
  808. data/spec/support/models/draft.rb +0 -1
  809. data/spec/support/models/dragon.rb +1 -1
  810. data/spec/support/models/driver.rb +2 -2
  811. data/spec/support/models/drug.rb +1 -1
  812. data/spec/support/models/dungeon.rb +1 -1
  813. data/spec/support/models/edit.rb +1 -1
  814. data/spec/support/models/email.rb +1 -1
  815. data/spec/support/models/employer.rb +1 -2
  816. data/spec/support/models/entry.rb +1 -1
  817. data/spec/support/models/eraser.rb +0 -1
  818. data/spec/support/models/even.rb +1 -1
  819. data/spec/support/models/event.rb +3 -4
  820. data/spec/support/models/exhibition.rb +1 -1
  821. data/spec/support/models/exhibitor.rb +1 -1
  822. data/spec/support/models/explosion.rb +1 -1
  823. data/spec/support/models/eye.rb +0 -1
  824. data/spec/support/models/eye_bowl.rb +2 -3
  825. data/spec/support/models/face.rb +2 -3
  826. data/spec/support/models/fanatic.rb +1 -1
  827. data/spec/support/models/favorite.rb +1 -1
  828. data/spec/support/models/filesystem.rb +1 -1
  829. data/spec/support/models/fire_hydrant.rb +1 -1
  830. data/spec/support/models/firefox.rb +0 -1
  831. data/spec/support/models/fish.rb +0 -1
  832. data/spec/support/models/folder.rb +0 -2
  833. data/spec/support/models/folder_item.rb +1 -3
  834. data/spec/support/models/fruits.rb +9 -5
  835. data/spec/support/models/game.rb +3 -4
  836. data/spec/support/models/ghost.rb +0 -1
  837. data/spec/support/models/guitar.rb +0 -1
  838. data/spec/support/models/hole.rb +0 -1
  839. data/spec/support/models/home.rb +1 -1
  840. data/spec/support/models/house.rb +2 -2
  841. data/spec/support/models/html_writer.rb +0 -1
  842. data/spec/support/models/id_key.rb +3 -3
  843. data/spec/support/models/idnodef.rb +0 -1
  844. data/spec/support/models/image.rb +0 -1
  845. data/spec/support/models/implant.rb +1 -2
  846. data/spec/support/models/instrument.rb +2 -3
  847. data/spec/support/models/item.rb +2 -2
  848. data/spec/support/models/jar.rb +1 -2
  849. data/spec/support/models/kaleidoscope.rb +1 -1
  850. data/spec/support/models/kangaroo.rb +1 -1
  851. data/spec/support/models/label.rb +2 -2
  852. data/spec/support/models/language.rb +1 -1
  853. data/spec/support/models/lat_lng.rb +0 -1
  854. data/spec/support/models/league.rb +1 -1
  855. data/spec/support/models/learner.rb +0 -1
  856. data/spec/support/models/line_item.rb +1 -1
  857. data/spec/support/models/location.rb +1 -1
  858. data/spec/support/models/login.rb +1 -2
  859. data/spec/support/models/manufacturer.rb +0 -1
  860. data/spec/support/models/meat.rb +1 -1
  861. data/spec/support/models/membership.rb +1 -1
  862. data/spec/support/models/message.rb +1 -2
  863. data/spec/support/models/minim.rb +0 -1
  864. data/spec/support/models/mixed_drink.rb +1 -1
  865. data/spec/support/models/modifier_models.rb +25 -0
  866. data/spec/support/models/mop.rb +0 -1
  867. data/spec/support/models/movie.rb +1 -1
  868. data/spec/support/models/my_hash.rb +1 -2
  869. data/spec/support/models/name.rb +4 -5
  870. data/spec/support/models/name_only.rb +0 -1
  871. data/spec/support/models/node.rb +1 -1
  872. data/spec/support/models/note.rb +3 -3
  873. data/spec/support/models/nut.rb +0 -1
  874. data/spec/support/models/odd.rb +1 -1
  875. data/spec/support/models/order.rb +1 -1
  876. data/spec/support/models/ordered_post.rb +1 -1
  877. data/spec/support/models/ordered_preference.rb +1 -1
  878. data/spec/support/models/oscar.rb +1 -1
  879. data/spec/support/models/other_owner_object.rb +0 -1
  880. data/spec/support/models/override.rb +3 -11
  881. data/spec/support/models/ownable.rb +1 -1
  882. data/spec/support/models/owner.rb +1 -1
  883. data/spec/support/models/pack.rb +0 -1
  884. data/spec/support/models/page.rb +3 -3
  885. data/spec/support/models/page_question.rb +1 -1
  886. data/spec/support/models/palette.rb +2 -2
  887. data/spec/support/models/parent.rb +2 -2
  888. data/spec/support/models/parent_doc.rb +1 -1
  889. data/spec/support/models/passport.rb +0 -1
  890. data/spec/support/models/patient.rb +2 -2
  891. data/spec/support/models/pdf_writer.rb +0 -1
  892. data/spec/support/models/pencil.rb +0 -1
  893. data/spec/support/models/person.rb +32 -28
  894. data/spec/support/models/pet.rb +1 -1
  895. data/spec/support/models/pet_owner.rb +1 -1
  896. data/spec/support/models/phone.rb +1 -2
  897. data/spec/support/models/piano.rb +0 -1
  898. data/spec/support/models/pizza.rb +1 -1
  899. data/spec/support/models/player.rb +5 -5
  900. data/spec/support/models/post.rb +12 -12
  901. data/spec/support/models/post_genre.rb +1 -1
  902. data/spec/support/models/powerup.rb +1 -2
  903. data/spec/support/models/preference.rb +2 -2
  904. data/spec/support/models/princess.rb +1 -1
  905. data/spec/support/models/product.rb +3 -3
  906. data/spec/support/models/profile.rb +2 -1
  907. data/spec/support/models/pronunciation.rb +1 -1
  908. data/spec/support/models/pub.rb +2 -2
  909. data/spec/support/models/publication/encyclopedia.rb +0 -1
  910. data/spec/support/models/publication/review.rb +0 -1
  911. data/spec/support/models/publication.rb +0 -1
  912. data/spec/support/models/purchase.rb +1 -1
  913. data/spec/support/models/purchased_item.rb +1 -1
  914. data/spec/support/models/question.rb +2 -2
  915. data/spec/support/models/quiz.rb +1 -1
  916. data/spec/support/models/rating.rb +1 -1
  917. data/spec/support/models/record.rb +2 -3
  918. data/spec/support/models/registry.rb +1 -1
  919. data/spec/support/models/role.rb +1 -1
  920. data/spec/support/models/root_category.rb +1 -1
  921. data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
  922. data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
  923. data/spec/support/models/sandbox/sandbox_message.rb +0 -1
  924. data/spec/support/models/sandbox/sandbox_user.rb +0 -1
  925. data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
  926. data/spec/support/models/sandwich.rb +1 -1
  927. data/spec/support/models/scheduler.rb +0 -1
  928. data/spec/support/models/school.rb +0 -1
  929. data/spec/support/models/scribe.rb +1 -1
  930. data/spec/support/models/sealer.rb +0 -1
  931. data/spec/support/models/seat.rb +0 -1
  932. data/spec/support/models/seo.rb +1 -1
  933. data/spec/support/models/series.rb +1 -1
  934. data/spec/support/models/server.rb +1 -1
  935. data/spec/support/models/service.rb +2 -2
  936. data/spec/support/models/shape.rb +3 -3
  937. data/spec/support/models/shelf.rb +1 -1
  938. data/spec/support/models/shield.rb +2 -2
  939. data/spec/support/models/shipment_address.rb +0 -1
  940. data/spec/support/models/shipping_container.rb +1 -1
  941. data/spec/support/models/shipping_pack.rb +0 -1
  942. data/spec/support/models/shirt.rb +0 -1
  943. data/spec/support/models/shop.rb +2 -2
  944. data/spec/support/models/short_agent.rb +0 -1
  945. data/spec/support/models/short_quiz.rb +1 -1
  946. data/spec/support/models/simple.rb +1 -1
  947. data/spec/support/models/slave.rb +1 -1
  948. data/spec/support/models/song.rb +1 -2
  949. data/spec/support/models/sound.rb +2 -2
  950. data/spec/support/models/spacer.rb +0 -1
  951. data/spec/support/models/square.rb +0 -1
  952. data/spec/support/models/staff.rb +0 -1
  953. data/spec/support/models/store_as_dup_test1.rb +2 -2
  954. data/spec/support/models/store_as_dup_test2.rb +1 -1
  955. data/spec/support/models/store_as_dup_test3.rb +2 -2
  956. data/spec/support/models/store_as_dup_test4.rb +1 -1
  957. data/spec/support/models/strategy.rb +0 -1
  958. data/spec/support/models/student.rb +1 -2
  959. data/spec/support/models/sub_item.rb +0 -1
  960. data/spec/support/models/subscription.rb +2 -2
  961. data/spec/support/models/survey.rb +2 -2
  962. data/spec/support/models/symptom.rb +2 -2
  963. data/spec/support/models/system_role.rb +2 -3
  964. data/spec/support/models/tag.rb +2 -2
  965. data/spec/support/models/target.rb +1 -1
  966. data/spec/support/models/template.rb +1 -1
  967. data/spec/support/models/thing.rb +1 -1
  968. data/spec/support/models/threadlocker.rb +0 -1
  969. data/spec/support/models/title.rb +0 -1
  970. data/spec/support/models/tool.rb +3 -3
  971. data/spec/support/models/topping.rb +1 -1
  972. data/spec/support/models/toy.rb +0 -1
  973. data/spec/support/models/track.rb +1 -1
  974. data/spec/support/models/translation.rb +1 -1
  975. data/spec/support/models/tree.rb +2 -3
  976. data/spec/support/models/truck.rb +0 -1
  977. data/spec/support/models/updatable.rb +0 -1
  978. data/spec/support/models/user.rb +3 -4
  979. data/spec/support/models/user_account.rb +3 -3
  980. data/spec/support/models/validation_callback.rb +4 -4
  981. data/spec/support/models/vehicle.rb +2 -3
  982. data/spec/support/models/version.rb +1 -1
  983. data/spec/support/models/vertex.rb +0 -1
  984. data/spec/support/models/vet_visit.rb +1 -1
  985. data/spec/support/models/video.rb +2 -2
  986. data/spec/support/models/video_game.rb +0 -1
  987. data/spec/support/models/washer.rb +0 -1
  988. data/spec/support/models/weapon.rb +1 -2
  989. data/spec/support/models/wiki_page.rb +2 -3
  990. data/spec/support/models/word.rb +2 -2
  991. data/spec/support/models/word_origin.rb +1 -2
  992. data/spec/support/models/writer.rb +3 -3
  993. data/spec/support/rails_mock.rb +7 -12
  994. data/spec/support/shared/time.rb +0 -1
  995. data/spec/support/sinatra_mock.rb +4 -2
  996. data/spec/support/spec_config.rb +19 -18
  997. metadata +14 -2
@@ -1,92 +1,85 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
- require "spec_helper"
3
+ require 'spec_helper'
5
4
 
6
- require_relative './copyable_spec_models'
5
+ require_relative 'copyable_spec_models'
7
6
 
8
7
  describe Mongoid::Copyable do
9
-
10
- [ :clone, :dup ].each do |method|
11
-
8
+ %i[clone dup].each do |method|
12
9
  describe "##{method}" do
13
-
14
10
  let(:person) do
15
11
  Person.new(
16
- title: "Sir",
12
+ title: 'Sir',
17
13
  version: 4,
18
14
  created_at: Time.now,
19
15
  updated_at: Time.now,
20
- desc: "description"
16
+ desc: 'description'
21
17
  ) do |p|
22
18
  p.owner_id = 5
23
19
  end
24
20
  end
25
21
 
26
22
  let!(:address) do
27
- person.addresses.build(street: "Bond", name: "Bond")
23
+ person.addresses.build(street: 'Bond', name: 'Bond')
28
24
  end
29
25
 
30
26
  let!(:name) do
31
- person.build_name(first_name: "Judy")
27
+ person.build_name(first_name: 'Judy')
32
28
  end
33
29
 
34
30
  let!(:posts) do
35
- person.posts.build(title: "testing")
31
+ person.posts.build(title: 'testing')
36
32
  end
37
33
 
38
34
  let!(:game) do
39
- person.build_game(name: "Tron")
35
+ person.build_game(name: 'Tron')
40
36
  end
41
37
 
42
38
  let!(:name_translations) do
43
39
  person.name.translations.build(language: 'en')
44
40
  end
45
41
 
46
- context "when the document has an id field in the database" do
47
-
42
+ context 'when the document has an id field in the database' do
48
43
  let!(:band) do
49
- Band.create!(name: "Tool")
44
+ Band.create!(name: 'Tool')
50
45
  end
51
-
52
- before do
53
- Band.collection.find(_id: band.id).update_one("$set" => { "id" => 1234 })
54
- end
55
-
56
46
  let!(:cloned) do
57
47
  band.reload.send(method)
58
48
  end
59
49
 
60
- it "does not set the id field as the _id" do
61
- expect(cloned.id).to_not eq(1234)
50
+ before do
51
+ Band.collection.find(_id: band.id).update_one('$set' => { 'id' => 1234 })
62
52
  end
63
- end
64
53
 
65
- context "when a document has fields from a legacy schema" do
54
+ it 'does not set the id field as the _id' do
55
+ expect(cloned.id).not_to eq(1234)
56
+ end
57
+ end
66
58
 
59
+ context 'when a document has fields from a legacy schema' do
67
60
  shared_examples 'behaves as expected' do
68
61
  let!(:instance) do
69
- cls.create!(name: "test")
62
+ cls.create!(name: 'test')
70
63
  end
71
64
 
72
65
  before do
73
- legacy_fields = { "this_is_not_a_field" => 1, "this_legacy_field_is_nil" => nil }
74
- cls.collection.find(_id: instance.id).update_one("$set" => legacy_fields)
66
+ legacy_fields = { 'this_is_not_a_field' => 1, 'this_legacy_field_is_nil' => nil }
67
+ cls.collection.find(_id: instance.id).update_one('$set' => legacy_fields)
75
68
  end
76
69
 
77
70
  let(:cloned) do
78
71
  instance.reload.send(method)
79
72
  end
80
73
 
81
- it "sets the legacy attribute" do
74
+ it 'sets the legacy attribute' do
82
75
  expect(cloned.attributes['this_is_not_a_field']).to eq(1)
83
76
  end
84
77
 
85
- it "contains legacy attributes that are nil" do
78
+ it 'contains legacy attributes that are nil' do
86
79
  expect(cloned.attributes.key?('this_legacy_field_is_nil')).to eq(true)
87
80
  end
88
81
 
89
- it "copies the known attributes" do
82
+ it 'copies the known attributes' do
90
83
  expect(cloned.name).to eq('test')
91
84
  end
92
85
 
@@ -115,18 +108,14 @@ describe Mongoid::Copyable do
115
108
 
116
109
  include_examples 'behaves as expected'
117
110
  end
118
-
119
111
  end
120
112
 
121
- context "when using store_as" do
122
-
123
- context "and dynamic attributes are not set" do
124
-
113
+ context 'when using store_as' do
114
+ context 'and dynamic attributes are not set' do
125
115
  context 'embeds_one' do
126
-
127
- it "clones" do
128
- t = StoreAsDupTest1.new(:name => "hi")
129
- t.build_store_as_dup_test2(:name => "there")
116
+ it 'clones' do
117
+ t = StoreAsDupTest1.new(name: 'hi')
118
+ t.build_store_as_dup_test2(name: 'there')
130
119
  t.save!
131
120
  copy = t.send(method)
132
121
  expect(copy.object_id).not_to eq(t.object_id)
@@ -135,10 +124,8 @@ describe Mongoid::Copyable do
135
124
  end
136
125
 
137
126
  context 'embeds_many' do
138
-
139
-
140
- it "clones" do
141
- t = StoreAsDupTest3.new(:name => "hi")
127
+ it 'clones' do
128
+ t = StoreAsDupTest3.new(name: 'hi')
142
129
  t.store_as_dup_test4s << StoreAsDupTest4.new
143
130
  t.save!
144
131
  copy = t.send(method)
@@ -164,13 +151,13 @@ describe Mongoid::Copyable do
164
151
  end
165
152
  end
166
153
 
167
- context "when cloning a document with multiple languages field" do
154
+ context 'when cloning a document with multiple languages field' do
168
155
  with_default_i18n_configs
169
156
 
170
157
  before do
171
158
  I18n.locale = 'pt_BR'
172
- person.desc = "descrição"
173
- person.addresses.first.name = "descrição"
159
+ person.desc = 'descrição'
160
+ person.addresses.first.name = 'descrição'
174
161
  person.save!
175
162
  end
176
163
 
@@ -182,64 +169,56 @@ describe Mongoid::Copyable do
182
169
  from_db.send(method)
183
170
  end
184
171
 
185
- it "sets the pt_BR version" do
172
+ it 'sets the pt_BR version' do
186
173
  I18n.locale = 'pt_BR'
187
- expect(copy.desc).to eq("descrição")
174
+ expect(copy.desc).to eq('descrição')
188
175
  end
189
176
 
190
- it "sets the english version" do
177
+ it 'sets the english version' do
191
178
  I18n.locale = :en
192
- expect(copy.desc).to eq("description")
179
+ expect(copy.desc).to eq('description')
193
180
  end
194
181
 
195
- it "sets to nil an nonexistent lang" do
182
+ it 'sets to nil an nonexistent lang' do
196
183
  I18n.locale = :fr
197
184
  expect(copy.desc).to be_nil
198
185
  end
199
186
 
200
187
  it 'sets embedded translations' do
201
188
  I18n.locale = 'pt_BR'
202
- expect(copy.addresses.first.name).to eq("descrição")
189
+ expect(copy.addresses.first.name).to eq('descrição')
203
190
  end
204
191
 
205
192
  it 'sets embedded english version' do
206
193
  I18n.locale = :en
207
- expect(copy.addresses.first.name).to eq("Bond")
194
+ expect(copy.addresses.first.name).to eq('Bond')
208
195
  end
209
196
  end
210
197
 
211
- context "when cloning a document with polymorphic embedded documents with multiple language field" do
198
+ context 'when cloning a document with polymorphic embedded documents with multiple language field' do
212
199
  with_default_i18n_configs
213
200
 
214
- let!(:shipment_address) do
215
- person.addresses.build({ shipping_name: "Title" }, ShipmentAddress)
216
- end
201
+ let(:shipment_address) { person.addresses.build({ shipping_name: 'Title' }, ShipmentAddress) }
202
+ let(:from_db) { Person.find(person.id) }
203
+ let(:copy) { from_db.send(method) }
217
204
 
218
205
  before do
206
+ shipment_address
207
+
219
208
  I18n.locale = 'pt_BR'
220
- person.addresses.type(ShipmentAddress).each { |address| address.shipping_name = "Título" }
209
+ person.addresses.type(ShipmentAddress).each { |address| address.shipping_name = 'Título' }
221
210
  person.save!
222
211
  end
223
212
 
224
- let!(:from_db) do
225
- Person.find(person.id)
226
- end
227
-
228
- let(:copy) do
229
- from_db.send(method)
230
- end
231
-
232
213
  it 'sets embedded translations' do
233
214
  I18n.locale = 'pt_BR'
234
215
  copy.addresses.type(ShipmentAddress).each do |address|
235
- expect(address.shipping_name).to eq("Título")
216
+ expect(address.shipping_name).to eq('Título')
236
217
  end
237
218
  end
238
-
239
219
  end
240
220
 
241
- context "when cloning a loaded document" do
242
-
221
+ context 'when cloning a loaded document' do
243
222
  before do
244
223
  person.save!
245
224
  end
@@ -252,23 +231,21 @@ describe Mongoid::Copyable do
252
231
  from_db.send(method)
253
232
  end
254
233
 
255
- it "marks the fields as dirty" do
256
- expect(copy.changes["age"]).to eq([ nil, 100 ])
234
+ it 'marks the fields as dirty' do
235
+ expect(copy.changes['age']).to eq([ nil, 100 ])
257
236
  end
258
237
 
259
- it "flags the document as changed" do
238
+ it 'flags the document as changed' do
260
239
  expect(copy).to be_changed
261
240
  end
262
241
 
263
- it "copies protected fields" do
242
+ it 'copies protected fields' do
264
243
  expect(copy.owner_id).to eq(5)
265
244
  end
266
245
  end
267
246
 
268
- context "when the document is new" do
269
-
270
- context "when there are changes" do
271
-
247
+ context 'when the document is new' do
248
+ context 'when there are changes' do
272
249
  let(:copy) do
273
250
  person.send(method)
274
251
  end
@@ -277,80 +254,79 @@ describe Mongoid::Copyable do
277
254
  person[:versions] = [ { number: 1 } ]
278
255
  end
279
256
 
280
- it "returns a new document" do
281
- expect(copy).to_not be_persisted
257
+ it 'returns a new document' do
258
+ expect(copy).not_to be_persisted
282
259
  end
283
260
 
284
- it "has an id" do
285
- expect(copy.id).to_not be_nil
261
+ it 'has an id' do
262
+ expect(copy.id).not_to be_nil
286
263
  end
287
264
 
288
- it "flags the document as changed" do
265
+ it 'flags the document as changed' do
289
266
  expect(copy).to be_changed
290
267
  end
291
268
 
292
- it "marks fields as dirty" do
293
- expect(copy.changes["age"]).to eq([ nil, 100 ])
269
+ it 'marks fields as dirty' do
270
+ expect(copy.changes['age']).to eq([ nil, 100 ])
294
271
  end
295
272
 
296
- it "has a different id from the original" do
297
- expect(copy.id).to_not eq(person.id)
273
+ it 'has a different id from the original' do
274
+ expect(copy.id).not_to eq(person.id)
298
275
  end
299
276
 
300
- it "returns a new instance" do
301
- expect(copy).to_not be_eql(person)
277
+ it 'returns a new instance' do
278
+ expect(copy).not_to eql(person)
302
279
  end
303
280
 
304
- it "copys embeds many documents" do
281
+ it 'copys embeds many documents' do
305
282
  expect(copy.addresses).to eq(person.addresses)
306
283
  end
307
284
 
308
- it "copys deep embeds many documents" do
285
+ it 'copys deep embeds many documents' do
309
286
  expect(copy.name.translations).to eq(person.name.translations)
310
287
  end
311
288
 
312
- it "sets the embedded many documents as new" do
289
+ it 'sets the embedded many documents as new' do
313
290
  expect(copy.addresses.first).to be_new_record
314
291
  end
315
292
 
316
- it "sets the deep embedded many documents as new" do
293
+ it 'sets the deep embedded many documents as new' do
317
294
  expect(copy.name.translations.first).to be_new_record
318
295
  end
319
296
 
320
- it "creates new embeds many instances" do
321
- expect(copy.addresses).to_not equal(person.addresses)
297
+ it 'creates new embeds many instances' do
298
+ expect(copy.addresses).not_to equal(person.addresses)
322
299
  end
323
300
 
324
- it "creates new deep embeds many instances" do
325
- expect(copy.name.translations).to_not equal(person.name.translations)
301
+ it 'creates new deep embeds many instances' do
302
+ expect(copy.name.translations).not_to equal(person.name.translations)
326
303
  end
327
304
 
328
- it "copys embeds one documents" do
305
+ it 'copys embeds one documents' do
329
306
  expect(copy.name).to eq(person.name)
330
307
  end
331
308
 
332
- it "flags the embeds one documents as new" do
309
+ it 'flags the embeds one documents as new' do
333
310
  expect(copy.name).to be_new_record
334
311
  end
335
312
 
336
- it "creates a new embeds one instance" do
337
- expect(copy.name).to_not equal(person.name)
313
+ it 'creates a new embeds one instance' do
314
+ expect(copy.name).not_to equal(person.name)
338
315
  end
339
316
 
340
- it "does not copy referenced many documents" do
317
+ it 'does not copy referenced many documents' do
341
318
  expect(copy.posts).to be_empty
342
319
  end
343
320
 
344
- it "does not copy references one documents" do
321
+ it 'does not copy references one documents' do
345
322
  expect(copy.game).to be_nil
346
323
  end
347
324
 
348
- it "copies localized fields" do
349
- expect(copy.desc).to eq("description")
325
+ it 'copies localized fields' do
326
+ expect(copy.desc).to eq('description')
350
327
  end
351
328
 
352
- context "when saving the copy" do
353
-
329
+ context 'when saving the copy' do
354
330
  let(:reloaded) do
355
331
  copy.reload
356
332
  end
@@ -359,23 +335,24 @@ describe Mongoid::Copyable do
359
335
  copy.save!(validate: false)
360
336
  end
361
337
 
362
- it "persists the attributes" do
363
- expect(reloaded.title).to eq("Sir")
338
+ it 'persists the attributes' do
339
+ expect(reloaded.title).to eq('Sir')
364
340
  end
365
341
 
366
- it "persists the embeds many relation" do
342
+ it 'persists the embeds many relation' do
367
343
  expect(reloaded.addresses).to eq(person.addresses)
368
344
  end
369
345
 
370
- it "persists the embeds one relation" do
346
+ it 'persists the embeds one relation' do
371
347
  expect(reloaded.name).to eq(person.name)
372
348
  end
373
349
  end
374
350
  end
375
351
 
376
- context "when using a custom discriminator_key" do
352
+ context 'when using a custom discriminator_key' do
377
353
  before do
378
- Person.discriminator_key = "dkey"
354
+ Person.discriminator_key = 'dkey'
355
+ person[:versions] = [ { number: 1 } ]
379
356
  end
380
357
 
381
358
  after do
@@ -386,48 +363,43 @@ describe Mongoid::Copyable do
386
363
  person.send(method)
387
364
  end
388
365
 
389
- before do
390
- person[:versions] = [ { number: 1 } ]
391
- end
392
-
393
- it "copys embeds many documents" do
366
+ it 'copys embeds many documents' do
394
367
  expect(copy.addresses).to eq(person.addresses)
395
368
  end
396
369
 
397
- it "copys deep embeds many documents" do
370
+ it 'copys deep embeds many documents' do
398
371
  expect(copy.name.translations).to eq(person.name.translations)
399
372
  end
400
373
 
401
- it "sets the embedded many documents as new" do
374
+ it 'sets the embedded many documents as new' do
402
375
  expect(copy.addresses.first).to be_new_record
403
376
  end
404
377
 
405
- it "sets the deep embedded many documents as new" do
378
+ it 'sets the deep embedded many documents as new' do
406
379
  expect(copy.name.translations.first).to be_new_record
407
380
  end
408
381
 
409
- it "creates new embeds many instances" do
410
- expect(copy.addresses).to_not equal(person.addresses)
382
+ it 'creates new embeds many instances' do
383
+ expect(copy.addresses).not_to equal(person.addresses)
411
384
  end
412
385
 
413
- it "creates new deep embeds many instances" do
414
- expect(copy.name.translations).to_not equal(person.name.translations)
386
+ it 'creates new deep embeds many instances' do
387
+ expect(copy.name.translations).not_to equal(person.name.translations)
415
388
  end
416
389
 
417
- it "copys embeds one documents" do
390
+ it 'copys embeds one documents' do
418
391
  expect(copy.name).to eq(person.name)
419
392
  end
420
393
 
421
- it "flags the embeds one documents as new" do
394
+ it 'flags the embeds one documents as new' do
422
395
  expect(copy.name).to be_new_record
423
396
  end
424
397
 
425
- it "creates a new embeds one instance" do
426
- expect(copy.name).to_not equal(person.name)
398
+ it 'creates a new embeds one instance' do
399
+ expect(copy.name).not_to equal(person.name)
427
400
  end
428
401
 
429
- context "when saving the copy" do
430
-
402
+ context 'when saving the copy' do
431
403
  let(:reloaded) do
432
404
  copy.reload
433
405
  end
@@ -436,29 +408,27 @@ describe Mongoid::Copyable do
436
408
  copy.save!(validate: false)
437
409
  end
438
410
 
439
- it "persists the attributes" do
440
- expect(reloaded.title).to eq("Sir")
411
+ it 'persists the attributes' do
412
+ expect(reloaded.title).to eq('Sir')
441
413
  end
442
414
 
443
- it "persists the embeds many relation" do
415
+ it 'persists the embeds many relation' do
444
416
  expect(reloaded.addresses).to eq(person.addresses)
445
417
  end
446
418
 
447
- it "persists the embeds one relation" do
419
+ it 'persists the embeds one relation' do
448
420
  expect(reloaded.name).to eq(person.name)
449
421
  end
450
422
  end
451
423
  end
452
424
  end
453
425
 
454
- context "when the document is not new" do
455
-
426
+ context 'when the document is not new' do
456
427
  before do
457
428
  person.new_record = false
458
429
  end
459
430
 
460
- context "when there are changes" do
461
-
431
+ context 'when there are changes' do
462
432
  let(:copy) do
463
433
  person.send(method)
464
434
  end
@@ -467,56 +437,55 @@ describe Mongoid::Copyable do
467
437
  person[:versions] = [ { number: 1 } ]
468
438
  end
469
439
 
470
- it "flags the document as changed" do
440
+ it 'flags the document as changed' do
471
441
  expect(copy).to be_changed
472
442
  end
473
443
 
474
- it "marks fields as dirty" do
475
- expect(copy.changes["age"]).to eq([ nil, 100 ])
444
+ it 'marks fields as dirty' do
445
+ expect(copy.changes['age']).to eq([ nil, 100 ])
476
446
  end
477
447
 
478
- it "returns a new document" do
479
- expect(copy).to_not be_persisted
448
+ it 'returns a new document' do
449
+ expect(copy).not_to be_persisted
480
450
  end
481
451
 
482
- it "has an id" do
483
- expect(copy.id).to_not be_nil
452
+ it 'has an id' do
453
+ expect(copy.id).not_to be_nil
484
454
  end
485
455
 
486
- it "has a different id from the original" do
487
- expect(copy.id).to_not eq(person.id)
456
+ it 'has a different id from the original' do
457
+ expect(copy.id).not_to eq(person.id)
488
458
  end
489
459
 
490
- it "returns a new instance" do
491
- expect(copy).to_not be_eql(person)
460
+ it 'returns a new instance' do
461
+ expect(copy).not_to eql(person)
492
462
  end
493
463
 
494
- it "copys embeds many documents" do
464
+ it 'copys embeds many documents' do
495
465
  expect(copy.addresses).to eq(person.addresses)
496
466
  end
497
467
 
498
- it "creates new embeds many instances" do
499
- expect(copy.addresses).to_not equal(person.addresses)
468
+ it 'creates new embeds many instances' do
469
+ expect(copy.addresses).not_to equal(person.addresses)
500
470
  end
501
471
 
502
- it "copys embeds one documents" do
472
+ it 'copys embeds one documents' do
503
473
  expect(copy.name).to eq(person.name)
504
474
  end
505
475
 
506
- it "creates a new embeds one instance" do
507
- expect(copy.name).to_not equal(person.name)
476
+ it 'creates a new embeds one instance' do
477
+ expect(copy.name).not_to equal(person.name)
508
478
  end
509
479
 
510
- it "does not copy referenced many documents" do
480
+ it 'does not copy referenced many documents' do
511
481
  expect(copy.posts).to be_empty
512
482
  end
513
483
 
514
- it "does not copy references one documents" do
484
+ it 'does not copy references one documents' do
515
485
  expect(copy.game).to be_nil
516
486
  end
517
487
 
518
- context "when saving the copy" do
519
-
488
+ context 'when saving the copy' do
520
489
  let(:reloaded) do
521
490
  copy.reload
522
491
  end
@@ -525,73 +494,71 @@ describe Mongoid::Copyable do
525
494
  copy.save!(validate: false)
526
495
  end
527
496
 
528
- it "persists the attributes" do
529
- expect(reloaded.title).to eq("Sir")
497
+ it 'persists the attributes' do
498
+ expect(reloaded.title).to eq('Sir')
530
499
  end
531
500
 
532
- it "persists the embeds many relation" do
501
+ it 'persists the embeds many relation' do
533
502
  expect(reloaded.addresses).to eq(person.addresses)
534
503
  end
535
504
 
536
- it "persists the embeds one relation" do
505
+ it 'persists the embeds one relation' do
537
506
  expect(reloaded.name).to eq(person.name)
538
507
  end
539
508
  end
540
509
  end
541
510
  end
542
511
 
543
- context "when the document is frozen" do
544
-
512
+ context 'when the document is frozen' do
545
513
  let!(:copy) do
546
514
  person.freeze.send(method)
547
515
  end
548
516
 
549
- it "returns a new document" do
550
- expect(copy).to_not be_persisted
517
+ it 'returns a new document' do
518
+ expect(copy).not_to be_persisted
551
519
  end
552
520
 
553
- it "has an id" do
554
- expect(copy.id).to_not be_nil
521
+ it 'has an id' do
522
+ expect(copy.id).not_to be_nil
555
523
  end
556
524
 
557
- it "has a different id from the original" do
558
- expect(copy.id).to_not eq(person.id)
525
+ it 'has a different id from the original' do
526
+ expect(copy.id).not_to eq(person.id)
559
527
  end
560
528
 
561
- it "returns a new instance" do
562
- expect(copy).to_not be_eql(person)
529
+ it 'returns a new instance' do
530
+ expect(copy).not_to eql(person)
563
531
  end
564
532
 
565
- it "copys embeds many documents" do
533
+ it 'copys embeds many documents' do
566
534
  expect(copy.addresses).to eq(person.addresses)
567
535
  end
568
536
 
569
- it "creates new embeds many instances" do
570
- expect(copy.addresses).to_not equal(person.addresses)
537
+ it 'creates new embeds many instances' do
538
+ expect(copy.addresses).not_to equal(person.addresses)
571
539
  end
572
540
 
573
- it "copys embeds one documents" do
541
+ it 'copys embeds one documents' do
574
542
  expect(copy.name).to eq(person.name)
575
543
  end
576
544
 
577
- it "creates a new embeds one instance" do
578
- expect(copy.name).to_not equal(person.name)
545
+ it 'creates a new embeds one instance' do
546
+ expect(copy.name).not_to equal(person.name)
579
547
  end
580
548
 
581
- it "does not copy referenced many documents" do
549
+ it 'does not copy referenced many documents' do
582
550
  expect(copy.posts).to be_empty
583
551
  end
584
552
 
585
- it "does not copy references one documents" do
553
+ it 'does not copy references one documents' do
586
554
  expect(copy.game).to be_nil
587
555
  end
588
556
 
589
- it "keeps the original attributes frozen" do
557
+ it 'keeps the original attributes frozen' do
590
558
  expect(person.attributes).to be_frozen
591
559
  end
592
560
 
593
- context "when saving the copy" do
594
-
561
+ context 'when saving the copy' do
595
562
  let(:reloaded) do
596
563
  copy.reload
597
564
  end
@@ -600,54 +567,43 @@ describe Mongoid::Copyable do
600
567
  copy.save!(validate: false)
601
568
  end
602
569
 
603
- it "persists the attributes" do
604
- expect(reloaded.title).to eq("Sir")
570
+ it 'persists the attributes' do
571
+ expect(reloaded.title).to eq('Sir')
605
572
  end
606
573
 
607
- it "persists the embeds many relation" do
574
+ it 'persists the embeds many relation' do
608
575
  expect(reloaded.addresses).to eq(person.addresses)
609
576
  end
610
577
 
611
- it "persists the embeds one relation" do
578
+ it 'persists the embeds one relation' do
612
579
  expect(reloaded.name).to eq(person.name)
613
580
  end
614
581
  end
615
582
  end
616
583
 
617
- context "when cloning a document with an embedded child class and a custom discriminator value" do
618
-
584
+ context 'when cloning a document with an embedded child class and a custom discriminator value' do
619
585
  before do
620
- ShipmentAddress.discriminator_value = "dvalue"
586
+ shipment_address
587
+ ShipmentAddress.discriminator_value = 'dvalue'
588
+ person.save!
621
589
  end
622
590
 
623
591
  after do
624
592
  ShipmentAddress.discriminator_value = nil
625
593
  end
626
594
 
627
- let!(:shipment_address) do
628
- person.addresses.build({}, ShipmentAddress)
629
- end
595
+ let(:shipment_address) { person.addresses.build({}, ShipmentAddress) }
596
+ let(:from_db) { Person.find(person.id) }
597
+ let(:copy) { from_db.send(method) }
630
598
 
631
- before do
632
- person.save!
633
- end
634
-
635
- let!(:from_db) do
636
- Person.find(person.id)
637
- end
638
-
639
- let(:copy) do
640
- from_db.send(method)
641
- end
642
-
643
- it "copys embeds many documents" do
599
+ it 'copys embeds many documents' do
644
600
  expect(copy.addresses).to eq(person.addresses)
645
601
  end
646
602
  end
647
603
 
648
604
  context 'when cloning a document with embedded child that uses inheritance' do
649
605
  let(:original) do
650
- CopyableSpec::A.new(influencers: [child_cls.new])
606
+ CopyableSpec::A.new(influencers: [ child_cls.new ])
651
607
  end
652
608
 
653
609
  let(:copy) do
@@ -662,7 +618,7 @@ describe Mongoid::Copyable do
662
618
  before do
663
619
  # When embedded class is the root in hierarchy, their
664
620
  # discriminator value is not explicitly stored.
665
- child_cls.discriminator_mapping[child_cls.name].should be nil
621
+ child_cls.discriminator_mapping[child_cls.name].should be_nil
666
622
  end
667
623
 
668
624
  it 'works' do
@@ -679,7 +635,7 @@ describe Mongoid::Copyable do
679
635
  before do
680
636
  # When embedded class is a leaf in hierarchy, their
681
637
  # discriminator value is explicitly stored.
682
- child_cls.discriminator_mapping[child_cls.name].should_not be nil
638
+ child_cls.discriminator_mapping[child_cls.name].should_not be_nil
683
639
  end
684
640
 
685
641
  it 'works' do
@@ -690,10 +646,8 @@ describe Mongoid::Copyable do
690
646
  end
691
647
  end
692
648
 
693
- context "when fields are removed before cloning" do
694
-
695
- context "when using embeds_one associations" do
696
-
649
+ context 'when fields are removed before cloning' do
650
+ context 'when using embeds_one associations' do
697
651
  before do
698
652
  class CloneParent
699
653
  include Mongoid::Document
@@ -722,7 +676,6 @@ describe Mongoid::Copyable do
722
676
  field :e, type: :string
723
677
  field :f, type: :string
724
678
  end
725
-
726
679
  end
727
680
 
728
681
  after do
@@ -731,15 +684,15 @@ describe Mongoid::Copyable do
731
684
  Object.send(:remove_const, :CloneGrandchild)
732
685
  end
733
686
 
734
- context "when removing from the parent" do
735
-
687
+ context 'when removing from the parent' do
736
688
  before do
737
- CloneParent.create(a: "1", b: "2")
689
+ CloneParent.create(a: '1', b: '2')
738
690
 
739
691
  Object.send(:remove_const, :CloneParent)
740
692
 
741
693
  class CloneParent
742
694
  include Mongoid::Document
695
+
743
696
  field :a, type: :string
744
697
  end
745
698
  end
@@ -753,22 +706,21 @@ describe Mongoid::Copyable do
753
706
  end.to raise_error(NoMethodError)
754
707
  end
755
708
 
756
- it "contains the missing field in the attributes" do
757
- expect(parent.attributes).to include({ "b" => "2" })
709
+ it 'contains the missing field in the attributes' do
710
+ expect(parent.attributes).to include({ 'b' => '2' })
758
711
  end
759
712
 
760
- it "clones correctly" do
713
+ it 'clones correctly' do
761
714
  expect(clone).to be_a(CloneParent)
762
- expect(clone.a).to eq("1")
763
- expect(clone.attributes).to include({ "b" => "2" })
715
+ expect(clone.a).to eq('1')
716
+ expect(clone.attributes).to include({ 'b' => '2' })
764
717
  end
765
718
  end
766
719
 
767
- context "when removing from the child" do
768
-
720
+ context 'when removing from the child' do
769
721
  before do
770
- parent = CloneParent.new(a: "1", b: "2")
771
- parent.clone_child = CloneChild.new(c: "3", d: "4")
722
+ parent = CloneParent.new(a: '1', b: '2')
723
+ parent.clone_child = CloneChild.new(c: '3', d: '4')
772
724
  parent.save
773
725
 
774
726
  Object.send(:remove_const, :CloneParent)
@@ -776,6 +728,7 @@ describe Mongoid::Copyable do
776
728
 
777
729
  class CloneParent
778
730
  include Mongoid::Document
731
+
779
732
  embeds_one :clone_child
780
733
  field :a, type: :string
781
734
  field :b, type: :string
@@ -783,6 +736,7 @@ describe Mongoid::Copyable do
783
736
 
784
737
  class CloneChild
785
738
  include Mongoid::Document
739
+
786
740
  embedded_in :clone_parent
787
741
  field :c, type: :string
788
742
  end
@@ -797,29 +751,28 @@ describe Mongoid::Copyable do
797
751
  end.to raise_error(NoMethodError)
798
752
  end
799
753
 
800
- it "contains the missing field in the attributes" do
801
- expect(parent.clone_child.attributes).to include({ "d" => "4" })
754
+ it 'contains the missing field in the attributes' do
755
+ expect(parent.clone_child.attributes).to include({ 'd' => '4' })
802
756
  end
803
757
 
804
- it "clones the parent correctly" do
758
+ it 'clones the parent correctly' do
805
759
  expect(clone).to be_a(CloneParent)
806
- expect(clone.a).to eq("1")
807
- expect(clone.b).to eq("2")
760
+ expect(clone.a).to eq('1')
761
+ expect(clone.b).to eq('2')
808
762
  end
809
763
 
810
- it "clones the child correctly" do
764
+ it 'clones the child correctly' do
811
765
  expect(clone.clone_child).to be_a(CloneChild)
812
- expect(clone.clone_child.c).to eq("3")
813
- expect(clone.clone_child.attributes).to include({ "d" => "4" })
766
+ expect(clone.clone_child.c).to eq('3')
767
+ expect(clone.clone_child.attributes).to include({ 'd' => '4' })
814
768
  end
815
769
  end
816
770
 
817
- context "when removing from the grandchild" do
818
-
771
+ context 'when removing from the grandchild' do
819
772
  before do
820
- parent = CloneParent.new(a: "1", b: "2")
821
- parent.clone_child = CloneChild.new(c: "3", d: "4")
822
- parent.clone_child.clone_grandchild = CloneGrandchild.new(e: "5", f: "6")
773
+ parent = CloneParent.new(a: '1', b: '2')
774
+ parent.clone_child = CloneChild.new(c: '3', d: '4')
775
+ parent.clone_child.clone_grandchild = CloneGrandchild.new(e: '5', f: '6')
823
776
  parent.save
824
777
 
825
778
  Object.send(:remove_const, :CloneParent)
@@ -828,6 +781,7 @@ describe Mongoid::Copyable do
828
781
 
829
782
  class CloneParent
830
783
  include Mongoid::Document
784
+
831
785
  embeds_one :clone_child
832
786
  field :a, type: :string
833
787
  field :b, type: :string
@@ -835,6 +789,7 @@ describe Mongoid::Copyable do
835
789
 
836
790
  class CloneChild
837
791
  include Mongoid::Document
792
+
838
793
  embedded_in :clone_parent
839
794
  embeds_one :clone_grandchild
840
795
  field :c, type: :string
@@ -843,6 +798,7 @@ describe Mongoid::Copyable do
843
798
 
844
799
  class CloneGrandchild
845
800
  include Mongoid::Document
801
+
846
802
  embedded_in :clone_child
847
803
  field :e, type: :string
848
804
  end
@@ -857,32 +813,31 @@ describe Mongoid::Copyable do
857
813
  end.to raise_error(NoMethodError)
858
814
  end
859
815
 
860
- it "contains the missing field in the attributes" do
861
- expect(parent.clone_child.clone_grandchild.attributes).to include({ "f" => "6" })
816
+ it 'contains the missing field in the attributes' do
817
+ expect(parent.clone_child.clone_grandchild.attributes).to include({ 'f' => '6' })
862
818
  end
863
819
 
864
- it "clones the parent correctly" do
820
+ it 'clones the parent correctly' do
865
821
  expect(clone).to be_a(CloneParent)
866
- expect(clone.a).to eq("1")
867
- expect(clone.b).to eq("2")
822
+ expect(clone.a).to eq('1')
823
+ expect(clone.b).to eq('2')
868
824
  end
869
825
 
870
- it "clones the child correctly" do
826
+ it 'clones the child correctly' do
871
827
  expect(clone.clone_child).to be_a(CloneChild)
872
- expect(clone.clone_child.c).to eq("3")
873
- expect(clone.clone_child.d).to eq("4")
828
+ expect(clone.clone_child.c).to eq('3')
829
+ expect(clone.clone_child.d).to eq('4')
874
830
  end
875
831
 
876
- it "clones the child correctly" do
832
+ it 'clones the child correctly' do
877
833
  expect(clone.clone_child.clone_grandchild).to be_a(CloneGrandchild)
878
- expect(clone.clone_child.clone_grandchild.e).to eq("5")
879
- expect(clone.clone_child.clone_grandchild.attributes).to include({ "f" => "6" })
834
+ expect(clone.clone_child.clone_grandchild.e).to eq('5')
835
+ expect(clone.clone_child.clone_grandchild.attributes).to include({ 'f' => '6' })
880
836
  end
881
837
  end
882
838
  end
883
839
 
884
- context "when using embeds_many associations" do
885
-
840
+ context 'when using embeds_many associations' do
886
841
  before do
887
842
  class CloneParent
888
843
  include Mongoid::Document
@@ -911,7 +866,6 @@ describe Mongoid::Copyable do
911
866
  field :e, type: :string
912
867
  field :f, type: :string
913
868
  end
914
-
915
869
  end
916
870
 
917
871
  after do
@@ -920,15 +874,15 @@ describe Mongoid::Copyable do
920
874
  Object.send(:remove_const, :CloneGrandchild)
921
875
  end
922
876
 
923
- context "when removing from the parent" do
924
-
877
+ context 'when removing from the parent' do
925
878
  before do
926
- CloneParent.create(a: "1", b: "2")
879
+ CloneParent.create(a: '1', b: '2')
927
880
 
928
881
  Object.send(:remove_const, :CloneParent)
929
882
 
930
883
  class CloneParent
931
884
  include Mongoid::Document
885
+
932
886
  field :a, type: :string
933
887
  end
934
888
  end
@@ -942,22 +896,21 @@ describe Mongoid::Copyable do
942
896
  end.to raise_error(NoMethodError)
943
897
  end
944
898
 
945
- it "contains the missing field in the attributes" do
946
- expect(parent.attributes).to include({ "b" => "2" })
899
+ it 'contains the missing field in the attributes' do
900
+ expect(parent.attributes).to include({ 'b' => '2' })
947
901
  end
948
902
 
949
- it "clones correctly" do
903
+ it 'clones correctly' do
950
904
  expect(clone).to be_a(CloneParent)
951
- expect(clone.a).to eq("1")
952
- expect(clone.attributes).to include({ "b" => "2" })
905
+ expect(clone.a).to eq('1')
906
+ expect(clone.attributes).to include({ 'b' => '2' })
953
907
  end
954
908
  end
955
909
 
956
- context "when removing from the child" do
957
-
910
+ context 'when removing from the child' do
958
911
  before do
959
- parent = CloneParent.new(a: "1", b: "2")
960
- parent.clone_children = [ CloneChild.new(c: "3", d: "4"), CloneChild.new(c: "3", d: "4") ]
912
+ parent = CloneParent.new(a: '1', b: '2')
913
+ parent.clone_children = [ CloneChild.new(c: '3', d: '4'), CloneChild.new(c: '3', d: '4') ]
961
914
  parent.save
962
915
 
963
916
  Object.send(:remove_const, :CloneParent)
@@ -965,6 +918,7 @@ describe Mongoid::Copyable do
965
918
 
966
919
  class CloneParent
967
920
  include Mongoid::Document
921
+
968
922
  embeds_many :clone_children
969
923
  field :a, type: :string
970
924
  field :b, type: :string
@@ -972,6 +926,7 @@ describe Mongoid::Copyable do
972
926
 
973
927
  class CloneChild
974
928
  include Mongoid::Document
929
+
975
930
  embedded_in :clone_parent
976
931
  field :c, type: :string
977
932
  end
@@ -988,34 +943,33 @@ describe Mongoid::Copyable do
988
943
  end
989
944
  end
990
945
 
991
- it "contains the missing field in the attributes" do
992
- expect(parent.clone_children[0].attributes).to include({ "d" => "4" })
993
- expect(parent.clone_children[1].attributes).to include({ "d" => "4" })
946
+ it 'contains the missing field in the attributes' do
947
+ expect(parent.clone_children[0].attributes).to include({ 'd' => '4' })
948
+ expect(parent.clone_children[1].attributes).to include({ 'd' => '4' })
994
949
  end
995
950
 
996
- it "clones the parent correctly" do
951
+ it 'clones the parent correctly' do
997
952
  expect(clone).to be_a(CloneParent)
998
- expect(clone.a).to eq("1")
999
- expect(clone.b).to eq("2")
953
+ expect(clone.a).to eq('1')
954
+ expect(clone.b).to eq('2')
1000
955
  end
1001
956
 
1002
- it "clones the child correctly" do
957
+ it 'clones the child correctly' do
1003
958
  expect(clone.clone_children.length).to eq(2)
1004
959
  clone.clone_children.each do |clone_child|
1005
960
  expect(clone_child).to be_a(CloneChild)
1006
- expect(clone_child.c).to eq("3")
1007
- expect(clone_child.attributes).to include({ "d" => "4" })
961
+ expect(clone_child.c).to eq('3')
962
+ expect(clone_child.attributes).to include({ 'd' => '4' })
1008
963
  end
1009
964
  end
1010
965
  end
1011
966
 
1012
- context "when removing from the grandchild" do
1013
-
967
+ context 'when removing from the grandchild' do
1014
968
  before do
1015
- parent = CloneParent.new(a: "1", b: "2")
1016
- parent.clone_children = [ CloneChild.new(c: "3", d: "4"), CloneChild.new(c: "3", d: "4") ]
969
+ parent = CloneParent.new(a: '1', b: '2')
970
+ parent.clone_children = [ CloneChild.new(c: '3', d: '4'), CloneChild.new(c: '3', d: '4') ]
1017
971
  parent.clone_children.each do |cc|
1018
- cc.clone_grandchildren = [ CloneGrandchild.new(e: "5", f: "6"), CloneGrandchild.new(e: "5", f: "6") ]
972
+ cc.clone_grandchildren = [ CloneGrandchild.new(e: '5', f: '6'), CloneGrandchild.new(e: '5', f: '6') ]
1019
973
  end
1020
974
  parent.save
1021
975
 
@@ -1025,6 +979,7 @@ describe Mongoid::Copyable do
1025
979
 
1026
980
  class CloneParent
1027
981
  include Mongoid::Document
982
+
1028
983
  embeds_many :clone_children
1029
984
  field :a, type: :string
1030
985
  field :b, type: :string
@@ -1032,6 +987,7 @@ describe Mongoid::Copyable do
1032
987
 
1033
988
  class CloneChild
1034
989
  include Mongoid::Document
990
+
1035
991
  embedded_in :clone_parent
1036
992
  embeds_many :clone_grandchildren
1037
993
  field :c, type: :string
@@ -1040,6 +996,7 @@ describe Mongoid::Copyable do
1040
996
 
1041
997
  class CloneGrandchild
1042
998
  include Mongoid::Document
999
+
1043
1000
  embedded_in :clone_child
1044
1001
  field :e, type: :string
1045
1002
  end
@@ -1058,44 +1015,43 @@ describe Mongoid::Copyable do
1058
1015
  end
1059
1016
  end
1060
1017
 
1061
- it "contains the missing field in the attributes" do
1018
+ it 'contains the missing field in the attributes' do
1062
1019
  parent.clone_children.each do |cc|
1063
1020
  cc.clone_grandchildren.each do |cg|
1064
- expect(cg.attributes).to include({ "f" => "6" })
1021
+ expect(cg.attributes).to include({ 'f' => '6' })
1065
1022
  end
1066
1023
  end
1067
1024
  end
1068
1025
 
1069
- it "clones the parent correctly" do
1026
+ it 'clones the parent correctly' do
1070
1027
  expect(clone).to be_a(CloneParent)
1071
- expect(clone.a).to eq("1")
1072
- expect(clone.b).to eq("2")
1028
+ expect(clone.a).to eq('1')
1029
+ expect(clone.b).to eq('2')
1073
1030
  end
1074
1031
 
1075
- it "clones the child correctly" do
1032
+ it 'clones the child correctly' do
1076
1033
  expect(clone.clone_children.length).to eq(2)
1077
1034
  clone.clone_children.each do |clone_child|
1078
1035
  expect(clone_child).to be_a(CloneChild)
1079
- expect(clone_child.c).to eq("3")
1080
- expect(clone_child.attributes).to include({ "d" => "4" })
1036
+ expect(clone_child.c).to eq('3')
1037
+ expect(clone_child.attributes).to include({ 'd' => '4' })
1081
1038
  end
1082
1039
  end
1083
1040
 
1084
- it "clones the grandchild correctly" do
1041
+ it 'clones the grandchild correctly' do
1085
1042
  parent.clone_children.each do |cc|
1086
1043
  expect(cc.clone_grandchildren.length).to eq(2)
1087
1044
  cc.clone_grandchildren.each do |cg|
1088
1045
  expect(cg).to be_a(CloneGrandchild)
1089
- expect(cg.e).to eq("5")
1090
- expect(cg.attributes).to include({ "f" => "6" })
1046
+ expect(cg.e).to eq('5')
1047
+ expect(cg.attributes).to include({ 'f' => '6' })
1091
1048
  end
1092
1049
  end
1093
1050
  end
1094
1051
  end
1095
1052
  end
1096
1053
 
1097
- context "when using embedded_in associations" do
1098
-
1054
+ context 'when using embedded_in associations' do
1099
1055
  before do
1100
1056
  class CloneParent
1101
1057
  include Mongoid::Document
@@ -1121,12 +1077,10 @@ describe Mongoid::Copyable do
1121
1077
  Object.send(:remove_const, :CloneChild)
1122
1078
  end
1123
1079
 
1124
-
1125
- context "when accessing the parent" do
1126
-
1080
+ context 'when accessing the parent' do
1127
1081
  before do
1128
- parent = CloneParent.new(a: "1", b: "2")
1129
- parent.clone_child = CloneChild.new(c: "3", d: "4")
1082
+ parent = CloneParent.new(a: '1', b: '2')
1083
+ parent.clone_child = CloneChild.new(c: '3', d: '4')
1130
1084
  parent.save
1131
1085
  end
1132
1086