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,23 +1,20 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
- require "spec_helper"
3
+ require 'spec_helper'
5
4
 
6
5
  describe Mongoid::Serializable do
7
-
8
- describe "#field_names" do
9
-
6
+ describe '#field_names' do
10
7
  let(:guitar) do
11
8
  Guitar.new
12
9
  end
13
10
 
14
- it "does not duplicate fields" do
15
- expect(guitar.send(:field_names, {})).to eq(guitar.fields.except("_type").keys.sort)
11
+ it 'does not duplicate fields' do
12
+ expect(guitar.send(:field_names, {})).to eq(guitar.fields.except('_type').keys.sort)
16
13
  end
17
14
 
18
- context "when using a custom discriminator_key" do
15
+ context 'when using a custom discriminator_key' do
19
16
  before do
20
- Instrument.discriminator_key = "dkey"
17
+ Instrument.discriminator_key = 'dkey'
21
18
  end
22
19
 
23
20
  after do
@@ -28,15 +25,14 @@ describe Mongoid::Serializable do
28
25
  Guitar.new
29
26
  end
30
27
 
31
- it "includes _type but does not include the new discriminator key" do
32
- expect(guitar.send(:field_names, {})).to eq(guitar.fields.except("dkey").keys.sort)
28
+ it 'includes _type but does not include the new discriminator key' do
29
+ expect(guitar.send(:field_names, {})).to eq(guitar.fields.except('dkey').keys.sort)
33
30
  end
34
31
  end
35
32
  end
36
33
 
37
- %i(include_root_in_json include_root_in_json?).each do |meth|
34
+ %i[include_root_in_json include_root_in_json?].each do |meth|
38
35
  describe ".#{meth}" do
39
-
40
36
  before do
41
37
  reload_model(:Minim)
42
38
  end
@@ -45,10 +41,10 @@ describe Mongoid::Serializable do
45
41
  reload_model(:Minim)
46
42
  end
47
43
 
48
- context "when global config is set to true" do
44
+ context 'when global config is set to true' do
49
45
  config_override :include_root_in_json, true
50
46
 
51
- it "returns true" do
47
+ it 'returns true' do
52
48
  expect(Minim.public_send(meth)).to be true
53
49
  end
54
50
 
@@ -63,10 +59,10 @@ describe Mongoid::Serializable do
63
59
  end
64
60
  end
65
61
 
66
- context "when global config set to false" do
62
+ context 'when global config set to false' do
67
63
  config_override :include_root_in_json, false
68
64
 
69
- it "returns false" do
65
+ it 'returns false' do
70
66
  expect(Minim.public_send(meth)).to be false
71
67
  end
72
68
 
@@ -82,7 +78,7 @@ describe Mongoid::Serializable do
82
78
  end
83
79
  end
84
80
 
85
- describe "#include_root_in_json" do
81
+ describe '#include_root_in_json' do
86
82
  config_override :include_root_in_json, false
87
83
 
88
84
  before do
@@ -97,14 +93,13 @@ describe Mongoid::Serializable do
97
93
  Minim.new
98
94
  end
99
95
 
100
- context "when global config is set to true" do
101
-
96
+ context 'when global config is set to true' do
102
97
  before do
103
98
  Minim.include_root_in_json.should be false
104
99
  Mongoid.include_root_in_json = true
105
100
  end
106
101
 
107
- it "returns true" do
102
+ it 'returns true' do
108
103
  expect(minim.public_send(meth)).to be true
109
104
  end
110
105
 
@@ -119,9 +114,8 @@ describe Mongoid::Serializable do
119
114
  end
120
115
  end
121
116
 
122
- context "when global config set to false" do
123
-
124
- it "returns false" do
117
+ context 'when global config set to false' do
118
+ it 'returns false' do
125
119
  expect(minim.public_send(meth)).to be false
126
120
  end
127
121
 
@@ -138,29 +132,26 @@ describe Mongoid::Serializable do
138
132
  end
139
133
  end
140
134
 
141
- describe "#serializable_hash" do
142
-
135
+ describe '#serializable_hash' do
143
136
  let(:person) do
144
137
  Person.new
145
138
  end
146
139
 
147
- context "when a dynamic attribute has the same name as a ruby method" do
148
-
140
+ context 'when a dynamic attribute has the same name as a ruby method' do
149
141
  before do
150
- person[:loop] = "testing"
142
+ person[:loop] = 'testing'
151
143
  end
152
144
 
153
145
  let(:attributes) do
154
146
  person.serializable_hash
155
147
  end
156
148
 
157
- it "grabs the attribute direct from the hash" do
158
- expect(attributes["loop"]).to eq("testing")
149
+ it 'grabs the attribute direct from the hash' do
150
+ expect(attributes['loop']).to eq('testing')
159
151
  end
160
152
  end
161
153
 
162
- context "when the method for a declared field is overridden" do
163
-
154
+ context 'when the method for a declared field is overridden' do
164
155
  before do
165
156
  person.override_me = 1
166
157
  end
