mongoid 7.5.0 → 8.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +3 -3
  4. data/lib/config/locales/en.yml +47 -30
  5. data/lib/mongoid/association/accessors.rb +38 -9
  6. data/lib/mongoid/association/bindable.rb +50 -2
  7. data/lib/mongoid/association/builders.rb +4 -2
  8. data/lib/mongoid/association/constrainable.rb +0 -1
  9. data/lib/mongoid/association/eager_loadable.rb +29 -7
  10. data/lib/mongoid/association/embedded/batchable.rb +53 -13
  11. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  12. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  13. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -2
  14. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  15. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  16. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
  17. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +50 -28
  18. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  19. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
  20. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +23 -4
  21. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  22. data/lib/mongoid/association/macros.rb +2 -1
  23. data/lib/mongoid/association/many.rb +11 -7
  24. data/lib/mongoid/association/nested/many.rb +5 -4
  25. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  26. data/lib/mongoid/association/nested/one.rb +5 -5
  27. data/lib/mongoid/association/one.rb +2 -2
  28. data/lib/mongoid/association/options.rb +9 -9
  29. data/lib/mongoid/association/proxy.rb +14 -3
  30. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  31. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  32. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  33. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  34. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  35. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  36. data/lib/mongoid/association/referenced/eager.rb +2 -2
  37. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +66 -13
  38. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  39. data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -28
  40. data/lib/mongoid/association/referenced/has_many/proxy.rb +24 -18
  41. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  42. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  43. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  44. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  45. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  46. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  47. data/lib/mongoid/association/reflections.rb +2 -2
  48. data/lib/mongoid/association/relatable.rb +44 -10
  49. data/lib/mongoid/association.rb +5 -5
  50. data/lib/mongoid/atomic/modifiers.rb +2 -2
  51. data/lib/mongoid/atomic/paths/embedded/many.rb +19 -0
  52. data/lib/mongoid/attributes/dynamic.rb +3 -3
  53. data/lib/mongoid/attributes/nested.rb +5 -5
  54. data/lib/mongoid/attributes/processing.rb +10 -3
  55. data/lib/mongoid/attributes/projector.rb +1 -1
  56. data/lib/mongoid/attributes/readonly.rb +2 -2
  57. data/lib/mongoid/attributes.rb +43 -40
  58. data/lib/mongoid/changeable.rb +42 -7
  59. data/lib/mongoid/clients/options.rb +5 -1
  60. data/lib/mongoid/clients/sessions.rb +2 -14
  61. data/lib/mongoid/clients/validators/storage.rb +3 -3
  62. data/lib/mongoid/config/validators/client.rb +6 -6
  63. data/lib/mongoid/config.rb +27 -17
  64. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  65. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  66. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  67. data/lib/mongoid/contextual/atomic.rb +1 -1
  68. data/lib/mongoid/contextual/geo_near.rb +7 -7
  69. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  70. data/lib/mongoid/contextual/memory.rb +59 -32
  71. data/lib/mongoid/contextual/mongo.rb +184 -256
  72. data/lib/mongoid/contextual/none.rb +34 -16
  73. data/lib/mongoid/contextual/queryable.rb +1 -1
  74. data/lib/mongoid/contextual.rb +2 -2
  75. data/lib/mongoid/copyable.rb +32 -8
  76. data/lib/mongoid/criteria/findable.rb +7 -4
  77. data/lib/mongoid/criteria/includable.rb +24 -20
  78. data/lib/mongoid/criteria/marshalable.rb +10 -2
  79. data/lib/mongoid/criteria/permission.rb +1 -1
  80. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  81. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -15
  82. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  83. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  84. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  85. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  86. data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -16
  87. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
  88. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  89. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  90. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  91. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  92. data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -3
  93. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -2
  94. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  95. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  96. data/lib/mongoid/criteria/queryable/key.rb +3 -3
  97. data/lib/mongoid/criteria/queryable/optional.rb +5 -11
  98. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  99. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  100. data/lib/mongoid/criteria/queryable/selectable.rb +5 -27
  101. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  102. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  103. data/lib/mongoid/criteria/queryable.rb +12 -7
  104. data/lib/mongoid/criteria/scopable.rb +2 -2
  105. data/lib/mongoid/criteria.rb +15 -37
  106. data/lib/mongoid/deprecable.rb +36 -0
  107. data/lib/mongoid/deprecation.rb +25 -0
  108. data/lib/mongoid/document.rb +98 -36
  109. data/lib/mongoid/equality.rb +12 -12
  110. data/lib/mongoid/errors/document_not_found.rb +10 -6
  111. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  112. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  113. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  114. data/lib/mongoid/errors/invalid_field.rb +6 -2
  115. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  116. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  117. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  118. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  119. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  120. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  121. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  122. data/lib/mongoid/errors/no_client_database.rb +1 -1
  123. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  124. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  125. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  126. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  127. data/lib/mongoid/errors.rb +2 -2
  128. data/lib/mongoid/extensions/array.rb +9 -7
  129. data/lib/mongoid/extensions/big_decimal.rb +29 -10
  130. data/lib/mongoid/extensions/binary.rb +42 -0
  131. data/lib/mongoid/extensions/boolean.rb +8 -2
  132. data/lib/mongoid/extensions/date.rb +26 -20
  133. data/lib/mongoid/extensions/date_time.rb +1 -1
  134. data/lib/mongoid/extensions/false_class.rb +1 -1
  135. data/lib/mongoid/extensions/float.rb +4 -5
  136. data/lib/mongoid/extensions/hash.rb +13 -6
  137. data/lib/mongoid/extensions/integer.rb +4 -5
  138. data/lib/mongoid/extensions/module.rb +1 -1
  139. data/lib/mongoid/extensions/object.rb +8 -6
  140. data/lib/mongoid/extensions/range.rb +41 -10
  141. data/lib/mongoid/extensions/regexp.rb +11 -4
  142. data/lib/mongoid/extensions/set.rb +11 -4
  143. data/lib/mongoid/extensions/string.rb +11 -22
  144. data/lib/mongoid/extensions/symbol.rb +4 -15
  145. data/lib/mongoid/extensions/time.rb +27 -16
  146. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  147. data/lib/mongoid/extensions/true_class.rb +1 -1
  148. data/lib/mongoid/extensions.rb +1 -0
  149. data/lib/mongoid/factory.rb +42 -7
  150. data/lib/mongoid/fields/foreign_key.rb +11 -4
  151. data/lib/mongoid/fields/localized.rb +2 -2
  152. data/lib/mongoid/fields/standard.rb +7 -7
  153. data/lib/mongoid/fields/validators/macro.rb +3 -9
  154. data/lib/mongoid/fields.rb +57 -15
  155. data/lib/mongoid/findable.rb +28 -22
  156. data/lib/mongoid/indexable/specification.rb +2 -2
  157. data/lib/mongoid/indexable/validators/options.rb +6 -2
  158. data/lib/mongoid/interceptable.rb +73 -13
  159. data/lib/mongoid/matchable.rb +1 -1
  160. data/lib/mongoid/matcher.rb +12 -7
  161. data/lib/mongoid/persistable/creatable.rb +18 -9
  162. data/lib/mongoid/persistable/deletable.rb +1 -1
  163. data/lib/mongoid/persistable/destroyable.rb +1 -1
  164. data/lib/mongoid/persistable/savable.rb +2 -2
  165. data/lib/mongoid/persistable/unsettable.rb +1 -1
  166. data/lib/mongoid/persistable/updatable.rb +19 -12
  167. data/lib/mongoid/persistable/upsertable.rb +1 -1
  168. data/lib/mongoid/persistable.rb +3 -3
  169. data/lib/mongoid/persistence_context.rb +22 -5
  170. data/lib/mongoid/query_cache.rb +8 -260
  171. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  172. data/lib/mongoid/reloadable.rb +7 -3
  173. data/lib/mongoid/scopable.rb +17 -15
  174. data/lib/mongoid/selectable.rb +1 -2
  175. data/lib/mongoid/serializable.rb +10 -6
  176. data/lib/mongoid/stateful.rb +35 -9
  177. data/lib/mongoid/tasks/database.rb +0 -2
  178. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  179. data/lib/mongoid/threaded.rb +9 -9
  180. data/lib/mongoid/timestamps/created.rb +1 -1
  181. data/lib/mongoid/timestamps/updated.rb +2 -2
  182. data/lib/mongoid/touchable.rb +2 -3
  183. data/lib/mongoid/traversable.rb +4 -3
  184. data/lib/mongoid/validatable/localizable.rb +1 -1
  185. data/lib/mongoid/validatable/macros.rb +0 -2
  186. data/lib/mongoid/validatable/presence.rb +2 -2
  187. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  188. data/lib/mongoid/validatable.rb +6 -6
  189. data/lib/mongoid/version.rb +1 -1
  190. data/lib/mongoid/warnings.rb +3 -4
  191. data/lib/mongoid.rb +1 -0
  192. data/spec/config/mongoid.yml +16 -0
  193. data/spec/integration/app_spec.rb +8 -12
  194. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  195. data/spec/integration/associations/embedded_spec.rb +15 -0
  196. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  197. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  198. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  199. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  200. data/spec/integration/associations/has_one_spec.rb +97 -1
  201. data/spec/integration/associations/scope_option_spec.rb +1 -1
  202. data/spec/integration/callbacks_models.rb +95 -1
  203. data/spec/integration/callbacks_spec.rb +226 -4
  204. data/spec/integration/criteria/range_spec.rb +95 -1
  205. data/spec/integration/discriminator_key_spec.rb +115 -76
  206. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  207. data/spec/integration/i18n_fallbacks_spec.rb +1 -15
  208. data/spec/integration/matcher_examples_spec.rb +20 -13
  209. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  210. data/spec/integration/matcher_operator_spec.rb +3 -5
  211. data/spec/integration/persistence/range_field_spec.rb +350 -0
  212. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  213. data/spec/mongoid/association/depending_spec.rb +9 -9
  214. data/spec/mongoid/association/eager_spec.rb +2 -1
  215. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  216. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  217. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
  218. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  219. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +219 -8
  220. data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -0
  221. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
  222. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  223. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  224. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  225. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  226. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  227. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  228. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
  229. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  230. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
  231. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +67 -4
  232. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  233. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  234. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  235. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  236. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -13
  237. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  238. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  239. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  240. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  241. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  242. data/spec/mongoid/association/syncable_spec.rb +14 -0
  243. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  244. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  245. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  246. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  247. data/spec/mongoid/attributes_spec.rb +524 -27
  248. data/spec/mongoid/changeable_spec.rb +130 -13
  249. data/spec/mongoid/clients/factory_spec.rb +23 -30
  250. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  251. data/spec/mongoid/clients_spec.rb +32 -2
  252. data/spec/mongoid/config_spec.rb +58 -13
  253. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  254. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  255. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  256. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  257. data/spec/mongoid/contextual/memory_spec.rb +521 -14
  258. data/spec/mongoid/contextual/mongo_spec.rb +564 -394
  259. data/spec/mongoid/contextual/none_spec.rb +11 -19
  260. data/spec/mongoid/copyable_spec.rb +451 -1
  261. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  262. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  263. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  264. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  265. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  266. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  267. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  268. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  269. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  270. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  271. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  272. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  273. data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
  274. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
  275. data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
  276. data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
  277. data/spec/mongoid/criteria_spec.rb +469 -1201
  278. data/spec/mongoid/document_fields_spec.rb +173 -24
  279. data/spec/mongoid/document_spec.rb +32 -41
  280. data/spec/mongoid/equality_spec.rb +12 -12
  281. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  282. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  283. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  284. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  285. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  286. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  287. data/spec/mongoid/extensions/array_spec.rb +16 -2
  288. data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
  289. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  290. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  291. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  292. data/spec/mongoid/extensions/date_spec.rb +71 -1
  293. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  294. data/spec/mongoid/extensions/float_spec.rb +48 -76
  295. data/spec/mongoid/extensions/hash_spec.rb +30 -0
  296. data/spec/mongoid/extensions/integer_spec.rb +45 -66
  297. data/spec/mongoid/extensions/range_spec.rb +255 -54
  298. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  299. data/spec/mongoid/extensions/set_spec.rb +106 -0
  300. data/spec/mongoid/extensions/string_spec.rb +53 -25
  301. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  302. data/spec/mongoid/extensions/time_spec.rb +634 -66
  303. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
  304. data/spec/mongoid/factory_spec.rb +61 -1
  305. data/spec/mongoid/fields_spec.rb +321 -50
  306. data/spec/mongoid/findable_spec.rb +64 -29
  307. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  308. data/spec/mongoid/indexable_spec.rb +39 -20
  309. data/spec/mongoid/interceptable_spec.rb +584 -5
  310. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  311. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  312. data/spec/mongoid/mongoizable_spec.rb +285 -0
  313. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  314. data/spec/mongoid/persistable/deletable_spec.rb +2 -2
  315. data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
  316. data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
  317. data/spec/mongoid/persistence_context_spec.rb +50 -1
  318. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  319. data/spec/mongoid/query_cache_spec.rb +0 -154
  320. data/spec/mongoid/reloadable_spec.rb +35 -2
  321. data/spec/mongoid/scopable_spec.rb +54 -16
  322. data/spec/mongoid/shardable_spec.rb +14 -0
  323. data/spec/mongoid/stateful_spec.rb +28 -0
  324. data/spec/mongoid/timestamps_spec.rb +390 -0
  325. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  326. data/spec/mongoid/touchable_spec.rb +116 -0
  327. data/spec/mongoid/touchable_spec_models.rb +12 -8
  328. data/spec/mongoid/traversable_spec.rb +4 -11
  329. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  330. data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
  331. data/spec/mongoid/warnings_spec.rb +35 -0
  332. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  333. data/spec/rails/mongoid_spec.rb +4 -16
  334. data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
  335. data/spec/support/constraints.rb +24 -0
  336. data/spec/support/macros.rb +30 -0
  337. data/spec/support/models/augmentation.rb +12 -0
  338. data/spec/support/models/band.rb +3 -0
  339. data/spec/support/models/catalog.rb +24 -0
  340. data/spec/support/models/circus.rb +3 -0
  341. data/spec/support/models/fanatic.rb +8 -0
  342. data/spec/support/models/implant.rb +9 -0
  343. data/spec/support/models/label.rb +2 -0
  344. data/spec/support/models/passport.rb +9 -0
  345. data/spec/support/models/person.rb +1 -0
  346. data/spec/support/models/player.rb +2 -0
  347. data/spec/support/models/powerup.rb +12 -0
  348. data/spec/support/models/registry.rb +1 -0
  349. data/spec/support/models/school.rb +14 -0
  350. data/spec/support/models/shield.rb +18 -0
  351. data/spec/support/models/student.rb +14 -0
  352. data/spec/support/models/weapon.rb +12 -0
  353. data.tar.gz.sig +0 -0
  354. metadata +49 -13
  355. metadata.gz.sig +0 -0
  356. data/lib/mongoid/errors/eager_load.rb +0 -23
  357. data/lib/mongoid/errors/invalid_value.rb +0 -17
  358. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -120,7 +120,7 @@ describe Mongoid::Validatable::UniquenessValidator do
