mongoid 3.1.7 → 4.0.0.alpha1

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 (521) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +317 -11
  3. data/README.md +4 -5
  4. data/lib/config/locales/en.yml +9 -12
  5. data/lib/mongoid.rb +6 -75
  6. data/lib/mongoid/atomic.rb +0 -11
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/root.rb +0 -13
  9. data/lib/mongoid/attributes.rb +30 -108
  10. data/lib/mongoid/attributes/dynamic.rb +154 -0
  11. data/lib/mongoid/attributes/nested.rb +82 -0
  12. data/lib/mongoid/attributes/processing.rb +13 -66
  13. data/lib/mongoid/{dirty.rb → changeable.rb} +5 -2
  14. data/lib/mongoid/composable.rb +104 -0
  15. data/lib/mongoid/config.rb +3 -9
  16. data/lib/mongoid/config/options.rb +1 -1
  17. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
  18. data/lib/mongoid/contextual/atomic.rb +53 -53
  19. data/lib/mongoid/contextual/command.rb +26 -0
  20. data/lib/mongoid/contextual/map_reduce.rb +1 -1
  21. data/lib/mongoid/contextual/memory.rb +6 -5
  22. data/lib/mongoid/contextual/mongo.rb +59 -28
  23. data/lib/mongoid/contextual/text_search.rb +180 -0
  24. data/lib/mongoid/copyable.rb +2 -3
  25. data/lib/mongoid/criteria.rb +13 -33
  26. data/lib/mongoid/criteria/{#findable.rb# → findable.rb} +0 -2
  27. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  28. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  29. data/lib/mongoid/{criterion → criteria}/modifiable.rb +1 -1
  30. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  31. data/lib/mongoid/document.rb +28 -12
  32. data/lib/mongoid/errors.rb +1 -1
  33. data/lib/mongoid/errors/document_not_found.rb +2 -1
  34. data/lib/mongoid/errors/invalid_value.rb +16 -0
  35. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  36. data/lib/mongoid/extensions.rb +2 -7
  37. data/lib/mongoid/extensions/array.rb +2 -2
  38. data/lib/mongoid/extensions/boolean.rb +14 -17
  39. data/lib/mongoid/extensions/float.rb +1 -0
  40. data/lib/mongoid/extensions/hash.rb +1 -1
  41. data/lib/mongoid/extensions/object.rb +4 -4
  42. data/lib/mongoid/extensions/object_id.rb +5 -5
  43. data/lib/mongoid/extensions/range.rb +8 -2
  44. data/lib/mongoid/extensions/string.rb +5 -17
  45. data/lib/mongoid/extensions/time.rb +2 -2
  46. data/lib/mongoid/factory.rb +3 -3
  47. data/lib/mongoid/fields.rb +9 -8
  48. data/lib/mongoid/fields/foreign_key.rb +3 -3
  49. data/lib/mongoid/fields/standard.rb +4 -16
  50. data/lib/mongoid/fields/validators/macro.rb +11 -3
  51. data/lib/mongoid/{finders.rb → findable.rb} +6 -2
  52. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  53. data/lib/mongoid/indexable/specification.rb +104 -0
  54. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  55. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  56. data/lib/mongoid/{callbacks.rb → interceptable.rb} +3 -52
  57. data/lib/mongoid/log_subscriber.rb +22 -0
  58. data/lib/mongoid/matchable.rb +152 -0
  59. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  60. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  61. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  62. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  63. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  64. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  65. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  66. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  67. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  68. data/lib/mongoid/{matchers → matchable}/ne.rb +1 -1
  69. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  70. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  71. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  72. data/lib/mongoid/persistable.rb +212 -0
  73. data/lib/mongoid/persistable/creatable.rb +188 -0
  74. data/lib/mongoid/persistable/deletable.rb +148 -0
  75. data/lib/mongoid/persistable/destroyable.rb +55 -0
  76. data/lib/mongoid/persistable/incrementable.rb +36 -0
  77. data/lib/mongoid/persistable/logical.rb +38 -0
  78. data/lib/mongoid/persistable/poppable.rb +39 -0
  79. data/lib/mongoid/persistable/pullable.rb +55 -0
  80. data/lib/mongoid/persistable/pushable.rb +62 -0
  81. data/lib/mongoid/persistable/renamable.rb +35 -0
  82. data/lib/mongoid/persistable/savable.rb +52 -0
  83. data/lib/mongoid/persistable/settable.rb +33 -0
  84. data/lib/mongoid/persistable/unsettable.rb +36 -0
  85. data/lib/mongoid/persistable/updatable.rb +151 -0
  86. data/lib/mongoid/persistable/upsertable.rb +55 -0
  87. data/lib/mongoid/positional.rb +71 -0
  88. data/lib/mongoid/railtie.rb +32 -45
  89. data/lib/mongoid/railties/database.rake +12 -6
  90. data/lib/mongoid/relations.rb +3 -3
  91. data/lib/mongoid/relations/accessors.rb +13 -46
  92. data/lib/mongoid/relations/auto_save.rb +15 -36
  93. data/lib/mongoid/relations/binding.rb +0 -23
  94. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  95. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  96. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +3 -1
  97. data/lib/mongoid/relations/builder.rb +1 -1
  98. data/lib/mongoid/relations/builders.rb +2 -2
  99. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  100. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
  101. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  102. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  103. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  104. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  105. data/lib/mongoid/relations/cascading.rb +3 -5
  106. data/lib/mongoid/relations/constraint.rb +1 -1
  107. data/lib/mongoid/relations/conversions.rb +1 -1
  108. data/lib/mongoid/relations/counter_cache.rb +39 -15
  109. data/lib/mongoid/relations/eager.rb +47 -0
  110. data/lib/mongoid/relations/eager/base.rb +57 -0
  111. data/lib/mongoid/relations/eager/belongs_to.rb +30 -0
  112. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +40 -0
  113. data/lib/mongoid/relations/eager/has_many.rb +37 -0
  114. data/lib/mongoid/relations/eager/has_one.rb +29 -0
  115. data/lib/mongoid/relations/embedded/batchable.rb +3 -4
  116. data/lib/mongoid/relations/embedded/many.rb +7 -27
  117. data/lib/mongoid/relations/macros.rb +2 -4
  118. data/lib/mongoid/relations/many.rb +30 -31
  119. data/lib/mongoid/relations/metadata.rb +6 -75
  120. data/lib/mongoid/relations/nested_builder.rb +2 -2
  121. data/lib/mongoid/relations/options.rb +1 -0
  122. data/lib/mongoid/relations/polymorphic.rb +0 -1
  123. data/lib/mongoid/relations/proxy.rb +10 -32
  124. data/lib/mongoid/relations/referenced/in.rb +2 -18
  125. data/lib/mongoid/relations/referenced/many.rb +9 -22
  126. data/lib/mongoid/relations/referenced/many_to_many.rb +10 -33
  127. data/lib/mongoid/relations/referenced/one.rb +2 -21
  128. data/lib/mongoid/relations/synchronization.rb +3 -3
  129. data/lib/mongoid/relations/touchable.rb +33 -0
  130. data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
  131. data/lib/mongoid/{scoping.rb → scopable.rb} +26 -3
  132. data/lib/mongoid/selectable.rb +59 -0
  133. data/lib/mongoid/{serialization.rb → serializable.rb} +10 -1
  134. data/lib/mongoid/sessions.rb +37 -345
  135. data/lib/mongoid/sessions/factory.rb +2 -0
  136. data/lib/mongoid/sessions/options.rb +176 -0
  137. data/lib/mongoid/sessions/storage_options.rb +140 -0
  138. data/lib/mongoid/sessions/thread_options.rb +19 -0
  139. data/lib/mongoid/sessions/validators/storage.rb +15 -1
  140. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  141. data/lib/mongoid/support/query_counter.rb +23 -0
  142. data/lib/mongoid/threaded.rb +0 -110
  143. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  144. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  145. data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
  146. data/lib/mongoid/{validations.rb → validatable.rb} +23 -9
  147. data/lib/mongoid/{validations → validatable}/associated.rb +3 -1
  148. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  149. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  150. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  151. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  152. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  153. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  154. data/lib/mongoid/{validations → validatable}/uniqueness.rb +3 -3
  155. data/lib/mongoid/version.rb +1 -1
  156. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +9 -13
  157. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  158. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  159. data/lib/rails/generators/mongoid_generator.rb +3 -40
  160. data/lib/rails/mongoid.rb +59 -57
  161. data/lib/support/ruby_version.rb +1 -1
  162. data/spec/app/models/account.rb +2 -6
  163. data/spec/app/models/acolyte.rb +1 -0
  164. data/spec/app/models/actor.rb +0 -1
  165. data/spec/app/models/address.rb +6 -1
  166. data/spec/app/models/animal.rb +1 -1
  167. data/spec/app/models/appointment.rb +2 -2
  168. data/spec/app/models/article.rb +1 -4
  169. data/spec/app/models/audio.rb +5 -0
  170. data/spec/app/models/author.rb +0 -2
  171. data/spec/app/models/band.rb +3 -2
  172. data/spec/app/models/bar.rb +1 -0
  173. data/spec/app/models/book.rb +1 -0
  174. data/spec/app/models/building.rb +0 -2
  175. data/spec/app/models/building_address.rb +0 -2
  176. data/spec/app/models/bus.rb +1 -1
  177. data/spec/app/models/canvas.rb +1 -1
  178. data/spec/app/models/contractor.rb +0 -2
  179. data/spec/app/models/country_code.rb +1 -1
  180. data/spec/app/models/definition.rb +2 -2
  181. data/spec/app/models/dragon.rb +4 -0
  182. data/spec/app/models/drug.rb +1 -3
  183. data/spec/app/models/dungeon.rb +4 -0
  184. data/spec/app/models/filesystem.rb +1 -0
  185. data/spec/app/models/fish.rb +0 -1
  186. data/spec/app/models/fruits.rb +6 -0
  187. data/spec/app/models/game.rb +0 -2
  188. data/spec/app/models/house.rb +0 -2
  189. data/spec/app/models/item.rb +1 -5
  190. data/spec/app/models/jar.rb +1 -1
  191. data/spec/app/models/label.rb +4 -4
  192. data/spec/app/models/login.rb +1 -1
  193. data/spec/app/models/movie.rb +1 -0
  194. data/spec/app/models/name.rb +3 -3
  195. data/spec/app/models/note.rb +1 -1
  196. data/spec/app/models/oscar.rb +1 -1
  197. data/spec/app/models/parent_doc.rb +1 -1
  198. data/spec/app/models/person.rb +13 -8
  199. data/spec/app/models/phone.rb +1 -3
  200. data/spec/app/models/player.rb +1 -1
  201. data/spec/app/models/post.rb +2 -1
  202. data/spec/app/models/quiz.rb +0 -3
  203. data/spec/app/models/record.rb +5 -5
  204. data/spec/app/models/registry.rb +1 -1
  205. data/spec/app/models/server.rb +1 -1
  206. data/spec/app/models/service.rb +3 -3
  207. data/spec/app/models/sound.rb +5 -0
  208. data/spec/app/models/template.rb +1 -1
  209. data/spec/app/models/title.rb +0 -1
  210. data/spec/app/models/track.rb +5 -5
  211. data/spec/app/models/tree.rb +1 -1
  212. data/spec/app/models/video.rb +0 -4
  213. data/spec/app/models/wiki_page.rb +1 -4
  214. data/spec/app/models/word.rb +3 -0
  215. data/spec/app/models/word_origin.rb +1 -1
  216. data/spec/config/mongoid.yml +7 -8
  217. data/spec/helpers.rb +18 -0
  218. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  219. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  220. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  221. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  222. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  223. data/spec/mongoid/atomic_spec.rb +19 -19
  224. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +335 -448
  225. data/spec/mongoid/attributes/readonly_spec.rb +16 -16
  226. data/spec/mongoid/attributes_spec.rb +188 -434
  227. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +117 -148
  228. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  229. data/spec/mongoid/config/environment_spec.rb +3 -3
  230. data/spec/mongoid/config/options_spec.rb +6 -6
  231. data/spec/mongoid/config_spec.rb +24 -48
  232. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  233. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +46 -38
  234. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  235. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  236. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  237. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  238. data/spec/mongoid/contextual/memory_spec.rb +94 -94
  239. data/spec/mongoid/contextual/mongo_spec.rb +225 -139
  240. data/spec/mongoid/contextual/text_search_spec.rb +207 -0
  241. data/spec/mongoid/copyable_spec.rb +56 -68
  242. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  243. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  244. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  245. data/spec/mongoid/criteria/modifiable_spec.rb +1063 -0
  246. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +31 -31
  247. data/spec/mongoid/criteria_spec.rb +530 -2207
  248. data/spec/mongoid/document_spec.rb +166 -120
  249. data/spec/mongoid/equality_spec.rb +22 -22
  250. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  251. data/spec/mongoid/errors/callback_spec.rb +3 -3
  252. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  253. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  254. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  255. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  256. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  257. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  258. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  259. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  260. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  261. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  262. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  263. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  264. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -3
  265. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  266. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  267. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  268. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  269. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  270. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  271. data/spec/mongoid/errors/mongoid_error_spec.rb +7 -7
  272. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  273. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  274. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  275. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  276. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  277. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  278. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  279. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  280. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  281. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  282. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  283. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  284. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  285. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  286. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  287. data/spec/mongoid/errors/validations_spec.rb +7 -7
  288. data/spec/mongoid/extensions/array_spec.rb +61 -61
  289. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  290. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  291. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  292. data/spec/mongoid/extensions/date_spec.rb +13 -13
  293. data/spec/mongoid/extensions/date_time_spec.rb +9 -9
  294. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  295. data/spec/mongoid/extensions/float_spec.rb +29 -15
  296. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  297. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  298. data/spec/mongoid/extensions/module_spec.rb +2 -2
  299. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  300. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  301. data/spec/mongoid/extensions/object_spec.rb +26 -26
  302. data/spec/mongoid/extensions/range_spec.rb +61 -12
  303. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  304. data/spec/mongoid/extensions/set_spec.rb +4 -4
  305. data/spec/mongoid/extensions/string_spec.rb +35 -46
  306. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  307. data/spec/mongoid/extensions/time_spec.rb +49 -49
  308. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  309. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  310. data/spec/mongoid/extensions_spec.rb +15 -0
  311. data/spec/mongoid/factory_spec.rb +15 -15
  312. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  313. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  314. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  315. data/spec/mongoid/fields/localized_spec.rb +23 -23
  316. data/spec/mongoid/fields/standard_spec.rb +12 -12
  317. data/spec/mongoid/fields_spec.rb +168 -209
  318. data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +62 -27
  319. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  320. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  321. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  322. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +105 -105
  323. data/spec/mongoid/log_subscriber_spec.rb +74 -0
  324. data/spec/mongoid/loggable_spec.rb +1 -1
  325. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  326. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  327. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  328. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  329. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  330. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  331. data/spec/mongoid/matchable/in_spec.rb +49 -0
  332. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  333. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  334. data/spec/mongoid/{matchers → matchable}/ne_spec.rb +3 -3
  335. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  336. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  337. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  338. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  339. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  340. data/spec/mongoid/persistable/deletable_spec.rb +205 -0
  341. data/spec/mongoid/persistable/destroyable_spec.rb +148 -0
  342. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  343. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  344. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  345. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  346. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  347. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  348. data/spec/mongoid/persistable/savable_spec.rb +432 -0
  349. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  350. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  351. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  352. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  353. data/spec/mongoid/persistable_spec.rb +206 -0
  354. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +19 -14
  355. data/spec/mongoid/railties/document_spec.rb +2 -2
  356. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  357. data/spec/mongoid/relations/auto_save_spec.rb +36 -16
  358. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +6 -6
  359. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +2 -2
  360. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +3 -3
  361. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +12 -12
  362. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +6 -6
  363. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +9 -9
  364. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +6 -6
  365. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  366. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  367. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  368. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  369. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  370. data/spec/mongoid/relations/builders/referenced/in_spec.rb +22 -33
  371. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  372. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  373. data/spec/mongoid/relations/builders/referenced/one_spec.rb +11 -24
  374. data/spec/mongoid/relations/builders_spec.rb +21 -21
  375. data/spec/mongoid/relations/cascading/delete_spec.rb +7 -7
  376. data/spec/mongoid/relations/cascading/destroy_spec.rb +2 -2
  377. data/spec/mongoid/relations/cascading/nullify_spec.rb +2 -2
  378. data/spec/mongoid/relations/cascading/restrict_spec.rb +3 -3
  379. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  380. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  381. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  382. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  383. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  384. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  385. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +143 -0
  386. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  387. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  388. data/spec/mongoid/relations/eager_spec.rb +228 -0
  389. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  390. data/spec/mongoid/relations/embedded/in_spec.rb +55 -56
  391. data/spec/mongoid/relations/embedded/many_spec.rb +357 -367
  392. data/spec/mongoid/relations/embedded/one_spec.rb +98 -139
  393. data/spec/mongoid/relations/macros_spec.rb +108 -102
  394. data/spec/mongoid/relations/metadata_spec.rb +147 -241
  395. data/spec/mongoid/relations/options_spec.rb +1 -1
  396. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  397. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  398. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  399. data/spec/mongoid/relations/referenced/many_spec.rb +379 -522
  400. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +345 -417
  401. data/spec/mongoid/relations/referenced/one_spec.rb +148 -263
  402. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  403. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  404. data/spec/mongoid/relations/targets/enumerable_spec.rb +116 -116
  405. data/spec/mongoid/relations/touchable_spec.rb +296 -0
  406. data/spec/mongoid/relations_spec.rb +16 -15
  407. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +20 -60
  408. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +74 -126
  409. data/spec/mongoid/selectable_spec.rb +134 -0
  410. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +111 -82
  411. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  412. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  413. data/spec/mongoid/sessions/options_spec.rb +92 -0
  414. data/spec/mongoid/sessions_spec.rb +288 -177
  415. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  416. data/spec/mongoid/state_spec.rb +10 -10
  417. data/spec/mongoid/threaded_spec.rb +17 -70
  418. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  419. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  420. data/spec/mongoid/timestamps/updated/short_spec.rb +10 -10
  421. data/spec/mongoid/timestamps/updated_spec.rb +8 -12
  422. data/spec/mongoid/timestamps_spec.rb +7 -11
  423. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  424. data/spec/mongoid/{validations → validatable}/associated_spec.rb +18 -18
  425. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  426. data/spec/mongoid/{validations → validatable}/length_spec.rb +7 -7
  427. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  428. data/spec/mongoid/{validations → validatable}/presence_spec.rb +31 -38
  429. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +126 -183
  430. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  431. data/spec/mongoid_spec.rb +8 -8
  432. data/spec/rails/mongoid_spec.rb +72 -87
  433. data/spec/spec_helper.rb +19 -17
  434. metadata +261 -283
  435. data/lib/mongoid/atomic/positionable.rb +0 -73
  436. data/lib/mongoid/components.rb +0 -92
  437. data/lib/mongoid/config/inflections.rb +0 -6
  438. data/lib/mongoid/contextual/eager.rb +0 -158
  439. data/lib/mongoid/criterion/findable.rb +0 -179
  440. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  441. data/lib/mongoid/identity_map.rb +0 -163
  442. data/lib/mongoid/json.rb +0 -16
  443. data/lib/mongoid/matchers.rb +0 -32
  444. data/lib/mongoid/matchers/strategies.rb +0 -97
  445. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  446. data/lib/mongoid/nested_attributes.rb +0 -78
  447. data/lib/mongoid/observer.rb +0 -192
  448. data/lib/mongoid/paranoia.rb +0 -136
  449. data/lib/mongoid/persistence.rb +0 -357
  450. data/lib/mongoid/persistence/atomic.rb +0 -231
  451. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  452. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  453. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  454. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  455. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  456. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  457. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  458. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  459. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  460. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  461. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  462. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  463. data/lib/mongoid/persistence/deletion.rb +0 -31
  464. data/lib/mongoid/persistence/insertion.rb +0 -38
  465. data/lib/mongoid/persistence/modification.rb +0 -35
  466. data/lib/mongoid/persistence/operations.rb +0 -214
  467. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  468. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  469. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  470. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  471. data/lib/mongoid/persistence/operations/update.rb +0 -59
  472. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  473. data/lib/mongoid/persistence/upsertion.rb +0 -31
  474. data/lib/mongoid/unit_of_work.rb +0 -61
  475. data/lib/mongoid/versioning.rb +0 -217
  476. data/lib/rack/mongoid.rb +0 -2
  477. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  478. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  479. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  480. data/spec/app/models/actor_observer.rb +0 -15
  481. data/spec/app/models/callback_recorder.rb +0 -25
  482. data/spec/app/models/draft.rb +0 -9
  483. data/spec/app/models/paranoid_phone.rb +0 -25
  484. data/spec/app/models/paranoid_post.rb +0 -36
  485. data/spec/app/models/phone_observer.rb +0 -6
  486. data/spec/mongoid/#atomic_spec.rb# +0 -365
  487. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  488. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  489. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  490. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  491. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  492. data/spec/mongoid/identity_map_spec.rb +0 -564
  493. data/spec/mongoid/json_spec.rb +0 -33
  494. data/spec/mongoid/matchers/in_spec.rb +0 -25
  495. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  496. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  497. data/spec/mongoid/observer_spec.rb +0 -290
  498. data/spec/mongoid/paranoia_spec.rb +0 -759
  499. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  500. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  501. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  502. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  503. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  504. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  505. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  506. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  507. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  508. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  509. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  510. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  511. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  512. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  513. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  514. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  515. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  516. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  517. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  518. data/spec/mongoid/persistence_spec.rb +0 -2279
  519. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  520. data/spec/mongoid/versioning_spec.rb +0 -540
  521. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Validations do
3
+ describe Mongoid::Validatable do
4
4
 
5
5
  let(:account) do
6
6
  Account.new(name: "Testing a really long name.")
@@ -23,7 +23,7 @@ describe Mongoid::Validations do
23
23
  end
24
24
 
25
25
  it "returns the value" do
26
- value.should eq("Mr")
26
+ expect(value).to eq("Mr")
27
27
  end
28
28
  end
29
29
 
@@ -42,7 +42,7 @@ describe Mongoid::Validations do
42
42
  end
43
43
 
44
44
  it "returns the value" do
45
- value.should eq([ address ])
45
+ expect(value).to eq([ address ])
46
46
  end
47
47
  end
48
48
 
@@ -57,7 +57,7 @@ describe Mongoid::Validations do
57
57
  end
58
58
 
59
59
  it "does not error on the read" do
60
- value.should be_empty
60
+ expect(value).to be_empty
61
61
  end
62
62
  end
63
63
  end
@@ -67,7 +67,7 @@ describe Mongoid::Validations do
67
67
  context "when provided a context" do
68
68
 
69
69
  it "uses the provided context" do
70
- account.should be_valid(:update)
70
+ expect(account).to be_valid(:update)
71
71
  end
72
72
  end
73
73
 
@@ -76,7 +76,7 @@ describe Mongoid::Validations do
76
76
  context "when the document is new" do
77
77
 
78
78
  it "defaults the context to :create" do
79
- account.should_not be_valid
79
+ expect(account).to_not be_valid
80
80
  end
81
81
  end
82
82
 
@@ -89,7 +89,7 @@ describe Mongoid::Validations do
89
89
  end
90
90
 
91
91
  it "defaults the context to :update" do
92
- account.should be_valid
92
+ expect(account).to be_valid
93
93
  end
94
94
  end
95
95
  end
@@ -110,7 +110,7 @@ describe Mongoid::Validations do
110
110
  end
111
111
 
112
112
  it "loads the required association from the db" do
113
- from_db.should be_valid
113
+ expect(from_db).to be_valid
114
114
  end
115
115
  end
116
116
 
@@ -135,20 +135,20 @@ describe Mongoid::Validations do
135
135
  context "when validating once" do
136
136
 
137
137
  it "returns false" do
138
- movie.should_not be_valid
138
+ expect(movie).to_not be_valid
139
139
  end
140
140
 
141
141
  it "adds the errors to the document" do
142
142
  movie.valid?
143
- movie.errors[:ratings].should eq([ "is invalid" ])
143
+ expect(movie.errors[:ratings]).to eq([ "is invalid" ])
144
144
  end
145
145
  end
146
146
 
147
147
  context "when validating multiple times" do
148
148
 
149
149
  it "returns false every time" do
150
- movie.should_not be_valid
151
- movie.should_not be_valid
150
+ expect(movie).to_not be_valid
151
+ expect(movie).to_not be_valid
152
152
  end
153
153
  end
154
154
  end
@@ -181,20 +181,20 @@ describe Mongoid::Validations do
181
181
  context "when validating once" do
182
182
 
183
183
  it "returns false" do
184
- person.should_not be_valid
184
+ expect(person).to_not be_valid
185
185
  end
186
186
 
187
187
  it "adds the errors to the document" do
188
188
  person.valid?
189
- person.errors[:services].should eq([ "is invalid" ])
189
+ expect(person.errors[:services]).to eq([ "is invalid" ])
190
190
  end
191
191
  end
192
192
 
193
193
  context "when validating multiple times" do
194
194
 
195
195
  it "returns false every time" do
196
- person.should_not be_valid
197
- person.should_not be_valid
196
+ expect(person).to_not be_valid
197
+ expect(person).to_not be_valid
198
198
  end
199
199
  end
200
200
  end
@@ -217,8 +217,8 @@ describe Mongoid::Validations do
217
217
  end
218
218
 
219
219
  it "adds the validator" do
220
- klass.validators.first.should be_a(
221
- Mongoid::Validations::AssociatedValidator
220
+ expect(klass.validators.first).to be_a(
221
+ Mongoid::Validatable::AssociatedValidator
222
222
  )
223
223
  end
224
224
  end
@@ -230,8 +230,8 @@ describe Mongoid::Validations do
230
230
  end
231
231
 
232
232
  it "adds the validator" do
233
- klass.validators.first.should be_a(
234
- Mongoid::Validations::AssociatedValidator
233
+ expect(klass.validators.first).to be_a(
234
+ Mongoid::Validatable::AssociatedValidator
235
235
  )
236
236
  end
237
237
  end
@@ -252,8 +252,8 @@ describe Mongoid::Validations do
252
252
  end
253
253
 
254
254
  it "adds the validator" do
255
- klass.validators.first.should be_a(
256
- Mongoid::Validations::UniquenessValidator
255
+ expect(klass.validators.first).to be_a(
256
+ Mongoid::Validatable::UniquenessValidator
257
257
  )
258
258
  end
259
259
  end
@@ -265,8 +265,8 @@ describe Mongoid::Validations do
265
265
  end
266
266
 
267
267
  it "adds the validator" do
268
- klass.validators.first.should be_a(
269
- Mongoid::Validations::UniquenessValidator
268
+ expect(klass.validators.first).to be_a(
269
+ Mongoid::Validatable::UniquenessValidator
270
270
  )
271
271
  end
272
272
  end
@@ -287,8 +287,8 @@ describe Mongoid::Validations do
287
287
  end
288
288
 
289
289
  it "adds the validator" do
290
- klass.validators.first.should be_a(
291
- Mongoid::Validations::PresenceValidator
290
+ expect(klass.validators.first).to be_a(
291
+ Mongoid::Validatable::PresenceValidator
292
292
  )
293
293
  end
294
294
  end
@@ -300,8 +300,8 @@ describe Mongoid::Validations do
300
300
  end
301
301
 
302
302
  it "adds the validator" do
303
- klass.validators.first.should be_a(
304
- Mongoid::Validations::PresenceValidator
303
+ expect(klass.validators.first).to be_a(
304
+ Mongoid::Validatable::PresenceValidator
305
305
  )
306
306
  end
307
307
  end
@@ -7,7 +7,7 @@ describe Mongoid do
7
7
  context "when no block supplied" do
8
8
 
9
9
  it "returns the config singleton" do
10
- Mongoid.configure.should eq(Mongoid::Config)
10
+ expect(Mongoid.configure).to eq(Mongoid::Config)
11
11
  end
12
12
  end
13
13
 
@@ -15,18 +15,18 @@ describe Mongoid do
15
15
 
16
16
  before do
17
17
  Mongoid.configure do |config|
18
- config.allow_dynamic_fields = false
18
+ config.preload_models = true
19
19
  end
20
20
  end
21
21
 
22
22
  after do
23
23
  Mongoid.configure do |config|
24
- config.allow_dynamic_fields = true
24
+ config.preload_models = false
25
25
  end
26
26
  end
27
27
 
28
28
  it "sets the values on the config instance" do
29
- Mongoid.allow_dynamic_fields.should be_false
29
+ expect(Mongoid.preload_models).to be true
30
30
  end
31
31
  end
32
32
  end
@@ -34,7 +34,7 @@ describe Mongoid do
34
34
  describe ".default_session" do
35
35
 
36
36
  it "returns the default session" do
37
- Mongoid.default_session.should eq(Mongoid::Sessions.default)
37
+ expect(Mongoid.default_session).to eq(Mongoid::Sessions.default)
38
38
  end
39
39
  end
40
40
 
@@ -52,7 +52,7 @@ describe Mongoid do
52
52
  it "disconnects from all active sessions" do
53
53
  sessions.each do |session|
54
54
  session.cluster.nodes.each do |node|
55
- node.send(:connected?).should be_false
55
+ expect(node.send(:connected?)).to be false
56
56
  end
57
57
  end
58
58
  end
@@ -61,14 +61,14 @@ describe Mongoid do
61
61
  describe ".session" do
62
62
 
63
63
  it "returns the named session" do
64
- Mongoid.session(:default).should eq(Mongoid::Sessions.default)
64
+ expect(Mongoid.session(:default)).to eq(Mongoid::Sessions.default)
65
65
  end
66
66
  end
67
67
 
68
68
  describe ".models" do
69
69
 
70
70
  it "returns the list of known models" do
71
- Mongoid.models.should include(Band)
71
+ expect(Mongoid.models).to include(Band)
72
72
  end
73
73
  end
74
74
  end
@@ -4,19 +4,18 @@ describe "Rails::Mongoid" do
4
4
 
5
5
  before(:all) do
6
6
  require "rails/mongoid"
7
+ ::Mongoid.models.delete_if do |model|
8
+ ![ User, Account, Address ].include?(model)
9
+ end
7
10
  end
8
11
 
9
12
  describe ".create_indexes" do
10
13
 
11
- let(:pattern) do
12
- "spec/app/models/**/*.rb"
13
- end
14
-
15
14
  let(:logger) do
16
- stub
15
+ double
17
16
  end
18
17
 
19
- let(:klass) do
18
+ let!(:klass) do
20
19
  User
21
20
  end
22
21
 
@@ -25,11 +24,7 @@ describe "Rails::Mongoid" do
25
24
  end
26
25
 
27
26
  let(:indexes) do
28
- Rails::Mongoid.create_indexes(pattern)
29
- end
30
-
31
- before do
32
- Dir.should_receive(:glob).once.with(pattern).and_return(model_paths)
27
+ Rails::Mongoid.create_indexes
33
28
  end
34
29
 
35
30
  context "with ordinary Rails models" do
@@ -42,10 +37,6 @@ describe "Rails::Mongoid" do
42
37
 
43
38
  context "with a model without indexes" do
44
39
 
45
- let(:model_paths) do
46
- [ "spec/app/models/account.rb" ]
47
- end
48
-
49
40
  let(:klass) do
50
41
  Account
51
42
  end
@@ -59,7 +50,6 @@ describe "Rails::Mongoid" do
59
50
  context "when an exception is raised" do
60
51
 
61
52
  it "is not swallowed" do
62
- Rails::Mongoid.should_receive(:determine_model).and_return(klass)
63
53
  klass.should_receive(:create_indexes).and_raise(ArgumentError)
64
54
  expect { indexes }.to raise_error(ArgumentError)
65
55
  end
@@ -67,16 +57,12 @@ describe "Rails::Mongoid" do
67
57
 
68
58
  context "when index is defined on embedded model" do
69
59
 
70
- let(:klass) do
60
+ let!(:klass) do
71
61
  Address
72
62
  end
73
63
 
74
- let(:model_paths) do
75
- [ "spec/app/models/address.rb" ]
76
- end
77
-
78
64
  before do
79
- klass.index_options = { city: {} }
65
+ klass.index(street: 1)
80
66
  end
81
67
 
82
68
  it "does nothing, but logging" do
@@ -84,101 +70,98 @@ describe "Rails::Mongoid" do
84
70
  indexes
85
71
  end
86
72
  end
87
-
88
- context "when index is defined on self-embedded (cyclic) model" do
89
- let(:klass) do
90
- Draft
91
- end
92
-
93
- let(:model_paths) do
94
- [ "spec/app/models/draft.rb" ]
95
- end
96
-
97
- it "creates the indexes for the models" do
98
- klass.should_receive(:create_indexes).once
99
- indexes
100
- end
101
- end
102
73
  end
103
74
 
104
- describe ".remove_indexes" do
75
+ describe ".undefined_indexes" do
105
76
 
106
- let(:pattern) do
107
- "spec/app/models/**/*.rb"
77
+ before(:each) do
78
+ Rails::Mongoid.create_indexes
108
79
  end
109
80
 
110
- let(:logger) do
111
- stub
81
+ let(:indexes) do
82
+ Rails::Mongoid.undefined_indexes
112
83
  end
113
84
 
114
- let(:klass) do
115
- User
85
+ it "returns the removed indexes" do
86
+ expect(indexes).to be_empty
116
87
  end
117
88
 
118
- let(:model_paths) do
119
- [ "spec/app/models/user.rb" ]
89
+ context "with extra index on model collection" do
90
+
91
+ before(:each) do
92
+ User.collection.indexes.create(account_expires: 1)
93
+ end
94
+
95
+ let(:names) do
96
+ indexes[User].map{ |index| index['name'] }
97
+ end
98
+
99
+ it "should have single index returned" do
100
+ expect(names).to eq(['account_expires_1'])
101
+ end
120
102
  end
103
+ end
104
+
105
+ describe ".remove_undefined_indexes" do
121
106
 
122
- before do
123
- Dir.should_receive(:glob).with(pattern).exactly(2).times.and_return(model_paths)
107
+ let(:logger) do
108
+ double
124
109
  end
125
110
 
126
111
  let(:indexes) do
127
- klass.collection.indexes
112
+ User.collection.indexes
128
113
  end
129
114
 
130
- before :each do
131
- Rails::Mongoid.create_indexes(pattern)
132
- Rails::Mongoid.remove_indexes(pattern)
115
+ before(:each) do
116
+ Rails::Mongoid.create_indexes
117
+ indexes.create(account_expires: 1)
118
+ Rails::Mongoid.remove_undefined_indexes
133
119
  end
134
120
 
135
- it "removes indexes from klass" do
136
- indexes.reject{ |doc| doc["name"] == "_id_" }.should be_empty
121
+ let(:removed_indexes) do
122
+ Rails::Mongoid.undefined_indexes
137
123
  end
138
124
 
139
- it "leaves _id index untouched" do
140
- indexes.select{ |doc| doc["name"] == "_id_" }.should_not be_empty
125
+ it "returns the removed indexes" do
126
+ expect(removed_indexes).to be_empty
141
127
  end
142
128
  end
143
129
 
144
- describe ".models" do
145
-
146
- let(:pattern) do
147
- "spec/app/models/**/*.rb"
148
- end
130
+ describe ".remove_indexes" do
149
131
 
150
132
  let(:logger) do
151
- stub
133
+ double
152
134
  end
153
135
 
154
- let(:klass) do
136
+ let!(:klass) do
155
137
  User
156
138
  end
157
139
 
158
- let(:model_paths) do
159
- [ "spec/app/models/user.rb" ]
140
+ let(:indexes) do
141
+ klass.collection.indexes
160
142
  end
161
143
 
162
- let(:models) do
163
- Rails::Mongoid.models(pattern)
144
+ before :each do
145
+ Rails::Mongoid.create_indexes
146
+ Rails::Mongoid.remove_indexes
164
147
  end
165
148
 
166
- before do
167
- Dir.should_receive(:glob).with(pattern).once.and_return(model_paths)
149
+ it "removes indexes from klass" do
150
+ expect(indexes.reject{ |doc| doc["name"] == "_id_" }).to be_empty
168
151
  end
169
152
 
170
- it "returns models which files matching the pattern" do
171
- models.should eq([klass])
153
+ it "leaves _id index untouched" do
154
+ expect(indexes.select{ |doc| doc["name"] == "_id_" }).to_not be_empty
172
155
  end
173
156
  end
174
157
 
175
158
  describe ".determine_model" do
176
159
 
177
160
  let(:logger) do
178
- stub
161
+ double
179
162
  end
180
163
 
181
- let(:klass) do
164
+ let!(:klass) do
182
165
  User
183
166
  end
184
167
 
@@ -212,7 +195,7 @@ describe "Rails::Mongoid" do
212
195
  end
213
196
 
214
197
  it "returns nil" do
215
- model.should be_nil
198
+ expect(model).to be_nil
216
199
  end
217
200
  end
218
201
 
@@ -223,7 +206,7 @@ describe "Rails::Mongoid" do
223
206
  end
224
207
 
225
208
  it "returns nil" do
226
- model.should be_nil
209
+ expect(model).to be_nil
227
210
  end
228
211
  end
229
212
 
@@ -234,7 +217,7 @@ describe "Rails::Mongoid" do
234
217
  end
235
218
 
236
219
  it "returns nil" do
237
- model.should be_nil
220
+ expect(model).to be_nil
238
221
  end
239
222
  end
240
223
 
@@ -249,7 +232,7 @@ describe "Rails::Mongoid" do
249
232
  end
250
233
 
251
234
  it "returns nil" do
252
- model.should be_nil
235
+ expect(model).to be_nil
253
236
  end
254
237
  end
255
238
 
@@ -258,7 +241,7 @@ describe "Rails::Mongoid" do
258
241
  context "when file is from normal model" do
259
242
 
260
243
  it "returns klass" do
261
- model.should eq(klass)
244
+ expect(model).to eq(klass)
262
245
  end
263
246
  end
264
247
 
@@ -274,7 +257,9 @@ describe "Rails::Mongoid" do
274
257
 
275
258
  it "logs the class without an error" do
276
259
  logger.should_receive(:info)
277
- expect { model.should eq(klass) }.not_to raise_error(NameError)
260
+ expect {
261
+ expect(model).to be_nil
262
+ }.not_to raise_error
278
263
  end
279
264
  end
280
265
  end
@@ -289,7 +274,7 @@ describe "Rails::Mongoid" do
289
274
 
290
275
  it "returns klass" do
291
276
  logger.should_receive(:info)
292
- model.should eq(klass)
277
+ expect(model).to eq(klass)
293
278
  end
294
279
  end
295
280
 
@@ -304,7 +289,7 @@ describe "Rails::Mongoid" do
304
289
  end
305
290
 
306
291
  it "returns klass in module" do
307
- model.should eq(klass)
292
+ expect(model).to eq(klass)
308
293
  end
309
294
  end
310
295
 
@@ -319,7 +304,7 @@ describe "Rails::Mongoid" do
319
304
  end
320
305
 
321
306
  it "returns klass in module" do
322
- model.should eq(klass)
307
+ expect(model).to eq(klass)
323
308
  end
324
309
  end
325
310
  end
@@ -335,7 +320,7 @@ describe "Rails::Mongoid" do
335
320
  end
336
321
 
337
322
  it "requires the models by base name from the engine's app/models dir" do
338
- model.should eq(klass)
323
+ expect(model).to eq(klass)
339
324
  end
340
325
  end
341
326
  end
@@ -343,11 +328,11 @@ describe "Rails::Mongoid" do
343
328
  describe ".preload_models" do
344
329
 
345
330
  let(:app) do
346
- stub(config: config)
331
+ double(config: config)
347
332
  end
348
333
 
349
334
  let(:config) do
350
- stub(paths: paths)
335
+ double(paths: paths)
351
336
  end
352
337
 
353
338
  let(:paths) do
@@ -421,11 +406,11 @@ describe "Rails::Mongoid" do
421
406
  describe ".load_models" do
422
407
 
423
408
  let(:app) do
424
- stub(config: config)
409
+ double(config: config)
425
410
  end
426
411
 
427
412
  let(:config) do
428
- stub(paths: paths)
413
+ double(paths: paths)
429
414
  end
430
415
 
431
416
  let(:paths) do