@@ -169,110 +160,101 @@ describe Mongoid::Serializable do
169
160
  person.serializable_hash
170
161
  end
171
162
 
172
- it "uses the overridden method" do
173
- expect(attributes["override_me"]).to eq("1")
163
+ it 'uses the overridden method' do
164
+ expect(attributes['override_me']).to eq('1')
174
165
  end
175
166
  end
176
167
 
177
- context "when the model has embedded documents" do
178
-
168
+ context 'when the model has embedded documents' do
179
169
  let!(:address) do
180
- person.addresses.build(street: "test")
170
+ person.addresses.build(street: 'test')
181
171
  end
182
172
 
183
- context "when providing no custom options" do
184
-
173
+ context 'when providing no custom options' do
185
174
  let(:attributes) do
186
175
  person.serializable_hash
187
176
  end
188
177
 
189
- it "includes the embedded documents" do
190
- expect(attributes["addresses"].first).to eq(address.serializable_hash)
178
+ it 'includes the embedded documents' do
179
+ expect(attributes['addresses'].first).to eq(address.serializable_hash)
191
180
  end
192
181
  end
193
182
 
194
- context "when providing options" do
195
-
183
+ context 'when providing options' do
196
184
  let(:attributes) do
197
185
  person.serializable_hash(methods: :id, except: :_id)
198
186
  end
199
187
 
200
188
  let(:address_attributes) do
201
- attributes["addresses"].first
189
+ attributes['addresses'].first
202
190
  end
203
191
 
204
- it "uses the options" do
205
- expect(attributes["id"]).to eq(person.id)
192
+ it 'uses the options' do
193
+ expect(attributes['id']).to eq(person.id)
206
194
  end
207
195
 
208
- it "uses the options on embedded documents" do
209
- expect(address_attributes["id"]).to eq(address.id)
196
+ it 'uses the options on embedded documents' do
197
+ expect(address_attributes['id']).to eq(address.id)
210
198
  end
211
199
  end
212
200
 
213
- context "when nested multiple levels" do
214
-
201
+ context 'when nested multiple levels' do
215
202
  let!(:location) do
216
- address.locations.build(name: "home")
203
+ address.locations.build(name: 'home')
217
204
  end
218
205
 
219
206
  let(:attributes) do
220
207
  person.serializable_hash
221
208
  end
222
209
 
223
- it "includes the deeply nested document" do
224
- expect(attributes["addresses"][0]["locations"]).to_not be_empty
210
+ it 'includes the deeply nested document' do
211
+ expect(attributes['addresses'][0]['locations']).not_to be_empty
225
212
  end
226
213
  end
227
214
  end
228
215
 
229
- context "when the model has attributes that need conversion" do
230
-
216
+ context 'when the model has attributes that need conversion' do
231
217
  let(:date) do
232
218
  Date.new(1970, 1, 1)
233
219
  end
220
+ let(:attributes) do
221
+ person.serializable_hash
222
+ end
234
223
 
235
224
  before do
236
225
  person.dob = date
237
226
  end
238
227
 
239
- let(:attributes) do
240
- person.serializable_hash
241
- end
242
-
243
- it "converts the objects to the defined type" do
244
- expect(attributes["dob"]).to eq(date)
228
+ it 'converts the objects to the defined type' do
229
+ expect(attributes['dob']).to eq(date)
245
230
  end
246
231
  end
247
232
 
248
- context "when a model has defined fields" do
249
-
233
+ context 'when a model has defined fields' do
250
234
  let(:attributes) do
251
- { "title" => "President", "security_code" => "1234" }
235
+ { 'title' => 'President', 'security_code' => '1234' }
236
+ end
237
+ let(:field_names) do
238
+ person.fields.keys.map(&:to_s) - [ '_type' ]
252
239
  end
253
240
 
254
241
  before do
255
242
  person.write_attributes(attributes)
256
243
  end
257
244
 
258
- let(:field_names) do
259
- person.fields.keys.map(&:to_s) - ["_type"]
260
- end
261
-
262
- it "serializes assigned attributes" do
245
+ it 'serializes assigned attributes' do
263
246
  expect(person.serializable_hash).to include attributes
264
247
  end
265
248
 
266
- it "includes all defined fields except _type" do
249
+ it 'includes all defined fields except _type' do
267
250
  expect(person.serializable_hash.keys).to include(*field_names)
268
251
  end
269
252
 
270
- it "does not include _type" do
271
- expect(person.serializable_hash.keys).to_not include "_type"
253
+ it 'does not include _type' do
254
+ expect(person.serializable_hash.keys).not_to include '_type'
272
255
  end
273
256
 
274
- context "when providing options" do
275
-
257
+ context 'when providing options' do
276
258
  let(:options) do
277
259
  { only: :name }
278
260
  end
@@ -281,549 +263,530 @@ describe Mongoid::Serializable do
281
263
  person.serializable_hash(options)
282
264
  end
283
265
 
284
- it "does not modify the options in the argument" do
266
+ it 'does not modify the options in the argument' do
285
267
  expect(options[:except]).to be_nil
286
268
  end
