mongoid 3.1.6 → 4.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 (571) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +479 -8
  3. data/README.md +10 -7
  4. data/lib/config/locales/en.yml +34 -20
  5. data/lib/mongoid.rb +10 -76
  6. data/lib/mongoid/atomic.rb +3 -14
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  9. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  10. data/lib/mongoid/atomic/paths/root.rb +0 -13
  11. data/lib/mongoid/attributes.rb +65 -101
  12. data/lib/mongoid/attributes/dynamic.rb +154 -0
  13. data/lib/mongoid/attributes/nested.rb +82 -0
  14. data/lib/mongoid/attributes/processing.rb +13 -66
  15. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  16. data/lib/mongoid/composable.rb +105 -0
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/config/options.rb +1 -1
  19. data/lib/mongoid/contextual.rb +2 -0
  20. data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
  21. data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
  22. data/lib/mongoid/contextual/atomic.rb +53 -53
  23. data/lib/mongoid/contextual/geo_near.rb +1 -1
  24. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  25. data/lib/mongoid/contextual/memory.rb +23 -11
  26. data/lib/mongoid/contextual/mongo.rb +75 -57
  27. data/lib/mongoid/contextual/none.rb +90 -0
  28. data/lib/mongoid/contextual/text_search.rb +178 -0
  29. data/lib/mongoid/copyable.rb +2 -3
  30. data/lib/mongoid/criteria.rb +39 -34
  31. data/lib/mongoid/criteria/#findable.rb# +141 -0
  32. data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
  33. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  34. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  35. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  36. data/lib/mongoid/criteria/permission.rb +70 -0
  37. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  38. data/lib/mongoid/document.rb +39 -24
  39. data/lib/mongoid/errors.rb +4 -1
  40. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  41. data/lib/mongoid/errors/document_not_found.rb +2 -1
  42. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  43. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  44. data/lib/mongoid/errors/invalid_value.rb +16 -0
  45. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  46. data/lib/mongoid/errors/readonly_document.rb +24 -0
  47. data/lib/mongoid/extensions.rb +15 -7
  48. data/lib/mongoid/extensions/array.rb +3 -3
  49. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  50. data/lib/mongoid/extensions/boolean.rb +15 -17
  51. data/lib/mongoid/extensions/date.rb +1 -1
  52. data/lib/mongoid/extensions/date_time.rb +3 -3
  53. data/lib/mongoid/extensions/float.rb +2 -1
  54. data/lib/mongoid/extensions/hash.rb +3 -3
  55. data/lib/mongoid/extensions/integer.rb +1 -1
  56. data/lib/mongoid/extensions/object.rb +7 -7
  57. data/lib/mongoid/extensions/object_id.rb +5 -5
  58. data/lib/mongoid/extensions/range.rb +9 -3
  59. data/lib/mongoid/extensions/regexp.rb +1 -1
  60. data/lib/mongoid/extensions/set.rb +1 -1
  61. data/lib/mongoid/extensions/string.rb +6 -18
  62. data/lib/mongoid/extensions/symbol.rb +1 -1
  63. data/lib/mongoid/extensions/time.rb +3 -3
  64. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  65. data/lib/mongoid/factory.rb +8 -6
  66. data/lib/mongoid/fields.rb +41 -8
  67. data/lib/mongoid/fields/foreign_key.rb +3 -3
  68. data/lib/mongoid/fields/localized.rb +1 -1
  69. data/lib/mongoid/fields/standard.rb +5 -17
  70. data/lib/mongoid/fields/validators/macro.rb +15 -5
  71. data/lib/mongoid/{finders.rb → findable.rb} +35 -7
  72. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  73. data/lib/mongoid/indexable/specification.rb +104 -0
  74. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  75. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  76. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  77. data/lib/mongoid/log_subscriber.rb +55 -0
  78. data/lib/mongoid/matchable.rb +152 -0
  79. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  81. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  82. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  86. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  87. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  88. data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
  89. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  90. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  91. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  92. data/lib/mongoid/persistable.rb +216 -0
  93. data/lib/mongoid/persistable/creatable.rb +189 -0
  94. data/lib/mongoid/persistable/deletable.rb +149 -0
  95. data/lib/mongoid/persistable/destroyable.rb +60 -0
  96. data/lib/mongoid/persistable/incrementable.rb +36 -0
  97. data/lib/mongoid/persistable/logical.rb +38 -0
  98. data/lib/mongoid/persistable/poppable.rb +39 -0
  99. data/lib/mongoid/persistable/pullable.rb +55 -0
  100. data/lib/mongoid/persistable/pushable.rb +62 -0
  101. data/lib/mongoid/persistable/renamable.rb +35 -0
  102. data/lib/mongoid/persistable/savable.rb +52 -0
  103. data/lib/mongoid/persistable/settable.rb +33 -0
  104. data/lib/mongoid/persistable/unsettable.rb +36 -0
  105. data/lib/mongoid/persistable/updatable.rb +153 -0
  106. data/lib/mongoid/persistable/upsertable.rb +55 -0
  107. data/lib/mongoid/positional.rb +71 -0
  108. data/lib/mongoid/query_cache.rb +255 -0
  109. data/lib/mongoid/railtie.rb +34 -60
  110. data/lib/mongoid/railties/database.rake +9 -25
  111. data/lib/mongoid/relations.rb +11 -25
  112. data/lib/mongoid/relations/accessors.rb +15 -51
  113. data/lib/mongoid/relations/auto_save.rb +15 -36
  114. data/lib/mongoid/relations/binding.rb +2 -25
  115. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  116. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  117. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  118. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
  119. data/lib/mongoid/relations/builder.rb +1 -1
  120. data/lib/mongoid/relations/builders.rb +2 -2
  121. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  122. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  123. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
  124. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  125. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  126. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  127. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  128. data/lib/mongoid/relations/cascading.rb +3 -5
  129. data/lib/mongoid/relations/constraint.rb +1 -1
  130. data/lib/mongoid/relations/conversions.rb +1 -1
  131. data/lib/mongoid/relations/counter_cache.rb +39 -15
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/eager/base.rb +149 -0
  134. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  135. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  136. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  137. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  138. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  139. data/lib/mongoid/relations/embedded/in.rb +4 -4
  140. data/lib/mongoid/relations/embedded/many.rb +14 -32
  141. data/lib/mongoid/relations/embedded/one.rb +1 -1
  142. data/lib/mongoid/relations/macros.rb +3 -4
  143. data/lib/mongoid/relations/many.rb +51 -31
  144. data/lib/mongoid/relations/marshalable.rb +3 -3
  145. data/lib/mongoid/relations/metadata.rb +14 -79
  146. data/lib/mongoid/relations/nested_builder.rb +2 -2
  147. data/lib/mongoid/relations/one.rb +1 -1
  148. data/lib/mongoid/relations/options.rb +1 -0
  149. data/lib/mongoid/relations/polymorphic.rb +0 -1
  150. data/lib/mongoid/relations/proxy.rb +21 -41
  151. data/lib/mongoid/relations/referenced/in.rb +4 -20
  152. data/lib/mongoid/relations/referenced/many.rb +22 -35
  153. data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
  154. data/lib/mongoid/relations/referenced/one.rb +6 -25
  155. data/lib/mongoid/relations/synchronization.rb +4 -4
  156. data/lib/mongoid/relations/targets/enumerable.rb +10 -10
  157. data/lib/mongoid/relations/touchable.rb +34 -1
  158. data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
  159. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  160. data/lib/mongoid/selectable.rb +59 -0
  161. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  162. data/lib/mongoid/sessions.rb +37 -345
  163. data/lib/mongoid/sessions/factory.rb +2 -0
  164. data/lib/mongoid/sessions/options.rb +185 -0
  165. data/lib/mongoid/sessions/storage_options.rb +140 -0
  166. data/lib/mongoid/sessions/thread_options.rb +19 -0
  167. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  168. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  169. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  170. data/lib/mongoid/support/query_counter.rb +23 -0
  171. data/lib/mongoid/tasks/database.rake +31 -0
  172. data/lib/mongoid/tasks/database.rb +107 -0
  173. data/lib/mongoid/threaded.rb +26 -172
  174. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  175. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  176. data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
  177. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  178. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  179. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  180. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  181. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  182. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  183. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  184. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  185. data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
  186. data/lib/mongoid/version.rb +1 -1
  187. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
  188. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  189. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  190. data/lib/rails/generators/mongoid_generator.rb +3 -40
  191. data/lib/rails/mongoid.rb +0 -122
  192. data/lib/support/ruby_version.rb +1 -1
  193. data/spec/app/models/account.rb +2 -6
  194. data/spec/app/models/acolyte.rb +2 -1
  195. data/spec/app/models/actor.rb +0 -1
  196. data/spec/app/models/address.rb +8 -3
  197. data/spec/app/models/animal.rb +1 -1
  198. data/spec/app/models/appointment.rb +3 -3
  199. data/spec/app/models/article.rb +1 -4
  200. data/spec/app/models/audio.rb +5 -0
  201. data/spec/app/models/author.rb +0 -2
  202. data/spec/app/models/band.rb +3 -2
  203. data/spec/app/models/bar.rb +1 -0
  204. data/spec/app/models/book.rb +1 -0
  205. data/spec/app/models/building.rb +0 -2
  206. data/spec/app/models/building_address.rb +0 -2
  207. data/spec/app/models/bus.rb +1 -1
  208. data/spec/app/models/canvas.rb +1 -1
  209. data/spec/app/models/contextable_item.rb +5 -0
  210. data/spec/app/models/contractor.rb +0 -2
  211. data/spec/app/models/country_code.rb +1 -1
  212. data/spec/app/models/definition.rb +2 -2
  213. data/spec/app/models/dog.rb +1 -1
  214. data/spec/app/models/draft.rb +9 -0
  215. data/spec/app/models/dragon.rb +4 -0
  216. data/spec/app/models/drug.rb +1 -3
  217. data/spec/app/models/dungeon.rb +4 -0
  218. data/spec/app/models/edit.rb +5 -0
  219. data/spec/app/models/even.rb +7 -0
  220. data/spec/app/models/event.rb +1 -1
  221. data/spec/app/models/filesystem.rb +1 -0
  222. data/spec/app/models/fish.rb +0 -1
  223. data/spec/app/models/fruits.rb +6 -0
  224. data/spec/app/models/game.rb +0 -2
  225. data/spec/app/models/house.rb +1 -3
  226. data/spec/app/models/id_key.rb +6 -0
  227. data/spec/app/models/item.rb +1 -5
  228. data/spec/app/models/jar.rb +1 -1
  229. data/spec/app/models/label.rb +4 -4
  230. data/spec/app/models/line_item.rb +1 -1
  231. data/spec/app/models/login.rb +1 -1
  232. data/spec/app/models/message.rb +8 -0
  233. data/spec/app/models/movie.rb +1 -0
  234. data/spec/app/models/name.rb +3 -3
  235. data/spec/app/models/note.rb +3 -1
  236. data/spec/app/models/odd.rb +7 -0
  237. data/spec/app/models/oscar.rb +1 -1
  238. data/spec/app/models/parent_doc.rb +1 -1
  239. data/spec/app/models/person.rb +16 -10
  240. data/spec/app/models/phone.rb +1 -3
  241. data/spec/app/models/player.rb +3 -3
  242. data/spec/app/models/post.rb +5 -3
  243. data/spec/app/models/preference.rb +1 -1
  244. data/spec/app/models/quiz.rb +0 -3
  245. data/spec/app/models/record.rb +10 -5
  246. data/spec/app/models/registry.rb +1 -1
  247. data/spec/app/models/server.rb +1 -1
  248. data/spec/app/models/service.rb +3 -3
  249. data/spec/app/models/sound.rb +5 -0
  250. data/spec/app/models/symptom.rb +1 -1
  251. data/spec/app/models/template.rb +1 -1
  252. data/spec/app/models/title.rb +0 -1
  253. data/spec/app/models/track.rb +5 -5
  254. data/spec/app/models/tree.rb +3 -3
  255. data/spec/app/models/video.rb +1 -5
  256. data/spec/app/models/wiki_page.rb +2 -5
  257. data/spec/app/models/word.rb +3 -0
  258. data/spec/app/models/word_origin.rb +1 -1
  259. data/spec/config/mongoid.yml +7 -8
  260. data/spec/helpers.rb +18 -0
  261. data/spec/mongoid/#atomic_spec.rb# +365 -0
  262. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  263. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  264. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  265. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  266. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  267. data/spec/mongoid/atomic_spec.rb +19 -19
  268. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
  269. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  270. data/spec/mongoid/attributes_spec.rb +349 -434
  271. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  272. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  273. data/spec/mongoid/config/environment_spec.rb +3 -3
  274. data/spec/mongoid/config/options_spec.rb +6 -6
  275. data/spec/mongoid/config_spec.rb +24 -48
  276. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  277. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
  278. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  279. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  280. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  281. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  282. data/spec/mongoid/contextual/memory_spec.rb +156 -94
  283. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  284. data/spec/mongoid/contextual/none_spec.rb +127 -0
  285. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  286. data/spec/mongoid/copyable_spec.rb +56 -68
  287. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  288. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  289. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  290. data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
  291. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  292. data/spec/mongoid/criteria_spec.rb +715 -2421
  293. data/spec/mongoid/document_spec.rb +171 -121
  294. data/spec/mongoid/equality_spec.rb +22 -22
  295. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  296. data/spec/mongoid/errors/callback_spec.rb +3 -3
  297. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  298. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  299. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  300. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  302. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  305. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  306. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  307. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  308. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  309. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  310. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  311. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  312. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  313. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  314. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  315. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  316. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  317. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  318. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  319. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  320. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  321. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  322. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  323. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  324. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  325. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  326. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  327. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  328. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  329. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  330. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  331. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  332. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  333. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  334. data/spec/mongoid/errors/validations_spec.rb +7 -7
  335. data/spec/mongoid/extensions/array_spec.rb +61 -61
  336. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  337. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  338. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  339. data/spec/mongoid/extensions/date_spec.rb +13 -13
  340. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  341. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  342. data/spec/mongoid/extensions/float_spec.rb +29 -15
  343. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  344. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  345. data/spec/mongoid/extensions/module_spec.rb +2 -2
  346. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  347. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  348. data/spec/mongoid/extensions/object_spec.rb +26 -26
  349. data/spec/mongoid/extensions/range_spec.rb +61 -12
  350. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  351. data/spec/mongoid/extensions/set_spec.rb +4 -4
  352. data/spec/mongoid/extensions/string_spec.rb +35 -46
  353. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  354. data/spec/mongoid/extensions/time_spec.rb +49 -49
  355. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  356. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  357. data/spec/mongoid/extensions_spec.rb +29 -0
  358. data/spec/mongoid/factory_spec.rb +15 -15
  359. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  360. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  361. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  362. data/spec/mongoid/fields/localized_spec.rb +38 -23
  363. data/spec/mongoid/fields/standard_spec.rb +12 -12
  364. data/spec/mongoid/fields_spec.rb +263 -217
  365. data/spec/mongoid/findable_spec.rb +509 -0
  366. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  367. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  368. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  369. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  370. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  371. data/spec/mongoid/loggable_spec.rb +1 -1
  372. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  373. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  374. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  375. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  376. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  377. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  378. data/spec/mongoid/matchable/in_spec.rb +49 -0
  379. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  380. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  381. data/spec/mongoid/matchable/ne_spec.rb +46 -0
  382. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  383. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  384. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  385. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  386. data/spec/mongoid/persistable/creatable_spec.rb +553 -0
  387. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  388. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  389. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  390. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  391. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  392. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  393. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  394. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  395. data/spec/mongoid/persistable/savable_spec.rb +498 -0
  396. data/spec/mongoid/persistable/settable_spec.rb +162 -0
  397. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  398. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  399. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  400. data/spec/mongoid/persistable_spec.rb +206 -0
  401. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
  402. data/spec/mongoid/query_cache_spec.rb +263 -0
  403. data/spec/mongoid/railties/document_spec.rb +2 -2
  404. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  405. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  406. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  407. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  408. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  409. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  410. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  411. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  412. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  413. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  414. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  415. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  416. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  417. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  418. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  419. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  420. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  421. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  422. data/spec/mongoid/relations/builders_spec.rb +21 -21
  423. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  424. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  425. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  426. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  427. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  428. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  429. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  430. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  431. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  432. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  433. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  434. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  435. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  436. data/spec/mongoid/relations/eager_spec.rb +228 -0
  437. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  438. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  439. data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
  440. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  441. data/spec/mongoid/relations/macros_spec.rb +108 -102
  442. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  443. data/spec/mongoid/relations/options_spec.rb +1 -1
  444. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  445. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  446. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  447. data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
  448. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
  449. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  450. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  451. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  452. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  453. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  454. data/spec/mongoid/relations_spec.rb +16 -15
  455. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
  456. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  457. data/spec/mongoid/selectable_spec.rb +134 -0
  458. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  459. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  460. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  461. data/spec/mongoid/sessions/options_spec.rb +108 -0
  462. data/spec/mongoid/sessions_spec.rb +319 -178
  463. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  464. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  465. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  466. data/spec/mongoid/tasks/database_spec.rb +160 -0
  467. data/spec/mongoid/threaded_spec.rb +17 -70
  468. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  469. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  470. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  471. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  472. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  473. data/spec/mongoid/timestamps_spec.rb +9 -13
  474. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  475. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  476. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  477. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  478. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  479. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  480. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  481. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  482. data/spec/mongoid_spec.rb +8 -8
  483. data/spec/rails/mongoid_spec.rb +19 -335
  484. data/spec/spec_helper.rb +31 -13
  485. metadata +303 -283
  486. data/lib/mongoid/atomic/positionable.rb +0 -73
  487. data/lib/mongoid/components.rb +0 -92
  488. data/lib/mongoid/config/inflections.rb +0 -6
  489. data/lib/mongoid/contextual/eager.rb +0 -158
  490. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  491. data/lib/mongoid/identity_map.rb +0 -163
  492. data/lib/mongoid/json.rb +0 -16
  493. data/lib/mongoid/matchers.rb +0 -32
  494. data/lib/mongoid/matchers/strategies.rb +0 -97
  495. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  496. data/lib/mongoid/nested_attributes.rb +0 -78
  497. data/lib/mongoid/observer.rb +0 -192
  498. data/lib/mongoid/paranoia.rb +0 -136
  499. data/lib/mongoid/persistence.rb +0 -357
  500. data/lib/mongoid/persistence/atomic.rb +0 -231
  501. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  502. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  503. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  504. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  505. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  506. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  507. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  508. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  509. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  510. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  511. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  512. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  513. data/lib/mongoid/persistence/deletion.rb +0 -31
  514. data/lib/mongoid/persistence/insertion.rb +0 -38
  515. data/lib/mongoid/persistence/modification.rb +0 -35
  516. data/lib/mongoid/persistence/operations.rb +0 -214
  517. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  518. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  519. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  520. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  521. data/lib/mongoid/persistence/operations/update.rb +0 -59
  522. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  523. data/lib/mongoid/persistence/upsertion.rb +0 -31
  524. data/lib/mongoid/unit_of_work.rb +0 -61
  525. data/lib/mongoid/versioning.rb +0 -217
  526. data/lib/rack/mongoid.rb +0 -2
  527. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  528. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  529. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  530. data/spec/app/models/actor_observer.rb +0 -15
  531. data/spec/app/models/callback_recorder.rb +0 -25
  532. data/spec/app/models/paranoid_phone.rb +0 -25
  533. data/spec/app/models/paranoid_post.rb +0 -36
  534. data/spec/app/models/phone_observer.rb +0 -6
  535. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  536. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  537. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  538. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  539. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  540. data/spec/mongoid/finders_spec.rb +0 -321
  541. data/spec/mongoid/identity_map_spec.rb +0 -564
  542. data/spec/mongoid/json_spec.rb +0 -33
  543. data/spec/mongoid/matchers/in_spec.rb +0 -25
  544. data/spec/mongoid/matchers/ne_spec.rb +0 -25
  545. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  546. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  547. data/spec/mongoid/observer_spec.rb +0 -290
  548. data/spec/mongoid/paranoia_spec.rb +0 -759
  549. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  550. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  551. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  552. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  553. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  554. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  555. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  556. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  557. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  558. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  559. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  560. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  561. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  562. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  563. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  564. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  565. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  566. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  567. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  568. data/spec/mongoid/persistence_spec.rb +0 -2279
  569. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  570. data/spec/mongoid/versioning_spec.rb +0 -540
  571. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -18,20 +18,7 @@ describe Mongoid::Relations::Macros do