120
120
  it "adds the uniqueness error to the aliased field name" do
121
121
  dictionary.valid?
122
122
  expect(dictionary.errors).to have_key(:language)
123
- expect(dictionary.errors[:language]).to eq([ "is already taken" ])
123
+ expect(dictionary.errors[:language]).to eq([ "has already been taken" ])
124
124
  end
125
125
  end
126
126
 
@@ -137,7 +137,7 @@ describe Mongoid::Validatable::UniquenessValidator do
137
137
  it "adds the uniqueness error to the underlying field name" do
138
138
  dictionary.valid?
139
139
  expect(dictionary.errors).to have_key(:l)
140
- expect(dictionary.errors[:l]).to eq([ "is already taken" ])
140
+ expect(dictionary.errors[:l]).to eq([ "has already been taken" ])
141
141
  end
142
142
  end
143
143
  end
@@ -239,7 +239,7 @@ describe Mongoid::Validatable::UniquenessValidator do
239
239
 
240
240
  it "adds the uniqueness error" do
241
241
  dictionary.valid?
242
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
242
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
243
243
  end
244
244
  end
245
245
 
@@ -260,7 +260,7 @@ describe Mongoid::Validatable::UniquenessValidator do
260
260
 
261
261
  it "adds the uniqueness error" do