287
269
  end
288
270
 
289
- context "when include_type_for_serialization is true" do
271
+ context 'when include_type_for_serialization is true' do
290
272
  config_override :include_type_for_serialization, true
291
273
 
292
- it "includes _type field" do
274
+ it 'includes _type field' do
293
275
  expect(person.serializable_hash.keys).to include '_type'
294
276
  end
295
277
  end
296
278
 
297
- context "when specifying which fields to only include" do
298
-
299
- it "only includes the specified fields" do
300
- expect(person.serializable_hash(only: [:title])).to eq(
301
- { "title" => attributes["title"] }
279
+ context 'when specifying which fields to only include' do
280
+ it 'only includes the specified fields' do
281
+ expect(person.serializable_hash(only: [ :title ])).to eq(
282
+ { 'title' => attributes['title'] }
302
283
  )
303
284
  end
304
- end
305
285
 
306
- context "when specifying extra inclusions" do
286
+ context 'when serializable_hash_with_legacy_only == true' do # default for <= 9
287
+ config_override :serializable_hash_with_legacy_only, true
288
+
289
+ it 'includes all fields when passed an empty array' do
290
+ expect(person.serializable_hash(only: [])).to include attributes
291
+ end
292
+ end
293
+
294
+ context 'when serializable_hash_with_legacy_only == false' do # default for >= 10
295
+ config_override :serializable_hash_with_legacy_only, false
307
296
 
308
- it "includes the extra fields" do
297
+ it "doesn't include any fields when passed an empty array" do
298
+ expect(person.serializable_hash(only: [])).to be_empty
299
+ end
300
+ end
301
+ end
302
+
303
+ context 'when specifying extra inclusions' do
304
+ it 'includes the extra fields' do
309
305
  expect(person.serializable_hash(
310
306
  methods: [ :_type ]
311
- ).has_key?("_type")).to be true
307
+ ).has_key?('_type')).to be true
312
308
  end
313
309
  end
314
310
 
