mongoid 6.4.4 → 7.3.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 (1341) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +13 -13
  4. data/LICENSE +1 -0
  5. data/README.md +34 -20
  6. data/Rakefile +75 -5
  7. data/lib/config/locales/en.yml +115 -53
  8. data/lib/mongoid/association/accessors.rb +429 -0
  9. data/lib/mongoid/association/bindable.rb +200 -0
  10. data/lib/mongoid/association/builders.rb +93 -0
  11. data/lib/mongoid/association/constrainable.rb +46 -0
  12. data/lib/mongoid/association/depending.rb +135 -0
  13. data/lib/mongoid/association/eager_loadable.rb +38 -0
  14. data/lib/mongoid/association/embedded/batchable.rb +386 -0
  15. data/lib/mongoid/association/embedded/cyclic.rb +111 -0
  16. data/lib/mongoid/association/embedded/embedded_in/binding.rb +59 -0
  17. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +41 -0
  18. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +124 -0
  19. data/lib/mongoid/association/embedded/embedded_in.rb +157 -0
  20. data/lib/mongoid/association/embedded/embeds_many/binding.rb +48 -0
  21. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +48 -0
  22. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +562 -0
  23. data/lib/mongoid/association/embedded/embeds_many.rb +214 -0
  24. data/lib/mongoid/association/embedded/embeds_one/binding.rb +50 -0
  25. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +42 -0
  26. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +133 -0
  27. data/lib/mongoid/association/embedded/embeds_one.rb +177 -0
  28. data/lib/mongoid/association/embedded.rb +7 -0
  29. data/lib/mongoid/association/macros.rb +206 -0
  30. data/lib/mongoid/association/many.rb +215 -0
  31. data/lib/mongoid/association/marshalable.rb +36 -0
  32. data/lib/mongoid/association/nested/many.rb +202 -0
  33. data/lib/mongoid/association/nested/nested_buildable.rb +75 -0
  34. data/lib/mongoid/association/nested/one.rb +131 -0
  35. data/lib/mongoid/association/nested.rb +18 -0
  36. data/lib/mongoid/association/one.rb +62 -0
  37. data/lib/mongoid/association/options.rb +155 -0
  38. data/lib/mongoid/association/proxy.rb +210 -0
  39. data/lib/mongoid/association/referenced/auto_save.rb +82 -0
  40. data/lib/mongoid/association/referenced/belongs_to/binding.rb +89 -0
  41. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +49 -0
  42. data/lib/mongoid/association/referenced/belongs_to/eager.rb +74 -0
  43. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +138 -0
  44. data/lib/mongoid/association/referenced/belongs_to.rb +251 -0
  45. data/lib/mongoid/association/referenced/counter_cache.rb +165 -0
  46. data/lib/mongoid/association/referenced/eager.rb +184 -0
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +77 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +43 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +54 -0
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +319 -0
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +297 -0
  52. data/lib/mongoid/association/referenced/has_many/binding.rb +41 -0
  53. data/lib/mongoid/association/referenced/has_many/buildable.rb +41 -0
  54. data/lib/mongoid/association/referenced/has_many/eager.rb +45 -0
  55. data/lib/mongoid/association/referenced/has_many/enumerable.rb +550 -0
  56. data/lib/mongoid/association/referenced/has_many/proxy.rb +588 -0
  57. data/lib/mongoid/association/referenced/has_many.rb +278 -0
  58. data/lib/mongoid/association/referenced/has_one/binding.rb +49 -0
  59. data/lib/mongoid/association/referenced/has_one/buildable.rb +75 -0
  60. data/lib/mongoid/association/referenced/has_one/eager.rb +37 -0
  61. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +128 -0
  62. data/lib/mongoid/association/referenced/has_one/proxy.rb +120 -0
  63. data/lib/mongoid/association/referenced/has_one.rb +207 -0
  64. data/lib/mongoid/association/referenced/syncable.rb +172 -0
  65. data/lib/mongoid/association/referenced.rb +10 -0
  66. data/lib/mongoid/association/reflections.rb +70 -0
  67. data/lib/mongoid/association/relatable.rb +514 -0
  68. data/lib/mongoid/association.rb +152 -0
  69. data/lib/mongoid/atomic/modifiers.rb +25 -2
  70. data/lib/mongoid/atomic/paths/embedded/many.rb +5 -3
  71. data/lib/mongoid/atomic/paths/embedded/one.rb +5 -3
  72. data/lib/mongoid/atomic/paths/embedded.rb +3 -1
  73. data/lib/mongoid/atomic/paths/root.rb +4 -2
  74. data/lib/mongoid/atomic/paths.rb +2 -0
  75. data/lib/mongoid/atomic.rb +16 -4
  76. data/lib/mongoid/attributes/dynamic.rb +19 -16
  77. data/lib/mongoid/attributes/nested.rb +29 -16
  78. data/lib/mongoid/attributes/processing.rb +10 -8
  79. data/lib/mongoid/attributes/projector.rb +120 -0
  80. data/lib/mongoid/attributes/readonly.rb +5 -5
  81. data/lib/mongoid/attributes.rb +93 -57
  82. data/lib/mongoid/cacheable.rb +5 -3
  83. data/lib/mongoid/changeable.rb +4 -2
  84. data/lib/mongoid/clients/factory.rb +42 -10
  85. data/lib/mongoid/clients/options.rb +17 -13
  86. data/lib/mongoid/clients/sessions.rb +23 -4
  87. data/lib/mongoid/clients/storage_options.rb +7 -5
  88. data/lib/mongoid/clients/validators/storage.rb +2 -0
  89. data/lib/mongoid/clients/validators.rb +2 -0
  90. data/lib/mongoid/clients.rb +3 -1
  91. data/lib/mongoid/composable.rb +9 -6
  92. data/lib/mongoid/config/environment.rb +23 -8
  93. data/lib/mongoid/config/options.rb +20 -12
  94. data/lib/mongoid/config/validators/client.rb +2 -0
  95. data/lib/mongoid/config/validators/option.rb +2 -0
  96. data/lib/mongoid/config/validators.rb +2 -0
  97. data/lib/mongoid/config.rb +75 -11
  98. data/lib/mongoid/contextual/aggregable/memory.rb +3 -1
  99. data/lib/mongoid/contextual/aggregable/mongo.rb +13 -9
  100. data/lib/mongoid/contextual/atomic.rb +24 -6
  101. data/lib/mongoid/contextual/command.rb +2 -0
  102. data/lib/mongoid/contextual/geo_near.rb +6 -4
  103. data/lib/mongoid/contextual/map_reduce.rb +5 -2
  104. data/lib/mongoid/contextual/memory.rb +23 -3
  105. data/lib/mongoid/contextual/mongo.rb +39 -13
  106. data/lib/mongoid/contextual/none.rb +2 -0
  107. data/lib/mongoid/contextual/queryable.rb +2 -0
  108. data/lib/mongoid/contextual.rb +7 -4
  109. data/lib/mongoid/copyable.rb +20 -9
  110. data/lib/mongoid/criteria/findable.rb +12 -2
  111. data/lib/mongoid/criteria/includable.rb +21 -19
  112. data/lib/mongoid/criteria/inspectable.rb +2 -0
  113. data/lib/mongoid/criteria/marshalable.rb +2 -0
  114. data/lib/mongoid/criteria/modifiable.rb +10 -3
  115. data/lib/mongoid/criteria/options.rb +4 -2
  116. data/lib/mongoid/criteria/permission.rb +2 -0
  117. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -0
  118. data/lib/mongoid/criteria/queryable/expandable.rb +69 -0
  119. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -1
  120. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -1
  121. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -1
  122. data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -1
  123. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -6
  124. data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -1
  125. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -1
  126. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -2
  127. data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -1
  128. data/lib/mongoid/criteria/queryable/extensions/range.rb +3 -1
  129. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -7
  130. data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -1
  131. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -2
  132. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
  133. data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -2
  134. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +15 -1
  135. data/lib/mongoid/criteria/queryable/extensions.rb +1 -3
  136. data/lib/mongoid/criteria/queryable/key.rb +101 -14
  137. data/lib/mongoid/criteria/queryable/macroable.rb +3 -1
  138. data/lib/mongoid/criteria/queryable/mergeable.rb +184 -15
  139. data/lib/mongoid/criteria/queryable/optional.rb +5 -3
  140. data/lib/mongoid/criteria/queryable/options.rb +2 -0
  141. data/lib/mongoid/criteria/queryable/pipeline.rb +14 -6
  142. data/lib/mongoid/criteria/queryable/selectable.rb +399 -98
  143. data/lib/mongoid/criteria/queryable/selector.rb +46 -39
  144. data/lib/mongoid/criteria/queryable/smash.rb +2 -0
  145. data/lib/mongoid/criteria/queryable/storable.rb +233 -0
  146. data/lib/mongoid/criteria/queryable.rb +7 -2
  147. data/lib/mongoid/criteria/scopable.rb +2 -0
  148. data/lib/mongoid/criteria.rb +88 -18
  149. data/lib/mongoid/document.rb +32 -22
  150. data/lib/mongoid/equality.rb +3 -2
  151. data/lib/mongoid/errors/ambiguous_relationship.rb +4 -2
  152. data/lib/mongoid/errors/callback.rb +2 -0
  153. data/lib/mongoid/errors/criteria_argument_required.rb +19 -0
  154. data/lib/mongoid/errors/delete_restriction.rb +10 -10
  155. data/lib/mongoid/errors/document_not_destroyed.rb +2 -0
  156. data/lib/mongoid/errors/document_not_found.rb +2 -0
  157. data/lib/mongoid/errors/eager_load.rb +6 -2
  158. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -0
  159. data/lib/mongoid/errors/invalid_collection.rb +2 -0
  160. data/lib/mongoid/errors/invalid_config_option.rb +2 -0
  161. data/lib/mongoid/errors/invalid_dependent_strategy.rb +34 -0
  162. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
  163. data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
  164. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
  165. data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
  166. data/lib/mongoid/errors/invalid_field.rb +2 -0
  167. data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
  168. data/lib/mongoid/errors/invalid_field_option.rb +2 -0
  169. data/lib/mongoid/errors/invalid_find.rb +2 -0
  170. data/lib/mongoid/errors/invalid_includes.rb +2 -0
  171. data/lib/mongoid/errors/invalid_index.rb +2 -0
  172. data/lib/mongoid/errors/invalid_options.rb +4 -2
  173. data/lib/mongoid/errors/invalid_path.rb +2 -0
  174. data/lib/mongoid/errors/invalid_persistence_option.rb +2 -0
  175. data/lib/mongoid/errors/invalid_query.rb +41 -0
  176. data/lib/mongoid/errors/invalid_relation.rb +4 -2
  177. data/lib/mongoid/errors/invalid_relation_option.rb +31 -0
  178. data/lib/mongoid/errors/invalid_scope.rb +2 -0
  179. data/lib/mongoid/errors/invalid_session_use.rb +2 -0
  180. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -4
  181. data/lib/mongoid/errors/invalid_storage_options.rb +2 -0
  182. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  183. data/lib/mongoid/errors/invalid_time.rb +2 -0
  184. data/lib/mongoid/errors/invalid_value.rb +2 -0
  185. data/lib/mongoid/errors/inverse_not_found.rb +3 -1
  186. data/lib/mongoid/errors/mixed_client_configuration.rb +2 -0
  187. data/lib/mongoid/errors/mixed_relations.rb +2 -0
  188. data/lib/mongoid/errors/mongoid_error.rb +3 -1
  189. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -1
  190. data/lib/mongoid/errors/no_client_config.rb +4 -2
  191. data/lib/mongoid/errors/no_client_database.rb +2 -0
  192. data/lib/mongoid/errors/no_client_hosts.rb +2 -0
  193. data/lib/mongoid/errors/no_clients_config.rb +2 -0
  194. data/lib/mongoid/errors/no_default_client.rb +3 -1
  195. data/lib/mongoid/errors/no_environment.rb +2 -0
  196. data/lib/mongoid/errors/no_map_reduce_output.rb +2 -0
  197. data/lib/mongoid/errors/no_metadata.rb +2 -0
  198. data/lib/mongoid/errors/no_parent.rb +2 -0
  199. data/lib/mongoid/errors/readonly_attribute.rb +2 -0
  200. data/lib/mongoid/errors/readonly_document.rb +2 -0
  201. data/lib/mongoid/errors/scope_overwrite.rb +2 -0
  202. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -0
  203. data/lib/mongoid/errors/unknown_attribute.rb +2 -0
  204. data/lib/mongoid/errors/unknown_model.rb +27 -0
  205. data/lib/mongoid/errors/unsaved_document.rb +2 -0
  206. data/lib/mongoid/errors/unsupported_javascript.rb +2 -0
  207. data/lib/mongoid/errors/validations.rb +2 -0
  208. data/lib/mongoid/errors.rb +13 -0
  209. data/lib/mongoid/evolvable.rb +4 -2
  210. data/lib/mongoid/extensions/array.rb +28 -11
  211. data/lib/mongoid/extensions/big_decimal.rb +2 -0
  212. data/lib/mongoid/extensions/boolean.rb +3 -2
  213. data/lib/mongoid/extensions/date.rb +13 -3
  214. data/lib/mongoid/extensions/date_time.rb +4 -3
  215. data/lib/mongoid/extensions/decimal128.rb +2 -0
  216. data/lib/mongoid/extensions/false_class.rb +3 -1
  217. data/lib/mongoid/extensions/float.rb +5 -3
  218. data/lib/mongoid/extensions/hash.rb +58 -13
  219. data/lib/mongoid/extensions/integer.rb +5 -3
  220. data/lib/mongoid/extensions/module.rb +2 -0
  221. data/lib/mongoid/extensions/nil_class.rb +2 -0
  222. data/lib/mongoid/extensions/object.rb +20 -8
  223. data/lib/mongoid/extensions/object_id.rb +2 -0
  224. data/lib/mongoid/extensions/range.rb +3 -0
  225. data/lib/mongoid/extensions/regexp.rb +3 -1
  226. data/lib/mongoid/extensions/set.rb +2 -0
  227. data/lib/mongoid/extensions/string.rb +23 -12
  228. data/lib/mongoid/extensions/symbol.rb +2 -0
  229. data/lib/mongoid/extensions/time.rb +14 -0
  230. data/lib/mongoid/extensions/time_with_zone.rb +14 -0
  231. data/lib/mongoid/extensions/true_class.rb +3 -1
  232. data/lib/mongoid/extensions.rb +3 -4
  233. data/lib/mongoid/factory.rb +59 -9
  234. data/lib/mongoid/fields/foreign_key.rb +8 -6
  235. data/lib/mongoid/fields/localized.rb +2 -0
  236. data/lib/mongoid/fields/standard.rb +8 -17
  237. data/lib/mongoid/fields/validators/macro.rb +39 -12
  238. data/lib/mongoid/fields/validators.rb +2 -0
  239. data/lib/mongoid/fields.rb +54 -10
  240. data/lib/mongoid/findable.rb +59 -18
  241. data/lib/mongoid/indexable/specification.rb +3 -1
  242. data/lib/mongoid/indexable/validators/options.rb +2 -0
  243. data/lib/mongoid/indexable.rb +9 -4
  244. data/lib/mongoid/inspectable.rb +4 -2
  245. data/lib/mongoid/interceptable.rb +18 -10
  246. data/lib/mongoid/loggable.rb +13 -7
  247. data/lib/mongoid/matchable.rb +3 -148
  248. data/lib/mongoid/matcher/all.rb +22 -0
  249. data/lib/mongoid/matcher/and.rb +21 -0
  250. data/lib/mongoid/matcher/bits.rb +41 -0
  251. data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
  252. data/lib/mongoid/matcher/bits_all_set.rb +20 -0
  253. data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
  254. data/lib/mongoid/matcher/bits_any_set.rb +20 -0
  255. data/lib/mongoid/matcher/elem_match.rb +36 -0
  256. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  257. data/lib/mongoid/matcher/eq.rb +11 -0
  258. data/lib/mongoid/matcher/eq_impl.rb +32 -0
  259. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
  260. data/lib/mongoid/matcher/exists.rb +15 -0
  261. data/lib/mongoid/matcher/expression.rb +35 -0
  262. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  263. data/lib/mongoid/matcher/field_expression.rb +62 -0
  264. data/lib/mongoid/matcher/field_operator.rb +54 -0
  265. data/lib/mongoid/matcher/gt.rb +17 -0
  266. data/lib/mongoid/matcher/gte.rb +17 -0
  267. data/lib/mongoid/matcher/in.rb +25 -0
  268. data/lib/mongoid/matcher/lt.rb +17 -0
  269. data/lib/mongoid/matcher/lte.rb +17 -0
  270. data/lib/mongoid/matcher/mod.rb +17 -0
  271. data/lib/mongoid/matcher/ne.rb +16 -0
  272. data/lib/mongoid/matcher/nin.rb +11 -0
  273. data/lib/mongoid/matcher/nor.rb +25 -0
  274. data/lib/mongoid/matcher/not.rb +29 -0
  275. data/lib/mongoid/matcher/or.rb +21 -0
  276. data/lib/mongoid/matcher/regex.rb +41 -0
  277. data/lib/mongoid/matcher/size.rb +26 -0
  278. data/lib/mongoid/matcher/type.rb +99 -0
  279. data/lib/mongoid/matcher.rb +110 -0
  280. data/lib/mongoid/persistable/creatable.rb +3 -1
  281. data/lib/mongoid/persistable/deletable.rb +11 -9
  282. data/lib/mongoid/persistable/destroyable.rb +11 -3
  283. data/lib/mongoid/persistable/incrementable.rb +7 -3
  284. data/lib/mongoid/persistable/logical.rb +5 -2
  285. data/lib/mongoid/persistable/poppable.rb +3 -1
  286. data/lib/mongoid/persistable/pullable.rb +3 -1
  287. data/lib/mongoid/persistable/pushable.rb +14 -3
  288. data/lib/mongoid/persistable/renamable.rb +10 -3
  289. data/lib/mongoid/persistable/savable.rb +3 -1
  290. data/lib/mongoid/persistable/settable.rb +60 -13
  291. data/lib/mongoid/persistable/unsettable.rb +8 -3
  292. data/lib/mongoid/persistable/updatable.rb +30 -3
  293. data/lib/mongoid/persistable/upsertable.rb +3 -1
  294. data/lib/mongoid/persistable.rb +136 -19
  295. data/lib/mongoid/persistence_context.rb +47 -20
  296. data/lib/mongoid/positional.rb +3 -1
  297. data/lib/mongoid/query_cache.rb +132 -77
  298. data/lib/mongoid/railtie.rb +3 -1
  299. data/lib/mongoid/railties/controller_runtime.rb +4 -1
  300. data/lib/mongoid/railties/database.rake +9 -0
  301. data/lib/mongoid/reloadable.rb +11 -4
  302. data/lib/mongoid/scopable.rb +2 -1
  303. data/lib/mongoid/selectable.rb +8 -8
  304. data/lib/mongoid/serializable.rb +28 -18
  305. data/lib/mongoid/shardable.rb +80 -10
  306. data/lib/mongoid/stateful.rb +3 -1
  307. data/lib/mongoid/stringified_symbol.rb +53 -0
  308. data/lib/mongoid/tasks/database.rake +12 -5
  309. data/lib/mongoid/tasks/database.rb +85 -0
  310. data/lib/mongoid/threaded/lifecycle.rb +2 -0
  311. data/lib/mongoid/threaded.rb +2 -0
  312. data/lib/mongoid/timestamps/created/short.rb +2 -0
  313. data/lib/mongoid/timestamps/created.rb +3 -1
  314. data/lib/mongoid/timestamps/short.rb +2 -0
  315. data/lib/mongoid/timestamps/timeless.rb +6 -2
  316. data/lib/mongoid/timestamps/updated/short.rb +2 -0
  317. data/lib/mongoid/timestamps/updated.rb +3 -1
  318. data/lib/mongoid/timestamps.rb +3 -1
  319. data/lib/mongoid/touchable.rb +129 -0
  320. data/lib/mongoid/traversable.rb +118 -9
  321. data/lib/mongoid/validatable/associated.rb +5 -3
  322. data/lib/mongoid/validatable/format.rb +2 -0
  323. data/lib/mongoid/validatable/length.rb +2 -0
  324. data/lib/mongoid/validatable/localizable.rb +2 -0
  325. data/lib/mongoid/validatable/macros.rb +3 -1
  326. data/lib/mongoid/validatable/presence.rb +9 -7
  327. data/lib/mongoid/validatable/queryable.rb +2 -0
  328. data/lib/mongoid/validatable/uniqueness.rb +10 -8
  329. data/lib/mongoid/validatable.rb +15 -13
  330. data/lib/mongoid/version.rb +3 -1
  331. data/lib/mongoid.rb +35 -2
  332. data/lib/rails/generators/mongoid/config/config_generator.rb +10 -1
  333. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -27
  334. data/lib/rails/generators/mongoid/model/model_generator.rb +3 -1
  335. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
  336. data/lib/rails/generators/mongoid_generator.rb +2 -0
  337. data/lib/rails/mongoid.rb +4 -2
  338. data/lib/support/ruby_version.rb +3 -0
  339. data/spec/README.md +33 -0
  340. data/spec/config/mongoid.yml +14 -3
  341. data/spec/integration/app_spec.rb +344 -0
  342. data/spec/integration/associations/belongs_to_spec.rb +16 -0
  343. data/spec/integration/associations/embedded_spec.rb +269 -0
  344. data/spec/integration/associations/embeds_many_spec.rb +68 -0
  345. data/spec/integration/associations/embeds_one_spec.rb +24 -0
  346. data/spec/integration/associations/foreign_key_spec.rb +99 -0
  347. data/spec/integration/associations/foreign_key_spec_models.rb +65 -0
  348. data/spec/integration/associations/has_many_spec.rb +129 -0
  349. data/spec/integration/associations/has_one_spec.rb +177 -0
  350. data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
  351. data/spec/integration/associations/reverse_population_spec.rb +35 -0
  352. data/spec/integration/associations/reverse_population_spec_models.rb +37 -0
  353. data/spec/integration/atomic/modifiers_spec.rb +117 -0
  354. data/spec/integration/bson_regexp_raw_spec.rb +20 -0
  355. data/spec/integration/callbacks_models.rb +49 -0
  356. data/spec/integration/callbacks_spec.rb +216 -0
  357. data/spec/integration/criteria/date_field_spec.rb +41 -0
  358. data/spec/integration/criteria/default_scope_spec.rb +21 -0
  359. data/spec/integration/criteria/logical_spec.rb +94 -0
  360. data/spec/integration/criteria/time_with_zone_spec.rb +32 -0
  361. data/spec/integration/discriminator_key_spec.rb +354 -0
  362. data/spec/integration/discriminator_value_spec.rb +207 -0
  363. data/spec/integration/document_spec.rb +52 -0
  364. data/spec/integration/i18n_fallbacks_spec.rb +90 -0
  365. data/spec/integration/matcher_examples_spec.rb +759 -0
  366. data/spec/integration/matcher_operator_data/all.yml +140 -0
  367. data/spec/integration/matcher_operator_data/and.yml +93 -0
  368. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  369. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  370. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  371. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  372. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  373. data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
  374. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  375. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  376. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  377. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  378. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  379. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  380. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  381. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  382. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  383. data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
  384. data/spec/integration/matcher_operator_data/in.yml +210 -0
  385. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  386. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  387. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  388. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  389. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  390. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  391. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  392. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  393. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  394. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  395. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  396. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  397. data/spec/integration/matcher_operator_data/not.yml +196 -0
  398. data/spec/integration/matcher_operator_data/or.yml +137 -0
  399. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  400. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  401. data/spec/integration/matcher_operator_data/size.yml +174 -0
  402. data/spec/integration/matcher_operator_data/type.yml +70 -0
  403. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  404. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  405. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  406. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  407. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  408. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  409. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  410. data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
  411. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  412. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  413. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  414. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  415. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  416. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  417. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  418. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  419. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  420. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  421. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  422. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  423. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  424. data/spec/integration/matcher_operator_spec.rb +100 -0
  425. data/spec/integration/matcher_spec.rb +189 -0
  426. data/spec/integration/server_query_spec.rb +142 -0
  427. data/spec/integration/shardable_spec.rb +149 -0
  428. data/spec/integration/stringified_symbol_field_spec.rb +190 -0
  429. data/spec/lite_spec_helper.rb +77 -0
  430. data/spec/mongoid/association/accessors_spec.rb +1038 -0
  431. data/spec/mongoid/association/auto_save_spec.rb +365 -0
  432. data/spec/mongoid/association/builders_spec.rb +256 -0
  433. data/spec/mongoid/association/constrainable_spec.rb +118 -0
  434. data/spec/mongoid/association/counter_cache_spec.rb +453 -0
  435. data/spec/mongoid/association/depending_spec.rb +960 -0
  436. data/spec/mongoid/association/eager_spec.rb +282 -0
  437. data/spec/mongoid/association/embedded/cyclic_spec.rb +181 -0
  438. data/spec/mongoid/association/embedded/dirty_spec.rb +68 -0
  439. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +174 -0
  440. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +37 -0
  441. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +560 -0
  442. data/spec/mongoid/association/embedded/embedded_in_spec.rb +904 -0
  443. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +57 -0
  444. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +107 -0
  445. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4403 -0
  446. data/spec/mongoid/association/embedded/embeds_many_models.rb +54 -0
  447. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +52 -0
  448. data/spec/mongoid/association/embedded/embeds_many_spec.rb +865 -0
  449. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +80 -0
  450. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +82 -0
  451. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1026 -0
  452. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +9 -0
  453. data/spec/mongoid/association/embedded/embeds_one_models.rb +55 -0
  454. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +29 -0
  455. data/spec/mongoid/association/embedded/embeds_one_spec.rb +957 -0
  456. data/spec/mongoid/association/macros_spec.rb +1117 -0
  457. data/spec/mongoid/association/nested/many_spec.rb +233 -0
  458. data/spec/mongoid/association/nested/one_spec.rb +254 -0
  459. data/spec/mongoid/association/options_spec.rb +1324 -0
  460. data/spec/mongoid/association/polymorphic_spec.rb +163 -0
  461. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +244 -0
  462. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +200 -0
  463. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +377 -0
  464. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1369 -0
  465. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +38 -0
  466. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2026 -0
  467. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +181 -0
  468. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +124 -0
  469. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +168 -0
  470. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +77 -0
  471. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +3748 -0
  472. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +50 -0
  473. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +40 -0
  474. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1051 -0
  475. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +156 -0
  476. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +122 -0
  477. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +274 -0
  478. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2054 -0
  479. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +24 -0
  480. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4029 -0
  481. data/spec/mongoid/association/referenced/has_many_models.rb +61 -0
  482. data/spec/mongoid/association/referenced/has_many_query_spec.rb +38 -0
  483. data/spec/mongoid/association/referenced/has_many_spec.rb +1228 -0
  484. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +134 -0
  485. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +116 -0
  486. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +178 -0
  487. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1143 -0
  488. data/spec/mongoid/association/referenced/has_one_models.rb +80 -0
  489. data/spec/mongoid/association/referenced/has_one_query_spec.rb +38 -0
  490. data/spec/mongoid/association/referenced/has_one_spec.rb +1363 -0
  491. data/spec/mongoid/association/reflections_spec.rb +93 -0
  492. data/spec/mongoid/association/syncable_spec.rb +500 -0
  493. data/spec/mongoid/association_spec.rb +192 -0
  494. data/spec/mongoid/atomic/modifiers_spec.rb +52 -2
  495. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +3 -0
  496. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +3 -0
  497. data/spec/mongoid/atomic/paths/root_spec.rb +3 -0
  498. data/spec/mongoid/atomic/paths_spec.rb +108 -12
  499. data/spec/mongoid/atomic_spec.rb +30 -4
  500. data/spec/mongoid/attributes/dynamic_spec.rb +153 -0
  501. data/spec/mongoid/attributes/nested_spec.rb +33 -12
  502. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  503. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  504. data/spec/mongoid/attributes/projector_spec.rb +41 -0
  505. data/spec/mongoid/attributes/readonly_spec.rb +83 -125
  506. data/spec/mongoid/attributes_spec.rb +393 -9
  507. data/spec/mongoid/cacheable_spec.rb +3 -0
  508. data/spec/mongoid/changeable_spec.rb +26 -0
  509. data/spec/mongoid/clients/factory_spec.rb +142 -33
  510. data/spec/mongoid/clients/options_spec.rb +83 -56
  511. data/spec/mongoid/clients/sessions_spec.rb +19 -8
  512. data/spec/mongoid/clients/transactions_spec.rb +393 -0
  513. data/spec/mongoid/clients_spec.rb +73 -10
  514. data/spec/mongoid/composable_spec.rb +3 -0
  515. data/spec/mongoid/config/environment_spec.rb +3 -0
  516. data/spec/mongoid/config/options_spec.rb +23 -3
  517. data/spec/mongoid/config_spec.rb +126 -1
  518. data/spec/mongoid/contextual/aggregable/memory_spec.rb +3 -0
  519. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +3 -0
  520. data/spec/mongoid/contextual/atomic_spec.rb +137 -14
  521. data/spec/mongoid/contextual/geo_near_spec.rb +15 -2
  522. data/spec/mongoid/contextual/map_reduce_spec.rb +23 -5
  523. data/spec/mongoid/contextual/memory_spec.rb +22 -0
  524. data/spec/mongoid/contextual/mongo_spec.rb +185 -75
  525. data/spec/mongoid/contextual/none_spec.rb +3 -0
  526. data/spec/mongoid/copyable_spec.rb +289 -23
  527. data/spec/mongoid/copyable_spec_models.rb +48 -0
  528. data/spec/mongoid/criteria/findable_spec.rb +58 -0
  529. data/spec/mongoid/criteria/inspectable_spec.rb +3 -0
  530. data/spec/mongoid/criteria/marshalable_spec.rb +3 -0
  531. data/spec/mongoid/criteria/modifiable_spec.rb +181 -5
  532. data/spec/mongoid/criteria/options_spec.rb +3 -0
  533. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -0
  534. data/spec/mongoid/criteria/queryable/expandable_spec.rb +62 -0
  535. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +3 -0
  536. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -0
  537. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +3 -0
  538. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +4 -1
  539. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +3 -0
  540. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +36 -17
  541. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +3 -0
  542. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +3 -0
  543. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +3 -0
  544. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +3 -0
  545. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +3 -0
  546. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +54 -0
  547. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +3 -0
  548. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +3 -0
  549. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +4 -1
  550. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +10 -7
  551. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +3 -0
  552. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +47 -1
  553. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +3 -0
  554. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +43 -23
  555. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +31 -1
  556. data/spec/mongoid/criteria/queryable/key_spec.rb +51 -6
  557. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +146 -12
  558. data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -0
  559. data/spec/mongoid/criteria/queryable/options_spec.rb +3 -0
  560. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +15 -0
  561. data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -0
  562. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2070 -0
  563. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
  564. data/spec/mongoid/criteria/queryable/selectable_spec.rb +993 -2937
  565. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
  566. data/spec/mongoid/criteria/queryable/selector_spec.rb +40 -0
  567. data/spec/mongoid/criteria/queryable/smash_spec.rb +3 -0
  568. data/spec/mongoid/criteria/queryable/storable_spec.rb +190 -0
  569. data/spec/mongoid/criteria/scopable_spec.rb +3 -0
  570. data/spec/mongoid/criteria_projection_spec.rb +411 -0
  571. data/spec/mongoid/criteria_spec.rb +280 -297
  572. data/spec/mongoid/document_fields_spec.rb +114 -0
  573. data/spec/mongoid/document_persistence_context_spec.rb +33 -0
  574. data/spec/mongoid/document_query_spec.rb +90 -0
  575. data/spec/mongoid/document_spec.rb +121 -19
  576. data/spec/mongoid/equality_spec.rb +3 -1
  577. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +6 -3
  578. data/spec/mongoid/errors/callback_spec.rb +3 -0
  579. data/spec/mongoid/errors/delete_restriction_spec.rb +5 -2
  580. data/spec/mongoid/errors/document_not_destroyed_spec.rb +3 -0
  581. data/spec/mongoid/errors/document_not_found_spec.rb +3 -0
  582. data/spec/mongoid/errors/eager_load_spec.rb +3 -0
  583. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -0
  584. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -0
  585. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -0
  586. data/spec/mongoid/errors/invalid_field_spec.rb +3 -0
  587. data/spec/mongoid/errors/invalid_find_spec.rb +3 -0
  588. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -0
  589. data/spec/mongoid/errors/invalid_index_spec.rb +3 -0
  590. data/spec/mongoid/errors/invalid_options_spec.rb +5 -2
  591. data/spec/mongoid/errors/invalid_path_spec.rb +3 -0
  592. data/spec/mongoid/errors/invalid_relation_spec.rb +5 -2
  593. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -0
  594. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -0
  595. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -0
  596. data/spec/mongoid/errors/invalid_time_spec.rb +3 -0
  597. data/spec/mongoid/errors/inverse_not_found_spec.rb +4 -1
  598. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +3 -0
  599. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -0
  600. data/spec/mongoid/errors/mongoid_error_spec.rb +23 -8
  601. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -3
  602. data/spec/mongoid/errors/no_client_config_spec.rb +5 -2
  603. data/spec/mongoid/errors/no_client_database_spec.rb +6 -3
  604. data/spec/mongoid/errors/no_client_hosts_spec.rb +6 -3
  605. data/spec/mongoid/errors/no_clients_config_spec.rb +3 -0
  606. data/spec/mongoid/errors/no_environment_spec.rb +3 -0
  607. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -0
  608. data/spec/mongoid/errors/no_metadata_spec.rb +5 -2
  609. data/spec/mongoid/errors/no_parent_spec.rb +4 -1
  610. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -0
  611. data/spec/mongoid/errors/readonly_document_spec.rb +3 -0
  612. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -0
  613. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -0
  614. data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -0
  615. data/spec/mongoid/errors/unsaved_document_spec.rb +4 -1
  616. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -0
  617. data/spec/mongoid/errors/validations_spec.rb +3 -0
  618. data/spec/mongoid/extensions/array_spec.rb +37 -58
  619. data/spec/mongoid/extensions/big_decimal_spec.rb +3 -0
  620. data/spec/mongoid/extensions/binary_spec.rb +3 -0
  621. data/spec/mongoid/extensions/boolean_spec.rb +3 -0
  622. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +336 -0
  623. data/spec/mongoid/extensions/date_spec.rb +9 -160
  624. data/spec/mongoid/extensions/date_time_spec.rb +18 -60
  625. data/spec/mongoid/extensions/decimal128_spec.rb +3 -0
  626. data/spec/mongoid/extensions/false_class_spec.rb +4 -1
  627. data/spec/mongoid/extensions/float_spec.rb +18 -3
  628. data/spec/mongoid/extensions/hash_spec.rb +124 -1
  629. data/spec/mongoid/extensions/integer_spec.rb +15 -2
  630. data/spec/mongoid/extensions/module_spec.rb +3 -0
  631. data/spec/mongoid/extensions/nil_class_spec.rb +3 -0
  632. data/spec/mongoid/extensions/object_id_spec.rb +3 -0
  633. data/spec/mongoid/extensions/object_spec.rb +21 -35
  634. data/spec/mongoid/extensions/range_spec.rb +10 -0
  635. data/spec/mongoid/extensions/regexp_spec.rb +3 -0
  636. data/spec/mongoid/extensions/set_spec.rb +3 -0
  637. data/spec/mongoid/extensions/string_spec.rb +94 -32
  638. data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
  639. data/spec/mongoid/extensions/symbol_spec.rb +3 -0
  640. data/spec/mongoid/extensions/time_spec.rb +30 -0
  641. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -0
  642. data/spec/mongoid/extensions/true_class_spec.rb +4 -1
  643. data/spec/mongoid/extensions_spec.rb +3 -0
  644. data/spec/mongoid/factory_spec.rb +301 -23
  645. data/spec/mongoid/fields/foreign_key_spec.rb +27 -32
  646. data/spec/mongoid/fields/localized_spec.rb +7 -4
  647. data/spec/mongoid/fields/standard_spec.rb +3 -0
  648. data/spec/mongoid/fields_spec.rb +94 -7
  649. data/spec/mongoid/findable_spec.rb +36 -1
  650. data/spec/mongoid/indexable/specification_spec.rb +3 -0
  651. data/spec/mongoid/indexable_spec.rb +55 -14
  652. data/spec/mongoid/inspectable_spec.rb +40 -2
  653. data/spec/mongoid/interceptable_spec.rb +89 -3
  654. data/spec/mongoid/interceptable_spec_models.rb +76 -0
  655. data/spec/mongoid/loggable_spec.rb +3 -0
  656. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  657. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
  658. data/spec/mongoid/matcher/extract_attribute_spec.rb +37 -0
  659. data/spec/mongoid/persistable/creatable_spec.rb +111 -25
  660. data/spec/mongoid/persistable/deletable_spec.rb +264 -1
  661. data/spec/mongoid/persistable/destroyable_spec.rb +194 -3
  662. data/spec/mongoid/persistable/incrementable_spec.rb +17 -0
  663. data/spec/mongoid/persistable/logical_spec.rb +17 -0
  664. data/spec/mongoid/persistable/poppable_spec.rb +17 -0
  665. data/spec/mongoid/persistable/pullable_spec.rb +31 -0
  666. data/spec/mongoid/persistable/pushable_spec.rb +86 -1
  667. data/spec/mongoid/persistable/renamable_spec.rb +17 -0
  668. data/spec/mongoid/persistable/savable_spec.rb +176 -17
  669. data/spec/mongoid/persistable/settable_spec.rb +142 -10
  670. data/spec/mongoid/persistable/unsettable_spec.rb +17 -0
  671. data/spec/mongoid/persistable/updatable_spec.rb +3 -0
  672. data/spec/mongoid/persistable/upsertable_spec.rb +4 -1
  673. data/spec/mongoid/persistable_spec.rb +106 -14
  674. data/spec/mongoid/persistence_context_spec.rb +4 -1
  675. data/spec/mongoid/positional_spec.rb +3 -0
  676. data/spec/mongoid/query_cache_middleware_spec.rb +69 -0
  677. data/spec/mongoid/query_cache_spec.rb +532 -65
  678. data/spec/mongoid/relations/proxy_spec.rb +127 -124
  679. data/spec/mongoid/reloadable_spec.rb +93 -1
  680. data/spec/mongoid/scopable_spec.rb +5 -1
  681. data/spec/mongoid/selectable_spec.rb +3 -0
  682. data/spec/mongoid/serializable_spec.rb +152 -20
  683. data/spec/mongoid/shardable_models.rb +61 -0
  684. data/spec/mongoid/shardable_spec.rb +146 -26
  685. data/spec/mongoid/stateful_spec.rb +3 -0
  686. data/spec/mongoid/tasks/database_rake_spec.rb +16 -13
  687. data/spec/mongoid/tasks/database_spec.rb +4 -1
  688. data/spec/mongoid/threaded_spec.rb +3 -0
  689. data/spec/mongoid/timestamps/created/short_spec.rb +3 -0
  690. data/spec/mongoid/timestamps/created_spec.rb +3 -0
  691. data/spec/mongoid/timestamps/timeless_spec.rb +3 -0
  692. data/spec/mongoid/timestamps/updated/short_spec.rb +3 -0
  693. data/spec/mongoid/timestamps/updated_spec.rb +3 -0
  694. data/spec/mongoid/timestamps_spec.rb +3 -0
  695. data/spec/mongoid/touchable_spec.rb +575 -0
  696. data/spec/mongoid/touchable_spec_models.rb +52 -0
  697. data/spec/mongoid/traversable_spec.rb +1103 -0
  698. data/spec/mongoid/validatable/associated_spec.rb +4 -1
  699. data/spec/mongoid/validatable/format_spec.rb +3 -0
  700. data/spec/mongoid/validatable/length_spec.rb +3 -0
  701. data/spec/mongoid/validatable/numericality_spec.rb +3 -0
  702. data/spec/mongoid/validatable/presence_spec.rb +10 -6
  703. data/spec/mongoid/validatable/uniqueness_spec.rb +36 -6
  704. data/spec/mongoid/validatable_spec.rb +4 -1
  705. data/spec/mongoid_spec.rb +3 -0
  706. data/spec/rails/controller_extension/controller_runtime_spec.rb +4 -1
  707. data/spec/rails/mongoid_spec.rb +5 -2
  708. data/spec/shared/LICENSE +20 -0
  709. data/spec/shared/bin/get-mongodb-download-url +17 -0
  710. data/spec/shared/bin/s3-copy +45 -0
  711. data/spec/shared/bin/s3-upload +69 -0
  712. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  713. data/spec/shared/lib/mrss/cluster_config.rb +226 -0
  714. data/spec/shared/lib/mrss/constraints.rb +368 -0
  715. data/spec/shared/lib/mrss/docker_runner.rb +271 -0
  716. data/spec/shared/lib/mrss/lite_constraints.rb +191 -0
  717. data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
  718. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  719. data/spec/shared/lib/mrss/utils.rb +15 -0
  720. data/spec/shared/share/Dockerfile.erb +322 -0
  721. data/spec/shared/share/haproxy-1.conf +16 -0
  722. data/spec/shared/share/haproxy-2.conf +17 -0
  723. data/spec/shared/shlib/distro.sh +73 -0
  724. data/spec/shared/shlib/server.sh +317 -0
  725. data/spec/shared/shlib/set_env.sh +131 -0
  726. data/spec/spec_helper.rb +65 -58
  727. data/spec/support/authorization.rb +3 -0
  728. data/spec/support/client_registry.rb +9 -0
  729. data/spec/support/constraints.rb +54 -0
  730. data/spec/support/expectations.rb +22 -3
  731. data/spec/support/helpers.rb +11 -0
  732. data/spec/support/macros.rb +21 -0
  733. data/spec/support/models/account.rb +39 -0
  734. data/spec/support/models/acolyte.rb +20 -0
  735. data/spec/support/models/actor.rb +21 -0
  736. data/spec/support/models/actress.rb +5 -0
  737. data/spec/support/models/address.rb +86 -0
  738. data/spec/support/models/address_component.rb +8 -0
  739. data/spec/support/models/address_number.rb +9 -0
  740. data/spec/support/models/agency.rb +8 -0
  741. data/spec/support/models/agent.rb +19 -0
  742. data/spec/support/models/album.rb +21 -0
  743. data/spec/support/models/alert.rb +10 -0
  744. data/spec/support/models/animal.rb +29 -0
  745. data/spec/support/models/answer.rb +9 -0
  746. data/spec/support/models/appointment.rb +10 -0
  747. data/spec/support/models/armrest.rb +10 -0
  748. data/spec/support/models/array_field.rb +8 -0
  749. data/spec/support/models/article.rb +15 -0
  750. data/spec/support/models/artist.rb +90 -0
  751. data/spec/support/models/artwork.rb +7 -0
  752. data/spec/support/models/audio.rb +8 -0
  753. data/spec/support/models/augmentation.rb +14 -0
  754. data/spec/support/models/author.rb +9 -0
  755. data/spec/support/models/baby.rb +7 -0
  756. data/spec/support/models/band.rb +34 -0
  757. data/spec/support/models/bar.rb +13 -0
  758. data/spec/support/models/basic.rb +9 -0
  759. data/spec/support/models/bed.rb +4 -0
  760. data/spec/support/models/big_palette.rb +5 -0
  761. data/spec/support/models/birthday.rb +16 -0
  762. data/spec/support/models/bolt.rb +8 -0
  763. data/spec/support/models/bomb.rb +7 -0
  764. data/spec/support/models/book.rb +19 -0
  765. data/spec/support/models/breed.rb +7 -0
  766. data/spec/support/models/browser.rb +9 -0
  767. data/spec/support/models/building.rb +9 -0
  768. data/spec/support/models/building_address.rb +10 -0
  769. data/spec/support/models/bus.rb +10 -0
  770. data/spec/support/models/business.rb +8 -0
  771. data/spec/support/models/callback_test.rb +12 -0
  772. data/spec/support/models/canvas.rb +28 -0
  773. data/spec/support/models/car.rb +4 -0
  774. data/spec/support/models/cat.rb +11 -0
  775. data/spec/support/models/category.rb +11 -0
  776. data/spec/support/models/child.rb +7 -0
  777. data/spec/support/models/child_doc.rb +25 -0
  778. data/spec/support/models/church.rb +9 -0
  779. data/spec/support/models/circle.rb +6 -0
  780. data/spec/support/models/circuit.rb +7 -0
  781. data/spec/support/models/circus.rb +10 -0
  782. data/spec/support/models/code.rb +14 -0
  783. data/spec/support/models/coding/pull_request.rb +12 -0
  784. data/spec/support/models/coding.rb +4 -0
  785. data/spec/support/models/comment.rb +19 -0
  786. data/spec/support/models/company.rb +8 -0
  787. data/spec/support/models/consumption_period.rb +10 -0
  788. data/spec/support/models/contextable_item.rb +8 -0
  789. data/spec/support/models/contractor.rb +8 -0
  790. data/spec/support/models/cookie.rb +9 -0
  791. data/spec/support/models/country_code.rb +11 -0
  792. data/spec/support/models/courier_job.rb +7 -0
  793. data/spec/support/models/crate.rb +13 -0
  794. data/spec/support/models/customer.rb +11 -0
  795. data/spec/support/models/customer_address.rb +12 -0
  796. data/spec/support/models/deed.rb +8 -0
  797. data/spec/support/models/definition.rb +12 -0
  798. data/spec/support/models/delegating_patient.rb +16 -0
  799. data/spec/support/models/description.rb +14 -0
  800. data/spec/support/models/dictionary.rb +19 -0
  801. data/spec/support/models/division.rb +13 -0
  802. data/spec/support/models/doctor.rb +15 -0
  803. data/spec/support/models/dog.rb +10 -0
  804. data/spec/support/models/dokument.rb +9 -0
  805. data/spec/support/models/draft.rb +12 -0
  806. data/spec/support/models/dragon.rb +7 -0
  807. data/spec/support/models/driver.rb +10 -0
  808. data/spec/support/models/drug.rb +9 -0
  809. data/spec/support/models/dungeon.rb +7 -0
  810. data/spec/support/models/edit.rb +8 -0
  811. data/spec/support/models/email.rb +9 -0
  812. data/spec/support/models/employer.rb +8 -0
  813. data/spec/support/models/entry.rb +9 -0
  814. data/spec/support/models/eraser.rb +4 -0
  815. data/spec/support/models/even.rb +10 -0
  816. data/spec/support/models/event.rb +25 -0
  817. data/spec/support/models/exhibition.rb +7 -0
  818. data/spec/support/models/exhibitor.rb +9 -0
  819. data/spec/support/models/explosion.rb +7 -0
  820. data/spec/support/models/eye.rb +12 -0
  821. data/spec/support/models/eye_bowl.rb +12 -0
  822. data/spec/support/models/face.rb +11 -0
  823. data/spec/support/models/favorite.rb +9 -0
  824. data/spec/support/models/filesystem.rb +8 -0
  825. data/spec/support/models/fire_hydrant.rb +9 -0
  826. data/spec/support/models/firefox.rb +7 -0
  827. data/spec/support/models/fish.rb +10 -0
  828. data/spec/support/models/folder.rb +10 -0
  829. data/spec/support/models/folder_item.rb +12 -0
  830. data/spec/support/models/fruits.rb +37 -0
  831. data/spec/support/models/game.rb +22 -0
  832. data/spec/support/models/ghost.rb +10 -0
  833. data/spec/support/models/guitar.rb +5 -0
  834. data/spec/support/models/hole.rb +13 -0
  835. data/spec/support/models/home.rb +7 -0
  836. data/spec/support/models/house.rb +9 -0
  837. data/spec/support/models/html_writer.rb +6 -0
  838. data/spec/support/models/id_key.rb +9 -0
  839. data/spec/support/models/idnodef.rb +8 -0
  840. data/spec/support/models/image.rb +25 -0
  841. data/spec/support/models/implant.rb +19 -0
  842. data/spec/support/models/instrument.rb +9 -0
  843. data/spec/support/models/item.rb +11 -0
  844. data/spec/support/models/jar.rb +10 -0
  845. data/spec/support/models/kaleidoscope.rb +9 -0
  846. data/spec/support/models/kangaroo.rb +7 -0
  847. data/spec/support/models/label.rb +50 -0
  848. data/spec/support/models/language.rb +8 -0
  849. data/spec/support/models/lat_lng.rb +18 -0
  850. data/spec/support/models/league.rb +14 -0
  851. data/spec/support/models/learner.rb +5 -0
  852. data/spec/support/models/line_item.rb +9 -0
  853. data/spec/support/models/location.rb +11 -0
  854. data/spec/support/models/login.rb +11 -0
  855. data/spec/support/models/manufacturer.rb +10 -0
  856. data/spec/support/models/meat.rb +7 -0
  857. data/spec/support/models/membership.rb +7 -0
  858. data/spec/support/models/message.rb +14 -0
  859. data/spec/support/models/minim.rb +7 -0
  860. data/spec/support/models/mixed_drink.rb +7 -0
  861. data/spec/support/models/mop.rb +25 -0
  862. data/spec/support/models/movie.rb +16 -0
  863. data/spec/support/models/my_hash.rb +5 -0
  864. data/spec/support/models/name.rb +27 -0
  865. data/spec/support/models/name_only.rb +9 -0
  866. data/spec/support/models/node.rb +8 -0
  867. data/spec/support/models/note.rb +20 -0
  868. data/spec/support/models/nut.rb +8 -0
  869. data/spec/support/models/odd.rb +10 -0
  870. data/spec/support/models/order.rb +11 -0
  871. data/spec/support/models/ordered_post.rb +14 -0
  872. data/spec/support/models/ordered_preference.rb +9 -0
  873. data/spec/support/models/oscar.rb +17 -0
  874. data/spec/support/models/other_owner_object.rb +5 -0
  875. data/spec/support/models/override.rb +19 -0
  876. data/spec/support/models/ownable.rb +9 -0
  877. data/spec/support/models/owner.rb +11 -0
  878. data/spec/support/models/pack.rb +6 -0
  879. data/spec/support/models/page.rb +19 -0
  880. data/spec/support/models/page_question.rb +7 -0
  881. data/spec/support/models/palette.rb +10 -0
  882. data/spec/support/models/parent.rb +8 -0
  883. data/spec/support/models/parent_doc.rb +9 -0
  884. data/spec/support/models/passport.rb +9 -0
  885. data/spec/support/models/patient.rb +12 -0
  886. data/spec/support/models/pdf_writer.rb +6 -0
  887. data/spec/support/models/pencil.rb +4 -0
  888. data/spec/support/models/person.rb +230 -0
  889. data/spec/support/models/pet.rb +26 -0
  890. data/spec/support/models/pet_owner.rb +9 -0
  891. data/spec/support/models/phone.rb +13 -0
  892. data/spec/support/models/piano.rb +5 -0
  893. data/spec/support/models/pizza.rb +10 -0
  894. data/spec/support/models/player.rb +38 -0
  895. data/spec/support/models/post.rb +53 -0
  896. data/spec/support/models/post_genre.rb +9 -0
  897. data/spec/support/models/powerup.rb +14 -0
  898. data/spec/support/models/preference.rb +12 -0
  899. data/spec/support/models/princess.rb +13 -0
  900. data/spec/support/models/product.rb +20 -0
  901. data/spec/support/models/profile.rb +18 -0
  902. data/spec/support/models/pronunciation.rb +8 -0
  903. data/spec/support/models/pub.rb +9 -0
  904. data/spec/support/models/publication/encyclopedia.rb +12 -0
  905. data/spec/support/models/publication/review.rb +14 -0
  906. data/spec/support/models/publication.rb +5 -0
  907. data/spec/support/models/purchase.rb +7 -0
  908. data/spec/support/models/question.rb +11 -0
  909. data/spec/support/models/quiz.rb +10 -0
  910. data/spec/support/models/rating.rb +11 -0
  911. data/spec/support/models/record.rb +55 -0
  912. data/spec/support/models/registry.rb +7 -0
  913. data/spec/support/models/role.rb +10 -0
  914. data/spec/support/models/root_category.rb +7 -0
  915. data/spec/support/models/sandwich.rb +12 -0
  916. data/spec/support/models/scheduler.rb +10 -0
  917. data/spec/support/models/scribe.rb +8 -0
  918. data/spec/support/models/sealer.rb +8 -0
  919. data/spec/support/models/seat.rb +25 -0
  920. data/spec/support/models/seo.rb +10 -0
  921. data/spec/support/models/series.rb +8 -0
  922. data/spec/support/models/server.rb +16 -0
  923. data/spec/support/models/service.rb +25 -0
  924. data/spec/support/models/shape.rb +15 -0
  925. data/spec/support/models/shelf.rb +8 -0
  926. data/spec/support/models/shipment_address.rb +6 -0
  927. data/spec/support/models/shipping_container.rb +8 -0
  928. data/spec/support/models/shipping_pack.rb +6 -0
  929. data/spec/support/models/shirt.rb +12 -0
  930. data/spec/support/models/shop.rb +9 -0
  931. data/spec/support/models/short_agent.rb +7 -0
  932. data/spec/support/models/short_quiz.rb +8 -0
  933. data/spec/support/models/simple.rb +8 -0
  934. data/spec/support/models/slave.rb +9 -0
  935. data/spec/support/models/song.rb +11 -0
  936. data/spec/support/models/sound.rb +8 -0
  937. data/spec/support/models/spacer.rb +8 -0
  938. data/spec/support/models/square.rb +7 -0
  939. data/spec/support/models/staff.rb +10 -0
  940. data/spec/support/models/store_as_dup_test1.rb +8 -0
  941. data/spec/support/models/store_as_dup_test2.rb +8 -0
  942. data/spec/support/models/store_as_dup_test3.rb +8 -0
  943. data/spec/support/models/store_as_dup_test4.rb +8 -0
  944. data/spec/support/models/strategy.rb +6 -0
  945. data/spec/support/models/sub_item.rb +6 -0
  946. data/spec/support/models/subscription.rb +8 -0
  947. data/spec/support/models/survey.rb +8 -0
  948. data/spec/support/models/symptom.rb +9 -0
  949. data/spec/support/models/system_role.rb +7 -0
  950. data/spec/support/models/tag.rb +11 -0
  951. data/spec/support/models/target.rb +8 -0
  952. data/spec/support/models/template.rb +8 -0
  953. data/spec/support/models/thing.rb +12 -0
  954. data/spec/support/models/threadlocker.rb +8 -0
  955. data/spec/support/models/title.rb +6 -0
  956. data/spec/support/models/tool.rb +11 -0
  957. data/spec/support/models/topping.rb +8 -0
  958. data/spec/support/models/toy.rb +10 -0
  959. data/spec/support/models/track.rb +41 -0
  960. data/spec/support/models/translation.rb +8 -0
  961. data/spec/support/models/tree.rb +12 -0
  962. data/spec/support/models/truck.rb +8 -0
  963. data/spec/support/models/updatable.rb +8 -0
  964. data/spec/support/models/user.rb +24 -0
  965. data/spec/support/models/user_account.rb +13 -0
  966. data/spec/support/models/validation_callback.rb +13 -0
  967. data/spec/support/models/vehicle.rb +19 -0
  968. data/spec/support/models/version.rb +8 -0
  969. data/spec/support/models/vertex.rb +9 -0
  970. data/spec/support/models/vet_visit.rb +8 -0
  971. data/spec/support/models/video.rb +16 -0
  972. data/spec/support/models/video_game.rb +4 -0
  973. data/spec/support/models/washer.rb +8 -0
  974. data/spec/support/models/weapon.rb +14 -0
  975. data/spec/support/models/wiki_page.rb +18 -0
  976. data/spec/support/models/word.rb +18 -0
  977. data/spec/support/models/word_origin.rb +14 -0
  978. data/spec/support/models/writer.rb +14 -0
  979. data/spec/support/session_registry.rb +50 -0
  980. data/spec/support/shared/time.rb +54 -0
  981. data/spec/support/spec_config.rb +58 -0
  982. data.tar.gz.sig +0 -0
  983. metadata +1226 -814
  984. metadata.gz.sig +0 -0
  985. data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
  986. data/lib/mongoid/matchable/all.rb +0 -27
  987. data/lib/mongoid/matchable/and.rb +0 -30
  988. data/lib/mongoid/matchable/default.rb +0 -72
  989. data/lib/mongoid/matchable/elem_match.rb +0 -28
  990. data/lib/mongoid/matchable/exists.rb +0 -23
  991. data/lib/mongoid/matchable/gt.rb +0 -23
  992. data/lib/mongoid/matchable/gte.rb +0 -23
  993. data/lib/mongoid/matchable/in.rb +0 -24
  994. data/lib/mongoid/matchable/lt.rb +0 -23
  995. data/lib/mongoid/matchable/lte.rb +0 -23
  996. data/lib/mongoid/matchable/ne.rb +0 -21
  997. data/lib/mongoid/matchable/nin.rb +0 -22
  998. data/lib/mongoid/matchable/nor.rb +0 -37
  999. data/lib/mongoid/matchable/or.rb +0 -33
  1000. data/lib/mongoid/matchable/regexp.rb +0 -27
  1001. data/lib/mongoid/matchable/size.rb +0 -21
  1002. data/lib/mongoid/relations/accessors.rb +0 -267
  1003. data/lib/mongoid/relations/auto_save.rb +0 -94
  1004. data/lib/mongoid/relations/binding.rb +0 -218
  1005. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  1006. data/lib/mongoid/relations/bindings/embedded/many.rb +0 -43
  1007. data/lib/mongoid/relations/bindings/embedded/one.rb +0 -45
  1008. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  1009. data/lib/mongoid/relations/bindings/referenced/many.rb +0 -38
  1010. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  1011. data/lib/mongoid/relations/bindings/referenced/one.rb +0 -44
  1012. data/lib/mongoid/relations/bindings.rb +0 -9
  1013. data/lib/mongoid/relations/builder.rb +0 -57
  1014. data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
  1015. data/lib/mongoid/relations/builders/embedded/many.rb +0 -36
  1016. data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
  1017. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  1018. data/lib/mongoid/relations/builders/nested_attributes/one.rb +0 -126
  1019. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  1020. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  1021. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  1022. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  1023. data/lib/mongoid/relations/builders.rb +0 -106
  1024. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  1025. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  1026. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  1027. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  1028. data/lib/mongoid/relations/cascading.rb +0 -56
  1029. data/lib/mongoid/relations/constraint.rb +0 -55
  1030. data/lib/mongoid/relations/conversions.rb +0 -34
  1031. data/lib/mongoid/relations/counter_cache.rb +0 -160
  1032. data/lib/mongoid/relations/cyclic.rb +0 -107
  1033. data/lib/mongoid/relations/eager/base.rb +0 -153
  1034. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  1035. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  1036. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  1037. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  1038. data/lib/mongoid/relations/eager.rb +0 -36
  1039. data/lib/mongoid/relations/embedded/batchable.rb +0 -384
  1040. data/lib/mongoid/relations/embedded/in.rb +0 -241
  1041. data/lib/mongoid/relations/embedded/many.rb +0 -683
  1042. data/lib/mongoid/relations/embedded/one.rb +0 -235
  1043. data/lib/mongoid/relations/macros.rb +0 -367
  1044. data/lib/mongoid/relations/many.rb +0 -242
  1045. data/lib/mongoid/relations/marshalable.rb +0 -32
  1046. data/lib/mongoid/relations/metadata.rb +0 -1179
  1047. data/lib/mongoid/relations/nested_builder.rb +0 -74
  1048. data/lib/mongoid/relations/one.rb +0 -60
  1049. data/lib/mongoid/relations/options.rb +0 -49
  1050. data/lib/mongoid/relations/polymorphic.rb +0 -39
  1051. data/lib/mongoid/relations/proxy.rb +0 -215
  1052. data/lib/mongoid/relations/referenced/in.rb +0 -304
  1053. data/lib/mongoid/relations/referenced/many.rb +0 -812
  1054. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  1055. data/lib/mongoid/relations/referenced/one.rb +0 -290
  1056. data/lib/mongoid/relations/reflections.rb +0 -64
  1057. data/lib/mongoid/relations/synchronization.rb +0 -169
  1058. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  1059. data/lib/mongoid/relations/targets.rb +0 -2
  1060. data/lib/mongoid/relations/touchable.rb +0 -97
  1061. data/lib/mongoid/relations.rb +0 -148
  1062. data/spec/app/models/account.rb +0 -36
  1063. data/spec/app/models/acolyte.rb +0 -17
  1064. data/spec/app/models/actor.rb +0 -18
  1065. data/spec/app/models/actress.rb +0 -2
  1066. data/spec/app/models/address.rb +0 -79
  1067. data/spec/app/models/address_component.rb +0 -5
  1068. data/spec/app/models/address_number.rb +0 -6
  1069. data/spec/app/models/agency.rb +0 -5
  1070. data/spec/app/models/agent.rb +0 -16
  1071. data/spec/app/models/album.rb +0 -18
  1072. data/spec/app/models/alert.rb +0 -7
  1073. data/spec/app/models/animal.rb +0 -25
  1074. data/spec/app/models/answer.rb +0 -6
  1075. data/spec/app/models/appointment.rb +0 -7
  1076. data/spec/app/models/array_field.rb +0 -7
  1077. data/spec/app/models/article.rb +0 -12
  1078. data/spec/app/models/artist.rb +0 -87
  1079. data/spec/app/models/artwork.rb +0 -4
  1080. data/spec/app/models/audio.rb +0 -5
  1081. data/spec/app/models/augmentation.rb +0 -11
  1082. data/spec/app/models/author.rb +0 -6
  1083. data/spec/app/models/baby.rb +0 -4
  1084. data/spec/app/models/band.rb +0 -31
  1085. data/spec/app/models/bar.rb +0 -10
  1086. data/spec/app/models/basic.rb +0 -6
  1087. data/spec/app/models/bed.rb +0 -1
  1088. data/spec/app/models/big_palette.rb +0 -2
  1089. data/spec/app/models/birthday.rb +0 -13
  1090. data/spec/app/models/bomb.rb +0 -4
  1091. data/spec/app/models/book.rb +0 -16
  1092. data/spec/app/models/breed.rb +0 -4
  1093. data/spec/app/models/browser.rb +0 -6
  1094. data/spec/app/models/building.rb +0 -6
  1095. data/spec/app/models/building_address.rb +0 -7
  1096. data/spec/app/models/bus.rb +0 -7
  1097. data/spec/app/models/business.rb +0 -5
  1098. data/spec/app/models/callback_test.rb +0 -9
  1099. data/spec/app/models/canvas.rb +0 -25
  1100. data/spec/app/models/car.rb +0 -1
  1101. data/spec/app/models/cat.rb +0 -8
  1102. data/spec/app/models/category.rb +0 -8
  1103. data/spec/app/models/child.rb +0 -4
  1104. data/spec/app/models/child_doc.rb +0 -22
  1105. data/spec/app/models/church.rb +0 -6
  1106. data/spec/app/models/circle.rb +0 -3
  1107. data/spec/app/models/circuit.rb +0 -4
  1108. data/spec/app/models/circus.rb +0 -7
  1109. data/spec/app/models/code.rb +0 -11
  1110. data/spec/app/models/comment.rb +0 -16
  1111. data/spec/app/models/company.rb +0 -5
  1112. data/spec/app/models/consumption_period.rb +0 -7
  1113. data/spec/app/models/contextable_item.rb +0 -5
  1114. data/spec/app/models/contractor.rb +0 -5
  1115. data/spec/app/models/cookie.rb +0 -6
  1116. data/spec/app/models/country_code.rb +0 -8
  1117. data/spec/app/models/courier_job.rb +0 -4
  1118. data/spec/app/models/definition.rb +0 -9
  1119. data/spec/app/models/description.rb +0 -11
  1120. data/spec/app/models/dictionary.rb +0 -10
  1121. data/spec/app/models/division.rb +0 -10
  1122. data/spec/app/models/doctor.rb +0 -12
  1123. data/spec/app/models/dog.rb +0 -7
  1124. data/spec/app/models/dokument.rb +0 -6
  1125. data/spec/app/models/draft.rb +0 -9
  1126. data/spec/app/models/dragon.rb +0 -4
  1127. data/spec/app/models/driver.rb +0 -7
  1128. data/spec/app/models/drug.rb +0 -6
  1129. data/spec/app/models/dungeon.rb +0 -4
  1130. data/spec/app/models/edit.rb +0 -5
  1131. data/spec/app/models/email.rb +0 -6
  1132. data/spec/app/models/employer.rb +0 -5
  1133. data/spec/app/models/entry.rb +0 -6
  1134. data/spec/app/models/eraser.rb +0 -1
  1135. data/spec/app/models/even.rb +0 -7
  1136. data/spec/app/models/event.rb +0 -22
  1137. data/spec/app/models/exhibition.rb +0 -4
  1138. data/spec/app/models/exhibitor.rb +0 -6
  1139. data/spec/app/models/explosion.rb +0 -4
  1140. data/spec/app/models/eye.rb +0 -9
  1141. data/spec/app/models/eye_bowl.rb +0 -9
  1142. data/spec/app/models/face.rb +0 -8
  1143. data/spec/app/models/favorite.rb +0 -6
  1144. data/spec/app/models/filesystem.rb +0 -5
  1145. data/spec/app/models/fire_hydrant.rb +0 -6
  1146. data/spec/app/models/firefox.rb +0 -4
  1147. data/spec/app/models/fish.rb +0 -7
  1148. data/spec/app/models/folder.rb +0 -7
  1149. data/spec/app/models/folder_item.rb +0 -9
  1150. data/spec/app/models/fruits.rb +0 -34
  1151. data/spec/app/models/game.rb +0 -19
  1152. data/spec/app/models/ghost.rb +0 -7
  1153. data/spec/app/models/home.rb +0 -4
  1154. data/spec/app/models/house.rb +0 -6
  1155. data/spec/app/models/html_writer.rb +0 -3
  1156. data/spec/app/models/id_key.rb +0 -6
  1157. data/spec/app/models/image.rb +0 -22
  1158. data/spec/app/models/implant.rb +0 -16
  1159. data/spec/app/models/item.rb +0 -8
  1160. data/spec/app/models/jar.rb +0 -7
  1161. data/spec/app/models/kaleidoscope.rb +0 -6
  1162. data/spec/app/models/kangaroo.rb +0 -4
  1163. data/spec/app/models/label.rb +0 -47
  1164. data/spec/app/models/language.rb +0 -5
  1165. data/spec/app/models/lat_lng.rb +0 -15
  1166. data/spec/app/models/league.rb +0 -11
  1167. data/spec/app/models/learner.rb +0 -2
  1168. data/spec/app/models/line_item.rb +0 -6
  1169. data/spec/app/models/location.rb +0 -8
  1170. data/spec/app/models/login.rb +0 -8
  1171. data/spec/app/models/manufacturer.rb +0 -7
  1172. data/spec/app/models/meat.rb +0 -4
  1173. data/spec/app/models/membership.rb +0 -4
  1174. data/spec/app/models/message.rb +0 -11
  1175. data/spec/app/models/mixed_drink.rb +0 -4
  1176. data/spec/app/models/movie.rb +0 -13
  1177. data/spec/app/models/my_hash.rb +0 -2
  1178. data/spec/app/models/name.rb +0 -24
  1179. data/spec/app/models/node.rb +0 -5
  1180. data/spec/app/models/note.rb +0 -17
  1181. data/spec/app/models/odd.rb +0 -7
  1182. data/spec/app/models/ordered_post.rb +0 -11
  1183. data/spec/app/models/ordered_preference.rb +0 -6
  1184. data/spec/app/models/oscar.rb +0 -14
  1185. data/spec/app/models/override.rb +0 -16
  1186. data/spec/app/models/ownable.rb +0 -6
  1187. data/spec/app/models/owner.rb +0 -6
  1188. data/spec/app/models/pack.rb +0 -3
  1189. data/spec/app/models/page.rb +0 -16
  1190. data/spec/app/models/page_question.rb +0 -4
  1191. data/spec/app/models/palette.rb +0 -7
  1192. data/spec/app/models/parent.rb +0 -5
  1193. data/spec/app/models/parent_doc.rb +0 -6
  1194. data/spec/app/models/passport.rb +0 -5
  1195. data/spec/app/models/patient.rb +0 -9
  1196. data/spec/app/models/pdf_writer.rb +0 -3
  1197. data/spec/app/models/pencil.rb +0 -1
  1198. data/spec/app/models/person.rb +0 -207
  1199. data/spec/app/models/pet.rb +0 -23
  1200. data/spec/app/models/pet_owner.rb +0 -6
  1201. data/spec/app/models/phone.rb +0 -9
  1202. data/spec/app/models/pizza.rb +0 -7
  1203. data/spec/app/models/player.rb +0 -35
  1204. data/spec/app/models/post.rb +0 -50
  1205. data/spec/app/models/post_genre.rb +0 -6
  1206. data/spec/app/models/powerup.rb +0 -11
  1207. data/spec/app/models/preference.rb +0 -9
  1208. data/spec/app/models/princess.rb +0 -10
  1209. data/spec/app/models/product.rb +0 -17
  1210. data/spec/app/models/profile.rb +0 -5
  1211. data/spec/app/models/pronunciation.rb +0 -5
  1212. data/spec/app/models/pub.rb +0 -6
  1213. data/spec/app/models/purchase.rb +0 -4
  1214. data/spec/app/models/question.rb +0 -8
  1215. data/spec/app/models/quiz.rb +0 -7
  1216. data/spec/app/models/rating.rb +0 -8
  1217. data/spec/app/models/record.rb +0 -52
  1218. data/spec/app/models/registry.rb +0 -4
  1219. data/spec/app/models/role.rb +0 -7
  1220. data/spec/app/models/root_category.rb +0 -4
  1221. data/spec/app/models/sandwich.rb +0 -9
  1222. data/spec/app/models/scheduler.rb +0 -7
  1223. data/spec/app/models/seo.rb +0 -7
  1224. data/spec/app/models/series.rb +0 -4
  1225. data/spec/app/models/server.rb +0 -13
  1226. data/spec/app/models/service.rb +0 -22
  1227. data/spec/app/models/shape.rb +0 -12
  1228. data/spec/app/models/shelf.rb +0 -5
  1229. data/spec/app/models/shipment_address.rb +0 -2
  1230. data/spec/app/models/shipping_container.rb +0 -5
  1231. data/spec/app/models/shipping_pack.rb +0 -3
  1232. data/spec/app/models/shop.rb +0 -6
  1233. data/spec/app/models/short_agent.rb +0 -4
  1234. data/spec/app/models/short_quiz.rb +0 -5
  1235. data/spec/app/models/simple.rb +0 -5
  1236. data/spec/app/models/slave.rb +0 -6
  1237. data/spec/app/models/song.rb +0 -8
  1238. data/spec/app/models/sound.rb +0 -5
  1239. data/spec/app/models/square.rb +0 -4
  1240. data/spec/app/models/staff.rb +0 -7
  1241. data/spec/app/models/store_as_dup_test1.rb +0 -5
  1242. data/spec/app/models/store_as_dup_test2.rb +0 -5
  1243. data/spec/app/models/strategy.rb +0 -3
  1244. data/spec/app/models/sub_item.rb +0 -3
  1245. data/spec/app/models/subscription.rb +0 -5
  1246. data/spec/app/models/survey.rb +0 -5
  1247. data/spec/app/models/symptom.rb +0 -6
  1248. data/spec/app/models/tag.rb +0 -8
  1249. data/spec/app/models/target.rb +0 -5
  1250. data/spec/app/models/template.rb +0 -5
  1251. data/spec/app/models/thing.rb +0 -9
  1252. data/spec/app/models/title.rb +0 -3
  1253. data/spec/app/models/tool.rb +0 -8
  1254. data/spec/app/models/topping.rb +0 -5
  1255. data/spec/app/models/track.rb +0 -38
  1256. data/spec/app/models/translation.rb +0 -5
  1257. data/spec/app/models/tree.rb +0 -9
  1258. data/spec/app/models/truck.rb +0 -3
  1259. data/spec/app/models/user.rb +0 -21
  1260. data/spec/app/models/user_account.rb +0 -10
  1261. data/spec/app/models/validation_callback.rb +0 -10
  1262. data/spec/app/models/vehicle.rb +0 -11
  1263. data/spec/app/models/version.rb +0 -5
  1264. data/spec/app/models/vet_visit.rb +0 -5
  1265. data/spec/app/models/video.rb +0 -13
  1266. data/spec/app/models/video_game.rb +0 -1
  1267. data/spec/app/models/weapon.rb +0 -11
  1268. data/spec/app/models/wiki_page.rb +0 -14
  1269. data/spec/app/models/word.rb +0 -15
  1270. data/spec/app/models/word_origin.rb +0 -11
  1271. data/spec/app/models/writer.rb +0 -11
  1272. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
  1273. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  1274. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  1275. data/spec/mongoid/matchable/all_spec.rb +0 -31
  1276. data/spec/mongoid/matchable/and_spec.rb +0 -187
  1277. data/spec/mongoid/matchable/default_spec.rb +0 -130
  1278. data/spec/mongoid/matchable/elem_match_spec.rb +0 -86
  1279. data/spec/mongoid/matchable/exists_spec.rb +0 -57
  1280. data/spec/mongoid/matchable/gt_spec.rb +0 -86
  1281. data/spec/mongoid/matchable/gte_spec.rb +0 -84
  1282. data/spec/mongoid/matchable/in_spec.rb +0 -49
  1283. data/spec/mongoid/matchable/lt_spec.rb +0 -85
  1284. data/spec/mongoid/matchable/lte_spec.rb +0 -85
  1285. data/spec/mongoid/matchable/ne_spec.rb +0 -46
  1286. data/spec/mongoid/matchable/nin_spec.rb +0 -48
  1287. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  1288. data/spec/mongoid/matchable/or_spec.rb +0 -131
  1289. data/spec/mongoid/matchable/regexp_spec.rb +0 -59
  1290. data/spec/mongoid/matchable/size_spec.rb +0 -25
  1291. data/spec/mongoid/matchable_spec.rb +0 -853
  1292. data/spec/mongoid/relations/accessors_spec.rb +0 -821
  1293. data/spec/mongoid/relations/auto_save_spec.rb +0 -314
  1294. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +0 -171
  1295. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +0 -54
  1296. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +0 -77
  1297. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +0 -241
  1298. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +0 -153
  1299. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +0 -178
  1300. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +0 -131
  1301. data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
  1302. data/spec/mongoid/relations/builders/embedded/many_spec.rb +0 -132
  1303. data/spec/mongoid/relations/builders/embedded/one_spec.rb +0 -99
  1304. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +0 -233
  1305. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +0 -250
  1306. data/spec/mongoid/relations/builders/referenced/in_spec.rb +0 -230
  1307. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  1308. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  1309. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  1310. data/spec/mongoid/relations/builders_spec.rb +0 -253
  1311. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  1312. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  1313. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  1314. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  1315. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  1316. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  1317. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  1318. data/spec/mongoid/relations/counter_cache_spec.rb +0 -450
  1319. data/spec/mongoid/relations/cyclic_spec.rb +0 -178
  1320. data/spec/mongoid/relations/eager/belongs_to_spec.rb +0 -163
  1321. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +0 -133
  1322. data/spec/mongoid/relations/eager/has_many_spec.rb +0 -244
  1323. data/spec/mongoid/relations/eager/has_one_spec.rb +0 -163
  1324. data/spec/mongoid/relations/eager_spec.rb +0 -279
  1325. data/spec/mongoid/relations/embedded/dirty_spec.rb +0 -65
  1326. data/spec/mongoid/relations/embedded/in_spec.rb +0 -579
  1327. data/spec/mongoid/relations/embedded/many_spec.rb +0 -4412
  1328. data/spec/mongoid/relations/embedded/one_spec.rb +0 -1068
  1329. data/spec/mongoid/relations/macros_spec.rb +0 -1039
  1330. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  1331. data/spec/mongoid/relations/options_spec.rb +0 -35
  1332. data/spec/mongoid/relations/polymorphic_spec.rb +0 -128
  1333. data/spec/mongoid/relations/referenced/in_spec.rb +0 -1366
  1334. data/spec/mongoid/relations/referenced/many_spec.rb +0 -3816
  1335. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +0 -3577
  1336. data/spec/mongoid/relations/referenced/one_spec.rb +0 -1240
  1337. data/spec/mongoid/relations/reflections_spec.rb +0 -101
  1338. data/spec/mongoid/relations/synchronization_spec.rb +0 -495
  1339. data/spec/mongoid/relations/targets/enumerable_spec.rb +0 -1825
  1340. data/spec/mongoid/relations/touchable_spec.rb +0 -402
  1341. data/spec/mongoid/relations_spec.rb +0 -189