262
262
  dictionary.valid?
263
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
263
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
264
264
  end
265
265
  end
266
266
  end
@@ -330,7 +330,7 @@ describe Mongoid::Validatable::UniquenessValidator do
330
330
 
331
331
  it "adds the uniqueness error" do
332
332
  dictionary.valid?
333
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
333
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
334
334
  end
335
335
  end
336
336
 
@@ -351,7 +351,7 @@ describe Mongoid::Validatable::UniquenessValidator do
351
351
 
352
352
  it "adds the uniqueness error" do
353
353
  dictionary.valid?
354
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
354
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
355
355
  end
356
356
  end
357
357
  end
@@ -399,7 +399,7 @@ describe Mongoid::Validatable::UniquenessValidator do
399
399
 
400
400
  it "adds the uniqueness error" do
401
401
  dictionary.valid?
402
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
402
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
403
403
  end
404
404
  end
405
405
  end
@@ -460,7 +460,7 @@ describe Mongoid::Validatable::UniquenessValidator do
460
460
 
461
461
  it "adds the uniqueness error" do
462
462
  dictionary.valid?
463
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
463
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
464
464
  end
465
465
  end
466
466
 
@@ -623,7 +623,7 @@ describe Mongoid::Validatable::UniquenessValidator do
623
623
 