315
- context "when specifying which fields to exclude" do
316
-
317
- it "excludes the specified fields" do
318
- expect(person.serializable_hash(except: [:title])).to_not include(
319
- "title" => attributes["title"]
311
+ context 'when specifying which fields to exclude' do
312
+ it 'excludes the specified fields' do
313
+ expect(person.serializable_hash(except: [ :title ])).not_to include(
314
+ 'title' => attributes['title']
320
315
  )
321
316
  end
322
317
  end
323
318
 
324
- context "when only two attributes are loaded" do
319
+ context 'when only two attributes are loaded' do
325
320
  before do
326
321
  person.save!
327
322
  end
328
323
 
329
324
  let(:from_db) do
330
- Person.only("_id", "username").first
325
+ Person.only('_id', 'username').first
331
326
  end
332
327
 
333
328
  let(:hash) do
334
329
  from_db.serializable_hash
335
330
  end
336
331
 
337
- it "returns those two attributes only" do
338
- expect(hash.keys).to eq(["_id", "username"])
332
+ it 'returns those two attributes only' do
333
+ expect(hash.keys).to eq(%w[_id username])
339
334
  end
340
335
  end
341
336
  end
342
337
 
343
- context "when a model has dynamic fields" do
344
-
338
+ context 'when a model has dynamic fields' do
345
339
  let(:dynamic_field_name) do
346
- "dynamic_field_name"
340
+ 'dynamic_field_name'
347
341
  end
348
342
 
349
343
  let(:dynamic_value) do
350
- "dynamic_value"
344
+ 'dynamic_value'
351
345
  end
352
346
 
353
347
  before do
354
348
  person.write_attribute(dynamic_field_name, dynamic_value)
355
349
  end
356
350
 
357
- it "includes dynamic fields" do
351
+ it 'includes dynamic fields' do
358
352
  expect(person.serializable_hash[dynamic_field_name]).to eq(dynamic_value)
359
353
  end
360
354
 
361
- context "when specifying which dynamic fields to only include" do
362
-
363
- it "only includes the specified dynamic fields" do
364
- expect(person.serializable_hash(only: [dynamic_field_name])).to eq(
355
+ context 'when specifying which dynamic fields to only include' do
356
+ it 'only includes the specified dynamic fields' do
357
+ expect(person.serializable_hash(only: [ dynamic_field_name ])).to eq(
365
358
  { dynamic_field_name => dynamic_value }
366
359
  )
367
360
  end
368
361
  end
369
362
 
370
- context "when specified which dynamic fields to exclude" do
371
-
372
- it "excludes the specified fields" do
373
- expect(person.serializable_hash(except: [dynamic_field_name])).to_not include(
363
+ context 'when specified which dynamic fields to exclude' do
364
+ it 'excludes the specified fields' do
365
+ expect(person.serializable_hash(except: [ dynamic_field_name ])).not_to include(
374
366
  dynamic_field_name => dynamic_value
375
367
  )
376
368
  end
377
369
  end
378
370
  end
379
371
 
380
- context "when a model has relations" do
381
-
372
+ context 'when a model has relations' do
382
373
  let(:attributes) do
383
- { "title" => "President", "security_code" => "1234" }
374
+ { 'title' => 'President', 'security_code' => '1234' }
384
375
  end
385
376
 
386
377
  before do
387
378
  person.write_attributes(attributes)
388
379
  end
389
380
 
390
- context "when the model is saved before the relation is added" do
391
-
381
+ context 'when the model is saved before the relation is added' do
392
382
  before do
393
383
  person.save!
394
384
  end
395
385
 
396
- context "when a model has an embeds many" do
397
-
386
+ context 'when a model has an embeds many' do
398
387
  let!(:address_one) do
399
- person.addresses.build(street: "Kudamm")
388
+ person.addresses.build(street: 'Kudamm')
400
389
  end
401
390
 
402
391
  before do
403
392
  person.save!
404
393
  end
405
394
 
406
- it "includes the relation" do
395
+ it 'includes the relation' do
407
396
  expect(person.serializable_hash.keys).to include('addresses')
408
397
  end
409
398
  end
410
399
 
411
- context "when a model has an embeds one" do
400
+ context 'when a model has an embeds one' do
412
401
  let!(:name) do
413
- person.build_name(first_name: "Leo", last_name: "Marvin")
402
+ person.build_name(first_name: 'Leo', last_name: 'Marvin')
414
403
  end
415
404
 
416
405
  before do
417
406
  person.save!
418
407
  end
419
408
 
420
- it "includes the relation" do
409
+ it 'includes the relation' do
421
410
  expect(person.serializable_hash.keys).to include('name')
422
411
  end
423
412
  end
424
413
  end
425
414
 
426
- context "when the model is saved after the relation is added" do
427
-
428
- context "when a model has an embeds many" do
429
-
415
+ context 'when the model is saved after the relation is added' do
416
+ context 'when a model has an embeds many' do
430
417
  let!(:address_one) do
431
- person.addresses.build(street: "Kudamm")
418
+ person.addresses.build(street: 'Kudamm')
432
419
  end
433
420
 
434
421
  before do
435
422
  person.save!
436
423
  end
437
424
 
438
- it "includes the relation" do
425
+ it 'includes the relation' do
439
426
  expect(person.serializable_hash.keys).to include('addresses')
440
427
  end
441
428
  end
442
429
 
443
- context "when a model has an embeds one" do
430
+ context 'when a model has an embeds one' do
444
431
  let!(:name) do
445
- person.build_name(first_name: "Leo", last_name: "Marvin")
432
+ person.build_name(first_name: 'Leo', last_name: 'Marvin')
446
433
  end
447
434
 
448
435
  before do
449
436
  person.save!
450
437
  end
451
438
 
452
- it "includes the relation" do
439
+ it 'includes the relation' do
453
440
  expect(person.serializable_hash.keys).to include('name')
454
441
  end
455
442
  end
456
443
  end
457
444
  end
458
445
 
459
- context "when including methods" do
460
-
461
- it "includes the method result" do
462
- expect(person.serializable_hash(methods: [:foo])).to include(
463
- "foo" => person.foo
446
+ context 'when including methods' do
447
+ it 'includes the method result' do
448
+ expect(person.serializable_hash(methods: [ :foo ])).to include(
449
+ 'foo' => person.foo
464
450
  )
465
451
  end
466
452
  end
467
453
 
468
- context "when including relations" do
469
-
470
- context "when including a single relation" do
471
-
472
- context "when including an embeds many" do
473
-
454
+ context 'when including relations' do
455
+ context 'when including a single relation' do
456
+ context 'when including an embeds many' do
474
457
  let!(:address_one) do
475
- person.addresses.build(street: "Kudamm")
458
+ person.addresses.build(street: 'Kudamm')
476
459
  end
477
460
 
478
461
  let!(:address_two) do
479
- person.addresses.build(street: "Tauentzienstr")
462
+ person.addresses.build(street: 'Tauentzienstr')
480
463
  end
481
464
 
482
465
  let(:relation_hash) do
483
- hash["addresses"]
466
+ hash['addresses']
484
467
  end
485
468
 
486
- context "when the ids were not loaded" do
487
-
469
+ context 'when the ids were not loaded' do
488
470
  before do
489
471
  person.save!
490
472
  end
491
473
 
492
474
  let(:from_db) do
493
- Person.only("addresses.street").first
475
+ Person.only('addresses.street').first
494
476
  end
495
477
 
496
478
  let(:hash) do
497
479
  from_db.serializable_hash
498
480
  end
499
481
 
500
- it "does not generate new ids" do
482
+ it 'does not generate new ids' do
501
483
  pending
502
- fail
503
- expect(hash["addresses"].first["_id"]).to be_nil
484
+ raise
485
+ expect(hash['addresses'].first['_id']).to be_nil
504
486
  end
505
487
  end
506
488
 
507
- context "when providing the include as a symbol" do
508
-
489
+ context 'when providing the include as a symbol' do
509
490
  let(:hash) do
510
491
  person.serializable_hash(include: :addresses)
511
492
  end
512
493
 
513
- it "includes the first relation" do
494
+ it 'includes the first relation' do
514
495
  expect(relation_hash[0]).to include(
515
- { "_id" => "kudamm", "street" => "Kudamm" }
496
+ { '_id' => 'kudamm', 'street' => 'Kudamm' }
516
497
  )
517
498
  end
518
499
 
519
- it "includes the second relation" do
500
+ it 'includes the second relation' do
520
501
  expect(relation_hash[1]).to include(
521
- { "_id" => "tauentzienstr", "street" => "Tauentzienstr" }
502
+ { '_id' => 'tauentzienstr', 'street' => 'Tauentzienstr' }
522
503
  )
523
504
  end
524
505
  end
525
506
 
526
- context "when providing the include as an array" do
527
-
507
+ context 'when providing the include as an array' do
528
508
  let(:hash) do
529
509
  person.serializable_hash(include: [ :addresses ])
530
510
  end
531
511
 
532
- it "includes the first relation" do
512
+ it 'includes the first relation' do
533
513
  expect(relation_hash[0]).to include(
534
- { "_id" => "kudamm", "street" => "Kudamm" }
514
+ { '_id' => 'kudamm', 'street' => 'Kudamm' }
535
515
  )
536
516
  end
537
517
 
538
- it "includes the second relation" do
518
+ it 'includes the second relation' do
539
519
  expect(relation_hash[1]).to include(
540
- { "_id" => "tauentzienstr", "street" => "Tauentzienstr" }
520
+ { '_id' => 'tauentzienstr', 'street' => 'Tauentzienstr' }
541
521
  )
542
522
  end
543
523
  end
544
524
 
545
- context "when providing the include as a hash" do
546
-
547
- context "when including one level deep" do
548
-
525
+ context 'when providing the include as a hash' do
526
+ context 'when including one level deep' do
549
527
  let(:hash) do
550
528
  person.serializable_hash(include: { addresses: { except: :_id } })
551
529
  end
552
530
 
553
- it "includes the first relation sans exceptions" do
554
- expect(relation_hash[0]).to include({ "street" => "Kudamm" })
531
+ it 'includes the first relation sans exceptions' do
532
+ expect(relation_hash[0]).to include({ 'street' => 'Kudamm' })
555
533
  end
556
534
 
557
- it "includes the second relation sans exceptions" do
558
- expect(relation_hash[1]).to include({ "street" => "Tauentzienstr" })
535
+ it 'includes the second relation sans exceptions' do
536
+ expect(relation_hash[1]).to include({ 'street' => 'Tauentzienstr' })
559
537
  end
560
538
  end
561
539
 
562
- context "when including multiple levels deep" do
563
-
540
+ context 'when including multiple levels deep' do
564
541
  let!(:location) do
565
- address_one.locations.build(name: "Home")
542
+ address_one.locations.build(name: 'Home')
566
543
  end
567
544
 
568
545
  let(:hash) do
569
546
  person.serializable_hash(
570
547
  include: { addresses: {
571
548
  except: :_id, include: { locations: { except: :_id } }
572
- }
573
- })
549
+ } }
550
+ )
574
551
  end
575
552
 
576
- it "includes the first relation" do
577
- expect(relation_hash[0]["locations"].any? do |location|
578
- location["name"] == "Home"
553
+ it 'includes the first relation' do
554
+ expect(relation_hash[0]['locations'].any? do |location|
555
+ location['name'] == 'Home'
579
556
  end).to be true
580
557
  end
581
558
 
582
- context "after retrieved from database" do
583
-
559
+ context 'after retrieved from database' do
584
560
  let(:db_person) do
585
561
  Person.all.last
586
562
  end
587
563
 
588
564
  let!(:second_location) do
589
- address_two.locations.build(name: "Hotel")
565
+ address_two.locations.build(name: 'Hotel')
590
566
  end
591
567
 
592
568
  let(:hash) do
593
569
  db_person.serializable_hash(
594
570
  include: { addresses: {
595
571
  except: :_id, include: { locations: { except: :_id } }
596
- }
597
- })
572
+ } }
573
+ )
598
574
  end
