mongoid 3.1.5 → 8.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1501) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +636 -33
  4. data/LICENSE +2 -1
  5. data/README.md +32 -24
  6. data/Rakefile +75 -5
  7. data/lib/config/locales/en.yml +301 -132
  8. data/lib/mongoid/association/accessors.rb +431 -0
  9. data/lib/mongoid/association/bindable.rb +227 -0
  10. data/lib/mongoid/association/builders.rb +86 -0
  11. data/lib/mongoid/association/constrainable.rb +42 -0
  12. data/lib/mongoid/association/depending.rb +128 -0
  13. data/lib/mongoid/association/eager_loadable.rb +57 -0
  14. data/lib/mongoid/association/embedded/batchable.rb +398 -0
  15. data/lib/mongoid/association/embedded/cyclic.rb +102 -0
  16. data/lib/mongoid/association/embedded/embedded_in/binding.rb +74 -0
  17. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +38 -0
  18. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +111 -0
  19. data/lib/mongoid/association/embedded/embedded_in.rb +135 -0
  20. data/lib/mongoid/association/embedded/embeds_many/binding.rb +42 -0
  21. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +45 -0
  22. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +571 -0
  23. data/lib/mongoid/association/embedded/embeds_many.rb +183 -0
  24. data/lib/mongoid/association/embedded/embeds_one/binding.rb +43 -0
  25. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +53 -0
  26. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +164 -0
  27. data/lib/mongoid/association/embedded/embeds_one.rb +150 -0
  28. data/lib/mongoid/association/embedded.rb +6 -0
  29. data/lib/mongoid/association/macros.rb +228 -0
  30. data/lib/mongoid/association/many.rb +202 -0
  31. data/lib/mongoid/association/marshalable.rb +31 -0
  32. data/lib/mongoid/association/nested/many.rb +192 -0
  33. data/lib/mongoid/association/nested/nested_buildable.rb +66 -0
  34. data/lib/mongoid/association/nested/one.rb +116 -0
  35. data/lib/mongoid/association/nested.rb +15 -0
  36. data/lib/mongoid/association/one.rb +53 -0
  37. data/lib/mongoid/association/options.rb +122 -0
  38. data/lib/mongoid/association/proxy.rb +200 -0
  39. data/lib/mongoid/association/referenced/auto_save.rb +74 -0
  40. data/lib/mongoid/association/referenced/belongs_to/binding.rb +83 -0
  41. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +48 -0
  42. data/lib/mongoid/association/referenced/belongs_to/eager.rb +73 -0
  43. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +124 -0
  44. data/lib/mongoid/association/referenced/belongs_to.rb +226 -0
  45. data/lib/mongoid/association/referenced/counter_cache.rb +152 -0
  46. data/lib/mongoid/association/referenced/eager.rb +163 -0
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +72 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +53 -0
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +345 -0
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +273 -0
  52. data/lib/mongoid/association/referenced/has_many/binding.rb +36 -0
  53. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  54. data/lib/mongoid/association/referenced/has_many/eager.rb +44 -0
  55. data/lib/mongoid/association/referenced/has_many/enumerable.rb +494 -0
  56. data/lib/mongoid/association/referenced/has_many/proxy.rb +551 -0
  57. data/lib/mongoid/association/referenced/has_many.rb +251 -0
  58. data/lib/mongoid/association/referenced/has_one/binding.rb +42 -0
  59. data/lib/mongoid/association/referenced/has_one/buildable.rb +74 -0
  60. data/lib/mongoid/association/referenced/has_one/eager.rb +36 -0
  61. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +113 -0
  62. data/lib/mongoid/association/referenced/has_one/proxy.rb +108 -0
  63. data/lib/mongoid/association/referenced/has_one.rb +184 -0
  64. data/lib/mongoid/association/referenced/syncable.rb +155 -0
  65. data/lib/mongoid/association/referenced.rb +9 -0
  66. data/lib/mongoid/association/reflections.rb +69 -0
  67. data/lib/mongoid/association/relatable.rb +489 -0
  68. data/lib/mongoid/association.rb +135 -0
  69. data/lib/mongoid/atomic/modifiers.rb +41 -61
  70. data/lib/mongoid/atomic/paths/embedded/many.rb +24 -8
  71. data/lib/mongoid/atomic/paths/embedded/one.rb +5 -8
  72. data/lib/mongoid/atomic/paths/embedded.rb +3 -34
  73. data/lib/mongoid/atomic/paths/root.rb +4 -20
  74. data/lib/mongoid/atomic/paths.rb +2 -1
  75. data/lib/mongoid/atomic.rb +52 -69
  76. data/lib/mongoid/attributes/dynamic.rb +141 -0
  77. data/lib/mongoid/attributes/nested.rb +93 -0
  78. data/lib/mongoid/attributes/processing.rb +35 -97
  79. data/lib/mongoid/attributes/projector.rb +119 -0
  80. data/lib/mongoid/attributes/readonly.rb +27 -10
  81. data/lib/mongoid/attributes.rb +159 -181
  82. data/lib/mongoid/cacheable.rb +33 -0
  83. data/lib/mongoid/changeable.rb +420 -0
  84. data/lib/mongoid/clients/factory.rb +105 -0
  85. data/lib/mongoid/clients/options.rb +111 -0
  86. data/lib/mongoid/clients/sessions.rb +113 -0
  87. data/lib/mongoid/clients/storage_options.rb +79 -0
  88. data/lib/mongoid/clients/validators/storage.rb +58 -0
  89. data/lib/mongoid/clients/validators.rb +3 -0
  90. data/lib/mongoid/clients.rb +79 -0
  91. data/lib/mongoid/composable.rb +128 -0
  92. data/lib/mongoid/config/environment.rb +51 -13
  93. data/lib/mongoid/config/options.rb +30 -18
  94. data/lib/mongoid/config/validators/client.rb +128 -0
  95. data/lib/mongoid/config/validators/option.rb +3 -4
  96. data/lib/mongoid/config/validators.rb +3 -2
  97. data/lib/mongoid/config.rb +170 -89
  98. data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
  99. data/lib/mongoid/contextual/aggregable/mongo.rb +33 -36
  100. data/lib/mongoid/contextual/aggregable/none.rb +65 -0
  101. data/lib/mongoid/contextual/aggregable.rb +17 -0
  102. data/lib/mongoid/contextual/atomic.rb +80 -79
  103. data/lib/mongoid/contextual/command.rb +8 -11
  104. data/lib/mongoid/contextual/geo_near.rb +42 -44
  105. data/lib/mongoid/contextual/map_reduce.rb +33 -127
  106. data/lib/mongoid/contextual/memory.rb +226 -88
  107. data/lib/mongoid/contextual/mongo.rb +466 -293
  108. data/lib/mongoid/contextual/none.rb +193 -0
  109. data/lib/mongoid/contextual/queryable.rb +3 -4
  110. data/lib/mongoid/contextual.rb +11 -11
  111. data/lib/mongoid/copyable.rb +68 -20
  112. data/lib/mongoid/criteria/findable.rb +143 -0
  113. data/lib/mongoid/criteria/includable.rb +92 -0
  114. data/lib/mongoid/criteria/inspectable.rb +24 -0
  115. data/lib/mongoid/criteria/marshalable.rb +55 -0
  116. data/lib/mongoid/criteria/modifiable.rb +235 -0
  117. data/lib/mongoid/criteria/options.rb +24 -0
  118. data/lib/mongoid/criteria/permission.rb +71 -0
  119. data/lib/mongoid/criteria/queryable/aggregable.rb +109 -0
  120. data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
  121. data/lib/mongoid/criteria/queryable/extensions/array.rb +151 -0
  122. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +57 -0
  123. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +33 -0
  124. data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
  125. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +52 -0
  126. data/lib/mongoid/criteria/queryable/extensions/hash.rb +163 -0
  127. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +75 -0
  128. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +81 -0
  129. data/lib/mongoid/criteria/queryable/extensions/object.rb +182 -0
  130. data/lib/mongoid/criteria/queryable/extensions/range.rb +102 -0
  131. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +72 -0
  132. data/lib/mongoid/criteria/queryable/extensions/set.rb +33 -0
  133. data/lib/mongoid/criteria/queryable/extensions/string.rb +122 -0
  134. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +74 -0
  135. data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
  136. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +66 -0
  137. data/lib/mongoid/criteria/queryable/extensions.rb +25 -0
  138. data/lib/mongoid/criteria/queryable/key.rb +177 -0
  139. data/lib/mongoid/criteria/queryable/macroable.rb +26 -0
  140. data/lib/mongoid/criteria/queryable/mergeable.rb +434 -0
  141. data/lib/mongoid/criteria/queryable/optional.rb +380 -0
  142. data/lib/mongoid/criteria/queryable/options.rb +136 -0
  143. data/lib/mongoid/criteria/queryable/pipeline.rb +106 -0
  144. data/lib/mongoid/criteria/queryable/selectable.rb +937 -0
  145. data/lib/mongoid/criteria/queryable/selector.rb +287 -0
  146. data/lib/mongoid/criteria/queryable/smash.rb +128 -0
  147. data/lib/mongoid/criteria/queryable/storable.rb +237 -0
  148. data/lib/mongoid/criteria/queryable.rb +90 -0
  149. data/lib/mongoid/criteria/scopable.rb +166 -0
  150. data/lib/mongoid/criteria.rb +177 -189
  151. data/lib/mongoid/deprecable.rb +36 -0
  152. data/lib/mongoid/deprecation.rb +25 -0
  153. data/lib/mongoid/document.rb +193 -139
  154. data/lib/mongoid/equality.rb +35 -18
  155. data/lib/mongoid/errors/ambiguous_relationship.rb +5 -6
  156. data/lib/mongoid/errors/callback.rb +2 -3
  157. data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
  158. data/lib/mongoid/errors/delete_restriction.rb +10 -13
  159. data/lib/mongoid/errors/document_not_destroyed.rb +22 -0
  160. data/lib/mongoid/errors/document_not_found.rb +36 -21
  161. data/lib/mongoid/errors/empty_config_file.rb +25 -0
  162. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +19 -0
  163. data/lib/mongoid/errors/invalid_collection.rb +2 -1
  164. data/lib/mongoid/errors/invalid_config_file.rb +25 -0
  165. data/lib/mongoid/errors/invalid_config_option.rb +3 -4
  166. data/lib/mongoid/errors/invalid_dependent_strategy.rb +31 -0
  167. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
  168. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  169. data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
  170. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
  171. data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
  172. data/lib/mongoid/errors/invalid_field.rb +10 -9
  173. data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
  174. data/lib/mongoid/errors/invalid_field_option.rb +2 -3
  175. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  176. data/lib/mongoid/errors/invalid_find.rb +2 -3
  177. data/lib/mongoid/errors/invalid_includes.rb +2 -3
  178. data/lib/mongoid/errors/invalid_index.rb +2 -3
  179. data/lib/mongoid/errors/invalid_options.rb +4 -5
  180. data/lib/mongoid/errors/invalid_path.rb +2 -3
  181. data/lib/mongoid/errors/invalid_persistence_option.rb +26 -0
  182. data/lib/mongoid/errors/invalid_query.rb +40 -0
  183. data/lib/mongoid/errors/invalid_relation.rb +61 -0
  184. data/lib/mongoid/errors/invalid_relation_option.rb +28 -0
  185. data/lib/mongoid/errors/invalid_scope.rb +2 -3
  186. data/lib/mongoid/errors/invalid_session_use.rb +21 -0
  187. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
  188. data/lib/mongoid/errors/invalid_storage_options.rb +4 -5
  189. data/lib/mongoid/errors/invalid_storage_parent.rb +25 -0
  190. data/lib/mongoid/errors/invalid_time.rb +2 -3
  191. data/lib/mongoid/errors/inverse_not_found.rb +4 -5
  192. data/lib/mongoid/errors/mixed_client_configuration.rb +27 -0
  193. data/lib/mongoid/errors/mixed_relations.rb +2 -3
  194. data/lib/mongoid/errors/mongoid_error.rb +22 -23
  195. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
  196. data/lib/mongoid/errors/no_client_config.rb +21 -0
  197. data/lib/mongoid/errors/no_client_database.rb +26 -0
  198. data/lib/mongoid/errors/no_client_hosts.rb +26 -0
  199. data/lib/mongoid/errors/no_clients_config.rb +19 -0
  200. data/lib/mongoid/errors/no_default_client.rb +22 -0
  201. data/lib/mongoid/errors/no_environment.rb +2 -3
  202. data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
  203. data/lib/mongoid/errors/no_metadata.rb +2 -3
  204. data/lib/mongoid/errors/no_parent.rb +2 -3
  205. data/lib/mongoid/errors/readonly_attribute.rb +3 -4
  206. data/lib/mongoid/errors/readonly_document.rb +21 -0
  207. data/lib/mongoid/errors/scope_overwrite.rb +2 -1
  208. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -1
  209. data/lib/mongoid/errors/unknown_attribute.rb +3 -4
  210. data/lib/mongoid/errors/unknown_model.rb +24 -0
  211. data/lib/mongoid/errors/unsaved_document.rb +3 -2
  212. data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
  213. data/lib/mongoid/errors/validations.rb +2 -1
  214. data/lib/mongoid/errors.rb +30 -9
  215. data/lib/mongoid/evolvable.rb +4 -5
  216. data/lib/mongoid/extensions/array.rb +45 -52
  217. data/lib/mongoid/extensions/big_decimal.rb +41 -22
  218. data/lib/mongoid/extensions/binary.rb +42 -0
  219. data/lib/mongoid/extensions/boolean.rb +19 -17
  220. data/lib/mongoid/extensions/date.rb +33 -23
  221. data/lib/mongoid/extensions/date_time.rb +5 -13
  222. data/lib/mongoid/extensions/decimal128.rb +36 -0
  223. data/lib/mongoid/extensions/false_class.rb +5 -8
  224. data/lib/mongoid/extensions/float.rb +11 -16
  225. data/lib/mongoid/extensions/hash.rb +88 -49
  226. data/lib/mongoid/extensions/integer.rb +10 -18
  227. data/lib/mongoid/extensions/module.rb +3 -4
  228. data/lib/mongoid/extensions/nil_class.rb +2 -5
  229. data/lib/mongoid/extensions/object.rb +38 -62
  230. data/lib/mongoid/extensions/object_id.rb +7 -12
  231. data/lib/mongoid/extensions/range.rb +46 -17
  232. data/lib/mongoid/extensions/regexp.rb +15 -8
  233. data/lib/mongoid/extensions/set.rb +17 -15
  234. data/lib/mongoid/extensions/string.rb +40 -80
  235. data/lib/mongoid/extensions/symbol.rb +7 -23
  236. data/lib/mongoid/extensions/time.rb +42 -25
  237. data/lib/mongoid/extensions/time_with_zone.rb +27 -10
  238. data/lib/mongoid/extensions/true_class.rb +5 -8
  239. data/lib/mongoid/extensions.rb +31 -13
  240. data/lib/mongoid/factory.rb +99 -11
  241. data/lib/mongoid/fields/foreign_key.rb +26 -34
  242. data/lib/mongoid/fields/localized.rb +24 -13
  243. data/lib/mongoid/fields/standard.rb +19 -73
  244. data/lib/mongoid/fields/validators/macro.rb +56 -15
  245. data/lib/mongoid/fields/validators.rb +2 -1
  246. data/lib/mongoid/fields.rb +342 -87
  247. data/lib/mongoid/findable.rb +219 -0
  248. data/lib/mongoid/indexable/specification.rb +103 -0
  249. data/lib/mongoid/indexable/validators/options.rb +110 -0
  250. data/lib/mongoid/indexable.rb +148 -0
  251. data/lib/mongoid/inspectable.rb +52 -0
  252. data/lib/mongoid/interceptable.rb +312 -0
  253. data/lib/mongoid/loggable.rb +15 -18
  254. data/lib/mongoid/matchable.rb +23 -0
  255. data/lib/mongoid/matcher/all.rb +22 -0
  256. data/lib/mongoid/matcher/and.rb +21 -0
  257. data/lib/mongoid/matcher/bits.rb +41 -0
  258. data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
  259. data/lib/mongoid/matcher/bits_all_set.rb +20 -0
  260. data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
  261. data/lib/mongoid/matcher/bits_any_set.rb +20 -0
  262. data/lib/mongoid/matcher/elem_match.rb +36 -0
  263. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  264. data/lib/mongoid/matcher/eq.rb +11 -0
  265. data/lib/mongoid/matcher/eq_impl.rb +67 -0
  266. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
  267. data/lib/mongoid/matcher/exists.rb +15 -0
  268. data/lib/mongoid/matcher/expression.rb +35 -0
  269. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  270. data/lib/mongoid/matcher/field_expression.rb +62 -0
  271. data/lib/mongoid/matcher/field_operator.rb +54 -0
  272. data/lib/mongoid/matcher/gt.rb +17 -0
  273. data/lib/mongoid/matcher/gte.rb +17 -0
  274. data/lib/mongoid/matcher/in.rb +25 -0
  275. data/lib/mongoid/matcher/lt.rb +17 -0
  276. data/lib/mongoid/matcher/lte.rb +17 -0
  277. data/lib/mongoid/matcher/mod.rb +17 -0
  278. data/lib/mongoid/matcher/ne.rb +16 -0
  279. data/lib/mongoid/matcher/nin.rb +11 -0
  280. data/lib/mongoid/matcher/nor.rb +25 -0
  281. data/lib/mongoid/matcher/not.rb +29 -0
  282. data/lib/mongoid/matcher/or.rb +21 -0
  283. data/lib/mongoid/matcher/regex.rb +41 -0
  284. data/lib/mongoid/matcher/size.rb +26 -0
  285. data/lib/mongoid/matcher/type.rb +99 -0
  286. data/lib/mongoid/matcher.rb +115 -0
  287. data/lib/mongoid/persistable/creatable.rb +181 -0
  288. data/lib/mongoid/persistable/deletable.rb +132 -0
  289. data/lib/mongoid/persistable/destroyable.rb +57 -0
  290. data/lib/mongoid/persistable/incrementable.rb +35 -0
  291. data/lib/mongoid/persistable/logical.rb +36 -0
  292. data/lib/mongoid/persistable/poppable.rb +36 -0
  293. data/lib/mongoid/persistable/pullable.rb +50 -0
  294. data/lib/mongoid/persistable/pushable.rb +66 -0
  295. data/lib/mongoid/persistable/renamable.rb +37 -0
  296. data/lib/mongoid/persistable/savable.rb +47 -0
  297. data/lib/mongoid/persistable/settable.rb +93 -0
  298. data/lib/mongoid/persistable/unsettable.rb +36 -0
  299. data/lib/mongoid/persistable/updatable.rb +165 -0
  300. data/lib/mongoid/persistable/upsertable.rb +51 -0
  301. data/lib/mongoid/persistable.rb +305 -0
  302. data/lib/mongoid/persistence_context.rb +239 -0
  303. data/lib/mongoid/positional.rb +72 -0
  304. data/lib/mongoid/query_cache.rb +64 -0
  305. data/lib/mongoid/railtie.rb +35 -78
  306. data/lib/mongoid/railties/controller_runtime.rb +88 -0
  307. data/lib/mongoid/railties/database.rake +18 -25
  308. data/lib/mongoid/reloadable.rb +94 -0
  309. data/lib/mongoid/scopable.rb +324 -0
  310. data/lib/mongoid/selectable.rb +49 -0
  311. data/lib/mongoid/serializable.rb +170 -0
  312. data/lib/mongoid/shardable.rb +130 -0
  313. data/lib/mongoid/stateful.rb +134 -0
  314. data/lib/mongoid/stringified_symbol.rb +52 -0
  315. data/lib/mongoid/tasks/database.rake +38 -0
  316. data/lib/mongoid/tasks/database.rb +194 -0
  317. data/lib/mongoid/threaded/lifecycle.rb +28 -70
  318. data/lib/mongoid/threaded.rb +142 -219
  319. data/lib/mongoid/timestamps/created/short.rb +2 -1
  320. data/lib/mongoid/timestamps/created.rb +9 -5
  321. data/lib/mongoid/timestamps/short.rb +2 -1
  322. data/lib/mongoid/timestamps/timeless.rb +52 -16
  323. data/lib/mongoid/timestamps/updated/short.rb +4 -3
  324. data/lib/mongoid/timestamps/updated.rb +14 -9
  325. data/lib/mongoid/timestamps.rb +4 -3
  326. data/lib/mongoid/touchable.rb +131 -0
  327. data/lib/mongoid/traversable.rb +337 -0
  328. data/lib/mongoid/validatable/associated.rb +47 -0
  329. data/lib/mongoid/validatable/format.rb +21 -0
  330. data/lib/mongoid/validatable/length.rb +21 -0
  331. data/lib/mongoid/validatable/localizable.rb +29 -0
  332. data/lib/mongoid/validatable/macros.rb +89 -0
  333. data/lib/mongoid/validatable/presence.rb +81 -0
  334. data/lib/mongoid/validatable/queryable.rb +29 -0
  335. data/lib/mongoid/validatable/uniqueness.rb +304 -0
  336. data/lib/mongoid/validatable.rb +160 -0
  337. data/lib/mongoid/version.rb +3 -2
  338. data/lib/mongoid/warnings.rb +28 -0
  339. data/lib/mongoid.rb +68 -109
  340. data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
  341. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +150 -45
  342. data/lib/rails/generators/mongoid/model/model_generator.rb +3 -3
  343. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -4
  344. data/lib/rails/generators/mongoid_generator.rb +5 -41
  345. data/lib/rails/mongoid.rb +6 -129
  346. data/spec/README.md +33 -0
  347. data/spec/config/mongoid.yml +56 -25
  348. data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
  349. data/spec/integration/app_spec.rb +345 -0
  350. data/spec/integration/associations/belongs_to_spec.rb +33 -0
  351. data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
  352. data/spec/integration/associations/embedded_spec.rb +283 -0
  353. data/spec/integration/associations/embeds_many_spec.rb +219 -0
  354. data/spec/integration/associations/embeds_one_spec.rb +41 -0
  355. data/spec/integration/associations/foreign_key_spec.rb +107 -0
  356. data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
  357. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  358. data/spec/integration/associations/has_many_spec.rb +128 -0
  359. data/spec/integration/associations/has_one_spec.rb +272 -0
  360. data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
  361. data/spec/integration/associations/reverse_population_spec.rb +34 -0
  362. data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
  363. data/spec/integration/associations/scope_option_spec.rb +101 -0
  364. data/spec/integration/atomic/modifiers_spec.rb +116 -0
  365. data/spec/integration/bson_regexp_raw_spec.rb +19 -0
  366. data/spec/integration/callbacks_models.rb +155 -0
  367. data/spec/integration/callbacks_spec.rb +450 -0
  368. data/spec/integration/contextual/empty_spec.rb +141 -0
  369. data/spec/integration/criteria/alias_query_spec.rb +161 -0
  370. data/spec/integration/criteria/date_field_spec.rb +40 -0
  371. data/spec/integration/criteria/default_scope_spec.rb +72 -0
  372. data/spec/integration/criteria/logical_spec.rb +124 -0
  373. data/spec/integration/criteria/range_spec.rb +359 -0
  374. data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
  375. data/spec/integration/discriminator_key_spec.rb +392 -0
  376. data/spec/integration/discriminator_value_spec.rb +206 -0
  377. data/spec/integration/document_spec.rb +51 -0
  378. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  379. data/spec/integration/i18n_fallbacks_spec.rb +89 -0
  380. data/spec/integration/matcher_examples_spec.rb +765 -0
  381. data/spec/integration/matcher_operator_data/all.yml +140 -0
  382. data/spec/integration/matcher_operator_data/and.yml +93 -0
  383. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  384. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  385. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  386. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  387. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  388. data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
  389. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  390. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  391. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  392. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  393. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  394. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  395. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  396. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  397. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  398. data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
  399. data/spec/integration/matcher_operator_data/in.yml +210 -0
  400. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  401. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  402. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  403. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  404. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  405. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  406. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  407. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  408. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  409. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  410. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  411. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  412. data/spec/integration/matcher_operator_data/not.yml +196 -0
  413. data/spec/integration/matcher_operator_data/or.yml +137 -0
  414. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  415. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  416. data/spec/integration/matcher_operator_data/size.yml +174 -0
  417. data/spec/integration/matcher_operator_data/type.yml +70 -0
  418. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  419. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  420. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  421. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  422. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  423. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  424. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  425. data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
  426. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  427. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  428. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  429. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  430. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  431. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  432. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  433. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  434. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  435. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  436. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  437. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  438. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  439. data/spec/integration/matcher_operator_spec.rb +122 -0
  440. data/spec/integration/matcher_spec.rb +283 -0
  441. data/spec/integration/persistence/range_field_spec.rb +350 -0
  442. data/spec/integration/server_query_spec.rb +141 -0
  443. data/spec/integration/shardable_spec.rb +148 -0
  444. data/spec/integration/stringified_symbol_field_spec.rb +203 -0
  445. data/spec/lite_spec_helper.rb +83 -0
  446. data/spec/mongoid/association/accessors_spec.rb +1067 -0
  447. data/spec/mongoid/association/auto_save_spec.rb +403 -0
  448. data/spec/mongoid/association/builders_spec.rb +255 -0
  449. data/spec/mongoid/association/constrainable_spec.rb +117 -0
  450. data/spec/mongoid/association/counter_cache_spec.rb +452 -0
  451. data/spec/mongoid/association/depending_spec.rb +959 -0
  452. data/spec/mongoid/association/eager_spec.rb +282 -0
  453. data/spec/mongoid/association/embedded/cyclic_spec.rb +180 -0
  454. data/spec/mongoid/association/embedded/dirty_spec.rb +67 -0
  455. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +174 -0
  456. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +90 -0
  457. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +619 -0
  458. data/spec/mongoid/association/embedded/embedded_in_spec.rb +903 -0
  459. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +56 -0
  460. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +218 -0
  461. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4863 -0
  462. data/spec/mongoid/association/embedded/embeds_many_models.rb +226 -0
  463. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
  464. data/spec/mongoid/association/embedded/embeds_many_spec.rb +932 -0
  465. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +79 -0
  466. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +106 -0
  467. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1025 -0
  468. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
  469. data/spec/mongoid/association/embedded/embeds_one_models.rb +73 -0
  470. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
  471. data/spec/mongoid/association/embedded/embeds_one_spec.rb +984 -0
  472. data/spec/mongoid/association/macros_spec.rb +1116 -0
  473. data/spec/mongoid/association/nested/many_spec.rb +232 -0
  474. data/spec/mongoid/association/nested/one_spec.rb +253 -0
  475. data/spec/mongoid/association/options_spec.rb +1323 -0
  476. data/spec/mongoid/association/polymorphic_spec.rb +162 -0
  477. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +244 -0
  478. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +292 -0
  479. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +412 -0
  480. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1388 -0
  481. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  482. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
  483. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2046 -0
  484. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +180 -0
  485. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +148 -0
  486. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +196 -0
  487. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
  488. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +3836 -0
  489. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +92 -0
  490. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
  491. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1104 -0
  492. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +155 -0
  493. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +251 -0
  494. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +290 -0
  495. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2232 -0
  496. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
  497. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4161 -0
  498. data/spec/mongoid/association/referenced/has_many_models.rb +97 -0
  499. data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
  500. data/spec/mongoid/association/referenced/has_many_spec.rb +1273 -0
  501. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +133 -0
  502. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +159 -0
  503. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +193 -0
  504. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1248 -0
  505. data/spec/mongoid/association/referenced/has_one_models.rb +113 -0
  506. data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
  507. data/spec/mongoid/association/referenced/has_one_spec.rb +1383 -0
  508. data/spec/mongoid/association/reflections_spec.rb +92 -0
  509. data/spec/mongoid/association/syncable_spec.rb +513 -0
  510. data/spec/mongoid/association_spec.rb +191 -0
  511. data/spec/mongoid/atomic/modifiers_spec.rb +88 -39
  512. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +10 -49
  513. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +9 -49
  514. data/spec/mongoid/atomic/paths/root_spec.rb +5 -61
  515. data/spec/mongoid/atomic/paths_spec.rb +115 -35
  516. data/spec/mongoid/atomic_spec.rb +89 -42
  517. data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
  518. data/spec/mongoid/attributes/nested_spec.rb +5000 -0
  519. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  520. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  521. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  522. data/spec/mongoid/attributes/projector_spec.rb +40 -0
  523. data/spec/mongoid/attributes/readonly_spec.rb +166 -64
  524. data/spec/mongoid/attributes_spec.rb +1418 -409
  525. data/spec/mongoid/cacheable_spec.rb +114 -0
  526. data/spec/mongoid/changeable_spec.rb +1914 -0
  527. data/spec/mongoid/clients/factory_spec.rb +426 -0
  528. data/spec/mongoid/clients/options_spec.rb +521 -0
  529. data/spec/mongoid/clients/sessions_spec.rb +297 -0
  530. data/spec/mongoid/clients/transactions_spec.rb +415 -0
  531. data/spec/mongoid/clients_spec.rb +1084 -0
  532. data/spec/mongoid/composable_spec.rb +33 -0
  533. data/spec/mongoid/config/environment_spec.rb +138 -17
  534. data/spec/mongoid/config/options_spec.rb +26 -7
  535. data/spec/mongoid/config_spec.rb +607 -93
  536. data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
  537. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  538. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  539. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +221 -56
  540. data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
  541. data/spec/mongoid/contextual/atomic_spec.rb +577 -162
  542. data/spec/mongoid/contextual/geo_near_spec.rb +104 -38
  543. data/spec/mongoid/contextual/map_reduce_spec.rb +137 -142
  544. data/spec/mongoid/contextual/memory_spec.rb +1880 -269
  545. data/spec/mongoid/contextual/mongo_spec.rb +2523 -601
  546. data/spec/mongoid/contextual/none_spec.rb +123 -0
  547. data/spec/mongoid/copyable_spec.rb +833 -76
  548. data/spec/mongoid/copyable_spec_models.rb +47 -0
  549. data/spec/mongoid/criteria/findable_spec.rb +1132 -0
  550. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  551. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  552. data/spec/mongoid/criteria/inspectable_spec.rb +29 -0
  553. data/spec/mongoid/criteria/marshalable_spec.rb +47 -0
  554. data/spec/mongoid/criteria/modifiable_spec.rb +1812 -0
  555. data/spec/mongoid/criteria/options_spec.rb +31 -0
  556. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +372 -0
  557. data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
  558. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +513 -0
  559. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +169 -0
  560. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +60 -0
  561. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +215 -0
  562. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +343 -0
  563. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +434 -0
  564. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +60 -0
  565. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +67 -0
  566. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +314 -0
  567. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +67 -0
  568. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +79 -0
  569. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +119 -0
  570. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +110 -0
  571. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +370 -0
  572. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +91 -0
  573. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +92 -0
  574. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +41 -0
  575. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +347 -0
  576. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +169 -0
  577. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +406 -0
  578. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +387 -0
  579. data/spec/mongoid/criteria/queryable/key_spec.rb +96 -0
  580. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +182 -0
  581. data/spec/mongoid/criteria/queryable/optional_spec.rb +1317 -0
  582. data/spec/mongoid/criteria/queryable/options_spec.rb +362 -0
  583. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +214 -0
  584. data/spec/mongoid/criteria/queryable/queryable_spec.rb +139 -0
  585. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2119 -0
  586. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
  587. data/spec/mongoid/criteria/queryable/selectable_spec.rb +2462 -0
  588. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
  589. data/spec/mongoid/criteria/queryable/selector_spec.rb +895 -0
  590. data/spec/mongoid/criteria/queryable/smash_spec.rb +32 -0
  591. data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
  592. data/spec/mongoid/criteria/scopable_spec.rb +601 -0
  593. data/spec/mongoid/criteria_projection_spec.rb +410 -0
  594. data/spec/mongoid/criteria_spec.rb +1828 -3572
  595. data/spec/mongoid/document_fields_spec.rb +262 -0
  596. data/spec/mongoid/document_persistence_context_spec.rb +32 -0
  597. data/spec/mongoid/document_query_spec.rb +89 -0
  598. data/spec/mongoid/document_spec.rb +452 -221
  599. data/spec/mongoid/equality_spec.rb +155 -52
  600. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -6
  601. data/spec/mongoid/errors/callback_spec.rb +5 -3
  602. data/spec/mongoid/errors/delete_restriction_spec.rb +7 -5
  603. data/spec/mongoid/errors/document_not_destroyed_spec.rb +35 -0
  604. data/spec/mongoid/errors/document_not_found_spec.rb +89 -11
  605. data/spec/mongoid/errors/invalid_collection_spec.rb +5 -3
  606. data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
  607. data/spec/mongoid/errors/invalid_config_option_spec.rb +5 -3
  608. data/spec/mongoid/errors/invalid_field_option_spec.rb +5 -3
  609. data/spec/mongoid/errors/invalid_field_spec.rb +6 -4
  610. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  611. data/spec/mongoid/errors/invalid_find_spec.rb +5 -3
  612. data/spec/mongoid/errors/invalid_includes_spec.rb +5 -3
  613. data/spec/mongoid/errors/invalid_index_spec.rb +5 -3
  614. data/spec/mongoid/errors/invalid_options_spec.rb +7 -5
  615. data/spec/mongoid/errors/invalid_path_spec.rb +5 -3
  616. data/spec/mongoid/errors/invalid_relation_spec.rb +39 -0
  617. data/spec/mongoid/errors/invalid_scope_spec.rb +7 -5
  618. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +5 -3
  619. data/spec/mongoid/errors/invalid_storage_options_spec.rb +5 -3
  620. data/spec/mongoid/errors/invalid_time_spec.rb +5 -3
  621. data/spec/mongoid/errors/inverse_not_found_spec.rb +6 -4
  622. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +31 -0
  623. data/spec/mongoid/errors/mixed_relations_spec.rb +5 -3
  624. data/spec/mongoid/errors/mongoid_error_spec.rb +45 -10
  625. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +8 -6
  626. data/spec/mongoid/errors/no_client_config_spec.rb +31 -0
  627. data/spec/mongoid/errors/no_client_database_spec.rb +31 -0
  628. data/spec/mongoid/errors/no_client_hosts_spec.rb +31 -0
  629. data/spec/mongoid/errors/no_clients_config_spec.rb +31 -0
  630. data/spec/mongoid/errors/no_environment_spec.rb +8 -6
  631. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +5 -3
  632. data/spec/mongoid/errors/no_metadata_spec.rb +5 -3
  633. data/spec/mongoid/errors/no_parent_spec.rb +6 -4
  634. data/spec/mongoid/errors/readonly_attribute_spec.rb +5 -3
  635. data/spec/mongoid/errors/readonly_document_spec.rb +31 -0
  636. data/spec/mongoid/errors/scope_overwrite_spec.rb +5 -3
  637. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +6 -4
  638. data/spec/mongoid/errors/unknown_attribute_spec.rb +7 -5
  639. data/spec/mongoid/errors/unsaved_document_spec.rb +6 -4
  640. data/spec/mongoid/errors/unsupported_javascript_spec.rb +5 -3
  641. data/spec/mongoid/errors/validations_spec.rb +9 -7
  642. data/spec/mongoid/extensions/array_spec.rb +108 -116
  643. data/spec/mongoid/extensions/big_decimal_spec.rb +838 -49
  644. data/spec/mongoid/extensions/binary_spec.rb +55 -18
  645. data/spec/mongoid/extensions/boolean_spec.rb +76 -74
  646. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
  647. data/spec/mongoid/extensions/date_spec.rb +59 -145
  648. data/spec/mongoid/extensions/date_time_spec.rb +35 -76
  649. data/spec/mongoid/extensions/decimal128_spec.rb +46 -0
  650. data/spec/mongoid/extensions/false_class_spec.rb +7 -5
  651. data/spec/mongoid/extensions/float_spec.rb +69 -62
  652. data/spec/mongoid/extensions/hash_spec.rb +197 -30
  653. data/spec/mongoid/extensions/integer_spec.rb +63 -65
  654. data/spec/mongoid/extensions/module_spec.rb +4 -2
  655. data/spec/mongoid/extensions/nil_class_spec.rb +3 -1
  656. data/spec/mongoid/extensions/object_id_spec.rb +136 -134
  657. data/spec/mongoid/extensions/object_spec.rb +53 -57
  658. data/spec/mongoid/extensions/range_spec.rb +287 -28
  659. data/spec/mongoid/extensions/regexp_spec.rb +71 -21
  660. data/spec/mongoid/extensions/set_spec.rb +112 -4
  661. data/spec/mongoid/extensions/string_spec.rb +188 -89
  662. data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
  663. data/spec/mongoid/extensions/symbol_spec.rb +25 -30
  664. data/spec/mongoid/extensions/time_spec.rb +703 -110
  665. data/spec/mongoid/extensions/time_with_zone_spec.rb +82 -67
  666. data/spec/mongoid/extensions/true_class_spec.rb +7 -5
  667. data/spec/mongoid/extensions_spec.rb +43 -0
  668. data/spec/mongoid/factory_spec.rb +374 -25
  669. data/spec/mongoid/fields/foreign_key_spec.rb +116 -92
  670. data/spec/mongoid/fields/localized_spec.rb +177 -35
  671. data/spec/mongoid/fields/standard_spec.rb +15 -13
  672. data/spec/mongoid/fields_spec.rb +952 -238
  673. data/spec/mongoid/findable_spec.rb +632 -0
  674. data/spec/mongoid/indexable/specification_spec.rb +129 -0
  675. data/spec/mongoid/indexable_spec.rb +643 -0
  676. data/spec/mongoid/inspectable_spec.rb +86 -0
  677. data/spec/mongoid/interceptable_spec.rb +2373 -0
  678. data/spec/mongoid/interceptable_spec_models.rb +307 -0
  679. data/spec/mongoid/loggable_spec.rb +3 -1
  680. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  681. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
  682. data/spec/mongoid/matcher/extract_attribute_spec.rb +36 -0
  683. data/spec/mongoid/mongoizable_spec.rb +285 -0
  684. data/spec/mongoid/persistable/creatable_spec.rb +662 -0
  685. data/spec/mongoid/persistable/deletable_spec.rb +514 -0
  686. data/spec/mongoid/persistable/destroyable_spec.rb +455 -0
  687. data/spec/mongoid/persistable/incrementable_spec.rb +241 -0
  688. data/spec/mongoid/persistable/logical_spec.rb +159 -0
  689. data/spec/mongoid/persistable/poppable_spec.rb +131 -0
  690. data/spec/mongoid/persistable/pullable_spec.rb +258 -0
  691. data/spec/mongoid/persistable/pushable_spec.rb +353 -0
  692. data/spec/mongoid/persistable/renamable_spec.rb +151 -0
  693. data/spec/mongoid/persistable/savable_spec.rb +684 -0
  694. data/spec/mongoid/persistable/settable_spec.rb +544 -0
  695. data/spec/mongoid/persistable/unsettable_spec.rb +171 -0
  696. data/spec/mongoid/persistable/updatable_spec.rb +760 -0
  697. data/spec/mongoid/persistable/upsertable_spec.rb +122 -0
  698. data/spec/mongoid/persistable_spec.rb +321 -0
  699. data/spec/mongoid/persistence_context_spec.rb +745 -0
  700. data/spec/mongoid/positional_spec.rb +223 -0
  701. data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
  702. data/spec/mongoid/query_cache_spec.rb +870 -0
  703. data/spec/mongoid/relations/proxy_spec.rb +125 -47
  704. data/spec/mongoid/reloadable_spec.rb +665 -0
  705. data/spec/mongoid/scopable_spec.rb +1234 -0
  706. data/spec/mongoid/selectable_spec.rb +136 -0
  707. data/spec/mongoid/serializable_spec.rb +963 -0
  708. data/spec/mongoid/shardable_models.rb +61 -0
  709. data/spec/mongoid/shardable_spec.rb +204 -0
  710. data/spec/mongoid/stateful_spec.rb +157 -0
  711. data/spec/mongoid/tasks/database_rake_spec.rb +287 -0
  712. data/spec/mongoid/tasks/database_spec.rb +181 -0
  713. data/spec/mongoid/threaded_spec.rb +88 -78
  714. data/spec/mongoid/timestamps/created/short_spec.rb +9 -7
  715. data/spec/mongoid/timestamps/created_spec.rb +8 -6
  716. data/spec/mongoid/timestamps/timeless_spec.rb +29 -10
  717. data/spec/mongoid/timestamps/updated/short_spec.rb +16 -14
  718. data/spec/mongoid/timestamps/updated_spec.rb +14 -16
  719. data/spec/mongoid/timestamps_spec.rb +406 -18
  720. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  721. data/spec/mongoid/touchable_spec.rb +704 -0
  722. data/spec/mongoid/touchable_spec_models.rb +57 -0
  723. data/spec/mongoid/traversable_spec.rb +1410 -0
  724. data/spec/mongoid/validatable/associated_spec.rb +208 -0
  725. data/spec/mongoid/validatable/format_spec.rb +85 -0
  726. data/spec/mongoid/validatable/length_spec.rb +225 -0
  727. data/spec/mongoid/validatable/numericality_spec.rb +32 -0
  728. data/spec/mongoid/validatable/presence_spec.rb +592 -0
  729. data/spec/mongoid/validatable/uniqueness_spec.rb +2504 -0
  730. data/spec/mongoid/validatable_spec.rb +327 -0
  731. data/spec/mongoid/warnings_spec.rb +35 -0
  732. data/spec/mongoid_spec.rb +20 -20
  733. data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
  734. data/spec/rails/mongoid_spec.rb +37 -354
  735. data/spec/shared/LICENSE +20 -0
  736. data/spec/shared/bin/get-mongodb-download-url +17 -0
  737. data/spec/shared/bin/s3-copy +45 -0
  738. data/spec/shared/bin/s3-upload +69 -0
  739. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  740. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  741. data/spec/shared/lib/mrss/constraints.rb +378 -0
  742. data/spec/shared/lib/mrss/docker_runner.rb +291 -0
  743. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  744. data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
  745. data/spec/shared/lib/mrss/lite_constraints.rb +230 -0
  746. data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
  747. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  748. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  749. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  750. data/spec/shared/lib/mrss/utils.rb +15 -0
  751. data/spec/shared/share/Dockerfile.erb +325 -0
  752. data/spec/shared/share/haproxy-1.conf +16 -0
  753. data/spec/shared/share/haproxy-2.conf +17 -0
  754. data/spec/shared/shlib/config.sh +27 -0
  755. data/spec/shared/shlib/distro.sh +74 -0
  756. data/spec/shared/shlib/server.sh +392 -0
  757. data/spec/shared/shlib/set_env.sh +169 -0
  758. data/spec/spec_helper.rb +163 -42
  759. data/spec/support/authorization.rb +15 -0
  760. data/spec/support/client_registry.rb +9 -0
  761. data/spec/support/constraints.rb +77 -0
  762. data/spec/support/expectations.rb +32 -0
  763. data/spec/support/helpers.rb +11 -0
  764. data/spec/support/macros.rb +81 -0
  765. data/spec/support/models/account.rb +38 -0
  766. data/spec/support/models/acolyte.rb +19 -0
  767. data/spec/support/models/actor.rb +20 -0
  768. data/spec/support/models/actress.rb +4 -0
  769. data/spec/support/models/address.rb +85 -0
  770. data/spec/support/models/address_component.rb +7 -0
  771. data/spec/support/models/address_number.rb +8 -0
  772. data/spec/support/models/agency.rb +7 -0
  773. data/spec/support/models/agent.rb +18 -0
  774. data/spec/support/models/album.rb +20 -0
  775. data/spec/support/models/alert.rb +9 -0
  776. data/spec/support/models/animal.rb +28 -0
  777. data/spec/support/models/answer.rb +8 -0
  778. data/spec/support/models/appointment.rb +9 -0
  779. data/spec/support/models/armrest.rb +9 -0
  780. data/spec/support/models/array_field.rb +7 -0
  781. data/spec/support/models/article.rb +14 -0
  782. data/spec/support/models/artist.rb +91 -0
  783. data/spec/support/models/artwork.rb +6 -0
  784. data/spec/support/models/audible_sound.rb +3 -0
  785. data/spec/support/models/audio.rb +7 -0
  786. data/spec/support/models/augmentation.rb +25 -0
  787. data/spec/support/models/author.rb +8 -0
  788. data/spec/support/models/baby.rb +6 -0
  789. data/spec/support/models/band.rb +40 -0
  790. data/spec/support/models/bar.rb +12 -0
  791. data/spec/support/models/basic.rb +8 -0
  792. data/spec/support/models/bed.rb +3 -0
  793. data/spec/support/models/big_palette.rb +4 -0
  794. data/spec/support/models/birthday.rb +15 -0
  795. data/spec/support/models/bolt.rb +7 -0
  796. data/spec/support/models/bomb.rb +6 -0
  797. data/spec/support/models/book.rb +18 -0
  798. data/spec/support/models/breed.rb +6 -0
  799. data/spec/support/models/browser.rb +8 -0
  800. data/spec/support/models/building.rb +8 -0
  801. data/spec/support/models/building_address.rb +9 -0
  802. data/spec/support/models/bus.rb +9 -0
  803. data/spec/support/models/business.rb +7 -0
  804. data/spec/support/models/callback_test.rb +11 -0
  805. data/spec/support/models/canvas.rb +27 -0
  806. data/spec/support/models/car.rb +3 -0
  807. data/spec/support/models/cat.rb +10 -0
  808. data/spec/support/models/catalog.rb +24 -0
  809. data/spec/support/models/category.rb +10 -0
  810. data/spec/support/models/child.rb +6 -0
  811. data/spec/support/models/child_doc.rb +24 -0
  812. data/spec/support/models/church.rb +8 -0
  813. data/spec/support/models/circle.rb +5 -0
  814. data/spec/support/models/circuit.rb +6 -0
  815. data/spec/support/models/circus.rb +12 -0
  816. data/spec/support/models/code.rb +15 -0
  817. data/spec/support/models/coding/pull_request.rb +11 -0
  818. data/spec/support/models/coding.rb +3 -0
  819. data/spec/support/models/comment.rb +18 -0
  820. data/spec/support/models/company.rb +7 -0
  821. data/spec/support/models/consumption_period.rb +9 -0
  822. data/spec/support/models/contextable_item.rb +7 -0
  823. data/spec/support/models/contractor.rb +7 -0
  824. data/spec/support/models/cookie.rb +8 -0
  825. data/spec/support/models/country_code.rb +12 -0
  826. data/spec/support/models/courier_job.rb +6 -0
  827. data/spec/support/models/crate.rb +12 -0
  828. data/spec/support/models/customer.rb +10 -0
  829. data/spec/support/models/customer_address.rb +11 -0
  830. data/spec/support/models/deed.rb +7 -0
  831. data/spec/support/models/definition.rb +11 -0
  832. data/spec/support/models/delegating_patient.rb +15 -0
  833. data/spec/support/models/description.rb +13 -0
  834. data/spec/support/models/dictionary.rb +18 -0
  835. data/spec/support/models/division.rb +12 -0
  836. data/spec/support/models/doctor.rb +14 -0
  837. data/spec/support/models/dog.rb +9 -0
  838. data/spec/support/models/dokument.rb +8 -0
  839. data/spec/support/models/draft.rb +11 -0
  840. data/spec/support/models/dragon.rb +6 -0
  841. data/spec/support/models/driver.rb +9 -0
  842. data/spec/support/models/drug.rb +8 -0
  843. data/spec/support/models/dungeon.rb +6 -0
  844. data/spec/support/models/edit.rb +7 -0
  845. data/spec/support/models/email.rb +8 -0
  846. data/spec/support/models/employer.rb +7 -0
  847. data/spec/support/models/entry.rb +8 -0
  848. data/spec/support/models/eraser.rb +3 -0
  849. data/spec/support/models/even.rb +9 -0
  850. data/spec/support/models/event.rb +24 -0
  851. data/spec/support/models/exhibition.rb +6 -0
  852. data/spec/support/models/exhibitor.rb +8 -0
  853. data/spec/support/models/explosion.rb +6 -0
  854. data/spec/support/models/eye.rb +11 -0
  855. data/spec/support/models/eye_bowl.rb +11 -0
  856. data/spec/support/models/face.rb +10 -0
  857. data/spec/support/models/fanatic.rb +8 -0
  858. data/spec/support/models/favorite.rb +8 -0
  859. data/spec/support/models/filesystem.rb +7 -0
  860. data/spec/support/models/fire_hydrant.rb +8 -0
  861. data/spec/support/models/firefox.rb +6 -0
  862. data/spec/support/models/fish.rb +9 -0
  863. data/spec/support/models/folder.rb +9 -0
  864. data/spec/support/models/folder_item.rb +11 -0
  865. data/spec/support/models/fruits.rb +36 -0
  866. data/spec/support/models/game.rb +21 -0
  867. data/spec/support/models/ghost.rb +9 -0
  868. data/spec/support/models/guitar.rb +4 -0
  869. data/spec/support/models/hole.rb +12 -0
  870. data/spec/support/models/home.rb +6 -0
  871. data/spec/support/models/house.rb +8 -0
  872. data/spec/support/models/html_writer.rb +5 -0
  873. data/spec/support/models/id_key.rb +8 -0
  874. data/spec/support/models/idnodef.rb +7 -0
  875. data/spec/support/models/image.rb +24 -0
  876. data/spec/support/models/implant.rb +27 -0
  877. data/spec/support/models/instrument.rb +8 -0
  878. data/spec/support/models/item.rb +10 -0
  879. data/spec/support/models/jar.rb +9 -0
  880. data/spec/support/models/kaleidoscope.rb +8 -0
  881. data/spec/support/models/kangaroo.rb +6 -0
  882. data/spec/support/models/label.rb +52 -0
  883. data/spec/support/models/language.rb +7 -0
  884. data/spec/support/models/lat_lng.rb +17 -0
  885. data/spec/support/models/league.rb +13 -0
  886. data/spec/support/models/learner.rb +4 -0
  887. data/spec/support/models/line_item.rb +8 -0
  888. data/spec/support/models/location.rb +10 -0
  889. data/spec/support/models/login.rb +10 -0
  890. data/spec/support/models/manufacturer.rb +9 -0
  891. data/spec/support/models/meat.rb +6 -0
  892. data/spec/support/models/membership.rb +7 -0
  893. data/spec/support/models/message.rb +13 -0
  894. data/spec/support/models/minim.rb +6 -0
  895. data/spec/support/models/mixed_drink.rb +6 -0
  896. data/spec/support/models/mop.rb +24 -0
  897. data/spec/support/models/movie.rb +15 -0
  898. data/spec/support/models/my_hash.rb +4 -0
  899. data/spec/support/models/name.rb +26 -0
  900. data/spec/support/models/name_only.rb +8 -0
  901. data/spec/support/models/node.rb +7 -0
  902. data/spec/support/models/note.rb +19 -0
  903. data/spec/support/models/nut.rb +7 -0
  904. data/spec/support/models/odd.rb +9 -0
  905. data/spec/support/models/order.rb +12 -0
  906. data/spec/support/models/ordered_post.rb +13 -0
  907. data/spec/support/models/ordered_preference.rb +8 -0
  908. data/spec/support/models/oscar.rb +16 -0
  909. data/spec/support/models/other_owner_object.rb +4 -0
  910. data/spec/support/models/override.rb +18 -0
  911. data/spec/support/models/ownable.rb +8 -0
  912. data/spec/support/models/owner.rb +10 -0
  913. data/spec/support/models/pack.rb +5 -0
  914. data/spec/support/models/page.rb +18 -0
  915. data/spec/support/models/page_question.rb +6 -0
  916. data/spec/support/models/palette.rb +9 -0
  917. data/spec/support/models/parent.rb +7 -0
  918. data/spec/support/models/parent_doc.rb +8 -0
  919. data/spec/support/models/passport.rb +22 -0
  920. data/spec/support/models/patient.rb +11 -0
  921. data/spec/support/models/pdf_writer.rb +5 -0
  922. data/spec/support/models/pencil.rb +3 -0
  923. data/spec/support/models/person.rb +231 -0
  924. data/spec/support/models/pet.rb +25 -0
  925. data/spec/support/models/pet_owner.rb +8 -0
  926. data/spec/support/models/phone.rb +13 -0
  927. data/spec/support/models/piano.rb +4 -0
  928. data/spec/support/models/pizza.rb +9 -0
  929. data/spec/support/models/player.rb +39 -0
  930. data/spec/support/models/post.rb +52 -0
  931. data/spec/support/models/post_genre.rb +8 -0
  932. data/spec/support/models/powerup.rb +25 -0
  933. data/spec/support/models/preference.rb +11 -0
  934. data/spec/support/models/princess.rb +12 -0
  935. data/spec/support/models/product.rb +19 -0
  936. data/spec/support/models/profile.rb +17 -0
  937. data/spec/support/models/pronunciation.rb +7 -0
  938. data/spec/support/models/pub.rb +8 -0
  939. data/spec/support/models/publication/encyclopedia.rb +11 -0
  940. data/spec/support/models/publication/review.rb +13 -0
  941. data/spec/support/models/publication.rb +4 -0
  942. data/spec/support/models/purchase.rb +6 -0
  943. data/spec/support/models/purchased_item.rb +10 -0
  944. data/spec/support/models/question.rb +10 -0
  945. data/spec/support/models/quiz.rb +9 -0
  946. data/spec/support/models/rating.rb +10 -0
  947. data/spec/support/models/record.rb +54 -0
  948. data/spec/support/models/registry.rb +7 -0
  949. data/spec/support/models/role.rb +9 -0
  950. data/spec/support/models/root_category.rb +6 -0
  951. data/spec/support/models/sandwich.rb +11 -0
  952. data/spec/support/models/scheduler.rb +9 -0
  953. data/spec/support/models/school.rb +14 -0
  954. data/spec/support/models/scribe.rb +7 -0
  955. data/spec/support/models/sealer.rb +7 -0
  956. data/spec/support/models/seat.rb +24 -0
  957. data/spec/support/models/seo.rb +9 -0
  958. data/spec/support/models/series.rb +7 -0
  959. data/spec/support/models/server.rb +15 -0
  960. data/spec/support/models/service.rb +24 -0
  961. data/spec/support/models/shape.rb +14 -0
  962. data/spec/support/models/shelf.rb +7 -0
  963. data/spec/support/models/shield.rb +18 -0
  964. data/spec/support/models/shipment_address.rb +5 -0
  965. data/spec/support/models/shipping_container.rb +7 -0
  966. data/spec/support/models/shipping_pack.rb +5 -0
  967. data/spec/support/models/shirt.rb +11 -0
  968. data/spec/support/models/shop.rb +8 -0
  969. data/spec/support/models/short_agent.rb +6 -0
  970. data/spec/support/models/short_quiz.rb +7 -0
  971. data/spec/support/models/simple.rb +7 -0
  972. data/spec/support/models/slave.rb +8 -0
  973. data/spec/support/models/song.rb +10 -0
  974. data/spec/support/models/sound.rb +7 -0
  975. data/spec/support/models/spacer.rb +7 -0
  976. data/spec/support/models/square.rb +6 -0
  977. data/spec/support/models/staff.rb +9 -0
  978. data/spec/support/models/store_as_dup_test1.rb +7 -0
  979. data/spec/support/models/store_as_dup_test2.rb +7 -0
  980. data/spec/support/models/store_as_dup_test3.rb +7 -0
  981. data/spec/support/models/store_as_dup_test4.rb +7 -0
  982. data/spec/support/models/strategy.rb +5 -0
  983. data/spec/support/models/student.rb +14 -0
  984. data/spec/support/models/sub_item.rb +5 -0
  985. data/spec/support/models/subscription.rb +7 -0
  986. data/spec/support/models/survey.rb +7 -0
  987. data/spec/support/models/symptom.rb +8 -0
  988. data/spec/support/models/system_role.rb +7 -0
  989. data/spec/support/models/tag.rb +10 -0
  990. data/spec/support/models/target.rb +7 -0
  991. data/spec/support/models/template.rb +7 -0
  992. data/spec/support/models/thing.rb +11 -0
  993. data/spec/support/models/threadlocker.rb +7 -0
  994. data/spec/support/models/title.rb +5 -0
  995. data/spec/support/models/tool.rb +10 -0
  996. data/spec/support/models/topping.rb +7 -0
  997. data/spec/support/models/toy.rb +9 -0
  998. data/spec/support/models/track.rb +40 -0
  999. data/spec/support/models/translation.rb +7 -0
  1000. data/spec/support/models/tree.rb +11 -0
  1001. data/spec/support/models/truck.rb +7 -0
  1002. data/spec/support/models/updatable.rb +7 -0
  1003. data/spec/support/models/user.rb +23 -0
  1004. data/spec/support/models/user_account.rb +12 -0
  1005. data/spec/support/models/validation_callback.rb +12 -0
  1006. data/spec/support/models/vehicle.rb +18 -0
  1007. data/spec/support/models/version.rb +7 -0
  1008. data/spec/support/models/vertex.rb +8 -0
  1009. data/spec/support/models/vet_visit.rb +7 -0
  1010. data/spec/support/models/video.rb +15 -0
  1011. data/spec/support/models/video_game.rb +3 -0
  1012. data/spec/support/models/washer.rb +7 -0
  1013. data/spec/support/models/weapon.rb +25 -0
  1014. data/spec/support/models/wiki_page.rb +17 -0
  1015. data/spec/support/models/word.rb +17 -0
  1016. data/spec/support/models/word_origin.rb +13 -0
  1017. data/spec/support/models/writer.rb +13 -0
  1018. data/spec/support/schema_maps/schema_map_aws.json +17 -0
  1019. data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  1020. data/spec/support/schema_maps/schema_map_azure.json +17 -0
  1021. data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1022. data/spec/support/schema_maps/schema_map_gcp.json +17 -0
  1023. data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1024. data/spec/support/schema_maps/schema_map_kmip.json +17 -0
  1025. data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1026. data/spec/support/schema_maps/schema_map_local.json +18 -0
  1027. data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
  1028. data/spec/support/shared/time.rb +53 -0
  1029. data/spec/support/spec_config.rb +64 -0
  1030. data.tar.gz.sig +0 -0
  1031. metadata +1582 -912
  1032. metadata.gz.sig +0 -0
  1033. data/lib/mongoid/atomic/positionable.rb +0 -73
  1034. data/lib/mongoid/callbacks.rb +0 -314
  1035. data/lib/mongoid/components.rb +0 -93
  1036. data/lib/mongoid/config/inflections.rb +0 -6
  1037. data/lib/mongoid/config/validators/session.rb +0 -140
  1038. data/lib/mongoid/contextual/eager.rb +0 -158
  1039. data/lib/mongoid/contextual/find_and_modify.rb +0 -69
  1040. data/lib/mongoid/criterion/findable.rb +0 -179
  1041. data/lib/mongoid/criterion/inspection.rb +0 -25
  1042. data/lib/mongoid/criterion/marshalable.rb +0 -48
  1043. data/lib/mongoid/criterion/modifiable.rb +0 -189
  1044. data/lib/mongoid/criterion/scoping.rb +0 -158
  1045. data/lib/mongoid/dirty.rb +0 -376
  1046. data/lib/mongoid/errors/eager_load.rb +0 -22
  1047. data/lib/mongoid/errors/mixed_session_configuration.rb +0 -28
  1048. data/lib/mongoid/errors/no_default_session.rb +0 -23
  1049. data/lib/mongoid/errors/no_session_config.rb +0 -22
  1050. data/lib/mongoid/errors/no_session_database.rb +0 -27
  1051. data/lib/mongoid/errors/no_session_hosts.rb +0 -27
  1052. data/lib/mongoid/errors/no_sessions_config.rb +0 -20
  1053. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  1054. data/lib/mongoid/finders.rb +0 -130
  1055. data/lib/mongoid/hierarchy.rb +0 -188
  1056. data/lib/mongoid/identity_map.rb +0 -163
  1057. data/lib/mongoid/indexes/validators/options.rb +0 -102
  1058. data/lib/mongoid/indexes.rb +0 -154
  1059. data/lib/mongoid/inspection.rb +0 -55
  1060. data/lib/mongoid/json.rb +0 -16
  1061. data/lib/mongoid/matchers/all.rb +0 -27
  1062. data/lib/mongoid/matchers/and.rb +0 -30
  1063. data/lib/mongoid/matchers/default.rb +0 -72
  1064. data/lib/mongoid/matchers/exists.rb +0 -23
  1065. data/lib/mongoid/matchers/gt.rb +0 -21
  1066. data/lib/mongoid/matchers/gte.rb +0 -21
  1067. data/lib/mongoid/matchers/in.rb +0 -24
  1068. data/lib/mongoid/matchers/lt.rb +0 -21
  1069. data/lib/mongoid/matchers/lte.rb +0 -21
  1070. data/lib/mongoid/matchers/ne.rb +0 -21
  1071. data/lib/mongoid/matchers/nin.rb +0 -21
  1072. data/lib/mongoid/matchers/or.rb +0 -33
  1073. data/lib/mongoid/matchers/size.rb +0 -21
  1074. data/lib/mongoid/matchers/strategies.rb +0 -97
  1075. data/lib/mongoid/matchers.rb +0 -32
  1076. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  1077. data/lib/mongoid/nested_attributes.rb +0 -78
  1078. data/lib/mongoid/observer.rb +0 -192
  1079. data/lib/mongoid/paranoia.rb +0 -137
  1080. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  1081. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  1082. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  1083. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  1084. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  1085. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  1086. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  1087. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  1088. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  1089. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  1090. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  1091. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  1092. data/lib/mongoid/persistence/atomic.rb +0 -231
  1093. data/lib/mongoid/persistence/deletion.rb +0 -32
  1094. data/lib/mongoid/persistence/insertion.rb +0 -38
  1095. data/lib/mongoid/persistence/modification.rb +0 -35
  1096. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  1097. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  1098. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  1099. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  1100. data/lib/mongoid/persistence/operations/update.rb +0 -59
  1101. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  1102. data/lib/mongoid/persistence/operations.rb +0 -214
  1103. data/lib/mongoid/persistence/upsertion.rb +0 -31
  1104. data/lib/mongoid/persistence.rb +0 -352
  1105. data/lib/mongoid/railties/document.rb +0 -12
  1106. data/lib/mongoid/relations/accessors.rb +0 -299
  1107. data/lib/mongoid/relations/auto_save.rb +0 -107
  1108. data/lib/mongoid/relations/binding.rb +0 -241
  1109. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -63
  1110. data/lib/mongoid/relations/bindings/embedded/many.rb +0 -52
  1111. data/lib/mongoid/relations/bindings/embedded/one.rb +0 -55
  1112. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -70
  1113. data/lib/mongoid/relations/bindings/referenced/many.rb +0 -42
  1114. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -67
  1115. data/lib/mongoid/relations/bindings/referenced/one.rb +0 -44
  1116. data/lib/mongoid/relations/bindings.rb +0 -9
  1117. data/lib/mongoid/relations/builder.rb +0 -57
  1118. data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
  1119. data/lib/mongoid/relations/builders/embedded/many.rb +0 -36
  1120. data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
  1121. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -177
  1122. data/lib/mongoid/relations/builders/nested_attributes/one.rb +0 -127
  1123. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  1124. data/lib/mongoid/relations/builders/referenced/many.rb +0 -27
  1125. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -40
  1126. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  1127. data/lib/mongoid/relations/builders.rb +0 -104
  1128. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  1129. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  1130. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  1131. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  1132. data/lib/mongoid/relations/cascading.rb +0 -58
  1133. data/lib/mongoid/relations/constraint.rb +0 -49
  1134. data/lib/mongoid/relations/conversions.rb +0 -34
  1135. data/lib/mongoid/relations/counter_cache.rb +0 -107
  1136. data/lib/mongoid/relations/cyclic.rb +0 -107
  1137. data/lib/mongoid/relations/embedded/batchable.rb +0 -356
  1138. data/lib/mongoid/relations/embedded/in.rb +0 -231
  1139. data/lib/mongoid/relations/embedded/many.rb +0 -659
  1140. data/lib/mongoid/relations/embedded/one.rb +0 -223
  1141. data/lib/mongoid/relations/macros.rb +0 -359
  1142. data/lib/mongoid/relations/many.rb +0 -217
  1143. data/lib/mongoid/relations/marshalable.rb +0 -32
  1144. data/lib/mongoid/relations/metadata.rb +0 -1227
  1145. data/lib/mongoid/relations/nested_builder.rb +0 -74
  1146. data/lib/mongoid/relations/one.rb +0 -60
  1147. data/lib/mongoid/relations/options.rb +0 -48
  1148. data/lib/mongoid/relations/polymorphic.rb +0 -40
  1149. data/lib/mongoid/relations/proxy.rb +0 -264
  1150. data/lib/mongoid/relations/referenced/in.rb +0 -314
  1151. data/lib/mongoid/relations/referenced/many.rb +0 -789
  1152. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -495
  1153. data/lib/mongoid/relations/referenced/one.rb +0 -297
  1154. data/lib/mongoid/relations/reflections.rb +0 -62
  1155. data/lib/mongoid/relations/synchronization.rb +0 -169
  1156. data/lib/mongoid/relations/targets/enumerable.rb +0 -473
  1157. data/lib/mongoid/relations/targets.rb +0 -2
  1158. data/lib/mongoid/relations/touchable.rb +0 -61
  1159. data/lib/mongoid/relations.rb +0 -162
  1160. data/lib/mongoid/reloading.rb +0 -92
  1161. data/lib/mongoid/scoping.rb +0 -356
  1162. data/lib/mongoid/serialization.rb +0 -161
  1163. data/lib/mongoid/sessions/factory.rb +0 -129
  1164. data/lib/mongoid/sessions/mongo_uri.rb +0 -93
  1165. data/lib/mongoid/sessions/validators/storage.rb +0 -49
  1166. data/lib/mongoid/sessions/validators.rb +0 -2
  1167. data/lib/mongoid/sessions.rb +0 -433
  1168. data/lib/mongoid/sharding.rb +0 -61
  1169. data/lib/mongoid/state.rb +0 -97
  1170. data/lib/mongoid/unit_of_work.rb +0 -61
  1171. data/lib/mongoid/validations/associated.rb +0 -46
  1172. data/lib/mongoid/validations/format.rb +0 -20
  1173. data/lib/mongoid/validations/length.rb +0 -20
  1174. data/lib/mongoid/validations/localizable.rb +0 -30
  1175. data/lib/mongoid/validations/macros.rb +0 -93
  1176. data/lib/mongoid/validations/presence.rb +0 -86
  1177. data/lib/mongoid/validations/queryable.rb +0 -31
  1178. data/lib/mongoid/validations/uniqueness.rb +0 -330
  1179. data/lib/mongoid/validations.rb +0 -166
  1180. data/lib/mongoid/versioning.rb +0 -217
  1181. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  1182. data/lib/rack/mongoid.rb +0 -2
  1183. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  1184. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  1185. data/lib/support/ruby_version.rb +0 -26
  1186. data/spec/app/models/account.rb +0 -32
  1187. data/spec/app/models/acolyte.rb +0 -16
  1188. data/spec/app/models/actor.rb +0 -19
  1189. data/spec/app/models/actor_observer.rb +0 -15
  1190. data/spec/app/models/actress.rb +0 -2
  1191. data/spec/app/models/address.rb +0 -72
  1192. data/spec/app/models/address_component.rb +0 -5
  1193. data/spec/app/models/address_number.rb +0 -6
  1194. data/spec/app/models/agency.rb +0 -5
  1195. data/spec/app/models/agent.rb +0 -12
  1196. data/spec/app/models/album.rb +0 -14
  1197. data/spec/app/models/alert.rb +0 -5
  1198. data/spec/app/models/animal.rb +0 -25
  1199. data/spec/app/models/answer.rb +0 -4
  1200. data/spec/app/models/appointment.rb +0 -7
  1201. data/spec/app/models/article.rb +0 -13
  1202. data/spec/app/models/artist.rb +0 -66
  1203. data/spec/app/models/artwork.rb +0 -4
  1204. data/spec/app/models/augmentation.rb +0 -11
  1205. data/spec/app/models/author.rb +0 -6
  1206. data/spec/app/models/band.rb +0 -25
  1207. data/spec/app/models/bar.rb +0 -9
  1208. data/spec/app/models/basic.rb +0 -6
  1209. data/spec/app/models/bed.rb +0 -1
  1210. data/spec/app/models/big_palette.rb +0 -2
  1211. data/spec/app/models/birthday.rb +0 -13
  1212. data/spec/app/models/book.rb +0 -12
  1213. data/spec/app/models/breed.rb +0 -4
  1214. data/spec/app/models/browser.rb +0 -6
  1215. data/spec/app/models/building.rb +0 -7
  1216. data/spec/app/models/building_address.rb +0 -7
  1217. data/spec/app/models/bus.rb +0 -7
  1218. data/spec/app/models/business.rb +0 -5
  1219. data/spec/app/models/callback_recorder.rb +0 -25
  1220. data/spec/app/models/callback_test.rb +0 -9
  1221. data/spec/app/models/canvas.rb +0 -25
  1222. data/spec/app/models/car.rb +0 -1
  1223. data/spec/app/models/cat.rb +0 -8
  1224. data/spec/app/models/category.rb +0 -8
  1225. data/spec/app/models/child.rb +0 -4
  1226. data/spec/app/models/child_doc.rb +0 -22
  1227. data/spec/app/models/church.rb +0 -4
  1228. data/spec/app/models/circle.rb +0 -3
  1229. data/spec/app/models/circuit.rb +0 -4
  1230. data/spec/app/models/circus.rb +0 -7
  1231. data/spec/app/models/code.rb +0 -5
  1232. data/spec/app/models/comment.rb +0 -16
  1233. data/spec/app/models/contractor.rb +0 -7
  1234. data/spec/app/models/cookie.rb +0 -6
  1235. data/spec/app/models/country_code.rb +0 -8
  1236. data/spec/app/models/definition.rb +0 -8
  1237. data/spec/app/models/description.rb +0 -11
  1238. data/spec/app/models/dictionary.rb +0 -10
  1239. data/spec/app/models/division.rb +0 -10
  1240. data/spec/app/models/doctor.rb +0 -12
  1241. data/spec/app/models/dog.rb +0 -7
  1242. data/spec/app/models/dokument.rb +0 -5
  1243. data/spec/app/models/driver.rb +0 -7
  1244. data/spec/app/models/drug.rb +0 -8
  1245. data/spec/app/models/email.rb +0 -6
  1246. data/spec/app/models/employer.rb +0 -5
  1247. data/spec/app/models/entry.rb +0 -6
  1248. data/spec/app/models/eraser.rb +0 -1
  1249. data/spec/app/models/event.rb +0 -22
  1250. data/spec/app/models/exhibition.rb +0 -4
  1251. data/spec/app/models/exhibitor.rb +0 -5
  1252. data/spec/app/models/eye.rb +0 -9
  1253. data/spec/app/models/eye_bowl.rb +0 -9
  1254. data/spec/app/models/face.rb +0 -8
  1255. data/spec/app/models/favorite.rb +0 -6
  1256. data/spec/app/models/filesystem.rb +0 -4
  1257. data/spec/app/models/fire_hydrant.rb +0 -6
  1258. data/spec/app/models/firefox.rb +0 -4
  1259. data/spec/app/models/fish.rb +0 -8
  1260. data/spec/app/models/folder.rb +0 -7
  1261. data/spec/app/models/folder_item.rb +0 -9
  1262. data/spec/app/models/fruits.rb +0 -28
  1263. data/spec/app/models/game.rb +0 -21
  1264. data/spec/app/models/ghost.rb +0 -7
  1265. data/spec/app/models/home.rb +0 -4
  1266. data/spec/app/models/house.rb +0 -8
  1267. data/spec/app/models/html_writer.rb +0 -3
  1268. data/spec/app/models/image.rb +0 -22
  1269. data/spec/app/models/implant.rb +0 -16
  1270. data/spec/app/models/item.rb +0 -12
  1271. data/spec/app/models/jar.rb +0 -7
  1272. data/spec/app/models/label.rb +0 -40
  1273. data/spec/app/models/language.rb +0 -5
  1274. data/spec/app/models/lat_lng.rb +0 -15
  1275. data/spec/app/models/league.rb +0 -11
  1276. data/spec/app/models/learner.rb +0 -2
  1277. data/spec/app/models/line_item.rb +0 -6
  1278. data/spec/app/models/location.rb +0 -8
  1279. data/spec/app/models/login.rb +0 -8
  1280. data/spec/app/models/manufacturer.rb +0 -7
  1281. data/spec/app/models/meat.rb +0 -4
  1282. data/spec/app/models/membership.rb +0 -4
  1283. data/spec/app/models/mixed_drink.rb +0 -4
  1284. data/spec/app/models/movie.rb +0 -12
  1285. data/spec/app/models/my_hash.rb +0 -2
  1286. data/spec/app/models/name.rb +0 -23
  1287. data/spec/app/models/node.rb +0 -5
  1288. data/spec/app/models/note.rb +0 -12
  1289. data/spec/app/models/ordered_post.rb +0 -6
  1290. data/spec/app/models/ordered_preference.rb +0 -6
  1291. data/spec/app/models/oscar.rb +0 -15
  1292. data/spec/app/models/override.rb +0 -16
  1293. data/spec/app/models/ownable.rb +0 -6
  1294. data/spec/app/models/owner.rb +0 -6
  1295. data/spec/app/models/pack.rb +0 -3
  1296. data/spec/app/models/page.rb +0 -5
  1297. data/spec/app/models/page_question.rb +0 -4
  1298. data/spec/app/models/palette.rb +0 -7
  1299. data/spec/app/models/paranoid_phone.rb +0 -25
  1300. data/spec/app/models/paranoid_post.rb +0 -36
  1301. data/spec/app/models/parent.rb +0 -5
  1302. data/spec/app/models/parent_doc.rb +0 -6
  1303. data/spec/app/models/passport.rb +0 -5
  1304. data/spec/app/models/patient.rb +0 -9
  1305. data/spec/app/models/pdf_writer.rb +0 -3
  1306. data/spec/app/models/pencil.rb +0 -1
  1307. data/spec/app/models/person.rb +0 -201
  1308. data/spec/app/models/pet.rb +0 -23
  1309. data/spec/app/models/pet_owner.rb +0 -6
  1310. data/spec/app/models/phone.rb +0 -11
  1311. data/spec/app/models/phone_observer.rb +0 -6
  1312. data/spec/app/models/pizza.rb +0 -7
  1313. data/spec/app/models/player.rb +0 -35
  1314. data/spec/app/models/post.rb +0 -43
  1315. data/spec/app/models/powerup.rb +0 -11
  1316. data/spec/app/models/preference.rb +0 -9
  1317. data/spec/app/models/princess.rb +0 -8
  1318. data/spec/app/models/product.rb +0 -17
  1319. data/spec/app/models/profile.rb +0 -5
  1320. data/spec/app/models/pronunciation.rb +0 -5
  1321. data/spec/app/models/purchase.rb +0 -4
  1322. data/spec/app/models/question.rb +0 -8
  1323. data/spec/app/models/quiz.rb +0 -10
  1324. data/spec/app/models/rating.rb +0 -8
  1325. data/spec/app/models/record.rb +0 -46
  1326. data/spec/app/models/registry.rb +0 -4
  1327. data/spec/app/models/role.rb +0 -7
  1328. data/spec/app/models/root_category.rb +0 -4
  1329. data/spec/app/models/sandwich.rb +0 -4
  1330. data/spec/app/models/scheduler.rb +0 -7
  1331. data/spec/app/models/seo.rb +0 -7
  1332. data/spec/app/models/series.rb +0 -4
  1333. data/spec/app/models/server.rb +0 -13
  1334. data/spec/app/models/service.rb +0 -22
  1335. data/spec/app/models/shape.rb +0 -12
  1336. data/spec/app/models/shelf.rb +0 -5
  1337. data/spec/app/models/shipping_container.rb +0 -5
  1338. data/spec/app/models/shipping_pack.rb +0 -3
  1339. data/spec/app/models/shop.rb +0 -6
  1340. data/spec/app/models/short_agent.rb +0 -4
  1341. data/spec/app/models/short_quiz.rb +0 -5
  1342. data/spec/app/models/slave.rb +0 -6
  1343. data/spec/app/models/song.rb +0 -8
  1344. data/spec/app/models/square.rb +0 -4
  1345. data/spec/app/models/strategy.rb +0 -3
  1346. data/spec/app/models/sub_item.rb +0 -3
  1347. data/spec/app/models/subscription.rb +0 -4
  1348. data/spec/app/models/survey.rb +0 -5
  1349. data/spec/app/models/symptom.rb +0 -6
  1350. data/spec/app/models/tag.rb +0 -8
  1351. data/spec/app/models/target.rb +0 -5
  1352. data/spec/app/models/template.rb +0 -5
  1353. data/spec/app/models/thing.rb +0 -9
  1354. data/spec/app/models/title.rb +0 -4
  1355. data/spec/app/models/tool.rb +0 -8
  1356. data/spec/app/models/topping.rb +0 -5
  1357. data/spec/app/models/track.rb +0 -38
  1358. data/spec/app/models/translation.rb +0 -5
  1359. data/spec/app/models/tree.rb +0 -9
  1360. data/spec/app/models/truck.rb +0 -3
  1361. data/spec/app/models/user.rb +0 -21
  1362. data/spec/app/models/user_account.rb +0 -10
  1363. data/spec/app/models/validation_callback.rb +0 -10
  1364. data/spec/app/models/vehicle.rb +0 -11
  1365. data/spec/app/models/version.rb +0 -5
  1366. data/spec/app/models/vet_visit.rb +0 -5
  1367. data/spec/app/models/video.rb +0 -17
  1368. data/spec/app/models/video_game.rb +0 -1
  1369. data/spec/app/models/weapon.rb +0 -11
  1370. data/spec/app/models/wiki_page.rb +0 -17
  1371. data/spec/app/models/word.rb +0 -12
  1372. data/spec/app/models/word_origin.rb +0 -11
  1373. data/spec/app/models/writer.rb +0 -11
  1374. data/spec/mongoid/atomic/positionable_spec.rb +0 -227
  1375. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  1376. data/spec/mongoid/callbacks_spec.rb +0 -1564
  1377. data/spec/mongoid/components_spec.rb +0 -24
  1378. data/spec/mongoid/contextual/find_and_modify_spec.rb +0 -220
  1379. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  1380. data/spec/mongoid/criterion/inspection_spec.rb +0 -27
  1381. data/spec/mongoid/criterion/marshalable_spec.rb +0 -28
  1382. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  1383. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  1384. data/spec/mongoid/criterion/scoping_spec.rb +0 -391
  1385. data/spec/mongoid/dirty_spec.rb +0 -1508
  1386. data/spec/mongoid/errors/eager_load_spec.rb +0 -29
  1387. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +0 -29
  1388. data/spec/mongoid/errors/no_session_config_spec.rb +0 -29
  1389. data/spec/mongoid/errors/no_session_database_spec.rb +0 -29
  1390. data/spec/mongoid/errors/no_session_hosts_spec.rb +0 -29
  1391. data/spec/mongoid/errors/no_sessions_config_spec.rb +0 -29
  1392. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  1393. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  1394. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  1395. data/spec/mongoid/finders_spec.rb +0 -321
  1396. data/spec/mongoid/hierarchy_spec.rb +0 -244
  1397. data/spec/mongoid/identity_map_spec.rb +0 -564
  1398. data/spec/mongoid/indexes_spec.rb +0 -404
  1399. data/spec/mongoid/inspection_spec.rb +0 -57
  1400. data/spec/mongoid/json_spec.rb +0 -33
  1401. data/spec/mongoid/matchers/all_spec.rb +0 -31
  1402. data/spec/mongoid/matchers/and_spec.rb +0 -162
  1403. data/spec/mongoid/matchers/default_spec.rb +0 -130
  1404. data/spec/mongoid/matchers/exists_spec.rb +0 -57
  1405. data/spec/mongoid/matchers/gt_spec.rb +0 -74
  1406. data/spec/mongoid/matchers/gte_spec.rb +0 -74
  1407. data/spec/mongoid/matchers/in_spec.rb +0 -25
  1408. data/spec/mongoid/matchers/lt_spec.rb +0 -74
  1409. data/spec/mongoid/matchers/lte_spec.rb +0 -74
  1410. data/spec/mongoid/matchers/ne_spec.rb +0 -25
  1411. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  1412. data/spec/mongoid/matchers/or_spec.rb +0 -106
  1413. data/spec/mongoid/matchers/size_spec.rb +0 -25
  1414. data/spec/mongoid/matchers_spec.rb +0 -532
  1415. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  1416. data/spec/mongoid/nested_attributes_spec.rb +0 -4945
  1417. data/spec/mongoid/observer_spec.rb +0 -290
  1418. data/spec/mongoid/paranoia_spec.rb +0 -759
  1419. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  1420. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  1421. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  1422. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  1423. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  1424. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  1425. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  1426. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  1427. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  1428. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  1429. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  1430. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  1431. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  1432. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  1433. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  1434. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  1435. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  1436. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  1437. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  1438. data/spec/mongoid/persistence_spec.rb +0 -2279
  1439. data/spec/mongoid/railties/document_spec.rb +0 -24
  1440. data/spec/mongoid/relations/accessors_spec.rb +0 -844
  1441. data/spec/mongoid/relations/auto_save_spec.rb +0 -261
  1442. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +0 -171
  1443. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +0 -54
  1444. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +0 -77
  1445. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +0 -241
  1446. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +0 -153
  1447. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +0 -178
  1448. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +0 -131
  1449. data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
  1450. data/spec/mongoid/relations/builders/embedded/many_spec.rb +0 -132
  1451. data/spec/mongoid/relations/builders/embedded/one_spec.rb +0 -99
  1452. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +0 -234
  1453. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +0 -250
  1454. data/spec/mongoid/relations/builders/referenced/in_spec.rb +0 -241
  1455. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  1456. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  1457. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -124
  1458. data/spec/mongoid/relations/builders_spec.rb +0 -226
  1459. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  1460. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  1461. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  1462. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  1463. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  1464. data/spec/mongoid/relations/constraint_spec.rb +0 -74
  1465. data/spec/mongoid/relations/conversions_spec.rb +0 -126
  1466. data/spec/mongoid/relations/counter_cache_spec.rb +0 -205
  1467. data/spec/mongoid/relations/cyclic_spec.rb +0 -156
  1468. data/spec/mongoid/relations/embedded/dirty_spec.rb +0 -65
  1469. data/spec/mongoid/relations/embedded/in_spec.rb +0 -580
  1470. data/spec/mongoid/relations/embedded/many_spec.rb +0 -3841
  1471. data/spec/mongoid/relations/embedded/one_spec.rb +0 -1055
  1472. data/spec/mongoid/relations/macros_spec.rb +0 -625
  1473. data/spec/mongoid/relations/metadata_spec.rb +0 -2030
  1474. data/spec/mongoid/relations/options_spec.rb +0 -35
  1475. data/spec/mongoid/relations/polymorphic_spec.rb +0 -132
  1476. data/spec/mongoid/relations/referenced/in_spec.rb +0 -1501
  1477. data/spec/mongoid/relations/referenced/many_spec.rb +0 -3632
  1478. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +0 -3561
  1479. data/spec/mongoid/relations/referenced/one_spec.rb +0 -1331
  1480. data/spec/mongoid/relations/reflections_spec.rb +0 -101
  1481. data/spec/mongoid/relations/synchronization_spec.rb +0 -453
  1482. data/spec/mongoid/relations/targets/enumerable_spec.rb +0 -1710
  1483. data/spec/mongoid/relations_spec.rb +0 -188
  1484. data/spec/mongoid/reloading_spec.rb +0 -305
  1485. data/spec/mongoid/scoping_spec.rb +0 -978
  1486. data/spec/mongoid/serialization_spec.rb +0 -833
  1487. data/spec/mongoid/sessions/factory_spec.rb +0 -312
  1488. data/spec/mongoid/sessions/mongo_uri_spec.rb +0 -103
  1489. data/spec/mongoid/sessions_spec.rb +0 -1111
  1490. data/spec/mongoid/sharding_spec.rb +0 -61
  1491. data/spec/mongoid/state_spec.rb +0 -102
  1492. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  1493. data/spec/mongoid/validations/associated_spec.rb +0 -183
  1494. data/spec/mongoid/validations/format_spec.rb +0 -83
  1495. data/spec/mongoid/validations/length_spec.rb +0 -223
  1496. data/spec/mongoid/validations/numericality_spec.rb +0 -30
  1497. data/spec/mongoid/validations/presence_spec.rb +0 -592
  1498. data/spec/mongoid/validations/uniqueness_spec.rb +0 -2399
  1499. data/spec/mongoid/validations_spec.rb +0 -309
  1500. data/spec/mongoid/versioning_spec.rb +0 -540
  1501. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -1,2030 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Relations::Metadata do