624
624
  it "adds the uniqueness errors" do
625
625
  dictionary.valid?
626
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
626
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
627
627
  end
628
628
  end
629
629
 
@@ -701,7 +701,7 @@ describe Mongoid::Validatable::UniquenessValidator do
701
701
 
702
702
  it "should set an error for associated object not being unique" do
703
703
  item.update_attributes(folder_id: personal_folder.id)
704
- expect(item.errors.messages[:name].first).to eq("is already taken")
704
+ expect(item.errors.messages[:name].first).to eq("has already been taken")
705
705
  end
706
706
  end
707
707
 
@@ -753,7 +753,7 @@ describe Mongoid::Validatable::UniquenessValidator do
753
753
 
754
754
  it "adds the uniqueness errors" do
755
755
  dictionary.valid?
756
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
756
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
757
757
  end
758
758
  end
759
759
 
@@ -792,7 +792,7 @@ describe Mongoid::Validatable::UniquenessValidator do
792
792
 
793
793
  it "adds the uniqueness errors" do
794
794
  dictionary.valid?
795
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
795
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
796
796
  end
797
797
  end
798
798
  end
@@ -815,7 +815,7 @@ describe Mongoid::Validatable::UniquenessValidator do
815
815
 
816
816
  expect do
817
817
  Dictionary.create!(name: "French-English", year: 1960)
818
- end.to raise_error(Mongoid::Errors::Validations, /Name is already taken/)
818
+ end.to raise_error(Mongoid::Errors::Validations, /Name has already been taken/)
819
819
 
820
820
  expect(Dictionary.all.size).to eq(1)
821
821
  end