599
575
 
600
576
  before do
601
577
  person.save!
602
578
  end
603
579
 
604
- it "includes the specific relations" do
605
- expect(relation_hash[0]["locations"].map do |location|
606
- location["name"]
607
- end).to include "Home"
608
- expect(relation_hash[1]["locations"].map do |location|
609
- location["name"]
610
- end).to include "Hotel"
580
+ it 'includes the specific relations' do
581
+ expect(relation_hash[0]['locations'].map do |location|
582
+ location['name']
583
+ end).to include 'Home'
584
+ expect(relation_hash[1]['locations'].map do |location|
585
+ location['name']
586
+ end).to include 'Hotel'
611
587
  end
612
588
  end
613
589
  end
614
590
 
615
- context "when defining a default exclusion" do
616
-
591
+ context 'when defining a default exclusion' do
617
592
  let!(:name) do
618
- person.build_name(first_name: "Sebastien")
593
+ person.build_name(first_name: 'Sebastien')
619
594
  end
620
595
 
621
596
  let(:hash) do
622
597
  person.serializable_hash(
623
598
  except: :_id,
624
- include: [ :addresses, :name ]
599
+ include: %i[addresses name]
625
600
  )
626
601
  end
627
602
 
628
- it "does not contain the root exclusion" do
629
- expect(hash["_id"]).to be_nil
603
+ it 'does not contain the root exclusion' do
604
+ expect(hash['_id']).to be_nil
630
605
  end