@@ -1,1825 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Relations::Targets::Enumerable do
4
-
5
- describe "#==" do
6
-
7
- context "when comparing with an enumerable" do
8
-
9
- let(:person) do
10
- Person.create
11
- end
12
-
13
- let!(:post) do
14
- Post.create(person_id: person.id)
15
- end
16
-
17
- context "when only a criteria target exists" do
18
-
19
- let(:criteria) do
20
- Post.where(person_id: person.id)
21
- end
22
-
23
- let!(:enumerable) do
24
- described_class.new(criteria)
25
- end
26
-
27
- it "returns the equality check" do
28
- expect(enumerable).to eq([ post ])
29
- end
30
- end
31
-
32
- context "when only an array target exists" do
33
-
34
- let!(:enumerable) do
35
- described_class.new([ post ])
36
- end
37
-
38
- it "returns the equality check" do
39
- expect(enumerable._loaded.values).to eq([ post ])
40
- end
41
- end
42
-
43
- context "when a criteria and added exist" do
44
-
45
- let(:criteria) do
46
- Post.where(person_id: person.id)
47
- end
48
-
49
- let(:enumerable) do
50
- described_class.new(criteria)
51
- end
52
-
53
- let(:post_two) do
54
- Post.new
55
- end
56
-
57
- context "when the added does not contain unloaded docs" do
58
-
59
- before do
60
- enumerable << post_two
61
- end
62
-
63
- it "returns the equality check" do
64
- expect(enumerable).to eq([ post, post_two ])
65
- end
66
- end
67
-
68
- context "when the added contains unloaded docs" do
69
-
70
- before do
71
- enumerable << post
72
- end
73
-
74
- it "returns the equality check" do
75
- expect(enumerable).to eq([ post ])
76
- end
77
- end
78
-
79
- context "when the enumerable is loaded" do
80
-
81
- before do
82
- enumerable.instance_variable_set(:@executed, true)
83
- end
84
-
85
- context "when the loaded has no docs and added is persisted" do
86
-
87
- before do
88
- post.save
89
- enumerable._added[post.id] = post
90
- end
91
-
92
- it "returns the equality check" do
93
- expect(enumerable).to eq([ post ])
94
- end
95
- end
96
- end
97
- end
98
- end
99
-
100
- context "when comparing with a non enumerable" do
101
-
102
- let(:enumerable) do
103
- described_class.new([])
104
- end
105
-
106
- it "returns false" do
107
- expect(enumerable).to_not eq("person")
108
- end
109
- end
110
- end
111
-
112
- describe "#===" do
113
-
114
- let(:enumerable) do
115
- described_class.new([])
116
- end
117
-
118
- context "when compared to an array class" do
119
-
120
- it "returns true" do
121
- expect(enumerable === Array).to be true
122
- end
123
- end
124
-
125
- context "when compared to an enumerable class" do
126
-
127
- it "returns true" do
128
- expect(enumerable === described_class).to be true
129
- end
130
- end
131
-
132
- context "when compared to a different class" do
133
-
134
- it "returns false" do
135
- expect(enumerable === Mongoid::Document).to be false
136
- end
137
- end
138
-
139
- context "when compared to an array instance" do
140
-
141
- context "when the entries are equal" do
142
-
143
- let(:other) do
144
- described_class.new([])
145
- end
146
-
147
- it "returns true" do
148
- expect(enumerable === other).to be true
149
- end
150
- end
151
-
152
- context "when the entries are not equal" do
153
-
154
- let(:other) do
155
- described_class.new([ Band.new ])
156
- end
157
-
158
- it "returns false" do
159
- expect(enumerable === other).to be false
160
- end
161
- end
162
- end
163
- end
164
-
165
- describe "#<<" do
166
-
167
- let(:person) do
168
- Person.create
169
- end
170
-
171
- let!(:post) do
172
- Post.create(person_id: person.id)
173
- end
174
-
175
- let!(:enumerable) do
176
- described_class.new([])
177
- end
178
-
179
- context "when the relation is empty" do
180
-
181
- let!(:added) do
182
- enumerable << post
183
- end
184
-
185
- it "adds the document to the added target" do
186
- expect(enumerable._added).to eq({ post.id => post })
187
- end
188
-
189
- it "returns the added documents" do
190
- expect(added).to eq([ post ])
191
- end
192
- end
193
- end
194
-
195
- describe "#any?" do
196
-
197
- let(:person) do
198
- Person.create
199
- end
200
-
201
- let!(:post_one) do
202
- Post.create(person_id: person.id)
203
- end
204
-
205
- let!(:post_two) do
206
- Post.create(person_id: person.id)
207
- end
208
-
209
- context "when only a criteria target exists" do
210
-
211
- let(:criteria) do
212
- Post.where(person_id: person.id)
213
- end
214
-
215
- let!(:enumerable) do
216
- described_class.new(criteria)
217
- end
218
-
219
- let!(:any) do
220
- enumerable.any?
221
- end
222
-
223
- it "returns true" do
224
- expect(any).to be true
225
- end
226
-
227
- it "retains the correct length" do
228
- expect(enumerable.length).to eq(2)
229
- end
230
-
231
- it "retains the correct length when calling to_a" do
232
- expect(enumerable.to_a.length).to eq(2)
233
- end
234
-
235
- context "when iterating over the relation a second time" do
236
-
237
- before do
238
- enumerable.each { |post| post }
239
- end
240
-
241
- it "retains the correct length" do
242
- expect(enumerable.length).to eq(2)
243
- end
244
-
245
- it "retains the correct length when calling to_a" do
246
- expect(enumerable.to_a.length).to eq(2)
247
- end
248
- end
249
- end
250
- end
251
-
252
- describe "#clear" do
253
-
254
- let(:person) do
255
- Person.create
256
- end
257
-
258
- let!(:post) do
259
- Post.create(person_id: person.id)
260
- end
261
-
262
- let!(:post_two) do
263
- Post.create(person_id: person.id)
264
- end
265
-
266
- let(:criteria) do
267
- Post.where(person_id: person.id)
268
- end
269
-
270
- let(:enumerable) do
271
- described_class.new(criteria)
272
- end
273
-
274
- before do
275
- enumerable._loaded[post.id] = post
276
- enumerable << post
277
- end
278
-
279
- let!(:clear) do
280
- enumerable.clear do |doc|
281
- expect(doc).to be_a(Post)
282
- end
283
- end
284
-
285
- it "clears out the loaded docs" do
286
- expect(enumerable._loaded).to be_empty
287
- end
288
-
289
- it "clears out the added docs" do
290
- expect(enumerable._added).to be_empty
291
- end
292
-
293
- it "retains its loaded state" do
294
- expect(enumerable).to_not be__loaded
295
- end
296
- end
297
-
298
- describe "#clone" do
299
-
300
- let(:person) do
301
- Person.create
302
- end
303
-
304
- let!(:post) do
305
- Post.create(title: "one", person_id: person.id)
306
- end
307
-
308
- let!(:post_two) do
309
- Post.create(title: "two", person_id: person.id)
310
- end
311
-
312
- let(:criteria) do
313
- Post.where(person_id: person.id)
314
- end
315
-
316
- let(:enumerable) do
317
- described_class.new(criteria)
318
- end
319
-
320
- before do
321
- enumerable << post
322
- enumerable << post_two
323
- end
324
-
325
- let(:cloned) do
326
- enumerable.clone
327
- end
328
-
329
- it "does not retain the first id" do
330
- expect(cloned.first).to_not eq(post)
331
- end
332
-
333
- it "does not retain the last id" do
334
- expect(cloned.last).to_not eq(post_two)
335
- end
336
- end
337
-
338
- describe "#delete" do
339
-
340
- let(:person) do
341
- Person.create
342
- end
343
-
344
- context "when the document is loaded" do
345
-
346
- let!(:post) do
347
- Post.create(person_id: person.id)
348
- end
349
-
350
- let!(:enumerable) do
351
- described_class.new([ post ])
352
- end
353
-
354
- let!(:deleted) do
355
- enumerable.delete(post)
356
- end
357
-
358
- it "deletes the document from the enumerable" do
359
- expect(enumerable._loaded).to be_empty
360
- end
361
-
362
- it "returns the document" do
363
- expect(deleted).to eq(post)
364
- end
365
- end
366
-
367
- context "when the document is added" do
368
-
369
- let!(:post) do
370
- Post.new
371
- end
372
-
373
- let(:criteria) do
374
- Person.where(person_id: person.id)
375
- end
376
-
377
- let!(:enumerable) do
378
- described_class.new(criteria)
379
- end
380
-
381
- before do
382
- enumerable << post
383
- end
384
-
385
- let!(:deleted) do
386
- enumerable.delete(post)
387
- end
388
-
389
- it "removes the document from the added docs" do
390
- expect(enumerable._added).to be_empty
391
- end
392
-
393
- it "returns the document" do
394
- expect(deleted).to eq(post)
395
- end
396
- end
397
-
398
- context "when the document is unloaded" do
399
-
400
- let!(:post) do
401
- Post.create(person_id: person.id)
402
- end
403
-
404
- let(:criteria) do
405
- Post.where(person_id: person.id)
406
- end
407
-
408
- let!(:enumerable) do
409
- described_class.new(criteria)
410
- end
411
-
412
- let!(:deleted) do
413
- enumerable.delete(post)
414
- end
415
-
416
- it "does not load the document" do
417
- expect(enumerable._loaded).to be_empty
418
- end
419
-
420
- it "returns the document" do
421
- expect(deleted).to eq(post)
422
- end
423
- end
424
-
425
- context "when the document is not found" do
426
-
427
- let!(:post) do
428
- Post.create(person_id: person.id)
429
- end
430
-
431
- let(:criteria) do
432
- Person.where(person_id: person.id)
433
- end
434
-
435
- let!(:enumerable) do
436
- described_class.new([ post ])
437
- end
438
-
439
- let!(:deleted) do
440
- enumerable.delete(Post.new) do |doc|
441
- expect(doc).to be_nil
442
- end
443
- end
444
-
445
- it "returns nil" do
446
- expect(deleted).to be_nil
447
- end
448
- end
449
- end
450
-
451
- describe "#delete_if" do
452
-
453
- let(:person) do
454
- Person.create
455
- end
456
-
457
- context "when the document is loaded" do
458
-
459
- let!(:post) do
460
- Post.create(person_id: person.id)
461
- end
462
-
463
- let!(:enumerable) do
464
- described_class.new([ post ])
465
- end
466
-
467
- let!(:deleted) do
468
- enumerable.delete_if { |doc| doc == post }
469
- end
470
-
471
- it "deletes the document from the enumerable" do
472
- expect(enumerable._loaded).to be_empty
473
- end
474
-
475
- it "returns the remaining docs" do
476
- expect(deleted).to be_empty
477
- end
478
- end
479
-
480
- context "when the document is added" do
481
-
482
- let!(:post) do
483
- Post.new
484
- end
485
-
486
- let(:criteria) do
487
- Person.where(person_id: person.id)
488
- end
489
-
490
- let!(:enumerable) do
491
- described_class.new(criteria)
492
- end
493
-
494
- before do
495
- enumerable << post
496
- end
497
-
498
- let!(:deleted) do
499
- enumerable.delete_if { |doc| doc == post }
500
- end
501
-
502
- it "removes the document from the added docs" do
503
- expect(enumerable._added).to be_empty
504
- end
505
-
506
- it "returns the remaining docs" do
507
- expect(deleted).to be_empty
508
- end
509
- end
510
-
511
- context "when the document is unloaded" do
512
-
513
- let!(:post) do
514
- Post.create(person_id: person.id)
515
- end
516
-
517
- let(:criteria) do
518
- Post.where(person_id: person.id)
519
- end
520
-
521
- let!(:enumerable) do
522
- described_class.new(criteria)
523
- end
524
-
525
- let!(:deleted) do
526
- enumerable.delete_if { |doc| doc == post }
527
- end
528
-
529
- it "does not load the document" do
530
- expect(enumerable._loaded).to be_empty
531
- end
532
-
533
- it "returns the remaining docs" do
534
- expect(deleted).to be_empty
535
- end
536
- end
537
-
538
- context "when the block doesn't match" do
539
-
540
- let!(:post) do
541
- Post.create(person_id: person.id)
542
- end
543
-
544
- let(:criteria) do
545
- Person.where(person_id: person.id)
546
- end
547
-
548
- let!(:enumerable) do
549
- described_class.new([ post ])
550
- end
551
-
552
- let!(:deleted) do
553
- enumerable.delete_if { |doc| doc == Post.new }
554
- end
555
-
556
- it "returns the remaining docs" do
557
- expect(deleted).to eq([ post ])
558
- end
559
- end
560
- end
561
-
562
- describe "#detect" do
563
-
564
- let(:person) do
565
- Person.create
566
- end
567
-
568
- let!(:post) do
569
- Post.create(person: person, title: "test")
570
- end
571
-
572
- let(:criteria) do
573
- Post.where(person_id: person.id)
574
- end
575
-
576
- let!(:enumerable) do
577
- described_class.new(criteria)
578
- end
579
-
580
- context "when setting a value on the matching document" do
581
-
582
- before do
583
- enumerable.detect{ |post| post.title = "test" }.rating = 10
584
- end
585
-
586
- it "sets the value on the instance" do
587
- expect(enumerable.detect{ |post| post.title = "test" }.rating).to eq(10)
588
- end
589
- end
590
- end
591
-
592
- describe "#each" do
593
-
594
- let(:person) do
595
- Person.create
596
- end
597
-
598
- let!(:post) do
599
- Post.create(person_id: person.id)
600
- end
601
-
602
- context "when only a criteria target exists" do
603
-
604
- let(:criteria) do
605
- Post.where(person_id: person.id)
606
- end
607
-
608
- let!(:enumerable) do
609
- described_class.new(criteria)
610
- end
611
-
612
- let!(:iterated) do
613
- enumerable.each do |doc|
614
- expect(doc).to be_a(Post)
615
- end
616
- end
617
-
618
- it "loads each document" do
619
- expect(enumerable._loaded).to eq({ post.id => post })
620
- end
621
-
622
- it "becomes loaded" do
623
- expect(enumerable).to be__loaded
624
- end
625
- end
626
-
627
- context "when only an array target exists" do
628
-
629
- let!(:enumerable) do
630
- described_class.new([ post ])
631
- end
632
-
633
- let!(:iterated) do
634
- enumerable.each do |doc|
635
- expect(doc).to be_a(Post)
636
- end
637
- end
638
-
639
- it "does not alter the loaded docs" do
640
- expect(enumerable._loaded).to eq({ post.id => post })
641
- end
642
-
643
- it "stays loaded" do
644
- expect(enumerable).to be__loaded
645
- end
646
- end
647
-
648
- context "when a criteria and added exist" do
649
-
650
- let(:criteria) do
651
- Post.where(person_id: person.id)
652
- end
653
-
654
- let!(:enumerable) do
655
- described_class.new(criteria)
656
- end
657
-
658
- let(:post_two) do
659
- Post.new
660
- end
661
-
662
- context "when the added does not contain unloaded docs" do
663
-
664
- before do
665
- enumerable << post_two
666
- end
667
-
668
- let!(:iterated) do
669
- enumerable.each do |doc|
670
- expect(doc).to be_a(Post)
671
- end
672
- end
673
-
674
- it "adds the unloaded to the loaded docs" do
675
- expect(enumerable._loaded).to eq({ post.id => post })
676
- end
677
-
678
- it "keeps the appended in the added docs" do
679
- expect(enumerable._added).to eq({ post_two.id => post_two })
680
- end
681
-
682
- it "stays loaded" do
683
- expect(enumerable).to be__loaded
684
- end
685
- end
686
-
687
- context "when the added contains unloaded docs" do
688
-
689
- before do
690
- enumerable << post
691
- end
692
-
693
- let!(:iterated) do
694
- enumerable.each do |doc|
695
- expect(doc).to be_a(Post)
696
- end
697
- end
698
-
699
- it "adds the persisted added doc to the loaded" do
700
- expect(enumerable._loaded).to eq({ post.id => post })
701
- end
702
-
703
- it "stays loaded" do
704
- expect(enumerable).to be__loaded
705
- end
706
- end
707
- end
708
-
709
- context "when no block is passed" do
710
-
711
- let(:criteria) do
712
- Post.where(person_id: person.id)
713
- end
714
-
715
- let!(:enumerable) do
716
- described_class.new(criteria)
717
- end
718
-
719
- it "returns an enumerator" do
720
- expect(enumerable.each.class.include?(Enumerable)).to be true
721
- end
722
-
723
- end
724
- end
725
-
726
- describe "#entries" do
727
-
728
- let(:person) do
729
- Person.create
730
- end
731
-
732
- let(:criteria) do
733
- Post.where(person_id: person.id)
734
- end
735
-
736
- let!(:enumerable) do
737
- described_class.new(criteria)
738
- end
739
-
740
- context "when the added contains a persisted document" do
741
-
742
- let!(:post) do
743
- Post.create(person_id: person.id)
744
- end
745
-
746
- before do
747
- enumerable << post
748
- end
749
-
750
- let(:entries) do
751
- enumerable.entries
752
- end
753
-
754
- it "yields to the in memory documents first" do
755
- expect(entries.first).to equal(post)
756
- end
757
- end
758
- end
759
-
760
- describe "#first" do
761
-
762
- let(:person) do
763
- Person.create
764
- end
765
-
766
- context "when the enumerable is not loaded" do
767
-
768
- let(:criteria) do
769
- Post.where(person_id: person.id)
770
- end
771
-
772
- let(:enumerable) do
773
- described_class.new(criteria)
774
- end
775
-
776
- context "when unloaded is not empty" do
777
-
778
- context "when added is empty" do
779
-
780
- let!(:post) do
781
- Post.create(person_id: person.id)
782
- end
783
-
784
- let(:first) do
785
- enumerable.first
786
- end
787
-
788
- it "returns the first unloaded doc" do
789
- expect(first).to eq(post)
790
- end
791
-
792
- it "does not load the enumerable" do
793
- expect(enumerable).to_not be__loaded
794
- end
795
-
796
- it "receives query only once" do
797
- expect(criteria).to receive(:first).once
798
- first
799
- end
800
- end
801
-
802
- context "when added is not empty" do
803
-
804
- let!(:post) do
805
- Post.create(person_id: person.id)
806
- end
807
-
808
- let(:post_two) do
809
- Post.new(person_id: person.id)
810
- end
811
-
812
- before do
813
- enumerable << post_two
814
- end
815
-
816
- let(:first) do
817
- enumerable.first
818
- end
819
-
820
- context "when a perviously persisted unloaded doc exists" do
821
-
822
- it "returns the first added doc" do
823
- expect(first).to eq(post)
824
- end
825
-
826
- it "does not load the enumerable" do
827
- expect(enumerable).to_not be__loaded
828
- end
829
- end
830
- end
831
- end
832
-
833
- context "when unloaded is empty" do
834
-
835
- let!(:post) do
836
- Post.new(person_id: person.id)
837
- end
838
-
839
- before do
840
- enumerable << post
841
- end
842
-
843
- let(:first) do
844
- enumerable.first
845
- end
846
-
847
- it "returns the first loaded doc" do
848
- expect(first).to eq(post)
849
- end
850
-
851
- it "does not load the enumerable" do
852
- expect(enumerable).to_not be__loaded
853
- end
854
- end
855
-
856
- context "when unloaded and added are empty" do
857
-
858
- let(:first) do
859
- enumerable.first
860
- end
861
-
862
- it "returns nil" do
863
- expect(first).to be_nil
864
- end
865
-
866
- it "does not load the enumerable" do
867
- expect(enumerable).to_not be__loaded
868
- end
869
- end
870
- end
871
-
872
- context "when the enumerable is loaded" do
873
-
874
- context "when loaded is not empty" do
875
-
876
- let!(:post) do
877
- Post.create(person_id: person.id)
878
- end
879
-
880
- let(:enumerable) do
881
- described_class.new([ post ])
882
- end
883
-
884
- let(:first) do
885
- enumerable.first
886
- end
887
-
888
- it "returns the first loaded doc" do
889
- expect(first).to eq(post)
890
- end
891
- end
892
-
893
- context "when loaded is empty" do
894
-
895
- let!(:post) do
896
- Post.create(person_id: person.id)
897
- end
898
-
899
- let(:enumerable) do
900
- described_class.new([])
901
- end
902
-
903
- before do
904
- enumerable << post
905
- end
906
-
907
- let(:first) do
908
- enumerable.first
909
- end
910
-
911
- it "returns the first added doc" do
912
- expect(first).to eq(post)
913
- end
914
- end
915
-
916
- context "when loaded and added are empty" do
917
-
918
- let(:enumerable) do
919
- described_class.new([])
920
- end
921
-
922
- let(:first) do
923
- enumerable.first
924
- end
925
-
926
- it "returns nil" do
927
- expect(first).to be_nil
928
- end
929
- end
930
- end
931
-
932
- context 'when the id_sort option is none' do
933
-
934
- let(:person) do
935
- Person.create
936
- end
937
-
938
- let(:criteria) do
939
- Post.where(person_id: person.id)
940
- end
941
-
942
- let(:enumerable) do
943
- described_class.new(criteria)
944
- end
945
-
946
- let!(:first_post) do
947
- person.posts.create(title: "One")
948
- end
949
-
950
- let!(:second_post) do
951
- person.posts.create(title: "Two")
952
- end
953
-
954
- it 'does not use the sort on id' do
955
- expect(enumerable.first(id_sort: :none)).to eq(first_post)
956
- end
957
- end
958
-
959
- context 'when the id_sort option is not provided' do
960
-
961
- let(:person) do
962
- Person.create
963
- end
964
-
965
- let(:criteria) do
966
- Post.where(person_id: person.id)
967
- end
968
-
969
- let(:enumerable) do
970
- described_class.new(criteria)
971
- end
972
-
973
- let!(:first_post) do
974
- person.posts.create(title: "One")
975
- end
976
-
977
- let!(:second_post) do
978
- person.posts.create(title: "Two")
979
- end
980
-
981
- it 'uses the sort on id' do
982
- expect(enumerable.first).to eq(first_post)
983
- end
984
- end
985
- end
986
-
987
- describe "#include?" do
988
-
989
- let(:person) do
990
- Person.create
991
- end
992
-
993
- let!(:post_one) do
994
- Post.create(person_id: person.id)
995
- end
996
-
997
- let!(:post_two) do
998
- Post.create(person_id: person.id)
999
- end
1000
-
1001
- context "when no criteria exists" do
1002
-
1003
- context "when the enumerable is loaded" do
1004
-
1005
- let!(:enumerable) do
1006
- described_class.new([ post_one, post_two ])
1007
- end
1008
-
1009
- let!(:included) do
1010
- enumerable.include?(post_two)
1011
- end
1012
-
1013
- it "returns true" do
1014
- expect(included).to be true
1015
- end
1016
-
1017
- it "retains the correct length" do
1018
- expect(enumerable.length).to eq(2)
1019
- end
1020
-
1021
- it "retains the correct length when calling to_a" do
1022
- expect(enumerable.to_a.length).to eq(2)
1023
- end
1024
- end
1025
-
1026
- context "when the enumerable contains an added document" do
1027
-
1028
- let!(:enumerable) do
1029
- described_class.new([])
1030
- end
1031
-
1032
- let(:post_three) do
1033
- Post.new(person_id: person)
1034
- end
1035
-
1036
- before do
1037
- enumerable.push(post_three)
1038
- end
1039
-
1040
- let!(:included) do
1041
- enumerable.include?(post_three)
1042
- end
1043
-
1044
- it "returns true" do
1045
- expect(included).to be true
1046
- end
1047
- end
1048
- end
1049
-
1050
- context "when the document is present and not the first" do
1051
-
1052
- let(:criteria) do
1053
- Post.where(person_id: person.id)
1054
- end
1055
-
1056
- let!(:enumerable) do
1057
- described_class.new(criteria)
1058
- end
1059
-
1060
- let!(:included) do
1061
- enumerable.include?(post_two)
1062
- end
1063
-
1064
- it "returns true" do
1065
- expect(included).to be true
1066
- end
1067
-
1068
- it "retains the correct length" do
1069
- expect(enumerable.length).to eq(2)
1070
- end
1071
-
1072
- it "retains the correct length when calling to_a" do
1073
- expect(enumerable.to_a.length).to eq(2)
1074
- end
1075
-
1076
- context "when iterating over the relation a second time" do
1077
-
1078
- before do
1079
- enumerable.each { |post| post }
1080
- end
1081
-
1082
- it "retains the correct length" do
1083
- expect(enumerable.length).to eq(2)
1084
- end
1085
-
1086
- it "retains the correct length when calling to_a" do
1087
- expect(enumerable.to_a.length).to eq(2)
1088
- end
1089
- end
1090
- end
1091
- end
1092
-
1093
- describe "#initialize" do
1094
-
1095
- let(:person) do
1096
- Person.new
1097
- end
1098
-
1099
- context "when provided with a criteria" do
1100
-
1101
- let(:criteria) do
1102
- Post.where(person_id: person.id)
1103
- end
1104
-
1105
- let(:enumerable) do
1106
- described_class.new(criteria)
1107
- end
1108
-
1109
- it "sets the criteria" do
1110
- expect(enumerable._unloaded).to eq(criteria)
1111
- end
1112
-
1113
- it "is not loaded" do
1114
- expect(enumerable).to_not be__loaded
1115
- end
1116
- end
1117
-
1118
- context "when provided an array" do
1119
-
1120
- let(:post) do
1121
- Post.new
1122
- end
1123
-
1124
- let(:enumerable) do
1125
- described_class.new([ post ])
1126
- end
1127
-
1128
- it "does not set a criteria" do
1129
- expect(enumerable._unloaded).to be_nil
1130
- end
1131
-
1132
- it "is loaded" do
1133
- expect(enumerable).to be__loaded
1134
- end
1135
- end
1136
- end
1137
-
1138
- describe "#in_memory" do
1139
-
1140
- let(:person) do
1141
- Person.new
1142
- end
1143
-
1144
- context "when the enumerable is loaded" do
1145
-
1146
- let(:post) do
1147
- Post.new
1148
- end
1149
-
1150
- let(:enumerable) do
1151
- described_class.new([ post ])
1152
- end
1153
-
1154
- let(:post_two) do
1155
- Post.new
1156
- end
1157
-
1158
- before do
1159
- enumerable << post_two
1160
- end
1161
-
1162
- let(:in_memory) do
1163
- enumerable.in_memory
1164
- end
1165
-
1166
- it "returns the loaded and added docs" do
1167
- expect(in_memory).to eq([ post, post_two ])
1168
- end
1169
- end
1170
-
1171
- context "when the enumerable is not loaded" do
1172
-
1173
- let(:post) do
1174
- Post.new(person_id: person.id)
1175
- end
1176
-
1177
- let(:enumerable) do
1178
- described_class.new(Post.where(person_id: person.id))
1179
- end
1180
-
1181
- let(:post_two) do
1182
- Post.new(person_id: person.id)
1183
- end
1184
-
1185
- before do
1186
- enumerable << post_two
1187
- end
1188
-
1189
- let(:in_memory) do
1190
- enumerable.in_memory
1191
- end
1192
-
1193
- it "returns the added docs" do
1194
- expect(in_memory).to eq([ post_two ])
1195
- end
1196
- end
1197
-
1198
- context "when passed a block" do
1199
-
1200
- let(:enumerable) do
1201
- described_class.new(Post.where(person_id: person.id))
1202
- end
1203
-
1204
- let(:post_two) do
1205
- Post.new(person_id: person.id)
1206
- end
1207
-
1208
- before do
1209
- enumerable << post_two
1210
- end
1211
-
1212
- it "yields to each in memory document" do
1213
- enumerable.in_memory do |doc|
1214
- expect(doc).to eq(post_two)
1215
- end
1216
- end
1217
- end
1218
- end
1219
-
1220
- describe "#is_a?" do
1221
-
1222
- let(:enumerable) do
1223
- described_class.new(Post.all)
1224
- end
1225
-
1226
- context "when checking against enumerable" do
1227
-
1228
- it "returns true" do
1229
- expect(enumerable.is_a?(::Enumerable)).to be true
1230
- end
1231
- end
1232
-
1233
- context "when checking against array" do
1234
-
1235
- it "returns true" do
1236
- expect(enumerable.is_a?(Array)).to be true
1237
- end
1238
- end
1239
- end
1240
-
1241
- describe "#last" do
1242
-
1243
- let(:person) do
1244
- Person.create
1245
- end
1246
-
1247
- context "when the enumerable is not loaded" do
1248
-
1249
- let(:criteria) do
1250
- Post.asc(:_id).where(person_id: person.id)
1251
- end
1252
-
1253
- let(:enumerable) do
1254
- described_class.new(criteria)
1255
- end
1256
-
1257
- context "when unloaded is not empty" do
1258
-
1259
- let!(:post) do
1260
- Post.create(person_id: person.id)
1261
- end
1262
-
1263
- let(:last) do
1264
- enumerable.last
1265
- end
1266
-
1267
- it "returns the last unloaded doc" do
1268
- expect(last).to eq(post)
1269
- end
1270
-
1271
- it "does not load the enumerable" do
1272
- expect(enumerable).to_not be__loaded
1273
- end
1274
-
1275
- it "receives query only once" do
1276
- expect(criteria).to receive(:last).once
1277
- last
1278
- end
1279
- end
1280
-
1281
- context "when unloaded is empty" do
1282
-
1283
- let!(:post) do
1284
- Post.new(person_id: person.id)
1285
- end
1286
-
1287
- before do
1288
- enumerable << post
1289
- end
1290
-
1291
- let(:last) do
1292
- enumerable.last
1293
- end
1294
-
1295
- it "returns the last unloaded doc" do
1296
- expect(last).to eq(post)
1297
- end
1298
-
1299
- it "does not load the enumerable" do
1300
- expect(enumerable).to_not be__loaded
1301
- end
1302
- end
1303
-
1304
- context "when unloaded and added are empty" do
1305
-
1306
- let(:last) do
1307
- enumerable.last
1308
- end
1309
-
1310
- it "returns nil" do
1311
- expect(last).to be_nil
1312
- end
1313
-
1314
- it "does not load the enumerable" do
1315
- expect(enumerable).to_not be__loaded
1316
- end
1317
- end
1318
-
1319
- context "when added is not empty" do
1320
-
1321
- let!(:post_one) do
1322
- person.posts.create
1323
- end
1324
-
1325
- let!(:post_two) do
1326
- person.posts.create
1327
- end
1328
-
1329
- let(:last) do
1330
- enumerable.last
1331
- end
1332
-
1333
- context "when accessing from a reloaded child" do
1334
-
1335
- it "returns the last document" do
1336
- expect(post_one.reload.person.posts.asc(:_id).last).to eq(post_two)
1337
- end
1338
- end
1339
- end
1340
- end
1341
-
1342
- context "when the enumerable is loaded" do
1343
-
1344
- context "when loaded is not empty" do
1345
-
1346
- let!(:post) do
1347
- Post.create(person_id: person.id)
1348
- end
1349
-
1350
- let(:enumerable) do
1351
- described_class.new([ post ])
1352
- end
1353
-
1354
- let(:last) do
1355
- enumerable.last
1356
- end
1357
-
1358
- it "returns the last loaded doc" do
1359
- expect(last).to eq(post)
1360
- end
1361
- end
1362
-
1363
- context "when loaded is empty" do
1364
-
1365
- let!(:post) do
1366
- Post.create(person_id: person.id)
1367
- end
1368
-
1369
- let(:enumerable) do
1370
- described_class.new([])
1371
- end
1372
-
1373
- before do
1374
- enumerable << post
1375
- end
1376
-
1377
- let(:last) do
1378
- enumerable.last
1379
- end
1380
-
1381
- it "returns the last added doc" do
1382
- expect(last).to eq(post)
1383
- end
1384
- end
1385
-
1386
- context "when loaded and added are empty" do
1387
-
1388
- let(:enumerable) do
1389
- described_class.new([])
1390
- end
1391
-
1392
- let(:last) do
1393
- enumerable.last
1394
- end
1395
-
1396
- it "returns nil" do
1397
- expect(last).to be_nil
1398
- end
1399
- end
1400
- end
1401
-
1402
- context 'when the id_sort option is none' do
1403
-
1404
- let(:person) do
1405
- Person.create
1406
- end
1407
-
1408
- let(:criteria) do
1409
- Post.where(person_id: person.id)
1410
- end
1411
-
1412
- let(:enumerable) do
1413
- described_class.new(criteria)
1414
- end
1415
-
1416
- let!(:first_post) do
1417
- person.posts.create(title: "One")
1418
- end
1419
-
1420
- let!(:second_post) do
1421
- person.posts.create(title: "Two")
1422
- end
1423
-
1424
- it 'does not use the sort on id' do
1425
- expect(enumerable.last(id_sort: :none)).to eq(first_post)
1426
- end
1427
- end
1428
-
1429
- context 'when the id_sort option is not provided' do
1430
-
1431
- let(:person) do
1432
- Person.create
1433
- end
1434
-
1435
- let(:criteria) do
1436
- Post.where(person_id: person.id)
1437
- end
1438
-
1439
- let(:enumerable) do
1440
- described_class.new(criteria)
1441
- end
1442
-
1443
- let!(:first_post) do
1444
- person.posts.create(title: "One")
1445
- end
1446
-
1447
- let!(:second_post) do
1448
- person.posts.create(title: "Two")
1449
- end
1450
-
1451
- it 'uses the sort on id' do
1452
- expect(enumerable.last).to eq(second_post)
1453
- end
1454
- end
1455
- end
1456
-
1457
- describe "#kind_of?" do
1458
-
1459
- let(:enumerable) do
1460
- described_class.new(Post.all)
1461
- end
1462
-
1463
- context "when checking against enumerable" do
1464
-
1465
- it "returns true" do
1466
- expect(enumerable.kind_of?(::Enumerable)).to be true
1467
- end
1468
- end
1469
-
1470
- context "when checking against array" do
1471
-
1472
- it "returns true" do
1473
- expect(enumerable.kind_of?(Array)).to be true
1474
- end
1475
- end
1476
- end
1477
-
1478
- describe "#load_all!" do
1479
-
1480
- let(:person) do
1481
- Person.create
1482
- end
1483
-
1484
- let!(:post) do
1485
- Post.create(person_id: person.id)
1486
- end
1487
-
1488
- let(:criteria) do
1489
- Post.where(person_id: person.id)
1490
- end
1491
-
1492
- let!(:enumerable) do
1493
- described_class.new(criteria)
1494
- end
1495
-
1496
- let!(:loaded) do
1497
- enumerable.load_all!
1498
- end
1499
-
1500
- it "loads all the unloaded documents" do
1501
- expect(enumerable._loaded).to eq({ post.id => post })
1502
- end
1503
-
1504
- it "returns the object" do
1505
- expect(loaded).to eq([post])
1506
- end
1507
-
1508
- it "sets loaded to true" do
1509
- expect(enumerable).to be__loaded
1510
- end
1511
- end
1512
-
1513
- describe "#reset" do
1514
-
1515
- let(:person) do
1516
- Person.create
1517
- end
1518
-
1519
- let(:post) do
1520
- Post.create(person_id: person.id)
1521
- end
1522
-
1523
- let(:post_two) do
1524
- Post.create(person_id: person.id)
1525
- end
1526
-
1527
- let(:enumerable) do
1528
- described_class.new([ post ])
1529
- end
1530
-
1531
- before do
1532
- enumerable << post_two
1533
- end
1534
-
1535
- let!(:reset) do
1536
- enumerable.reset
1537
- end
1538
-
1539
- it "is not loaded" do
1540
- expect(enumerable).to_not be__loaded
1541
- end
1542
-
1543
- it "clears out the loaded docs" do
1544
- expect(enumerable._loaded).to be_empty
1545
- end
1546
-
1547
- it "clears out the added docs" do
1548
- expect(enumerable._added).to be_empty
1549
- end
1550
- end
1551
-
1552
- describe "#respond_to?" do
1553
-
1554
- let(:enumerable) do
1555
- described_class.new([])
1556
- end
1557
-
1558
- context "when checking against array methods" do
1559
-
1560
- [].methods.each do |method|
1561
-
1562
- it "returns true for #{method}" do
1563
- expect(enumerable).to respond_to(method)
1564
- end
1565
- end
1566
- end
1567
- end
1568
-
1569
- describe "#size" do
1570
-
1571
- let(:person) do
1572
- Person.create
1573
- end
1574
-
1575
- let!(:post) do
1576
- Post.create(person_id: person.id)
1577
- end
1578
-
1579
- context "when the base is new" do
1580
-
1581
- let!(:person) do
1582
- Person.new
1583
- end
1584
-
1585
- context "when the added contains a persisted document" do
1586
-
1587
- let!(:post) do
1588
- Post.create(person_id: person.id)
1589
- end
1590
-
1591
- context "when the enumerable is not loaded" do
1592
-
1593
- let(:enumerable) do
1594
- described_class.new(Post.where(person_id: person.id))
1595
- end
1596
-
1597
- it "includes the number of all added documents" do
1598
- expect(enumerable.size).to eq(1)
1599
- end
1600
- end
1601
- end
1602
- end
1603
-
1604
- context "when the enumerable is loaded" do
1605
-
1606
- let(:enumerable) do
1607
- described_class.new([ post ])
1608
- end
1609
-
1610
- let(:post_two) do
1611
- Post.new(person_id: person.id)
1612
- end
1613
-
1614
- before do
1615
- enumerable << post_two
1616
- end
1617
-
1618
- let(:size) do
1619
- enumerable.size
1620
- end
1621
-
1622
- it "returns the loaded size plus added size" do
1623
- expect(size).to eq(2)
1624
- end
1625
-
1626
- it "matches the size of the loaded enumerable" do
1627
- expect(size).to eq(enumerable.to_a.size)
1628
- end
1629
- end
1630
-
1631
- context "when the enumerable is not loaded" do
1632
-
1633
- let(:enumerable) do
1634
- described_class.new(Post.where(person_id: person.id))
1635
- end
1636
-
1637
- context "when the added contains new documents" do
1638
-
1639
- let(:post_two) do
1640
- Post.new(person_id: person.id)
1641
- end
1642
-
1643
- before do
1644
- enumerable << post_two
1645
- end
1646
-
1647
- let(:size) do
1648
- enumerable.size
1649
- end
1650
-
1651
- it "returns the unloaded count plus added new size" do
1652
- expect(size).to eq(2)
1653
- end
1654
- end
1655
-
1656
- context "when the added contains persisted documents" do
1657
-
1658
- let(:post_two) do
1659
- Post.create(person_id: person.id)
1660
- end
1661
-
1662
- before do
1663
- enumerable << post_two
1664
- end
1665
-
1666
- let(:size) do
1667
- enumerable.size
1668
- end
1669
-
1670
- it "returns the unloaded count plus added new size" do
1671
- expect(size).to eq(2)
1672
- end
1673
- end
1674
- end
1675
- end
1676
-
1677
- describe "#to_json" do
1678
-
1679
- let(:person) do
1680
- Person.create
1681
- end
1682
-
1683
- let!(:post) do
1684
- Post.create(title: "test", person_id: person.id)
1685
- end
1686
-
1687
- let(:criteria) do
1688
- Post.where(person_id: person.id)
1689
- end
1690
-
1691
- let!(:enumerable) do
1692
- described_class.new(criteria)
1693
- end
1694
-
1695
- before do
1696
- enumerable << post
1697
- end
1698
-
1699
- let!(:json) do
1700
- enumerable.to_json
1701
- end
1702
-
1703
- it "serializes the enumerable" do
1704
- expect(json).to include(post.title)
1705
- end
1706
- end
1707
-
1708
- describe "#to_json(parameters)" do
1709
-
1710
- let(:person) do
1711
- Person.create
1712
- end
1713
-
1714
- let!(:post) do
1715
- Post.create(title: "test", person_id: person.id)
1716
- end
1717
-
1718
- let(:criteria) do
1719
- Post.where(person_id: person.id)
1720
- end
1721
-
1722
- let!(:json) do
1723
- person.posts.to_json({except: 'title'})
1724
- end
1725
-
1726
- it "serializes the enumerable" do
1727
- expect(json).to_not include(post.title)
1728
- end
1729
- end
1730
-
1731
- describe "#as_json" do
1732
-
1733
- let(:person) do
1734
- Person.create
1735
- end
1736
-
1737
- let!(:post) do
1738
- Post.create(title: "test", person_id: person.id)
1739
- end
1740
-
1741
- let(:criteria) do
1742
- Post.where(person_id: person.id)
1743
- end
1744
-
1745
- let!(:enumerable) do
1746
- described_class.new(criteria)
1747
- end
1748
-
1749
- before do
1750
- enumerable << post
1751
- end
1752
-
1753
- let!(:json) do
1754
- enumerable.as_json
1755
- end
1756
-
1757
- it "serializes the enumerable" do
1758
- expect(json.size).to eq(1)
1759
- expect(json[0]['title']).to eq(post.title)
1760
- end
1761
- end
1762
-
1763
- describe "#as_json(parameters)" do
1764
-
1765
- let(:person) do
1766
- Person.create
1767
- end
1768
-
1769
- let!(:post) do
1770
- Post.create(title: "test", person_id: person.id)
1771
- end
1772
-
1773
- let(:criteria) do
1774
- Post.where(person_id: person.id)
1775
- end
1776
-
1777
- let!(:json) do
1778
- person.posts.as_json({except: "title"})
1779
- end
1780
-
1781
- it "serializes the enumerable" do
1782
- expect(json.size).to eq(1)
1783
- end
1784
-
1785
- it "includes the proper fields" do
1786
- expect(json[0].keys).to_not include("title")
1787
- end
1788
- end
1789
-
1790
- describe "#uniq" do
1791
-
1792
- let(:person) do
1793
- Person.create
1794
- end
1795
-
1796
- let!(:post) do
1797
- Post.create(person_id: person.id)
1798
- end
1799
-
1800
- let(:criteria) do
1801
- Post.where(person_id: person.id)
1802
- end
1803
-
1804
- let!(:enumerable) do
1805
- described_class.new(criteria)
1806
- end
1807
-
1808
- before do
1809
- enumerable << post
1810
- enumerable._loaded[post.id] = post
1811
- end
1812
-
1813
- let!(:uniq) do
1814
- enumerable.uniq
1815
- end
1816
-
1817
- it "returns the unique documents" do
1818
- expect(uniq).to eq([ post ])
1819
- end
1820
-
1821
- it "sets loaded to true" do
1822
- expect(enumerable).to be__loaded
1823
- end
1824
- end
1825
- end