@@ -954,7 +954,7 @@ describe Mongoid::Validatable::UniquenessValidator do
954
954
 
955
955
  it "adds the uniqueness errors" do
956
956
  dictionary.valid?
957
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
957
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
958
958
  end
959
959
  end
960
960
 
@@ -1018,7 +1018,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1018
1018
 
1019
1019
  it "adds the uniqueness error" do
1020
1020
  dictionary.valid?
1021
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
1021
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
1022
1022
  end
1023
1023
  end
1024
1024
 
@@ -1096,7 +1096,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1096
1096
 
1097
1097
  it "adds the uniqueness error" do
1098
1098
  dictionary.valid?
1099
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
1099
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
1100
1100
  end
1101
1101
  end
1102
1102
 
@@ -1218,7 +1218,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1218
1218
 
1219
1219
  it "adds the uniqueness error" do
1220
1220
  login.valid?
1221
- expect(login.errors[:username]).to eq([ "is already taken" ])
1221
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1222
1222
  end
1223
1223
  end
1224
1224
 
@@ -1323,7 +1323,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1323
1323
 
1324
1324
  it "adds the uniqueness errors" do
1325
1325
  login.valid?
1326
- expect(login.errors[:username]).to eq([ "is already taken" ])
1326
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1327
1327
  end
1328
1328
  end
1329
1329
 
@@ -1383,7 +1383,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1383
1383
 
1384
1384
  it "adds the uniqueness error" do
1385
1385
  login.valid?
1386
- expect(login.errors[:username]).to eq([ "is already taken" ])
1386
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1387
1387
  end
1388
1388
  end
1389
1389
 
@@ -1461,7 +1461,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1461
1461
 
1462
1462
  it "adds the uniqueness error" do
1463
1463
  login.valid?
1464
- expect(login.errors[:username]).to eq([ "is already taken" ])
1464
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1465
1465
  end
1466
1466
  end
1467
1467
 
@@ -1710,7 +1710,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1710
1710
 
1711
1711
  it "adds the uniqueness error" do
1712
1712
  definition.valid?
1713
- expect(definition.errors[:description]).to eq([ "is already taken" ])
1713
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
1714
1714
  end
1715
1715
  end
1716
1716
 
@@ -1838,7 +1838,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1838
1838
 
1839
1839
  it "adds the uniqueness errors" do
1840
1840
  definition.valid?
1841
- expect(definition.errors[:description]).to eq([ "is already taken" ])
1841
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
1842
1842
  end
1843
1843
  end
1844
1844
 
@@ -1976,7 +1976,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1976
1976
 
1977
1977
  it "adds the uniqueness errors" do
1978
1978
  definition.valid?
1979
- expect(definition.errors[:description]).to eq([ "is already taken" ])
1979
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
1980
1980
  end
1981
1981
  end
1982
1982
 
@@ -2040,7 +2040,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2040
2040
 
2041
2041
  it "adds the uniqueness error" do
2042
2042
  definition.valid?
2043
- expect(definition.errors[:description]).to eq([ "is already taken" ])
2043
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
2044
2044
  end
2045
2045
  end
2046
2046
 
@@ -2118,7 +2118,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2118
2118
 
2119
2119
  it "adds the uniqueness error" do
2120
2120
  definition.valid?
2121
- expect(definition.errors[:description]).to eq([ "is already taken" ])
2121
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
2122
2122
  end
2123
2123
  end
2124
2124
 
@@ -2214,7 +2214,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2214
2214
  it "adds the uniqueness error to the aliased field name" do
2215
2215
  definition.valid?
2216
2216
  expect(definition.errors).to have_key(:part)
2217
- expect(definition.errors[:part]).to eq([ "is already taken" ])
2217
+ expect(definition.errors[:part]).to eq([ "has already been taken" ])
2218
2218
  end
2219
2219
  end
2220
2220
 
@@ -2231,7 +2231,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2231
2231
  it "adds the uniqueness error to the underlying field name" do
2232
2232
  definition.valid?
2233
2233
  expect(definition.errors).to have_key(:p)
2234
- expect(definition.errors[:p]).to eq([ "is already taken" ])
2234
+ expect(definition.errors[:p]).to eq([ "has already been taken" ])
2235
2235
  end
2236
2236
  end
2237
2237
 
@@ -2250,7 +2250,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2250
2250
  it "adds the uniqueness error to the aliased field name" do
2251
2251
  definition.valid?
2252
2252
  expect(definition.errors).to have_key(:synonyms)
2253
- expect(definition.errors[:synonyms]).to eq([ "is already taken" ])
2253
+ expect(definition.errors[:synonyms]).to eq([ "has already been taken" ])
2254
2254
  end
2255
2255
  end
2256
2256
 
@@ -2267,7 +2267,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2267
2267
  it "adds the uniqueness error to the aliased field name" do
2268
2268
  definition.valid?
2269
2269
  expect(definition.errors).to have_key(:syn)