631
606
 
632
- it "does not include the embedded many exclusion" do
633
- expect(relation_hash[0]["_id"]).to be_nil
607
+ it 'does not include the embedded many exclusion' do
608
+ expect(relation_hash[0]['_id']).to be_nil
634
609
  end
635
610
 
636
- it "does not include the embedded one exclusion" do
637
- expect(hash["name"]["_id"]).to be_nil
611
+ it 'does not include the embedded one exclusion' do
612
+ expect(hash['name']['_id']).to be_nil
638
613
  end
639
614
  end
640
615
  end
641
616
  end
642
617
 
643
- context "when including an embeds one" do
644
-
618
+ context 'when including an embeds one' do
645
619
  let!(:name) do
646
- person.build_name(first_name: "Leo", last_name: "Marvin")
620
+ person.build_name(first_name: 'Leo', last_name: 'Marvin')
647
621
  end
648
622
 
649
623
  let(:relation_hash) do
650
- hash["name"]
624
+ hash['name']
651
625
  end
652
626
 
653
- context "when providing the include as a symbol" do
654
-
627
+ context 'when providing the include as a symbol' do
655
628
  let(:hash) do
656
629
  person.serializable_hash(include: :name)
657
630
  end
658
631
 
659
- it "includes the specified relation" do
632
+ it 'includes the specified relation' do
660
633
  expect(relation_hash).to include(
661
- { "_id" => "Leo-Marvin", "first_name" => "Leo", "last_name" => "Marvin" }
634
+ { '_id' => 'Leo-Marvin', 'first_name' => 'Leo', 'last_name' => 'Marvin' }
662
635
  )
663
636
  end
664
637
  end
665
638
 
666
- context "when providing the include as an array" do
667
-
639
+ context 'when providing the include as an array' do
668
640
  let(:hash) do
669
641
  person.serializable_hash(include: [ :name ])
670
642
  end
671
643
 
672
- it "includes the specified relation" do
644
+ it 'includes the specified relation' do
673
645
  expect(relation_hash).to include(
674
- { "_id" => "Leo-Marvin", "first_name" => "Leo", "last_name" => "Marvin" }
646
+ { '_id' => 'Leo-Marvin', 'first_name' => 'Leo', 'last_name' => 'Marvin' }
675
647
  )
676
648
  end
677
649
  end
678
650
 
679
- context "when providing the include as a hash" do
680
-
651
+ context 'when providing the include as a hash' do
681
652
  let(:hash) do
682
- person.serializable_hash(include: { name: { except: :_id }})
653
+ person.serializable_hash(include: { name: { except: :_id } })
683
654
  end
684
655
 
685
- it "includes the specified relation sans exceptions" do
656
+ it 'includes the specified relation sans exceptions' do
686
657
  expect(relation_hash).to include(
687
- { "first_name" => "Leo", "last_name" => "Marvin" }
658
+ { 'first_name' => 'Leo', 'last_name' => 'Marvin' }
688
659
  )
689
660
  end
690
661
  end
691
662
  end
692
663
 
693
- context "when including a references many" do
694
-
664
+ context 'when including a references many' do
695
665
  let!(:post_one) do
696
- person.posts.build(title: "First")
666
+ person.posts.build(title: 'First')
697
667
  end
698
668
 
699
669
  let!(:post_two) do
700
- person.posts.build(title: "Second")
670
+ person.posts.build(title: 'Second')
701
671
  end
702
672
 
703
673
  let(:relation_hash) do
704
- hash["posts"]
674
+ hash['posts']
705
675
  end
706
676
 
707
- context "when providing the include as a symbol" do
708
-
677
+ context 'when providing the include as a symbol' do
709
678
  let(:hash) do
710
679
  person.serializable_hash(include: :posts)
711
680
  end
712
681
 
713
- it "includes the specified relation" do
714
- expect(relation_hash).to_not be_nil
682
+ it 'includes the specified relation' do
683
+ expect(relation_hash).not_to be_nil
715
684
  end
716
685
 
717
- it "includes the first document related fields" do
718
- expect(relation_hash[0]["title"]).to eq("First")
686
+ it 'includes the first document related fields' do
687
+ expect(relation_hash[0]['title']).to eq('First')
719
688
  end
720
689
 
721
- it "includes the second document related fields" do
722
- expect(relation_hash[1]["title"]).to eq("Second")
690
+ it 'includes the second document related fields' do
691
+ expect(relation_hash[1]['title']).to eq('Second')
723
692
  end
724
693
  end
725
694
 