4
-
5
- describe "#counter_cached?" do
6
-
7
- context "when counter_cache is false" do
8
-
9
- let(:metadata) do
10
- described_class.new(
11
- name: :car,
12
- relation: Mongoid::Relations::Referenced::In,
13
- counter_cache: false
14
- )
15
- end
16
-
17
- it "returns false" do
18
- metadata.should_not be_counter_cached
19
- end
20
- end
21
-
22
- context "when counter_cache is true" do
23
-
24
- let(:metadata) do
25
- described_class.new(
26
- name: :car,
27
- relation: Mongoid::Relations::Referenced::In,
28
- counter_cache: true
29
- )
30
- end
31
-
32
- it "returns true" do
33
- metadata.should be_counter_cached
34
- end
35
- end
36
-
37
- context "when counter_cache is name for column" do
38
-
39
- let(:metadata) do
40
- described_class.new(
41
- name: :car,
42
- relation: Mongoid::Relations::Referenced::In,
43
- counter_cache: 'counter'
44
- )
45
- end
46
-
47
- it "returns true" do
48
- metadata.should be_counter_cached
49
- end
50
- end
51
-
52
- context "when counter_cache is nil" do
53
-
54
- let(:metadata) do
55
- described_class.new(
56
- name: :car,
57
- relation: Mongoid::Relations::Referenced::In,
58
- )
59
- end
60
-
61
- it "returns false" do
62
- metadata.should_not be_counter_cached
63
- end
64
- end
65
- end
66
-
67
- describe "#counter_cache_column_name" do
68
-
69
- let(:inverse_class_name) do
70
- "Wheel"
71
- end
72
-
73
- context "when the counter_cache is true" do
74
-
75
- let(:metadata) do
76
- described_class.new(
77
- name: :car,
78
- relation: Mongoid::Relations::Referenced::In,
79
- inverse_class_name: inverse_class_name,
80
- counter_cache: true
81
- )
82
- end
83
-
84
- before do
85
- metadata.should_receive(:inverse).and_return(:wheels)
86
- end
87
-
88
- it "returns inverse name + _count" do
89
- expect(metadata.counter_cache_column_name).to eq(
90
- "#{inverse_class_name.demodulize.underscore.pluralize}_count"
91
- )
92
- end
93
- end
94
-
95
- context "when given a custom name for counter cache" do
96
- let(:counter_cache_name) { 'counte_cache_for_wheels' }
97
- let(:metadata) do
98
- described_class.new(
99
- name: :car,
100
- relation: Mongoid::Relations::Referenced::In,
101
- inverse_class_name: inverse_class_name,
102
- counter_cache: counter_cache_name
103
- )
104
- end
105
-
106
- it "returns the name given" do
107
- metadata.counter_cache_column_name.should eq(counter_cache_name)
108
- end
109
- end
110
- end
111
-
112
- describe "#autobuilding?" do
113
-
114
- context "when the option is true" do
115
-
116
- let(:metadata) do
117
- described_class.new(
118
- relation: Mongoid::Relations::Embedded::One,
119
- autobuild: true
120
- )
121
- end
122
-
123
- it "returns true" do
124
- metadata.should be_autobuilding
125
- end
126
- end
127
-
128
- context "when the option is false" do
129
-
130
- let(:metadata) do
131
- described_class.new(
132
- relation: Mongoid::Relations::Embedded::One,
133
- autobuild: false
134
- )
135
- end
136
-
137
- it "returns false" do
138
- metadata.should_not be_autobuilding
139
- end
140
- end
141
-
142
- context "when the option is nil" do
143
-
144
- let(:metadata) do
145
- described_class.new(
146
- relation: Mongoid::Relations::Embedded::One
147
- )
148
- end
149
-
150
- it "returns false" do
151
- metadata.should_not be_autobuilding
152
- end
153
- end
154
- end
155
-
156
- describe "#builder" do
157
-
158
- let(:metadata) do
159
- described_class.new(relation: Mongoid::Relations::Embedded::One)
160
- end
161
-
162
- let(:object) do
163
- stub
164
- end
165
-
166
- let(:base) do
167
- stub
168
- end
169
-
170
- it "returns the builder from the relation" do
171
- metadata.builder(base, object).should
172
- be_a_kind_of(Mongoid::Relations::Builders::Embedded::One)
173
- end
174
- end
175
-
176
- describe "#cascading_callbacks?" do
177
-
178
- context "when the option is true" do
179
-
180
- let(:metadata) do
181
- described_class.new(
182
- relation: Mongoid::Relations::Embedded::Many,
183
- cascade_callbacks: true
184
- )
185
- end
186
-
187
- it "returns true" do
188
- metadata.should be_cascading_callbacks
189
- end
190
- end
191
-
192
- context "when the option is false" do
193
-
194
- let(:metadata) do
195
- described_class.new(
196
- relation: Mongoid::Relations::Embedded::Many,
197
- cascade_callbacks: false
198
- )
199
- end
200
-
201
- it "returns false" do
202
- metadata.should_not be_cascading_callbacks
203
- end
204
- end
205
-
206
- context "when the option is nil" do
207
-
208
- let(:metadata) do
209
- described_class.new(
210
- relation: Mongoid::Relations::Embedded::Many
211
- )
212
- end
213
-
214
- it "returns false" do
215
- metadata.should_not be_cascading_callbacks
216
- end
217
- end
218
- end
219
-
220
- describe "#cascade_strategy" do
221
-
222
- context "when no dependent option is set" do
223
-
224
- let(:metadata) do
225
- described_class.new(
226
- name: :posts,
227
- relation: Mongoid::Relations::Referenced::Many
228
- )
229
- end
230
-
231
- it "returns nil" do
232
- metadata.cascade_strategy.should be_nil
233
- end
234
- end
235
-
236
- context "when dependent is delete" do
237
-
238
- let(:metadata) do
239
- described_class.new(
240
- name: :posts,
241
- relation: Mongoid::Relations::Referenced::Many,
242
- dependent: :delete
243
- )
244
- end
245
-
246
- it "returns the delete strategy" do
247
- metadata.cascade_strategy.should eq(
248
- Mongoid::Relations::Cascading::Delete
249
- )
250
- end
251
- end
252
-
253
- context "when dependent is destroy" do
254
-
255
- let(:metadata) do
256
- described_class.new(
257
- name: :posts,
258
- relation: Mongoid::Relations::Referenced::Many,
259
- dependent: :destroy
260
- )
261
- end
262
-
263
- it "returns the destroy strategy" do
264
- metadata.cascade_strategy.should eq(
265
- Mongoid::Relations::Cascading::Destroy
266
- )
267
- end
268
- end
269
-
270
- context "when dependent is nullify" do
271
-
272
- let(:metadata) do
273
- described_class.new(
274
- name: :posts,
275
- relation: Mongoid::Relations::Referenced::Many,
276
- dependent: :nullify
277
- )
278
- end
279
-
280
- it "returns the nullify strategy" do
281
- metadata.cascade_strategy.should eq(
282
- Mongoid::Relations::Cascading::Nullify
283
- )
284
- end
285
- end
286
- end
287
-
288
- describe "#constraint" do
289
-
290
- let(:metadata) do
291
- described_class.new(
292
- relation: Mongoid::Relations::Referenced::Many,
293
- class_name: "Person"
294
- )
295
- end
296
-
297
- it "returns the constraint object" do
298
- metadata.constraint.should be_a(Mongoid::Relations::Constraint)
299
- end
300
- end
301
-
302
- describe "#classify" do
303
-
304
- let(:name) do
305
- "name"
306
- end
307
-
308
- let(:metadata) do
309
- described_class.new(name: name)
310
- end
311
-
312
- let(:classified) do
313
- metadata.send(:classify)
314
- end
315
-
316
- before do
317
- Mongoid::Relations::Options.should_receive(:validate!).at_least(:once)
318
- end
319
-
320
- it "concatenates the result from #find_module and name.classify" do
321
- metadata.should_receive(:find_module).once.and_return("Fruit")
322
- classified.should eq("Fruit::Name")
323
- end
324
- end
325
-
326
- describe "#find_module" do
327
-
328
- let(:name) do
329
- "name"
330
- end
331
-
332
- let(:metadata) do
333
- described_class.new(name: name, inverse_class_name: inverse_class_name)
334
- end
335
-
336
- let(:mod) do
337
- metadata.send(:find_module)
338
- end
339
-
340
- before do
341
- Mongoid::Relations::Options.should_receive(:validate!).at_least(:once)
342
- end
343
-
344
- context "when inverse_class_name is nil" do
345
-
346
- let(:inverse_class_name) do
347
- nil
348
- end
349
-
350
- it "returns nil" do
351
- mod.should be_nil
352
- end
353
- end
354
-
355
- context "when inverse_class_name is empty" do
356
-
357
- let(:inverse_class_name) do
358
- ""
359
- end
360
-
361
- it "returns nil" do
362
- mod.should be_nil
363
- end
364
- end
365
-
366
- context "when inverse_class_name is defined" do
367
-
368
- context "when inverse_class_name is in root namespace" do
369
-
370
- let(:inverse_class_name) do
371
- "Person"
372
- end
373
-
374
- context "when name isn't defined" do
375
-
376
- let(:name) do
377
- "undefined"
378
- end
379
-
380
- it "returns nil" do
381
- mod.should be_nil
382
- end
383
- end
384
-
385
- context "when name is defined in root namespace" do
386
-
387
- let(:name) do
388
- "account"
389
- end
390
-
391
- it "returns root namespace" do
392
- mod.should be_empty
393
- end
394
- end
395
-
396
- context "when name is defined in module Fruits" do
397
-
398
- context "when inverse_class_name is defined in the same module" do
399
-
400
- let(:inverse_class_name) do
401
- "Fruits::Apple"
402
- end
403
-
404
- let(:name) do
405
- "banana"
406
- end
407
-
408
- it "returns Fruits" do
409
- mod.should eq("Fruits")
410
- end
411
- end
412
-
413
- context "when inverse_class_name is defined in a nested module" do
414
-
415
- let(:inverse_class_name) do
416
- "Fruits::Big::Ananas"
417
- end
418
-
419
- let(:name) do
420
- "banana"
421
- end
422
-
423
- it "returns Fruits" do
424
- mod.should eq("Fruits")
425
- end
426
- end
427
-
428
- context "when the inverse_class_name is defined in the root namespace" do
429
-
430
- let(:inverse_class_name) do
431
- "Person"
432
- end
433
-
434
- let(:name) do
435
- "banana"
436
- end
437
-
438
- it "returns nil" do
439
- mod.should be_nil
440
- end
441
- end
442
- end
443
- end
444
- end
445
- end
446
-
447
- describe "#class_name" do
448
-
449
- context "when class_name provided" do
450
-
451
- context "when the class name contains leading ::" do
452
-
453
- let(:metadata) do
454
- described_class.new(
455
- relation: Mongoid::Relations::Referenced::Many,
456
- class_name: "::Person"
457
- )
458
- end
459
-
460
- it "returns the stripped class name" do
461
- metadata.class_name.should eq("Person")
462
- end
463
- end
464
-
465
- context "when the class name has no prefix" do
466
-
467
- let(:metadata) do
468
- described_class.new(
469
- relation: Mongoid::Relations::Referenced::Many,
470
- class_name: "Person"
471
- )
472
- end
473
-
474
- it "constantizes the class name" do
475
- metadata.class_name.should eq("Person")
476
- end
477
- end
478
- end
479
-
480
- context "when no class_name provided" do
481
-
482
- context "when inverse_class_name is provided" do
483
-
484
- context "when inverse_class_name is a simple class name" do
485
-
486
- context "when association name is singular" do
487
-
488
- let(:relation) do
489
- Mongoid::Relations::Embedded::One
490
- end
491
-
492
- let(:metadata) do
493
- described_class.new(name: :name, relation: relation, inverse_class_name: "Person")
494
- end
495
-
496
- it "classifies and constantizes the association name and adds the module" do
497
- metadata.class_name.should eq("Name")
498
- end
499
- end
500
-
501
- context "when association name is plural" do
502
-
503
- let(:relation) do
504
- Mongoid::Relations::Embedded::Many
505
- end
506
-
507
- let(:metadata) do
508
- described_class.new(name: :addresses, relation: relation, inverse_class_name: "Person")
509
- end
510
-
511
- it "classifies and constantizes the association name and adds the module" do
512
- metadata.class_name.should eq("Address")
513
- end
514
- end
515
-
516
- end
517
-
518
- context "when inverse_class_name is a class name in a module" do
519
-
520
- context "when association name is singular" do
521
-
522
- let(:relation) do
523
- Mongoid::Relations::Embedded::One
524
- end
525
-
526
- let(:metadata) do
527
- described_class.new(name: :apple, relation: relation, inverse_class_name: "Fruits::Banana")
528
- end
529
-
530
- it "classifies and constantizes the association name and adds the module" do
531
- metadata.class_name.should eq("Fruits::Apple")
532
- end
533
- end
534
-
535
- context "when association name is plural" do
536
-
537
- let(:relation) do
538
- Mongoid::Relations::Embedded::Many
539
- end
540
-
541
- let(:metadata) do
542
- described_class.new(name: :apples, relation: relation, inverse_class_name: "Fruits::Banana")
543
- end
544
-
545
- it "classifies and constantizes the association name and adds the module" do
546
- metadata.class_name.should eq("Fruits::Apple")
547
- end
548
- end
549
-
550
- end
551
- end
552
-
553
- context "when no inverse_class_name is provided" do
554
-
555
- context "when association name is singular" do
556
-
557
- let(:relation) do
558
- Mongoid::Relations::Embedded::One
559
- end
560
-
561
- let(:metadata) do
562
- described_class.new(name: :name, relation: relation)
563
- end
564
-
565
- it "classifies and constantizes the association name" do
566
- metadata.class_name.should eq("Name")
567
- end
568
- end
569
-
570
- context "when association name is plural" do
571
-
572
- let(:relation) do
573
- Mongoid::Relations::Embedded::Many
574
- end
575
-
576
- let(:metadata) do
577
- described_class.new(name: :addresses, relation: relation)
578
- end
579
-
580
- it "classifies and constantizes the association name" do
581
- metadata.class_name.should eq("Address")
582
- end
583
- end
584
- end
585
- end
586
- end
587
-
588
- describe "#destructive?" do
589
-
590
- context "when the relation has a destructive dependent option" do
591
-
592
- let(:metadata) do
593
- described_class.new(
594
- relation: Mongoid::Relations::Referenced::Many,
595
- dependent: :destroy
596
- )
597
- end
598
-
599
- it "returns true" do
600
- metadata.should be_destructive
601
- end
602
- end
603
-
604
- context "when no dependent option" do
605
-
606
- let(:metadata) do
607
- described_class.new(
608
- relation: Mongoid::Relations::Referenced::Many
609
- )
610
- end
611
-
612
- it "returns false" do
613
- metadata.should_not be_destructive
614
- end
615
- end
616
- end
617
-
618
- describe "#embedded?" do
619
-
620
- context "when the relation is embedded" do
621
-
622
- let(:metadata) do
623
- described_class.new(
624
- relation: Mongoid::Relations::Embedded::Many
625
- )
626
- end
627
-
628
- it "returns true" do
629
- metadata.should be_embedded
630
- end
631
- end
632
-
633
- context "when the relation is not embedded" do
634
-
635
- let(:metadata) do
636
- described_class.new(
637
- relation: Mongoid::Relations::Referenced::Many
638
- )
639
- end
640
-
641
- it "returns false" do
642
- metadata.should_not be_embedded
643
- end
644
- end
645
- end
646
-
647
- describe "#extension" do
648
-
649
- let(:metadata) do
650
- described_class.new(
651
- relation: Mongoid::Relations::Referenced::Many,
652
- extend: :value
653
- )
654
- end
655
-
656
- it "returns the extend property" do
657
- metadata.extension.should eq(:value)
658
- end
659
- end
660
-
661
- describe "#extension?" do
662
-
663
- context "when an extends property exists" do
664
-
665
- let(:metadata) do
666
- described_class.new(
667
- relation: Mongoid::Relations::Referenced::Many,
668
- extend: :value
669
- )
670
- end
671
-
672
- it "returns true" do
673
- metadata.extension?.should be_true
674
- end
675
- end
676
-
677
- context "when the extend option is nil" do
678
-
679
- let(:metadata) do
680
- described_class.new(
681
- relation: Mongoid::Relations::Referenced::Many
682
- )
683
- end
684
-
685
- it "returns false" do
686
- metadata.extension?.should be_false
687
- end
688
- end
689
- end
690
-
691
- describe "#foreign_key" do
692
-
693
- context "when no foreign key was explicitly defined" do
694
-
695
- context "when the relation stores a foreign key" do
696
-
697
- context "when referenced in" do
698
-
699
- context "when not providing a class name" do
700
-
701
- let(:metadata) do
702
- described_class.new(
703
- name: :person,
704
- relation: Mongoid::Relations::Referenced::In
705
- )
706
- end
707
-
708
- it "returns the foreign_key" do
709
- metadata.foreign_key.should eq("person_id")
710
- end
711
- end
712
-
713
- context "when providing a class name" do
714
-
715
- let(:metadata) do
716
- described_class.new(
717
- name: :person,
718
- relation: Mongoid::Relations::Referenced::In,
719
- class_name: "TheseAreNotTheDriods"
720
- )
721
- end
722
-
723
- it "returns the foreign_key" do
724
- metadata.foreign_key.should eq("person_id")
725
- end
726
- end
727
-
728
- context "when the class is namespaces" do
729
-
730
- let(:metadata) do
731
- described_class.new(
732
- name: :apple,
733
- relation: Mongoid::Relations::Referenced::In,
734
- class_name: "Fruits::Apple"
735
- )
736
- end
737
-
738
- it "returns the foreign_key without the module name" do
739
- metadata.foreign_key.should eq("apple_id")
740
- end
741
- end
742
- end
743
-
744
- context "when references and referenced in many" do
745
-
746
- let(:metadata) do
747
- described_class.new(
748
- name: :people,
749
- relation: Mongoid::Relations::Referenced::ManyToMany
750
- )
751
- end
752
-
753
- it "returns the foreign_key" do
754
- metadata.foreign_key.should eq("person_ids")
755
- end
756
-
757
- context "given a specific foreign key" do
758
-
759
- let(:metadata) do
760
- described_class.new(
761
- name: :follower,
762
- foreign_key: :follower_list,
763
- relation: Mongoid::Relations::Referenced::ManyToMany
764
- )
765
- end
766
-
767
- it "returns the foreign_key" do
768
- metadata.foreign_key.should eq("follower_list")
769
- end
770
- end
771
-
772
- context "using name as foreign key" do
773
-
774
- let(:metadata) do
775
- described_class.new(
776
- name: :followers,
777
- class_name: "Person",
778
- relation: Mongoid::Relations::Referenced::ManyToMany
779
- )
780
- end
781
-
782
- it "returns the foreign_key" do
783
- metadata.foreign_key.should eq("follower_ids")
784
- end
785
- end
786
-
787
- context "when the class is namespaced" do
788
-
789
- let(:metadata) do
790
- described_class.new(
791
- name: :bananas,
792
- relation: Mongoid::Relations::Referenced::ManyToMany,
793
- inverse_class_name: "Fruits::Apple",
794
- class_name: "Fruits::Banana"
795
- )
796
- end
797
-
798
- it "returns the foreign_key without the module name" do
799
- metadata.foreign_key.should eq("banana_ids")
800
- end
801
-
802
- it "returns the inverse_foreign_key without the module name" do
803
- metadata.inverse_foreign_key.should eq("apple_ids")
804
- end
805
- end
806
- end
807
- end
808
-
809
- context "when the relation does not store a foreign key" do
810
-
811
- context "when references one" do
812
-
813
- let(:metadata) do
814
- described_class.new(
815
- name: :post,
816
- relation: Mongoid::Relations::Referenced::One,
817
- inverse_class_name: "Person"
818
- )
819
- end
820
-
821
- it "returns the inverse foreign key" do
822
- metadata.foreign_key.should eq("person_id")
823
- end
824
- end
825
-
826
- context "when references many" do
827
-
828
- context "when an inverse_of is defined" do
829
-
830
- let(:metadata) do
831
- described_class.new(
832
- name: :created_streets,
833
- relation: Mongoid::Relations::Referenced::Many,
834
- inverse_class_name: "House",
835
- inverse_of: :creator
836
- )
837
- end
838
-
839
- it "returns the inverse_of plus suffix" do
840
- metadata.foreign_key.should eq("creator_id")
841
- end
842
- end
843
-
844
- context "when the class is not namespaced" do
845
-
846
- let(:metadata) do
847
- described_class.new(
848
- name: :posts,
849
- relation: Mongoid::Relations::Referenced::Many,
850
- inverse_class_name: "Person"
851
- )
852
- end
853
-
854
- it "returns the inverse foreign key" do
855
- metadata.foreign_key.should eq("person_id")
856
- end
857
- end
858
-
859
- context "when the class is namespaced" do
860
-
861
- let(:metadata) do
862
- described_class.new(
863
- name: :bananas,
864
- relation: Mongoid::Relations::Referenced::Many,
865
- inverse_class_name: "Fruits::Apple",
866
- class_name: "Fruits::Banana"
867
- )
868
- end
869
-
870
- it "returns the foreign_key without the module name" do
871
- metadata.foreign_key.should eq("apple_id")
872
- end
873
- end
874
- end
875
-
876
- context "when embeds one" do
877
- let(:metadata) do
878
- described_class.new(
879
- name: :post,
880
- relation: Mongoid::Relations::Embedded::One,
881
- inverse_class_name: "Person"
882
- )
883
- end
884
-
885
- it "returns the inverse foreign key" do
886
- metadata.foreign_key.should eq("person_id")
887
- end
888
- end
889
- end
890
- end
891
-
892
- context "when a foreign_key was defined" do
893
-
894
- let(:metadata) do
895
- described_class.new(
896
- name: :person,
897
- relation: Mongoid::Relations::Referenced::ManyToMany,
898
- foreign_key: "blog_post_id"
899
- )
900
- end
901
-
902
- it "returns the foreign_key" do
903
- metadata.foreign_key.should eq("blog_post_id")
904
- end
905
- end
906
- end
907
-
908
- describe "#foreign_key_default" do
909
-
910
- context "when the relation stores keys in an array" do
911
-
912
- let(:metadata) do
913
- described_class.new(
914
- name: :preferences,
915
- relation: Mongoid::Relations::Referenced::ManyToMany,
916
- foreign_key: "preference_ids"
917
- )
918
- end
919
-
920
- it "returns an empty array" do
921
- metadata.foreign_key_default.should be_empty
922
- end
923
- end
924
-
925
- context "when the relation stores a single key" do
926
-
927
- let(:metadata) do
928
- described_class.new(
929
- name: :person,
930
- relation: Mongoid::Relations::Referenced::In,
931
- foreign_key: "person_id"
932
- )
933
- end
934
-
935
- it "returns an empty array" do
936
- metadata.foreign_key_default.should be_nil
937
- end
938
- end
939
- end
940
-
941
- describe "#foreign_key_setter" do
942
-
943
- context "when the relation is not polymorphic" do
944
-
945
- let(:metadata) do
946
- described_class.new(
947
- name: :person,
948
- relation: Mongoid::Relations::Referenced::In,
949
- foreign_key: "person_id"
950
- )
951
- end
952
-
953
- it "returns the foreign_key plus =" do
954
- metadata.foreign_key_setter.should eq("person_id=")
955
- end
956
- end
957
-
958
- context "when the relation is polymorphic" do
959
-
960
- let(:metadata) do
961
- described_class.new(
962
- name: :ratings,
963
- relation: Mongoid::Relations::Referenced::Many,
964
- as: :ratable,
965
- inverse_class_name: "Movie"
966
- )
967
- end
968
-
969
- it "returns the polymorphic foreign_key plus =" do
970
- metadata.foreign_key_setter.should eq("ratable_id=")
971
- end
972
- end
973
- end
974
-
975
- describe "#inverse_type" do
976
-
977
- context "when the relation is not polymorphic" do
978
-
979
- let(:metadata) do
980
- described_class.new(
981
- name: :person,
982
- relation: Mongoid::Relations::Referenced::In,
983
- foreign_key: "person_id"
984
- )
985
- end
986
-
987
- it "returns nil" do
988
- metadata.inverse_type.should be_nil
989
- end
990
- end
991
-
992
- context "when the relation is polymorphic" do
993
-
994
- let(:metadata) do
995
- described_class.new(
996
- name: :ratable,
997
- relation: Mongoid::Relations::Referenced::In,
998
- polymorphic: true,
999
- inverse_class_name: "Rating"
1000
- )
1001
- end
1002
-
1003
- it "returns the polymorphic name plus type" do
1004
- metadata.inverse_type.should eq("ratable_type")
1005
- end
1006
- end
1007
- end
1008
-
1009
- describe "#inverse_type_setter" do
1010
-
1011
- context "when the relation is not polymorphic" do
1012
-
1013
- let(:metadata) do
1014
- described_class.new(
1015
- name: :person,
1016
- relation: Mongoid::Relations::Referenced::In,
1017
- foreign_key: "person_id"
1018
- )
1019
- end
1020
-
1021
- it "returns nil" do
1022
- metadata.inverse_type_setter.should be_nil
1023
- end
1024
- end
1025
-
1026
- context "when the relation is polymorphic" do
1027
-
1028
- let(:metadata) do
1029
- described_class.new(
1030
- name: :ratable,
1031
- relation: Mongoid::Relations::Referenced::In,
1032
- polymorphic: true,
1033
- inverse_class_name: "Rating"
1034
- )
1035
- end
1036
-
1037
- it "returns the inverse type plus =" do
1038
- metadata.inverse_type_setter.should eq("ratable_type=")
1039
- end
1040
- end
1041
- end
1042
-
1043
- describe "#inverse_of_field" do
1044
-
1045
- context "when the relation is not polymorphic" do
1046
-
1047
- let(:metadata) do
1048
- described_class.new(
1049
- name: :person,
1050
- relation: Mongoid::Relations::Referenced::In,
1051
- foreign_key: "person_id"
1052
- )
1053
- end
1054
-
1055
- it "returns nil" do
1056
- metadata.inverse_of_field.should be_nil
1057
- end
1058
- end
1059
-
1060
- context "when the relation is polymorphic" do
1061
-
1062
- let(:metadata) do
1063
- described_class.new(
1064
- name: :ratable,
1065
- relation: Mongoid::Relations::Referenced::In,
1066
- polymorphic: true,
1067
- inverse_class_name: "Rating"
1068
- )
1069
- end
1070
-
1071
- it "returns the polymorphic name plus field" do
1072
- metadata.inverse_of_field.should eq("ratable_field")
1073
- end
1074
- end
1075
- end
1076
-
1077
- describe "#inverse_of_field_setter" do
1078
-
1079
- context "when the relation is not polymorphic" do
1080
-
1081
- let(:metadata) do
1082
- described_class.new(
1083
- name: :person,
1084
- relation: Mongoid::Relations::Referenced::In,
1085
- foreign_key: "person_id"
1086
- )
1087
- end
1088
-
1089
- it "returns nil" do
1090
- metadata.inverse_of_field_setter.should be_nil
1091
- end
1092
- end
1093
-
1094
- context "when the relation is polymorphic" do
1095
-
1096
- let(:metadata) do
1097
- described_class.new(
1098
- name: :ratable,
1099
- relation: Mongoid::Relations::Referenced::In,
1100
- polymorphic: true,
1101
- inverse_class_name: "Rating"
1102
- )
1103
- end
1104
-
1105
- it "returns the inverse of field plus =" do
1106
- metadata.inverse_of_field_setter.should eq("ratable_field=")
1107
- end
1108
- end
1109
- end
1110
-
1111
- describe "#inverses" do
1112
-
1113
- context "when the relation is polymorphic" do
1114
-
1115
- context "when an inverse_of is defined" do
1116
-
1117
- let(:metadata) do
1118
- described_class.new(
1119
- name: :ratable,
1120
- relation: Mongoid::Relations::Referenced::In,
1121
- polymorphic: true,
1122
- inverse_of: "my_ratings"
1123
- )
1124
- end
1125
-
1126
- it "returns only the inverse_of" do
1127
- metadata.inverses(nil).should eq([ "my_ratings" ])
1128
- end
1129
- end
1130
- end
1131
- end
1132
-
1133
- describe "#indexed?" do
1134
-
1135
- context "when an index property exists" do
1136
-
1137
- let(:metadata) do
1138
- described_class.new(
1139
- index: true,
1140
- relation: Mongoid::Relations::Referenced::In
1141
- )
1142
- end
1143
-
1144
- it "returns true" do
1145
- metadata.indexed?.should be_true
1146
- end
1147
- end
1148
-
1149
- context "when the index option is nil" do
1150
-
1151
- let(:metadata) do
1152
- described_class.new(
1153
- relation: Mongoid::Relations::Referenced::In
1154
- )
1155
- end
1156
-
1157
- it "returns false" do
1158
- metadata.indexed?.should be_false
1159
- end
1160
- end
1161
-
1162
- context "when the index option is false" do
1163
-
1164
- let(:metadata) do
1165
- described_class.new(
1166
- index: false,
1167
- relation: Mongoid::Relations::Referenced::In
1168
- )
1169
- end
1170
-
1171
- it "returns false" do
1172
- metadata.indexed?.should be_false
1173
- end
1174
- end
1175
- end
1176
-
1177
- describe "#inverse" do
1178
-
1179
- context "when an inverse relation exists" do
1180
-
1181
- context "when the inverse has a foreign key match" do
1182
-
1183
- let(:metadata) do
1184
- User.reflect_on_association(:account)
1185
- end
1186
-
1187
- it "returns the name of the inverse with the matching foreign_key" do
1188
- metadata.inverse.should eq(:creator)
1189
- end
1190
- end
1191
-
1192
- context "when multiple relations against the same class exist" do
1193
-
1194
- context "when not polymorphic" do
1195
-
1196
- let(:metadata) do
1197
- described_class.new(
1198
- inverse_class_name: "User",
1199
- name: :shop,
1200
- relation: Mongoid::Relations::Referenced::One
1201
- )
1202
- end
1203
-
1204
- it "returns the name of the inverse with the matching inverse of" do
1205
- metadata.inverse.should eq(:user)
1206
- end
1207
- end
1208
-
1209
- context "when polymorphic" do
1210
-
1211
- let(:metadata) do
1212
- described_class.new(
1213
- name: :left_eye,
1214
- as: :eyeable,
1215
- inverse_class_name: "Face",
1216
- class_name: "Eye",
1217
- relation: Mongoid::Relations::Referenced::One
1218
- )
1219
- end
1220
-
1221
- it "returns the name of the relation" do
1222
- metadata.inverse.should eq(:eyeable)
1223
- end
1224
- end
1225
-
1226
- context "when polymorphic on the child" do
1227
-
1228
- let(:metadata) do
1229
- described_class.new(
1230
- name: :eyeable,
1231
- polymorphic: true,
1232
- inverse_class_name: "Eye",
1233
- relation: Mongoid::Relations::Referenced::In
1234
- )
1235
- end
1236
-
1237
- it "returns nil" do
1238
- metadata.inverse(Face.new).should be_nil
1239
- end
1240
- end
1241
- end
1242
-
1243
- context "when inverse_of is defined" do
1244
-
1245
- context "when inverse_of is nil" do
1246
-
1247
- let(:metadata) do
1248
- described_class.new(
1249
- inverse_of: nil,
1250
- relation: Mongoid::Relations::Referenced::In
1251
- )
1252
- end
1253
-
1254
- it "returns nil" do
1255
- metadata.inverse.should be_nil
1256
- end
1257
- end
1258
-
1259
- context "when inverse_of is a symbol" do
1260
-
1261
- let(:metadata) do
1262
- described_class.new(
1263
- inverse_of: :crazy_name,
1264
- relation: Mongoid::Relations::Referenced::In
1265
- )
1266
- end
1267
-
1268
- it "returns the name of the inverse_of property" do
1269
- metadata.inverse.should eq(:crazy_name)
1270
- end
1271
- end
1272
- end
1273
-
1274
- context "when not polymorphic" do
1275
-
1276
- let(:metadata) do
1277
- described_class.new(
1278
- name: :pet,
1279
- class_name: "Animal",
1280
- inverse_class_name: "Person",
1281
- relation: Mongoid::Relations::Referenced::In
1282
- )
1283
- end
1284
-
1285
- it "returns the name of the relation" do
1286
- metadata.inverse.should eq(:person)
1287
- end
1288
- end
1289
-
1290
- context "when polymorphic" do
1291
-
1292
- let(:metadata) do
1293
- described_class.new(
1294
- name: :addresses,
1295
- as: :addressable,
1296
- inverse_class_name: "Person",
1297
- relation: Mongoid::Relations::Referenced::Many
1298
- )
1299
- end
1300
-
1301
- it "returns the name of the relation" do
1302
- metadata.inverse.should eq(:addressable)
1303
- end
1304
- end
1305
-
1306
- context "when polymorphic on the child" do
1307
-
1308
- let(:metadata) do
1309
- described_class.new(
1310
- name: :addressable,
1311
- polymorphic: true,
1312
- inverse_class_name: "Address",
1313
- relation: Mongoid::Relations::Referenced::In
1314
- )
1315
- end
1316
-
1317
- it "returns the name of the relation" do
1318
- metadata.inverse(Person.new).should eq(:addresses)
1319
- end
1320
- end
1321
-
1322
- context "when in a cyclic relation" do
1323
-
1324
- context "when the base name is included in the plural form" do
1325
-
1326
- let(:metadata) do
1327
- described_class.new(
1328
- name: :parent_role,
1329
- class_name: "Role",
1330
- inverse_class_name: "Role",
1331
- relation: Mongoid::Relations::Embedded::In,
1332
- cyclic: true
1333
- )
1334
- end
1335
-
1336
- it "returns the name of the relation" do
1337
- metadata.inverse(Role.new).should eq(:child_roles)
1338
- end
1339
- end
1340
-
1341
- context "when the base name is not included in the plural form" do
1342
-
1343
- let(:metadata) do
1344
- described_class.new(
1345
- name: :parent_entry,
1346
- class_name: "Entry",
1347
- inverse_class_name: "Entry",
1348
- relation: Mongoid::Relations::Embedded::In,
1349
- cyclic: true
1350
- )
1351
- end
1352
-
1353
- it "returns the name of the relation" do
1354
- metadata.inverse(Entry.new).should eq(:child_entries)
1355
- end
1356
- end
1357
- end
1358
- end
1359
- end
1360
-
1361
- context "#inverse_foreign_key" do
1362
-
1363
- context "when the inverse foreign key is not defined" do
1364
-
1365
- let(:metadata) do
1366
- described_class.new(
1367
- name: :preferences,
1368
- index: true,
1369
- dependent: :nullify,
1370
- relation: Mongoid::Relations::Referenced::ManyToMany,
1371
- inverse_class_name: "Person"
1372
- )
1373
- end
1374
-
1375
- it "returns the inverse class name plus suffix" do
1376
- metadata.inverse_foreign_key.should eq("person_ids")
1377
- end
1378
- end
1379
-
1380
- context "when the inverse_of is nil" do
1381
-
1382
- let(:metadata) do
1383
- described_class.new(
1384
- name: :blogs,
1385
- class_name: "Blog",
1386
- relation: Mongoid::Relations::Referenced::ManyToMany,
1387
- inverse_of: nil
1388
- )
1389
- end
1390
-
1391
- it "returns nil" do
1392
- metadata.inverse_foreign_key.should be_nil
1393
- end
1394
- end
1395
- end
1396
-
1397
- context "#inverse_klass" do
1398
-
1399
- let(:metadata) do
1400
- described_class.new(
1401
- inverse_class_name: "Person",
1402
- relation: Mongoid::Relations::Referenced::In
1403
- )
1404
- end
1405
-
1406
- it "constantizes the inverse_class_name" do
1407
- metadata.inverse_klass.should eq(Person)
1408
- end
1409
- end
1410
-
1411
- context "#inverse_setter" do
1412
-
1413
- context "when the relation is not polymorphic" do
1414
-
1415
- let(:metadata) do
1416
- described_class.new(
1417
- name: :pet,
1418
- class_name: "Animal",
1419
- inverse_class_name: "Person",
1420
- relation: Mongoid::Relations::Referenced::In
1421
- )
1422
- end
1423
-
1424
- it "returns a string for the setter" do
1425
- metadata.inverse_setter.should eq("person=")
1426
- end
1427
- end
1428
-
1429
- context "when the relation is polymorphic" do
1430
-
1431
- context "when multiple relations against the same class exist" do
1432
-
1433
- context "when a referenced in" do
1434
-
1435
- let(:metadata) do
1436
- described_class.new(
1437
- name: :eyeable,
1438
- polymorphic: true,
1439
- relation: Mongoid::Relations::Referenced::In
1440
- )
1441
- end
1442
-
1443
- let(:other) do
1444
- Face.new
1445
- end
1446
-
1447
- it "returns nil" do
1448
- metadata.inverse_setter(other).should be_nil
1449
- end
1450
- end
1451
-
1452
- context "when a references many" do
1453
-
1454
- let(:metadata) do
1455
- described_class.new(
1456
- name: :blue_eyes,
1457
- inverse_class_name: "EyeBowl",
1458
- as: :eyeable,
1459
- relation: Mongoid::Relations::Referenced::Many
1460
- )
1461
- end
1462
-
1463
- it "returns a string for the setter" do
1464
- metadata.inverse_setter.should eq("eyeable=")
1465
- end
1466
- end
1467
- end
1468
-
1469
- context "when a referenced in" do
1470
-
1471
- let(:metadata) do
1472
- described_class.new(
1473
- name: :ratable,
1474
- inverse_class_name: "Rating",
1475
- polymorphic: true,
1476
- relation: Mongoid::Relations::Referenced::In
1477
- )
1478
- end
1479
-
1480
- let(:other) do
1481
- Movie.new
1482
- end
1483
-
1484
- it "returns a string for the setter" do
1485
- metadata.inverse_setter(other).should eq("ratings=")
1486
- end
1487
- end
1488
-
1489
- context "when a references many" do
1490
-
1491
- let(:metadata) do
1492
- described_class.new(
1493
- name: :ratings,
1494
- inverse_class_name: "Rating",
1495
- as: :ratable,
1496
- relation: Mongoid::Relations::Referenced::Many
1497
- )
1498
- end
1499
-
1500
- it "returns a string for the setter" do
1501
- metadata.inverse_setter.should eq("ratable=")
1502
- end
1503
- end
1504
- end
1505
- end
1506
-
1507
- context "#key" do
1508
-
1509
- context "when relation is embedded" do
1510
-
1511
- let(:metadata) do
1512
- described_class.new(
1513
- name: :addresses,
1514
- relation: Mongoid::Relations::Embedded::Many
1515
- )
1516
- end
1517
-
1518
- it "returns the name as a string" do
1519
- metadata.key.should eq("addresses")
1520
- end
1521
-
1522
- context "with a store_as option defined" do
1523
-
1524
- let(:metadata) do
1525
- described_class.new(
1526
- name: :comment,
1527
- relation: Mongoid::Relations::Embedded::Many,
1528
- store_as: "user_comments"
1529
- )
1530
- end
1531
-
1532
- it "return the name define by store_as option" do
1533
- metadata.key.should eq("user_comments")
1534
- end
1535
- end
1536
- end
1537
-
1538
- context "when relation is referenced" do
1539
-
1540
- context "when relation stores foreign_key" do
1541
-
1542
- context "when the relation is not polymorphic" do
1543
-
1544
- let(:metadata) do
1545
- described_class.new(
1546
- name: :posts,
1547
- relation: Mongoid::Relations::Referenced::ManyToMany
1548
- )
1549
- end
1550
-
1551
- it "returns the foreign_key" do
1552
- metadata.key.should eq("post_ids")
1553
- end
1554
- end
1555
-
1556
- context "when the relation is polymorphic" do
1557
-
1558
- let(:metadata) do
1559
- described_class.new(
1560
- name: :ratable,
1561
- relation: Mongoid::Relations::Referenced::In,
1562
- polymorphic: true
1563
- )
1564
- end
1565
-
1566
- it "returns the polymorphic foreign_key" do
1567
- metadata.key.should eq("ratable_id")
1568
- end
1569
- end
1570
- end
1571
-
1572
- context "when relation does not store a foreign_key" do
1573
-
1574
- let(:metadata) do
1575
- described_class.new(
1576
- name: :addresses,
1577
- relation: Mongoid::Relations::Referenced::Many,
1578
- inverse_class_name: "Person"
1579
- )
1580
- end
1581
-
1582
- it "returns _id" do
1583
- metadata.key.should eq("_id")
1584
- end
1585
- end
1586
- end
1587
- end
1588
-
1589
- describe "#options" do
1590
-
1591
- let(:metadata) do
1592
- described_class.new(
1593
- order: :rating.asc,
1594
- relation: Mongoid::Relations::Referenced::Many
1595
- )
1596
- end
1597
-
1598
- it "returns self" do
1599
- metadata.options.should eq(metadata)
1600
- end
1601
- end
1602
-
1603
- describe "#order" do
1604
-
1605
- let(:metadata) do
1606
- described_class.new(
1607
- order: :rating.asc,
1608
- relation: Mongoid::Relations::Referenced::Many
1609
- )
1610
- end
1611
-
1612
- it "returns order criteria" do
1613
- metadata.order.should eq(:rating.asc)
1614
- end
1615
- end
1616
-
1617
- describe "#klass" do
1618
-
1619
- context "when the class name is not namespaced" do
1620
-
1621
- let(:metadata) do
1622
- described_class.new(
1623
- class_name: "Address",
1624
- relation: Mongoid::Relations::Embedded::Many
1625
- )
1626
- end
1627
-
1628
- it "constantizes the class_name" do
1629
- metadata.klass.should eq(Address)
1630
- end
1631
- end
1632
-
1633
- context "when the class name is prepended with ::" do
1634
-
1635
- let(:metadata) do
1636
- described_class.new(
1637
- class_name: "::Address",
1638
- relation: Mongoid::Relations::Embedded::Many
1639
- )
1640
- end
1641
-
1642
- it "returns the class" do
1643
- metadata.klass.should eq(Address)
1644
- end
1645
- end
1646
- end
1647
-
1648
- describe "#many?" do
1649
-
1650
- context "when the relation is a many" do
1651
-
1652
- let(:metadata) do
1653
- described_class.new(relation: Mongoid::Relations::Embedded::Many)
1654
- end
1655
-
1656
- it "returns true" do
1657
- metadata.should be_many
1658
- end
1659
- end
1660
-
1661
- context "when the relation is not a many" do
1662
-
1663
- let(:metadata) do
1664
- described_class.new(relation: Mongoid::Relations::Embedded::One)
1665
- end
1666
-
1667
- it "returns false" do
1668
- metadata.should_not be_many
1669
- end
1670
- end
1671
- end
1672
-
1673
- describe "#macro" do
1674
-
1675
- let(:metadata) do
1676
- described_class.new(relation: Mongoid::Relations::Embedded::One)
1677
- end
1678
-
1679
- it "returns the macro from the relation" do
1680
- metadata.macro.should eq(:embeds_one)
1681
- end
1682
- end
1683
-
1684
- describe "#nested_builder" do
1685
-
1686
- let(:metadata) do
1687
- described_class.new(relation: Mongoid::Relations::Embedded::One)
1688
- end
1689
-
1690
- let(:attributes) do
1691
- {}
1692
- end
1693
-
1694
- let(:options) do
1695
- {}
1696
- end
1697
-
1698
- it "returns the nested builder from the relation" do
1699
- metadata.nested_builder(attributes, options).should
1700
- be_a_kind_of(Mongoid::Relations::Builders::NestedAttributes::One)
1701
- end
1702
- end
1703
-
1704
- describe "#primary_key" do
1705
-
1706
- context "when no primary key exists" do
1707
-
1708
- let(:metadata) do
1709
- described_class.new(
1710
- name: :person,
1711
- inverse_class_name: "Person",
1712
- relation: Mongoid::Relations::Referenced::In
1713
- )
1714
- end
1715
-
1716
- it "returns _id" do
1717
- metadata.primary_key.should eq("_id")
1718
- end
1719
- end
1720
-
1721
- context "when a primary key exists" do
1722
-
1723
- let(:metadata) do
1724
- described_class.new(
1725
- name: :person,
1726
- inverse_class_name: "Person",
1727
- relation: Mongoid::Relations::Referenced::In,
1728
- primary_key: :something_id
1729
- )
1730
- end
1731
-
1732
- it "returns the primary key" do
1733
- metadata.primary_key.should eq("something_id")
1734
- end
1735
- end
1736
- end
1737
-
1738
- describe "#validate?" do
1739
-
1740
- context "when validate is provided" do
1741
-
1742
- context "when validate is true" do
1743
-
1744
- let(:metadata) do
1745
- described_class.new(
1746
- name: :posts,
1747
- inverse_class_name: "Post",
1748
- relation: Mongoid::Relations::Referenced::Many,
1749
- validate: true
1750
- )
1751
- end
1752
-
1753
- it "returns true" do
1754
- metadata.validate?.should be_true
1755
- end
1756
- end
1757
-
1758
- context "when validate is false" do
1759
-
1760
- let(:metadata) do
1761
- described_class.new(
1762
- name: :posts,
1763
- inverse_class_name: "Post",
1764
- relation: Mongoid::Relations::Referenced::Many,
1765
- validate: false
1766
- )
1767
- end
1768
-
1769
- it "returns false" do
1770
- metadata.validate?.should be_false
1771
- end
1772
- end
1773
- end
1774
-
1775
- context "when validate is not provided" do
1776
-
1777
- let(:metadata) do
1778
- described_class.new(
1779
- name: :posts,
1780
- inverse_class_name: "Post",
1781
- relation: Mongoid::Relations::Referenced::Many
1782
- )
1783
- end
1784
-
1785
- it "returns the relation default" do
1786
- metadata.validate?.should be_true
1787
- end
1788
- end
1789
- end
1790
-
1791
- describe "#versioned?" do
1792
-
1793
- context "when versioned is true" do
1794
-
1795
- let(:metadata) do
1796
- described_class.new(
1797
- name: :versions,
1798
- relation: Mongoid::Relations::Embedded::Many,
1799
- versioned: true
1800
- )
1801
- end
1802
-
1803
- it "returns true" do
1804
- metadata.should be_versioned
1805
- end
1806
- end
1807
-
1808
- context "when versioned is false" do
1809
-
1810
- let(:metadata) do
1811
- described_class.new(
1812
- name: :versions,
1813
- relation: Mongoid::Relations::Embedded::Many,
1814
- versioned: false
1815
- )
1816
- end
1817
-
1818
- it "returns false" do
1819
- metadata.should_not be_versioned
1820
- end
1821
- end
1822
-
1823
- context "when versioned is nil" do
1824
-
1825
- let(:metadata) do
1826
- described_class.new(
1827
- name: :versions,
1828
- relation: Mongoid::Relations::Embedded::Many
1829
- )
1830
- end
1831
-
1832
- it "returns false" do
1833
- metadata.should_not be_versioned
1834
- end
1835
- end
1836
- end
1837
-
1838
- describe "#store_as" do
1839
-
1840
- context "when store_as is define" do
1841
-
1842
- let(:metadata) do
1843
- described_class.new(
1844
- name: :comment,
1845
- relation: Mongoid::Relations::Embedded::Many,
1846
- store_as: 'user_comments'
1847
- )
1848
- end
1849
-
1850
- it "returns the value" do
1851
- metadata.store_as.should eq("user_comments")
1852
- end
1853
- end
1854
-
1855
- context "when is not define" do
1856
-
1857
- let(:metadata) do
1858
- described_class.new(
1859
- name: :comments,
1860
- relation: Mongoid::Relations::Embedded::Many,
1861
- )
1862
- end
1863
-
1864
- it "returns false" do
1865
- metadata.store_as.should eq("comments")
1866
- end
1867
- end
1868
- end
1869
-
1870
- describe "#determine_inverse_relation" do
1871
-
1872
- let(:class_name) do
1873
- "Person"
1874
- end
1875
-
1876
- let(:metadata) do
1877
- described_class.new(
1878
- relation: Mongoid::Relations::Referenced::In,
1879
- inverse_class_name: "Drug",
1880
- class_name: class_name,
1881
- name: :person
1882
- )
1883
- end
1884
-
1885
- let(:inverse_relation) do
1886
- metadata.send(:determine_inverse_relation)
1887
- end
1888
-
1889
- context "when no match" do
1890
-
1891
- let(:class_name) do
1892
- "Slave"
1893
- end
1894
-
1895
- it "returns nil" do
1896
- inverse_relation.should be_nil
1897
- end
1898
- end
1899
-
1900
- context "when one match" do
1901
-
1902
- it "returns correct relation" do
1903
- inverse_relation.should eq(:drugs)
1904
- end
1905
- end
1906
-
1907
- context "when multiple matches" do
1908
-
1909
- before do
1910
- class_name.constantize.has_many(:evil_drugs, class_name: "Drug")
1911
- end
1912
-
1913
- after do
1914
- class_name.constantize.relations.delete("evil_drugs")
1915
- Person.reset_callbacks(:validate)
1916
- end
1917
-
1918
- it "raises AmbiguousRelationship" do
1919
- expect {
1920
- inverse_relation
1921
- }.to raise_error(Mongoid::Errors::AmbiguousRelationship)
1922
- end
1923
- end
1924
- end
1925
-
1926
- describe "touchable?" do
1927
-
1928
- context "when touch is false" do
1929
-
1930
- let(:metadata) do
1931
- described_class.new(
1932
- name: :versions,
1933
- relation: Mongoid::Relations::Referenced::In,
1934
- touch: false
1935
- )
1936
- end
1937
-
1938
- it "returns false" do
1939
- metadata.should_not be_touchable
1940
- end
1941
- end
1942
-
1943
- context "when touch is true" do
1944
-
1945
- let(:metadata) do
1946
- described_class.new(
1947
- name: :versions,
1948
- relation: Mongoid::Relations::Referenced::In,
1949
- touch: true
1950
- )
1951
- end
1952
-
1953
- it "returns true" do
1954
- metadata.should be_touchable
1955
- end
1956
- end
1957
-
1958
- context "when touch is nil" do
1959
-
1960
- let(:metadata) do
1961
- described_class.new(
1962
- name: :versions,
1963
- relation: Mongoid::Relations::Referenced::In,
1964
- )
1965
- end
1966
-
1967
- it "returns false" do
1968
- metadata.should_not be_touchable
1969
- end
1970
- end
1971
- end
1972
-
1973
- context "properties" do
1974
-
1975
- PROPERTIES = [
1976
- "as",
1977
- "cyclic",
1978
- "name",
1979
- "order"
1980
- ]
1981
-
1982
- PROPERTIES.each do |property|
1983
-
1984
- describe "##{property}" do
1985
-
1986
- let(:metadata) do
1987
- described_class.new(
1988
- property.to_sym => :value,
1989
- relation: Mongoid::Relations::Embedded::Many
1990
- )
1991
- end
1992
-
1993
- it "returns the #{property} property" do
1994
- metadata.send(property).should eq(:value)
1995
- end
1996
- end
1997
-
1998
- describe "##{property}?" do
1999
-
2000
- context "when a #{property} property exists" do
2001
-
2002
- let(:metadata) do
2003
- described_class.new(
2004
- property.to_sym => :value,
2005
- relation: Mongoid::Relations::Embedded::Many
2006
- )
2007
- end
2008
-
2009
- it "returns true" do
2010
- metadata.send("#{property}?").should be_true
2011
- end
2012
- end
2013
-
2014
- context "when the #{property} property is nil" do
2015
-
2016
- let(:metadata) do
2017
- described_class.new(
2018
- relation: Mongoid::Relations::Embedded::Many
2019
- )
2020
- end
2021
-
2022
- it "returns false" do
2023
- metadata.send("#{property}?").should be_false
2024
- end
2025
- end
2026
- end
2027
- end
2028
- end
2029
-
2030
- end