2270
- expect(definition.errors[:syn]).to eq([ "is already taken" ])
2270
+ expect(definition.errors[:syn]).to eq([ "has already been taken" ])
2271
2271
  end
2272
2272
  end
2273
2273
  end
@@ -2319,7 +2319,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2319
2319
 
2320
2320
  it "adds the uniqueness error" do
2321
2321
  word_origin.valid?
2322
- expect(word_origin.errors[:origin_id]).to eq([ "is already taken" ])
2322
+ expect(word_origin.errors[:origin_id]).to eq([ "has already been taken" ])
2323
2323
  end
2324
2324
  end
2325
2325
 
@@ -2444,7 +2444,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2444
2444
  it "should be invalid" do
2445
2445
  subclass_document_with_duplicated_name.tap do |d|
2446
2446
  expect(d).to be_invalid
2447
- expect(d.errors[:name]).to eq([ "is already taken" ])
2447
+ expect(d.errors[:name]).to eq([ "has already been taken" ])
2448
2448
  end
2449
2449
  end
2450
2450
  end
@@ -2472,4 +2472,33 @@ describe Mongoid::Validatable::UniquenessValidator do
2472
2472
  }.to raise_error(Mongo::Error::OperationFailure)
2473
2473
  end
2474
2474
  end
2475
+
2476
+ describe "i18n" do
2477
+
2478
+ context 'when using a different locale' do
2479
+
2480
+ around do |example|
2481
+ I18n.with_locale(:fr) { example.run }
2482
+ end
2483
+
2484
+ before do
2485
+ # Translation key location is as per rails-i18n gem.
2486
+ # See: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml
2487
+ I18n.backend.store_translations(:fr, { errors: { messages: { taken: 'est déjà utilisé(e)' } } })
2488
+ end
2489
+
2490
+ after do
2491
+ # i18n 1.0 requires +send+ because +translations+ aren't public.
2492
+ # Newer i18n versions have it as public.
2493
+ I18n.backend.send(:translations).delete(:fr)
2494
+ end
2495
+
2496
+ it "correctly translates the error message" do
2497
+ Circus.create!(slogan: 'The Greatest Show on Mars')
2498
+ dict = Circus.new(slogan: 'The Greatest Show on Mars')
2499
+ dict.valid?
2500
+ expect(dict.errors.messages[:slogan]).to eq(["est déjà utilisé(e)"])
2501
+ end
2502
+ end
2503
+ end
2475
2504
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe Mongoid::Warnings do
6
+
7
+ describe ".warn_*" do
8
+
9
+ context "when calling a warn_* method" do
10
+
11
+ let(:id) { :geo_haystack_deprecated }
12
+ let(:message) do
13
+ 'The geoHaystack type is deprecated.'
14
+ end
15
+
16
+ before do
17
+ warn_id = id
18
+ Mongoid::Warnings.class_eval do
19
+ instance_variable_set("@#{warn_id}", false)
20
+ end
21
+ end
22
+
23
+ it "logs the warning" do
24
+ expect_any_instance_of(Logger).to receive(:warn).once.with(message)
25
+ Mongoid::Warnings.send("warn_#{id}")
26
+ end
27
+
28
+ it "logs the warning only once" do
29
+ expect_any_instance_of(Logger).to receive(:warn).once.with(message)
30
+ Mongoid::Warnings.send("warn_#{id}")
31
+ Mongoid::Warnings.send("warn_#{id}")
32
+ end
33
+ end
34
+ end
35
+ end
@@ -30,11 +30,11 @@ describe "Mongoid::Railties::ControllerRuntime" do
30
30
 
31
31
  clear_metric!
32
32
  instance.succeeded event_payload
33
- expect(collector.runtime).to eq(42)
33
+ expect(collector.runtime).to eq(42000)
34
34
 
35
35
  clear_metric!
36
36
  instance.failed event_payload
37
- expect(collector.runtime).to eq(42)
37
+ expect(collector.runtime).to eq(42000)
38
38
  end
39
39
 
40
40
  it "resets the metric and returns the value" do
@@ -30,6 +30,7 @@ describe "Rails::Mongoid" do
30
30
  end
31
31
 
32
32
  context "when preload models config is false" do
33
+ config_override :preload_models, false
33
34
 
34
35
  let(:files) do
35
36
  [
@@ -38,10 +39,6 @@ describe "Rails::Mongoid" do
38
39
  ]
39
40
  end
40
41
 
41
- before(:all) do
42
- Mongoid.preload_models = false
43
- end
44
-
45
42
  it "does not load any models" do
46
43
  allow(Dir).to receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
47
44
  expect(Rails::Mongoid).to receive(:load_model).never
@@ -50,10 +47,7 @@ describe "Rails::Mongoid" do
50
47
  end
51
48
 
52
49
  context "when preload models config is true" do
53
-
54
- before(:all) do
55
- Mongoid.preload_models = true
56
- end
50
+ config_override :preload_models, true
57
51
 