726
- context "when providing the include as an array" do
727
-
695
+ context 'when providing the include as an array' do
728
696
  let(:hash) do
729
697
  person.serializable_hash(include: [ :posts ])
730
698
  end
731
699
 
732
- it "includes the specified relation" do
733
- expect(relation_hash).to_not be_nil
700
+ it 'includes the specified relation' do
701
+ expect(relation_hash).not_to be_nil
734
702
  end
735
703
 
736
- it "includes the first document related fields" do
737
- expect(relation_hash[0]["title"]).to eq("First")
704
+ it 'includes the first document related fields' do
705
+ expect(relation_hash[0]['title']).to eq('First')
738
706
  end
739
707
 
740
- it "includes the second document related fields" do
741
- expect(relation_hash[1]["title"]).to eq("Second")
708
+ it 'includes the second document related fields' do
709
+ expect(relation_hash[1]['title']).to eq('Second')
742
710
  end
743
711
  end
744
712
 
745
- context "when providing the include as a hash" do
746
-
713
+ context 'when providing the include as a hash' do
747
714
  let(:hash) do
748
715
  person.serializable_hash(include: { posts: { except: :_id } })
749
716
  end
750
717
 
751
- it "includes the specified relation" do
752
- expect(relation_hash).to_not be_nil
718
+ it 'includes the specified relation' do
719
+ expect(relation_hash).not_to be_nil
753
720
  end
754
721
 
755
- it "includes the first document related fields" do
756
- expect(relation_hash[0]["title"]).to eq("First")
722
+ it 'includes the first document related fields' do
723
+ expect(relation_hash[0]['title']).to eq('First')
757
724
  end
758
725
 
759
- it "includes the second document related fields" do
760
- expect(relation_hash[1]["title"]).to eq("Second")
726
+ it 'includes the second document related fields' do
727
+ expect(relation_hash[1]['title']).to eq('Second')
761
728
  end
762
729
 
763
- it "does not include the first document exceptions" do
764
- expect(relation_hash[0]["_id"]).to be_nil
730
+ it 'does not include the first document exceptions' do
731
+ expect(relation_hash[0]['_id']).to be_nil
765
732
  end
766
733
 
767
- it "does not include the second document exceptions" do
768
- expect(relation_hash[1]["_id"]).to be_nil
734
+ it 'does not include the second document exceptions' do
735
+ expect(relation_hash[1]['_id']).to be_nil
769
736
  end
770
737
  end
771
738
  end
772
739
 
773
- context "when including a references many to many" do
774
-
740
+ context 'when including a references many to many' do
775
741
  let!(:preference_one) do
776
- person.preferences.build(name: "First")
742
+ person.preferences.build(name: 'First')
777
743
  end
778
744
 
779
745
  let!(:preference_two) do
780
- person.preferences.build(name: "Second")
746
+ person.preferences.build(name: 'Second')
781
747
  end
782
748
 
783
749
  let(:relation_hash) do
784
- hash["preferences"]
750
+ hash['preferences']
785
751
  end
786
752
 
787
- context "when providing the include as a symbol" do
788
-
753
+ context 'when providing the include as a symbol' do
789
754
  let(:hash) do
790
755
  person.serializable_hash(include: :preferences)
791
756
  end
792
757
 
793
- it "includes the specified relation" do
794
- expect(relation_hash).to_not be_nil
758
+ it 'includes the specified relation' do
759
+ expect(relation_hash).not_to be_nil
795
760
  end
796
761
 
797
- it "includes the first document related fields" do
798
- expect(relation_hash[0]["name"]).to eq("First")
762
+ it 'includes the first document related fields' do
763
+ expect(relation_hash[0]['name']).to eq('First')
799
764
  end
800
765
 
801
- it "includes the second document related fields" do
802
- expect(relation_hash[1]["name"]).to eq("Second")
766
+ it 'includes the second document related fields' do
767
+ expect(relation_hash[1]['name']).to eq('Second')
803
768
  end
804
769
  end
805
770
 
806
- context "when providing the include as an array" do
807
-
771
+ context 'when providing the include as an array' do
808
772
  let(:hash) do
809
773
  person.serializable_hash(include: [ :preferences ])
810
774
  end
811
775
 
812
- it "includes the specified relation" do
813
- expect(relation_hash).to_not be_nil
776
+ it 'includes the specified relation' do
777
+ expect(relation_hash).not_to be_nil
814
778
  end
815
779
 
816
- it "includes the first document related fields" do
817
- expect(relation_hash[0]["name"]).to eq("First")
780
+ it 'includes the first document related fields' do
781
+ expect(relation_hash[0]['name']).to eq('First')
818
782
  end
819
783
 
820
- it "includes the second document related fields" do
821
- expect(relation_hash[1]["name"]).to eq("Second")
784
+ it 'includes the second document related fields' do
785
+ expect(relation_hash[1]['name']).to eq('Second')
822
786
  end
823
787
  end
824
788
 
825
- context "when providing the include as a hash" do
826
-
789
+ context 'when providing the include as a hash' do
827
790
  let(:hash) do