18
18
  describe ".embedded_in" do
19
19
 
20
20
  it "defines the macro" do
21
- klass.should respond_to(:embedded_in)
22
- end
23
-
24
- context "when the document is versioned" do
25
-
26
- it "raises an error" do
27
- expect {
28
- Class.new do
29
- include Mongoid::Document
30
- include Mongoid::Versioning
31
- embedded_in :parent_class
32
- end
33
- }.to raise_error(Mongoid::Errors::VersioningNotOnRoot)
34
- end
21
+ expect(klass).to respond_to(:embedded_in)
35
22
  end
36
23
 
37
24
  context "when defining the relation" do
@@ -41,25 +28,25 @@ describe Mongoid::Relations::Macros do
41
28
  end
42
29
 
43
30
  it "adds the metadata to the klass" do
44
- klass.relations["person"].should_not be_nil
31
+ expect(klass.relations["person"]).to_not be_nil
45
32
  end
46
33
 
47
34
  it "defines the getter" do
48
- klass.allocate.should respond_to(:person)
35
+ expect(klass.allocate).to respond_to(:person)
49
36
  end
50
37
 
51
38
  it "defines the setter" do
52
- klass.allocate.should respond_to(:person=)
39
+ expect(klass.allocate).to respond_to(:person=)
53
40
  end