58
52
  context "when all models are in the models directory" do
59
53
 
@@ -112,6 +106,7 @@ describe "Rails::Mongoid" do
112
106
  end
113
107
 
114
108
  context "even when preload models config is false" do
109
+ config_override :preload_models, false
115
110
 
116
111
  let(:files) do
117
112
  [
@@ -120,10 +115,6 @@ describe "Rails::Mongoid" do
120
115
  ]
121
116
  end
122
117
 
123
- before(:all) do
124
- Mongoid.preload_models = false
125
- end
126
-
127
118
  it "loads all models" do
128
119
  allow(Dir).to receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
129
120
  expect(Rails::Mongoid).to receive(:load_model).with("address")
@@ -133,6 +124,7 @@ describe "Rails::Mongoid" do
133
124
  end
134
125
 
135
126
  context "when list of models to load was configured" do
127
+ config_override :preload_models, %w(user AddressNumber)
136
128
 
137
129
  let(:files) do
138
130
  [
@@ -141,10 +133,6 @@ describe "Rails::Mongoid" do
141
133
  ]
142
134
  end
143
135
 
144
- before(:all) do
145
- Mongoid.preload_models = ["user", "AddressNumber"]
146
- end
147
-
148
136
  it "loads selected models only" do
149
137
  allow(Dir).to receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
150
138
  expect(Rails::Mongoid).to receive(:load_model).with("user")
@@ -84,32 +84,22 @@ module Mrss
84
84
 
85
85
  # Locates command stated events for the specified command name,
86
86
  # asserts that there is exactly one such event, and returns it.
87
- def single_command_started_event(command_name, include_auth: false, database_name: nil)
87
+ def single_command_started_event(command_name, include_auth: false)
88
88
  events = if include_auth
89
89
  started_events
90
90
  else
91
91
  non_auth_command_started_events
92
92
  end
93
- get_one_event(events, command_name, 'started', database_name: database_name)
94
- end
95
-
96
- # Locates command succeeded events for the specified command name,
97
- # asserts that there is exactly one such event, and returns it.
98
- def single_command_succeeded_event(command_name, database_name: nil)
99
- get_one_event(succeeded_events, command_name, 'succeeded', database_name: database_name)
100
- end
101
-
102
- def get_one_event(events, command_name, kind, database_name: nil)
103
- events = events.select do |event|
104
- event.command_name == command_name and
105
- database_name.nil? || database_name == event.database_name
93
+ events.select! do |event|
94
+ event.command[command_name]
106
95
  end
107
96
  if events.length != 1
108
- raise "Expected a single '#{command_name}' #{kind} event#{database_name ? " for '#{database_name}'" : ''} but we have #{events.length}"
97
+ raise "Expected a single #{command_name} event but we have #{events.length}"
109
98
  end
110
99
  events.first
111
100
  end
112
101
 
102
+
113
103
  # Get the first succeeded event published for the name, and then delete it.
114
104
  #
115
105
  # @param [ String ] name The event name.
@@ -27,6 +27,30 @@ module Constraints
27
27
  Mongo::VERSION.split('.')[0...precision].map(&:to_i)
28
28
  end
29
29
 
30
+ def min_bson_version(version)
31
+ required_version = version.split('.').map(&:to_i)
32
+ actual_version = bson_version(required_version.length)
33
+ before(:all) do
34
+ if (actual_version <=> required_version) < 0
35
+ skip "bson-ruby version #{version} or higher is required"
36
+ end
37
+ end
38
+ end
39
+
40
+ def max_bson_version(version)
41
+ required_version = version.split('.').map(&:to_i)
42
+ actual_version = bson_version(required_version.length)
43
+ before(:all) do
44
+ if (actual_version <=> required_version) > 0
45
+ skip "bson-ruby version #{version} or lower is required"
46
+ end
47
+ end
48
+ end
49
+
50
+ def bson_version(precision)
51
+ BSON::VERSION.split('.')[0...precision].map(&:to_i)
52
+ end
53
+
30
54
  def min_rails_version(version)
31
55
  unless version =~ /\A\d+\.\d+\z/
32
56
  raise ArgumentError, "Version can only be major.minor: #{version}"
@@ -39,6 +39,28 @@ module Mongoid
39
39
  end
40
40
  end
41
41
 
42
+ def driver_config_override(key, value)
43
+ around do |example|
44
+ existing = Mongo.send(key)
45
+
46
+ Mongo.send("#{key}=", value)
47
+
48
+ example.run
49
+
50
+ Mongo.send("#{key}=", existing)
51
+ end
52
+ end
53
+
54
+ def with_driver_config_values(key, *values, &block)
55
+ values.each do |value|
56
+ context "when #{key} is #{value}" do
57
+ driver_config_override key, value
58
+
59
+ class_exec(value, &block)
60
+ end
61
+ end
62
+ end
63
+
42
64
  def restore_config_clients
43
65
  around do |example|