828
791
  person.serializable_hash(
829
792
  include: {
@@ -835,28 +798,28 @@ describe Mongoid::Serializable do
835
798
  )
836
799
  end
837
800
 
838
- it "includes the specified relation" do
839
- expect(relation_hash).to_not be_nil
801
+ it 'includes the specified relation' do
802
+ expect(relation_hash).not_to be_nil
840
803
  end
841
804
 
842
- it "includes the first document related fields" do
843
- expect(relation_hash[0]["name"]).to eq("First")
805
+ it 'includes the first document related fields' do
806
+ expect(relation_hash[0]['name']).to eq('First')
844
807
  end
845
808
 
846
- it "includes the second document related fields" do
847
- expect(relation_hash[1]["name"]).to eq("Second")
809
+ it 'includes the second document related fields' do
810
+ expect(relation_hash[1]['name']).to eq('Second')
848
811
  end
849
812
 
850
- it "does not include the first document exceptions" do
851
- expect(relation_hash[0]["_id"]).to be_nil
813
+ it 'does not include the first document exceptions' do
814
+ expect(relation_hash[0]['_id']).to be_nil
852
815
  end
853
816
 
854
- it "does not include the second document exceptions" do
855
- expect(relation_hash[1]["_id"]).to be_nil
817
+ it 'does not include the second document exceptions' do
818
+ expect(relation_hash[1]['_id']).to be_nil
856
819
  end
857
820
 
858
- it "does not include the root exceptions" do
859
- expect(hash["preference_ids"]).to be_nil
821
+ it 'does not include the root exceptions' do
822
+ expect(hash['preference_ids']).to be_nil
860
823
  end
861
824
  end
862
825
  end
@@ -864,13 +827,16 @@ describe Mongoid::Serializable do
864
827
  end
865
828
  end
866
829
 
867
- describe "#to_json" do
868
-
830
+ describe '#to_json' do
869
831
  let(:account) do
870
832
  Account.new
871
833
  end
872
834
 
873
- context "when including root in json via Mongoid" do
835
+ let(:person) do
836
+ Person.new
837
+ end
838
+
839
+ context 'when including root in json via Mongoid' do
874
840
  config_override :include_root_in_json, false
875
841
 
876
842
  before do
@@ -878,13 +844,12 @@ describe Mongoid::Serializable do
878
844
  Mongoid.include_root_in_json = true
879
845
  end
880
846
 
881
- it "uses the mongoid configuration" do
882
- expect(JSON.parse(account.to_json)).to have_key("account")
847
+ it 'uses the mongoid configuration' do
848
+ expect(JSON.parse(account.to_json)).to have_key('account')
883
849
  end
884
850
  end
885
851
 
886
- context "when including root in json via class" do
887
-
852
+ context 'when including root in json via class' do
888
853
  before do
889
854
  account.include_root_in_json.should be false
890
855
  Account.include_root_in_json = true
@@ -894,54 +859,46 @@ describe Mongoid::Serializable do
894
859
  Account.include_root_in_json = false
895
860
  end
896
861
 
897
- it "uses the class configuration" do
898
- expect(JSON.parse(account.to_json)).to have_key("account")
862
+ it 'uses the class configuration' do
863
+ expect(JSON.parse(account.to_json)).to have_key('account')
899
864
  end
900
865
  end
901
866
 
902
- context "when not including root in json" do
903
-
867
+ context 'when not including root in json' do
904
868
  before do
905
869
  account.include_root_in_json.should be false
906
870
  end
907
871
 
908
- it "uses the mongoid configuration" do
909
- expect(JSON.parse(account.to_json)).not_to have_key("account")
872
+ it 'uses the mongoid configuration' do
873
+ expect(JSON.parse(account.to_json)).not_to have_key('account')
910
874
  end
911
875
  end
912
876
 
913
- let(:person) do
914
- Person.new
915
- end
916
-
917
- context "when serializing a relation directly" do
918
-
919
- context "when serializing an embeds many" do
920
-
877
+ context 'when serializing a relation directly' do
878
+ context 'when serializing an embeds many' do
921
879
  let!(:address) do
922
- person.addresses.build(street: "Kudamm")
880
+ person.addresses.build(street: 'Kudamm')
923
881
  end
924
882
 
925
883
  let(:json) do
926
884
  person.addresses.to_json
927
885
  end
928
886
 
929
- it "serializes only the relation" do
887
+ it 'serializes only the relation' do
930
888
  expect(json).to include(address.street)
931
889
  end
932
890
  end
933
891
 
934
- context "when serializing a references many" do
935
-
892
+ context 'when serializing a references many' do
936
893
  let!(:post) do
937
- person.posts.build(title: "testing")
894
+ person.posts.build(title: 'testing')
938
895
  end
939
896
 
940
897
  let(:json) do
941
898
  person.posts.to_json
942
899
  end
943
900
 
944
- it "serializes only the relation" do
901
+ it 'serializes only the relation' do
945
902
  expect(json).to include(post.title)
946
903
  end
947
904
  end