54
41
 
55
42
  it "creates the correct relation" do
56
- klass.relations["person"].relation.should eq(
43
+ expect(klass.relations["person"].relation).to eq(
57
44
  Mongoid::Relations::Embedded::In
58
45
  )
59
46
  end
60
47
 
61
48
  it "does not add associated validations" do
62
- klass._validators.should be_empty
49
+ expect(klass._validators).to be_empty
63
50
  end
64
51
 
65
52
  context "metadata properties" do
@@ -69,11 +56,11 @@ describe Mongoid::Relations::Macros do
69
56
  end
70
57
 
71
58
  it "automatically adds the name" do
72
- metadata.name.should eq(:person)
59
+ expect(metadata.name).to eq(:person)
73
60
  end
74
61
 
75
62
  it "automatically adds the inverse class name" do
76
- metadata.inverse_class_name.should eq("TestClass")
63
+ expect(metadata.inverse_class_name).to eq("TestClass")
77
64
  end
78
65
  end
79
66
  end
@@ -82,7 +69,7 @@ describe Mongoid::Relations::Macros do
82
69
  describe ".embeds_many" do
83
70
 
84
71
  it "defines the macro" do
85
- klass.should respond_to(:embeds_many)
72
+ expect(klass).to respond_to(:embeds_many)
86
73
  end
87
74
 
88
75
  context "when defining the relation" do
@@ -92,26 +79,26 @@ describe Mongoid::Relations::Macros do
92
79
  end
93
80
 
94
81
  it "adds the metadata to the klass" do
95
- klass.relations["addresses"].should_not be_nil
82
+ expect(klass.relations["addresses"]).to_not be_nil
96
83
  end
97
84
 
98
85
  it "defines the getter" do
99
- klass.allocate.should respond_to(:addresses)
86
+ expect(klass.allocate).to respond_to(:addresses)
100
87
  end
101
88
 
102
89
  it "defines the setter" do
103
- klass.allocate.should respond_to(:addresses=)
90
+ expect(klass.allocate).to respond_to(:addresses=)
104
91
  end
105
92
 
106
93
  it "creates the correct relation" do
107
- klass.relations["addresses"].relation.should eq(
94
+ expect(klass.relations["addresses"].relation).to eq(
108
95
  Mongoid::Relations::Embedded::Many
109
96
  )
110
97
  end
111
98
 
112
99
  it "adds an associated validation" do
113
- klass._validators[:addresses].first.should be_a(
114
- Mongoid::Validations::AssociatedValidator
100
+ expect(klass._validators[:addresses].first).to be_a(
101
+ Mongoid::Validatable::AssociatedValidator
115
102
  )
116
103
  end
117
104
 
@@ -122,11 +109,11 @@ describe Mongoid::Relations::Macros do
122
109
  end
123
110
 
124
111
  it "automatically adds the name" do
125
- metadata.name.should eq(:addresses)
112
+ expect(metadata.name).to eq(:addresses)
126
113
  end
127
114
 
128
115
  it "automatically adds the inverse class name" do
129
- metadata.inverse_class_name.should eq("TestClass")
116
+ expect(metadata.inverse_class_name).to eq("TestClass")
130
117
  end
131
118
  end
132
119
  end
@@ -142,11 +129,11 @@ describe Mongoid::Relations::Macros do
142
129
  end
143
130
 
144
131
  it "adds metadata to klass" do
145
- metadata.order.should_not be_nil
132
+ expect(metadata.order).to_not be_nil
146
133
  end
147
134
 
148
135
  it "returns Origin::Key" do
149
- metadata.order.should be_kind_of(Origin::Key)
136
+ expect(metadata.order).to be_kind_of(Origin::Key)
150
137
  end
151
138
  end
152
139
 
@@ -157,7 +144,7 @@ describe Mongoid::Relations::Macros do
157
144
  end
158
145
 
159
146
  it "does not add associated validations" do
160
- klass._validators.should be_empty
147
+ expect(klass._validators).to be_empty
161
148
  end
162
149
  end
163
150
  end
@@ -165,7 +152,7 @@ describe Mongoid::Relations::Macros do
165
152
  describe ".embeds_one" do
166
153
 
167
154
  it "defines the macro" do
168
- klass.should respond_to(:embeds_one)
155
+ expect(klass).to respond_to(:embeds_one)
169
156
  end
170
157
 
171
158
  context "when defining the relation" do
@@ -175,34 +162,34 @@ describe Mongoid::Relations::Macros do
175
162
  end
176
163
 
177
164
  it "adds the metadata to the klass" do
178
- klass.relations["name"].should_not be_nil
165
+ expect(klass.relations["name"]).to_not be_nil
179
166
  end
180
167
 
181
168
  it "defines the getter" do
182
- klass.allocate.should respond_to(:name)
169
+ expect(klass.allocate).to respond_to(:name)
183
170
  end
184
171
 
185
172
  it "defines the setter" do
186
- klass.allocate.should respond_to(:name=)
173
+ expect(klass.allocate).to respond_to(:name=)
187
174
  end
188
175
 
189
176
  it "defines the builder" do
190
- klass.allocate.should respond_to(:build_name)
177
+ expect(klass.allocate).to respond_to(:build_name)
191
178
  end
192
179
 
193
180
  it "defines the creator" do
194
- klass.allocate.should respond_to(:create_name)
181
+ expect(klass.allocate).to respond_to(:create_name)
195
182
  end
196
183
 
197
184
  it "creates the correct relation" do
198
- klass.relations["name"].relation.should eq(
185
+ expect(klass.relations["name"].relation).to eq(
199
186
  Mongoid::Relations::Embedded::One
200
187
  )
201
188
  end
202
189
 
203
190
  it "adds an associated validation" do
204
- klass._validators[:name].first.should be_a(
205
- Mongoid::Validations::AssociatedValidator
191
+ expect(klass._validators[:name].first).to be_a(
192
+ Mongoid::Validatable::AssociatedValidator
206
193
  )
207
194
  end
208
195
 
@@ -213,11 +200,11 @@ describe Mongoid::Relations::Macros do
213
200
  end
214
201
 
215
202
  it "automatically adds the name" do
216
- metadata.name.should eq(:name)
203
+ expect(metadata.name).to eq(:name)
217
204
  end
218
205
 
219
206
  it "automatically adds the inverse class name" do
220
- metadata.inverse_class_name.should eq("TestClass")
207
+ expect(metadata.inverse_class_name).to eq("TestClass")
221
208
  end
222
209
  end
223
210
  end
@@ -229,7 +216,7 @@ describe Mongoid::Relations::Macros do
229
216
  end
230
217
 
231
218
  it "does not add associated validations" do
232
- klass._validators.should be_empty
219
+ expect(klass._validators).to be_empty
233
220
  end
234
221
  end
235
222
  end
@@ -237,7 +224,7 @@ describe Mongoid::Relations::Macros do
237
224
  describe ".belongs_to" do
238
225
 
239
226
  it "defines the macro" do
240
- klass.should respond_to(:belongs_to)
227
+ expect(klass).to respond_to(:belongs_to)
241
228
  end
242
229
 
243
230
  context "when the relation is polymorphic" do
@@ -248,12 +235,12 @@ describe Mongoid::Relations::Macros do
248
235
  klass.belongs_to(:relatable, polymorphic: true, index: true)
249
236
  end
250
237
 
251
- let(:indexes) do
252
- klass.index_options
238
+ let(:index) do
239
+ klass.index_specifications.first
253
240
  end
254
241
 
255
242
  it "adds the background index to the definitions" do
256
- expect(indexes).to eq({ relatable_id: 1, relatable_type: 1 } => { background: true })
243
+ expect(index.key).to eq(relatable_id: 1, relatable_type: 1)
257
244
  end
258
245
  end
259
246
  end
@@ -265,33 +252,33 @@ describe Mongoid::Relations::Macros do
265
252
  end
266
253
 
267
254
  it "adds the metadata to the klass" do
268
- klass.relations["person"].should_not be_nil
255
+ expect(klass.relations["person"]).to_not be_nil
269
256
  end
270
257
 
271
258
  it "defines the getter" do
272
- klass.allocate.should respond_to(:person)
259
+ expect(klass.allocate).to respond_to(:person)
273
260
  end
274
261
 
275
262
  it "defines the setter" do
276
- klass.allocate.should respond_to(:person=)
263
+ expect(klass.allocate).to respond_to(:person=)
277
264
  end
278
265
 
279
266
  it "defines the builder" do
280
- klass.allocate.should respond_to(:build_person)
267
+ expect(klass.allocate).to respond_to(:build_person)
281
268
  end
282
269
 
283
270
  it "defines the creator" do
284
- klass.allocate.should respond_to(:create_person)
271
+ expect(klass.allocate).to respond_to(:create_person)
285
272
  end
286
273
 
287
274
  it "creates the correct relation" do
288
- klass.relations["person"].relation.should eq(
275
+ expect(klass.relations["person"].relation).to eq(
289
276
  Mongoid::Relations::Referenced::In
290
277
  )
291
278
  end
292
279
 
293
280
  it "creates the field for the foreign key" do
294
- klass.allocate.should respond_to(:person_id)
281
+ expect(klass.allocate).to respond_to(:person_id)
295
282
  end
296
283
 
297
284
  context "metadata properties" do
@@ -301,11 +288,11 @@ describe Mongoid::Relations::Macros do
301
288
  end
302
289
 
303
290
  it "automatically adds the name" do
304
- metadata.name.should eq(:person)
291
+ expect(metadata.name).to eq(:person)
305
292
  end
306
293
 
307
294
  it "automatically adds the inverse class name" do
308
- metadata.inverse_class_name.should eq("TestClass")
295
+ expect(metadata.inverse_class_name).to eq("TestClass")
309
296
  end
310
297
  end
311
298
  end
@@ -314,7 +301,7 @@ describe Mongoid::Relations::Macros do
314
301
  describe ".has_many" do
315
302
 
316
303
  it "defines the macro" do
317
- klass.should respond_to(:has_many)
304
+ expect(klass).to respond_to(:has_many)
318
305
  end
319
306
 
320
307
  context "when defining the relation" do
@@ -324,26 +311,26 @@ describe Mongoid::Relations::Macros do
324
311
  end
325
312
 
326
313
  it "adds the metadata to the klass" do
327
- klass.relations["posts"].should_not be_nil
314
+ expect(klass.relations["posts"]).to_not be_nil
328
315
  end
329
316
 
330
317
  it "defines the getter" do
331
- klass.allocate.should respond_to(:posts)
318
+ expect(klass.allocate).to respond_to(:posts)
332
319
  end
333
320
 
334
321
  it "defines the setter" do
335
- klass.allocate.should respond_to(:posts=)
322
+ expect(klass.allocate).to respond_to(:posts=)
336
323
  end
337
324
 
338
325
  it "creates the correct relation" do
339
- klass.relations["posts"].relation.should eq(
326
+ expect(klass.relations["posts"].relation).to eq(
340
327
  Mongoid::Relations::Referenced::Many
341
328
  )
342
329
  end
343
330
 
344
331
  it "adds an associated validation" do
345
- klass._validators[:posts].first.should be_a(
346
- Mongoid::Validations::AssociatedValidator
332
+ expect(klass._validators[:posts].first).to be_a(
333
+ Mongoid::Validatable::AssociatedValidator
347
334
  )
348
335
  end
349
336
 
@@ -354,11 +341,11 @@ describe Mongoid::Relations::Macros do
354
341
  end
355
342
 
356
343
  it "automatically adds the name" do
357
- metadata.name.should eq(:posts)
344
+ expect(metadata.name).to eq(:posts)
358
345
  end
359
346
 
360
347
  it "automatically adds the inverse class name" do
361
- metadata.inverse_class_name.should eq("TestClass")
348
+ expect(metadata.inverse_class_name).to eq("TestClass")
362
349
  end
363
350
  end
364
351
  end
@@ -374,11 +361,11 @@ describe Mongoid::Relations::Macros do
374
361
  end
375
362
 
376
363
  it "adds metadata to klass" do
377
- metadata.order.should_not be_nil
364
+ expect(metadata.order).to_not be_nil
378
365
  end
379
366
 
380
367
  it "returns Origin::Key" do
381
- metadata.order.should be_kind_of(Origin::Key)
368
+ expect(metadata.order).to be_kind_of(Origin::Key)
382
369
  end
383
370
  end
384
371
 
@@ -389,7 +376,7 @@ describe Mongoid::Relations::Macros do
389
376
  end
390
377
 
391
378
  it "does not add associated validations" do
392
- klass._validators.should be_empty
379
+ expect(klass._validators).to be_empty
393
380
  end
394
381
  end
395
382
  end
@@ -397,7 +384,7 @@ describe Mongoid::Relations::Macros do
397
384
  describe ".has_and_belongs_to_many" do
398
385
 
399
386
  it "defines the macro" do
400
- klass.should respond_to(:has_and_belongs_to_many)
387
+ expect(klass).to respond_to(:has_and_belongs_to_many)
401
388
  end
402
389
 
403
390
  context "when defining the relation" do
@@ -407,25 +394,25 @@ describe Mongoid::Relations::Macros do
407
394
  end
408
395
 
409
396
  it "adds the metadata to the klass" do
410
- klass.relations["preferences"].should_not be_nil
397
+ expect(klass.relations["preferences"]).to_not be_nil
411
398
  end
412
399
 
413
400
  it "defines the getter" do
414
- klass.allocate.should respond_to(:preferences)
401
+ expect(klass.allocate).to respond_to(:preferences)
415
402
  end
416
403
 
417
404
  it "defines the setter" do
418
- klass.allocate.should respond_to(:preferences=)
405
+ expect(klass.allocate).to respond_to(:preferences=)
419
406
  end
420
407
 
421
408
  it "creates the correct relation" do
422
- klass.relations["preferences"].relation.should eq(
409
+ expect(klass.relations["preferences"].relation).to eq(
423
410
  Mongoid::Relations::Referenced::ManyToMany
424
411
  )
425
412
  end
426
413
 
427
414
  it "creates the field for the foreign key" do
428
- klass.allocate.should respond_to(:preference_ids)
415
+ expect(klass.allocate).to respond_to(:preference_ids)
429
416
  end
430
417
 
431
418
  context 'when defining order on relation' do
@@ -439,11 +426,11 @@ describe Mongoid::Relations::Macros do
439
426
  end
440
427
 
441
428
  it "adds metadata to klass" do
442
- metadata.order.should_not be_nil
429
+ expect(metadata.order).to_not be_nil
443
430
  end
444
431
 
445
432
  it "returns Origin::Key" do
446
- metadata.order.should be_kind_of(Origin::Key)
433
+ expect(metadata.order).to be_kind_of(Origin::Key)
447
434
  end
448
435
  end
449
436
 
@@ -454,11 +441,11 @@ describe Mongoid::Relations::Macros do
454
441
  end
455
442
 
456
443
  it "automatically adds the name" do
457
- metadata.name.should eq(:preferences)
444
+ expect(metadata.name).to eq(:preferences)
458
445
  end
459
446
 
460
447
  it "automatically adds the inverse class name" do
461
- metadata.inverse_class_name.should eq("TestClass")
448
+ expect(metadata.inverse_class_name).to eq("TestClass")
462
449
  end
463
450
  end
464
451
  end
@@ -467,7 +454,7 @@ describe Mongoid::Relations::Macros do
467
454
  describe ".has_one" do
468
455
 
469
456
  it "defines the macro" do
470
- klass.should respond_to(:has_one)
457
+ expect(klass).to respond_to(:has_one)
471
458
  end
472
459
 
473
460
  context "when defining the relation" do
@@ -477,34 +464,34 @@ describe Mongoid::Relations::Macros do
477
464
  end
478
465
 
479
466
  it "adds the metadata to the klass" do
480
- klass.relations["game"].should_not be_nil
467
+ expect(klass.relations["game"]).to_not be_nil
481
468
  end
482
469
 
483
470
  it "defines the getter" do
484
- klass.allocate.should respond_to(:game)
471
+ expect(klass.allocate).to respond_to(:game)
485
472
  end
486
473
 
487
474
  it "defines the setter" do
488
- klass.allocate.should respond_to(:game=)
475
+ expect(klass.allocate).to respond_to(:game=)
489
476
  end
490
477
 
491
478
  it "defines the builder" do
492
- klass.allocate.should respond_to(:build_game)
479
+ expect(klass.allocate).to respond_to(:build_game)
493
480
  end
494
481
 
495
482
  it "defines the creator" do
496
- klass.allocate.should respond_to(:create_game)
483
+ expect(klass.allocate).to respond_to(:create_game)
497
484
  end
498
485
 
499
486
  it "creates the correct relation" do
500
- klass.relations["game"].relation.should eq(
487
+ expect(klass.relations["game"].relation).to eq(
501
488
  Mongoid::Relations::Referenced::One
502
489
  )
503
490
  end
504
491
 
505
492
  it "adds an associated validation" do
506
- klass._validators[:game].first.should be_a(
507
- Mongoid::Validations::AssociatedValidator
493
+ expect(klass._validators[:game].first).to be_a(
494
+ Mongoid::Validatable::AssociatedValidator
508
495
  )
509
496
  end
510
497
 
@@ -515,11 +502,11 @@ describe Mongoid::Relations::Macros do
515
502
  end
516
503
 
517
504
  it "automatically adds the name" do
518
- metadata.name.should eq(:game)
505
+ expect(metadata.name).to eq(:game)
519
506
  end
520
507
 
521
508
  it "automatically adds the inverse class name" do
522
- metadata.inverse_class_name.should eq("TestClass")
509
+ expect(metadata.inverse_class_name).to eq("TestClass")
523
510
  end
524
511
  end
525
512
  end
@@ -531,7 +518,7 @@ describe Mongoid::Relations::Macros do
531
518
  end
532
519
 
533
520
  it "does not add associated validations" do
534
- klass._validators.should be_empty
521
+ expect(klass._validators).to be_empty
535
522
  end
536
523
  end
537
524
  end
@@ -543,16 +530,17 @@ describe Mongoid::Relations::Macros do
543
530
  end
544
531
 
545
532
  it "returns a hash of relations" do
546
- klass.allocate.relations.should be_a_kind_of(Hash)
533
+ expect(klass.allocate.relations).to be_a_kind_of(Hash)
547
534
  end
548
535
 
549
536
  it "has keys that are the relation name" do
550
- klass.allocate.relations.keys.first.should eq("name")
537
+ expect(klass.allocate.relations.keys.first).to eq("name")
551
538
  end
552
539
 
553
540
  it "has values that are metadata" do
554
- klass.allocate.relations.values.first.should
555
- be_a_kind_of(Mongoid::Relations::Metadata)
541
+ expect(
542
+ klass.allocate.relations.values.first
543
+ ).to be_a_kind_of(Mongoid::Relations::Metadata)
556
544
  end
557
545
  end
558
546
 
@@ -563,16 +551,17 @@ describe Mongoid::Relations::Macros do
563
551
  end
564
552
 
565
553
  it "returns a hash of relations" do
566
- klass.relations.should be_a_kind_of(Hash)
554
+ expect(klass.relations).to be_a_kind_of(Hash)
567
555
  end
568
556
 
569
557
  it "has keys that are the relation name" do
570
- klass.relations.keys.first.should eq("name")
558
+ expect(klass.relations.keys.first).to eq("name")
571
559
  end
572
560
 
573
561
  it "has values that are metadata" do
574
- klass.relations.values.first.should
575
- be_a_kind_of(Mongoid::Relations::Metadata)
562
+ expect(
563
+ klass.relations.values.first
564
+ ).to be_a_kind_of(Mongoid::Relations::Metadata)
576
565
  end
577
566
  end
578
567
 
@@ -590,6 +579,12 @@ describe Mongoid::Relations::Macros do
590
579
  "spec"
591
580
  end
592
581
  end
582
+
583
+ module AnotherExtension
584
+ def very_short_name
585
+ "spec"
586
+ end
587
+ end
593
588
  end
594
589
 
595
590
  let(:peep) do
@@ -607,7 +602,7 @@ describe Mongoid::Relations::Macros do
607
602
  end
608
603
 
609
604
  it "extends the relation" do
610
- peep.handle.full_name.should eq("spec")
605
+ expect(peep.handle.full_name).to eq("spec")
611
606
  end
612
607
  end
613
608
 
@@ -618,7 +613,18 @@ describe Mongoid::Relations::Macros do
618
613
  end
619
614
 
620
615
  it "extends the relation" do
621
- peep.handle.short_name.should eq("spec")
616
+ expect(peep.handle.short_name).to eq("spec")
617
+ end
618
+ end
619
+
620
+ context "when the extension is two modules" do
621
+
622
+ before do
623
+ Peep.embeds_one(:handle, extend: [ Handle::Extension, Handle::AnotherExtension ])
624
+ end
625
+
626
+ it "extends the relation" do
627
+ expect(peep.handle.very_short_name).to eq("spec")
622
628
  end
623
629
  end
624
630
  end