44
66
  # Duplicate the config because some tests mutate it.
@@ -47,5 +69,13 @@ module Mongoid
47
69
  Mongoid::Config.send(:clients=, old_config)
48
70
  end
49
71
  end
72
+
73
+ def query_cache_enabled
74
+ around do |example|
75
+ Mongoid::QueryCache.cache do
76
+ example.run
77
+ end
78
+ end
79
+ end
50
80
  end
51
81
  end
@@ -10,4 +10,16 @@ class Augmentation
10
10
  after_build do
11
11
  self.name = "Infolink (#{player.frags})"
12
12
  end
13
+
14
+ field :after_find_player
15
+ field :after_initialize_player
16
+ field :after_default_player, default: ->{ self.player&._id }
17
+
18
+ after_find do |doc|
19
+ doc.after_find_player = player&._id
20
+ end
21
+
22
+ after_initialize do |doc|
23
+ doc.after_initialize_player = player&._id
24
+ end
13
25
  end
@@ -20,10 +20,13 @@ class Band
20
20
  field :y, as: :years, type: Integer
21
21
  field :founded, type: Date
22
22
  field :deleted, type: Boolean
23
+ field :mojo, type: Object
24
+ field :fans
23
25
 
24
26
  embeds_many :records, cascade_callbacks: true
25
27
  embeds_many :notes, as: :noteable, cascade_callbacks: true, validate: false
26
28
  embeds_many :labels
29
+ embeds_many :fanatics
27
30
  embeds_one :label, cascade_callbacks: true
28
31
 
29
32
  scope :highly_rated, -> { gte(rating: 7) }
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Catalog
4
+ include Mongoid::Document
5
+
6
+ field :array_field, type: Array
7
+ field :big_decimal_field, type: BigDecimal
8
+ field :boolean_field, type: Boolean
9
+ field :date_field, type: Date
10
+ field :date_time_field, type: DateTime
11
+ field :float_field, type: Float
12
+ field :hash_field, type: Hash
13
+ field :integer_field, type: Integer
14
+ field :object_id_field, type: BSON::ObjectId
15
+ field :binary_field, type: BSON::Binary
16
+ field :range_field, type: Range
17
+ field :regexp_field, type: Regexp
18
+ field :set_field, type: Set
19
+ field :string_field, type: String
20
+ field :stringified_symbol_field, type: StringifiedSymbol
21
+ field :symbol_field, type: Symbol
22
+ field :time_field, type: Time
23
+ field :time_with_zone_field, type: ActiveSupport::TimeWithZone
24
+ end
@@ -4,6 +4,9 @@ class Circus
4
4
  include Mongoid::Document
5
5
 
6
6
  field :name
7
+ field :slogan
8
+
9
+ validates_uniqueness_of :slogan, allow_blank: true
7
10
 
8
11
  embeds_many :animals
9
12
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Fanatic
4
+ include Mongoid::Document
5
+ field :age, type: Integer
6
+
7
+ embedded_in :band
8
+ end
@@ -12,7 +12,16 @@ class Implant
12
12
  doc.name = "Cochlear Implant (#{player.frags})"
13
13
  end
14
14
 
15
+ field :after_find_player
16
+ field :after_initialize_player
17
+ field :after_default_player, default: ->{ self.player&._id }
18
+
15
19
  after_find do |doc|
16
20
  doc.impressions += 1
21
+ doc.after_find_player = player&._id
22
+ end
23
+
24
+ after_initialize do |doc|
25
+ doc.after_initialize_player = player&._id
17
26
  end
18
27
  end
@@ -6,6 +6,8 @@ class Label
6
6
 
7
7
  field :name, type: String
8
8
  field :sales, type: BigDecimal
9
+ field :age, type: Integer
10
+
9
11
  field :after_create_called, type: Mongoid::Boolean, default: false
10
12
  field :after_save_called, type: Mongoid::Boolean, default: false
11
13
  field :after_update_called, type: Mongoid::Boolean, default: false
@@ -10,4 +10,13 @@ class Passport
10
10
  field :localized_translations, localize: true
11
11
 
12
12
  embedded_in :person, autobuild: true
13
+
14
+ embeds_many :passport_pages
15
+ end
16
+
17
+ class PassportPage
18
+ include Mongoid::Document
19
+
20
+ field :num_stamps, type: Integer
21
+ embedded_in :passport
13
22
  end
@@ -40,6 +40,7 @@ class Person
40
40
  field :arrays, type: Array
41
41
  field :range, type: Range
42
42
  field :species, type: Symbol
43
+ field :posts_count, type: Integer, default: 0
43
44
 
44
45
  index age: 1
45
46
  index addresses: 1
@@ -25,6 +25,8 @@ class Player
25
25
  embeds_many :implants
26
26
  embeds_one :augmentation
27
27
 
28
+ has_and_belongs_to_many :shields
29
+
28
30
  after_find do |doc|
29
31
  doc.impressions += 1
30
32
  end