mongoid 3.1.6 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,134 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Selectable do
4
+
5
+ describe "#atomic_selector" do
6
+
7
+ context "when the document is a root document" do
8
+
9
+ context "when the document has a shard key" do
10
+
11
+ let(:profile) do
12
+ Profile.create(name: "google")
13
+ end
14
+
15
+ let!(:selector) do
16
+ profile.atomic_selector
17
+ end
18
+
19
+ it "returns the id and shard key in the hash" do
20
+ expect(selector).to eq({ "_id" => profile.id, "name" => profile.name })
21
+ end
22
+ end
23
+
24
+ context "when the document does not have a shard key" do
25
+
26
+ context "when using object ids" do
27
+
28
+ let(:band) do
29
+ Band.create
30
+ end
31
+
32
+ let(:selector) do
33
+ band.atomic_selector
34
+ end
35
+
36
+ it "returns the hash with the id" do
37
+ expect(selector).to eq({ "_id" => band.id })
38
+ end
39
+ end
40
+
41
+ context "when using a custom id" do
42
+
43
+ let(:account) do
44
+ Account.create(name: "savings")
45
+ end
46
+
47
+ let(:selector) do
48
+ account.atomic_selector
49
+ end
50
+
51
+ context "when the id has not changed" do
52
+
53
+ it "returns the hash with the key" do
54
+ expect(selector).to eq({ "_id" => "savings" })
55
+ end
56
+ end
57
+
58
+ context "when the composite key has changed" do
59
+
60
+ before do
61
+ account.new_record = false
62
+ account.name = "current"
63
+ end
64
+
65
+ it "returns the hash with the old key" do
66
+ expect(selector).to eq({ "_id" => "savings" })
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ context "when the document is embedded" do
74
+
75
+ let(:person) do
76
+ Person.create
77
+ end
78
+
79
+ context "when the document is an embeds one" do
80
+
81
+ let(:name) do
82
+ person.create_name(first_name: "test", last_name: "user")
83
+ end
84
+
85
+ it "returns the hash with the selector" do
86
+ expect(name.atomic_selector).to eq(
87
+ { "_id" => person.id, "name._id" => name.id }
88
+ )
89
+ end
90
+ end
91
+
92
+ context "when the document is an embeds many" do
93
+
94
+ let(:address) do
95
+ person.addresses.create(street: "kreuzbergstr")
96
+ end
97
+
98
+ it "returns the hash with the selector" do
99
+ expect(address.atomic_selector).to eq(
100
+ { "_id" => person.id, "addresses._id" => address.id }
101
+ )
102
+ end
103
+
104
+ context "when the document's id changes" do
105
+
106
+ before do
107
+ address._id = "hobrecht"
108
+ end
109
+
110
+ it "returns only the parent selector" do
111
+ expect(address.atomic_selector).to eq(person.atomic_selector)
112
+ end
113
+ end
114
+
115
+ context "when the document is embedded multiple levels" do
116
+
117
+ let(:location) do
118
+ address.locations.create
119
+ end
120
+
121
+ it "returns a hash with the selector" do
122
+ expect(location.atomic_selector).to eq(
123
+ {
124
+ "_id" => person.id,
125
+ "addresses._id" => address.id,
126
+ "addresses.0.locations._id" => location.id
127
+ }
128
+ )
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Serialization do
3
+ describe Mongoid::Serializable do
4
4
 
5
5
  describe "#field_names" do
6
6
 
@@ -9,7 +9,36 @@ describe Mongoid::Serialization do
9
9
  end
10
10
 
11
11
  it "does not duplicate fields" do
12
- band.send(:field_names, {}).should eq(band.fields.except("_type").keys.sort)
12
+ expect(band.send(:field_names, {})).to eq(band.fields.except("_type").keys.sort)
13
+ end
14
+ end
15
+
16
+ describe ".include_root_in_json" do
17
+
18
+ let(:person) do
19
+ Person.new
20
+ end
21
+
22
+ context "when config set to true" do
23
+
24
+ before do
25
+ Mongoid.include_root_in_json = true
26
+ end
27
+
28
+ it "returns true" do
29
+ expect(person.include_root_in_json).to be true
30
+ end
31
+ end
32
+
33
+ context "when config set to false" do
34
+
35
+ before do
36
+ Mongoid.include_root_in_json = false
37
+ end
38
+
39
+ it "returns false" do
40
+ expect(person.include_root_in_json).to be false
41
+ end
13
42
  end
14
43
  end
15
44
 
@@ -30,7 +59,7 @@ describe Mongoid::Serialization do
30
59
  end
31
60
 
32
61
  it "grabs the attribute direct from the hash" do
33
- attributes["loop"].should eq("testing")
62
+ expect(attributes["loop"]).to eq("testing")
34
63
  end
35
64
  end
36
65
 
@@ -45,7 +74,7 @@ describe Mongoid::Serialization do
45
74
  end
46
75
 
47
76
  it "uses the overridden method" do
48
- attributes["override_me"].should eq("1")
77
+ expect(attributes["override_me"]).to eq("1")
49
78
  end
50
79
  end
51
80
 
@@ -62,7 +91,7 @@ describe Mongoid::Serialization do
62
91
  end
63
92
 
64
93
  it "includes the embedded documents" do
65
- attributes["addresses"].first.should eq(address.serializable_hash)
94
+ expect(attributes["addresses"].first).to eq(address.serializable_hash)
66
95
  end
67
96
  end
68
97
 
@@ -77,11 +106,11 @@ describe Mongoid::Serialization do
77
106
  end
78
107
 
79
108
  it "uses the options" do
80
- attributes["id"].should eq(person.id)
109
+ expect(attributes["id"]).to eq(person.id)
81
110
  end
82
111
 
83
112
  it "uses the options on embedded documents" do
84
- address_attributes["id"].should eq(address.id)
113
+ expect(address_attributes["id"]).to eq(address.id)
85
114
  end
86
115
  end
87
116
 
@@ -96,7 +125,7 @@ describe Mongoid::Serialization do
96
125
  end
97
126
 
98
127
  it "includes the deeply nested document" do
99
- attributes["addresses"][0]["locations"].should_not be_empty
128
+ expect(attributes["addresses"][0]["locations"]).to_not be_empty
100
129
  end
101
130
  end
102
131
  end
@@ -116,7 +145,7 @@ describe Mongoid::Serialization do
116
145
  end
117
146
 
118
147
  it "converts the objects to the defined type" do
119
- attributes["dob"].should eq(date)
148
+ expect(attributes["dob"]).to eq(date)
120
149
  end
121
150
  end
122
151
 
@@ -127,7 +156,7 @@ describe Mongoid::Serialization do
127
156
  end
128
157
 
129
158
  before do
130
- person.write_attributes(attributes, false)
159
+ person.write_attributes(attributes)
131
160
  end
132
161
 
133
162
  let(:field_names) do
@@ -135,15 +164,15 @@ describe Mongoid::Serialization do
135
164
  end
136
165
 
137
166
  it "serializes assigned attributes" do
138
- person.serializable_hash.should include attributes
167
+ expect(person.serializable_hash).to include attributes
139
168
  end
140
169
 
141
170
  it "includes all defined fields except _type" do
142
- person.serializable_hash.keys.should include(*field_names)
171
+ expect(person.serializable_hash.keys).to include(*field_names)
143
172
  end
144
173
 
145
174
  it "does not include _type" do
146
- person.serializable_hash.keys.should_not include "_type"
175
+ expect(person.serializable_hash.keys).to_not include "_type"
147
176
  end
148
177
 
149
178
  context "when providing options" do
@@ -157,7 +186,7 @@ describe Mongoid::Serialization do
157
186
  end
158
187
 
159
188
  it "does not modify the options in the argument" do
160
- options[:except].should be_nil
189
+ expect(options[:except]).to be_nil
161
190
  end
162
191
  end
163
192
 
@@ -172,14 +201,14 @@ describe Mongoid::Serialization do
172
201
  end
173
202
 
174
203
  it "includes _type field" do
175
- person.serializable_hash.keys.should include '_type'
204
+ expect(person.serializable_hash.keys).to include '_type'
176
205
  end
177
206
  end
178
207
 
179
208
  context "when specifying which fields to only include" do
180
209
 
181
210
  it "only includes the specified fields" do
182
- person.serializable_hash(only: [:title]).should eq(
211
+ expect(person.serializable_hash(only: [:title])).to eq(
183
212
  { "title" => attributes["title"] }
184
213
  )
185
214
  end
@@ -188,20 +217,38 @@ describe Mongoid::Serialization do
188
217
  context "when specifying extra inclusions" do
189
218
 
190
219
  it "includes the extra fields" do
191
- person.serializable_hash(
220
+ expect(person.serializable_hash(
192
221
  methods: [ :_type ]
193
- ).has_key?("_type").should be_true
222
+ ).has_key?("_type")).to be true
194
223
  end
195
224
  end
196
225
 
197
226
  context "when specifying which fields to exclude" do
198
227
 
199
228
  it "excludes the specified fields" do
200
- person.serializable_hash(except: [:title]).should_not include(
229
+ expect(person.serializable_hash(except: [:title])).to_not include(
201
230
  "title" => attributes["title"]
202
231
  )
203
232
  end
204
233
  end
234
+
235
+ context "when only two attributes are loaded" do
236
+ before do
237
+ person.save
238
+ end
239
+
240
+ let(:from_db) do
241
+ Person.only("_id", "username").first
242
+ end
243
+
244
+ let(:hash) do
245
+ from_db.serializable_hash
246
+ end
247
+
248
+ it "returns those two attributes only" do
249
+ expect(hash.keys).to eq(["_id", "username"])
250
+ end
251
+ end
205
252
  end
206
253
 
207
254
  context "when a model has dynamic fields" do
@@ -219,13 +266,13 @@ describe Mongoid::Serialization do
219
266
  end
220
267
 
221
268
  it "includes dynamic fields" do
222
- person.serializable_hash[dynamic_field_name].should eq(dynamic_value)
269
+ expect(person.serializable_hash[dynamic_field_name]).to eq(dynamic_value)
223
270
  end
224
271
 
225
272
  context "when specifying which dynamic fields to only include" do
226
273
 
227
274
  it "only includes the specified dynamic fields" do
228
- person.serializable_hash(only: [dynamic_field_name]).should eq(
275
+ expect(person.serializable_hash(only: [dynamic_field_name])).to eq(
229
276
  { dynamic_field_name => dynamic_value }
230
277
  )
231
278
  end
@@ -234,7 +281,7 @@ describe Mongoid::Serialization do
234
281
  context "when specified which dynamic fields to exclude" do
235
282
 
236
283
  it "excludes the specified fields" do
237
- person.serializable_hash(except: [dynamic_field_name]).should_not include(
284
+ expect(person.serializable_hash(except: [dynamic_field_name])).to_not include(
238
285
  dynamic_field_name => dynamic_value
239
286
  )
240
287
  end
@@ -248,7 +295,7 @@ describe Mongoid::Serialization do
248
295
  end
249
296
 
250
297
  before do
251
- person.write_attributes(attributes, false)
298
+ person.write_attributes(attributes)
252
299
  end
253
300
 
254
301
  context "when the model is saved before the relation is added" do
@@ -268,7 +315,7 @@ describe Mongoid::Serialization do
268
315
  end
269
316
 
270
317
  it "includes the relation" do
271
- person.serializable_hash.keys.should include('addresses')
318
+ expect(person.serializable_hash.keys).to include('addresses')
272
319
  end
273
320
  end
274
321
 
@@ -282,7 +329,7 @@ describe Mongoid::Serialization do
282
329
  end
283
330
 
284
331
  it "includes the relation" do
285
- person.serializable_hash.keys.should include('name')
332
+ expect(person.serializable_hash.keys).to include('name')
286
333
  end
287
334
  end
288
335
  end
@@ -300,7 +347,7 @@ describe Mongoid::Serialization do
300
347
  end
301
348
 
302
349
  it "includes the relation" do
303
- person.serializable_hash.keys.should include('addresses')
350
+ expect(person.serializable_hash.keys).to include('addresses')
304
351
  end
305
352
  end
306
353
 
@@ -314,7 +361,7 @@ describe Mongoid::Serialization do
314
361
  end
315
362
 
316
363
  it "includes the relation" do
317
- person.serializable_hash.keys.should include('name')
364
+ expect(person.serializable_hash.keys).to include('name')
318
365
  end
319
366
  end
320
367
  end
@@ -323,7 +370,7 @@ describe Mongoid::Serialization do
323
370
  context "when including methods" do
324
371
 
325
372
  it "includes the method result" do
326
- person.serializable_hash(methods: [:foo]).should include(
373
+ expect(person.serializable_hash(methods: [:foo])).to include(
327
374
  "foo" => person.foo
328
375
  )
329
376
  end
@@ -362,7 +409,7 @@ describe Mongoid::Serialization do
362
409
  end
363
410
 
364
411
  it "does not generate new ids" do
365
- hash["addresses"].first["_id"].should be_nil
412
+ expect(hash["addresses"].first["_id"]).to be_nil
366
413
  end
367
414
  end
368
415
 
@@ -373,12 +420,12 @@ describe Mongoid::Serialization do
373
420
  end
374
421
 
375
422
  it "includes the first relation" do
376
- relation_hash[0].should include
423
+ expect(relation_hash[0]).to include
377
424
  { "_id" => "kudamm", "street" => "Kudamm" }
378
425
  end
379
426
 
380
427
  it "includes the second relation" do
381
- relation_hash[1].should include
428
+ expect(relation_hash[1]).to include
382
429
  { "_id" => "tauentzienstr", "street" => "Tauentzienstr" }
383
430
  end
384
431
  end
@@ -390,12 +437,12 @@ describe Mongoid::Serialization do
390
437
  end
391
438
 
392
439
  it "includes the first relation" do
393
- relation_hash[0].should include
440
+ expect(relation_hash[0]).to include
394
441
  { "_id" => "kudamm", "street" => "Kudamm" }
395
442
  end
396
443
 
397
444
  it "includes the second relation" do
398
- relation_hash[1].should include
445
+ expect(relation_hash[1]).to include
399
446
  { "_id" => "tauentzienstr", "street" => "Tauentzienstr" }
400
447
  end
401
448
  end
@@ -409,11 +456,11 @@ describe Mongoid::Serialization do
409
456
  end
410
457
 
411
458
  it "includes the first relation sans exceptions" do
412
- relation_hash[0].should include({ "street" => "Kudamm" })
459
+ expect(relation_hash[0]).to include({ "street" => "Kudamm" })
413
460
  end
414
461
 
415
462
  it "includes the second relation sans exceptions" do
416
- relation_hash[1].should include({ "street" => "Tauentzienstr" })
463
+ expect(relation_hash[1]).to include({ "street" => "Tauentzienstr" })
417
464
  end
418
465
  end
419
466
 
@@ -432,9 +479,9 @@ describe Mongoid::Serialization do
432
479
  end
433
480
 
434
481
  it "includes the first relation" do
435
- relation_hash[0]["locations"].any? do |location|
482
+ expect(relation_hash[0]["locations"].any? do |location|
436
483
  location["name"] == "Home"
437
- end.should be_true
484
+ end).to be true
438
485
  end
439
486
 
440
487
  context "after retrieved from database" do
@@ -460,12 +507,12 @@ describe Mongoid::Serialization do
460
507
  end
461
508
 
462
509
  it "includes the specific ralations" do
463
- relation_hash[0]["locations"].map do |location|
510
+ expect(relation_hash[0]["locations"].map do |location|
464
511
  location["name"]
465
- end.should include "Home"
466
- relation_hash[1]["locations"].map do |location|
512
+ end).to include "Home"
513
+ expect(relation_hash[1]["locations"].map do |location|
467
514
  location["name"]
468
- end.should include "Hotel"
515
+ end).to include "Hotel"
469
516
  end
470
517
  end
471
518
  end
@@ -484,15 +531,15 @@ describe Mongoid::Serialization do
484
531
  end
485
532
 
486
533
  it "does not contain the root exclusion" do
487
- hash["_id"].should be_nil
534
+ expect(hash["_id"]).to be_nil
488
535
  end
489
536
 
490
537
  it "does not include the embedded many exclusion" do
491
- relation_hash[0]["_id"].should be_nil
538
+ expect(relation_hash[0]["_id"]).to be_nil
492
539
  end
493
540
 
494
541
  it "does not include the embedded one exclusion" do
495
- hash["name"]["_id"].should be_nil
542
+ expect(hash["name"]["_id"]).to be_nil
496
543
  end
497
544
  end
498
545
  end
@@ -515,7 +562,7 @@ describe Mongoid::Serialization do
515
562
  end
516
563
 
517
564
  it "includes the specified relation" do
518
- relation_hash.should include
565
+ expect(relation_hash).to include
519
566
  { "_id" => "leo-marvin", "first_name" => "Leo", "last_name" => "Marvin" }
520
567
  end
521
568
  end
@@ -527,7 +574,7 @@ describe Mongoid::Serialization do
527
574
  end
528
575
 
529
576
  it "includes the specified relation" do
530
- relation_hash.should include
577
+ expect(relation_hash).to include
531
578
  { "_id" => "leo-marvin", "first_name" => "Leo", "last_name" => "Marvin" }
532
579
  end
533
580
  end
@@ -539,7 +586,7 @@ describe Mongoid::Serialization do
539
586
  end
540
587
 
541
588
  it "includes the specified relation sans exceptions" do
542
- relation_hash.should include
589
+ expect(relation_hash).to include
543
590
  { "first_name" => "Leo", "last_name" => "Marvin" }
544
591
  end
545
592
  end
@@ -566,15 +613,15 @@ describe Mongoid::Serialization do
566
613
  end
567
614
 
568
615
  it "includes the specified relation" do
569
- relation_hash.should_not be_nil
616
+ expect(relation_hash).to_not be_nil
570
617
  end
571
618
 
572
619
  it "includes the first document related fields" do
573
- relation_hash[0]["title"].should eq("First")
620
+ expect(relation_hash[0]["title"]).to eq("First")
574
621
  end
575
622
 
576
623
  it "includes the second document related fields" do
577
- relation_hash[1]["title"].should eq("Second")
624
+ expect(relation_hash[1]["title"]).to eq("Second")
578
625
  end
579
626
  end
580
627
 
@@ -585,15 +632,15 @@ describe Mongoid::Serialization do
585
632
  end
586
633
 
587
634
  it "includes the specified relation" do
588
- relation_hash.should_not be_nil
635
+ expect(relation_hash).to_not be_nil
589
636
  end
590
637
 
591
638
  it "includes the first document related fields" do
592
- relation_hash[0]["title"].should eq("First")
639
+ expect(relation_hash[0]["title"]).to eq("First")
593
640
  end
594
641
 
595
642
  it "includes the second document related fields" do
596
- relation_hash[1]["title"].should eq("Second")
643
+ expect(relation_hash[1]["title"]).to eq("Second")
597
644
  end
598
645
  end
599
646
 
@@ -604,23 +651,23 @@ describe Mongoid::Serialization do
604
651
  end
605
652
 
606
653
  it "includes the specified relation" do
607
- relation_hash.should_not be_nil
654
+ expect(relation_hash).to_not be_nil
608
655
  end
609
656
 
610
657
  it "includes the first document related fields" do
611
- relation_hash[0]["title"].should eq("First")
658
+ expect(relation_hash[0]["title"]).to eq("First")
612
659
  end
613
660
 
614
661
  it "includes the second document related fields" do
615
- relation_hash[1]["title"].should eq("Second")
662
+ expect(relation_hash[1]["title"]).to eq("Second")
616
663
  end
617
664
 
618
665
  it "does not include the first document exceptions" do
619
- relation_hash[0]["_id"].should be_nil
666
+ expect(relation_hash[0]["_id"]).to be_nil
620
667
  end
621
668
 
622
669
  it "does not include the second document exceptions" do
623
- relation_hash[1]["_id"].should be_nil
670
+ expect(relation_hash[1]["_id"]).to be_nil
624
671
  end
625
672
  end
626
673
  end
@@ -646,15 +693,15 @@ describe Mongoid::Serialization do
646
693
  end
647
694
 
648
695
  it "includes the specified relation" do
649
- relation_hash.should_not be_nil
696
+ expect(relation_hash).to_not be_nil
650
697
  end
651
698
 
652
699
  it "includes the first document related fields" do
653
- relation_hash[0]["name"].should eq("First")
700
+ expect(relation_hash[0]["name"]).to eq("First")
654
701
  end
655
702
 
656
703
  it "includes the second document related fields" do
657
- relation_hash[1]["name"].should eq("Second")
704
+ expect(relation_hash[1]["name"]).to eq("Second")
658
705
  end
659
706
  end
660
707
 
@@ -665,15 +712,15 @@ describe Mongoid::Serialization do
665
712
  end
666
713
 
667
714
  it "includes the specified relation" do
668
- relation_hash.should_not be_nil
715
+ expect(relation_hash).to_not be_nil
669
716
  end
670
717
 
671
718
  it "includes the first document related fields" do
672
- relation_hash[0]["name"].should eq("First")
719
+ expect(relation_hash[0]["name"]).to eq("First")
673
720
  end
674
721
 
675
722
  it "includes the second document related fields" do
676
- relation_hash[1]["name"].should eq("Second")
723
+ expect(relation_hash[1]["name"]).to eq("Second")
677
724
  end
678
725
  end
679
726
 
@@ -691,27 +738,27 @@ describe Mongoid::Serialization do
691
738
  end
692
739
 
693
740
  it "includes the specified relation" do
694
- relation_hash.should_not be_nil
741
+ expect(relation_hash).to_not be_nil
695
742
  end
696
743
 
697
744
  it "includes the first document related fields" do
698
- relation_hash[0]["name"].should eq("First")
745
+ expect(relation_hash[0]["name"]).to eq("First")
699
746
  end
700
747
 
701
748
  it "includes the second document related fields" do
702
- relation_hash[1]["name"].should eq("Second")
749
+ expect(relation_hash[1]["name"]).to eq("Second")
703
750
  end
704
751
 
705
752
  it "does not include the first document exceptions" do
706
- relation_hash[0]["_id"].should be_nil
753
+ expect(relation_hash[0]["_id"]).to be_nil
707
754
  end
708
755
 
709
756
  it "does not include the second document exceptions" do
710
- relation_hash[1]["_id"].should be_nil
757
+ expect(relation_hash[1]["_id"]).to be_nil
711
758
  end
712
759
 
713
760
  it "does not include the root exceptions" do
714
- hash["preference_ids"].should be_nil
761
+ expect(hash["preference_ids"]).to be_nil
715
762
  end
716
763
  end
717
764
  end
@@ -732,7 +779,7 @@ describe Mongoid::Serialization do
732
779
  end
733
780
 
734
781
  it "uses the mongoid configuration" do
735
- person.to_json.should include("person")
782
+ expect(person.to_json).to include("person")
736
783
  end
737
784
  end
738
785
 
@@ -743,7 +790,7 @@ describe Mongoid::Serialization do
743
790
  end
744
791
 
745
792
  it "uses the mongoid configuration" do
746
- person.to_json.should_not include("person")
793
+ expect(person.to_json).to_not include("person")
747
794
  end
748
795
  end
749
796
 
@@ -760,7 +807,7 @@ describe Mongoid::Serialization do
760
807
  end
761
808
 
762
809
  it "serializes only the relation" do
763
- json.should include(address.street)
810
+ expect(json).to include(address.street)
764
811
  end
765
812
  end
766
813
 
@@ -775,7 +822,7 @@ describe Mongoid::Serialization do
775
822
  end
776
823
 
777
824
  it "serializes only the relation" do
778
- json.should include(post.title)
825
+ expect(json).to include(post.title)
779
826
  end
780
827
  end
781
828
  end
@@ -783,14 +830,14 @@ describe Mongoid::Serialization do
783
830
 
784
831
  describe "#to_xml" do
785
832
 
786
- context "Moped::BSON::ObjectId" do
833
+ context "BSON::ObjectId" do
787
834
 
788
835
  let(:person) do
789
836
  Person.new
790
837
  end
791
838
 
792
839
  it "serializes as string" do
793
- person.to_xml.should include("<_id>#{person.id}</_id>")
840
+ expect(person.to_xml).to include("<_id>#{person.id}</_id>")
794
841
  end
795
842
  end
796
843
 
@@ -803,12 +850,12 @@ describe Mongoid::Serialization do
803
850
  end
804
851
 
805
852
  it "properly types the array" do
806
- person.to_xml.should include("<aliases type=\"array\">")
853
+ expect(person.to_xml).to include("<aliases type=\"array\">")
807
854
  end
808
855
 
809
856
  it "serializes the array" do
810
- person.to_xml.should include("<alias>Kelly</alias>")
811
- person.to_xml.should include("<alias>Machine Gun</alias>")
857
+ expect(person.to_xml).to include("<alias>Kelly</alias>")
858
+ expect(person.to_xml).to include("<alias>Machine Gun</alias>")
812
859
  end
813
860
  end
814
861
 
@@ -821,12 +868,12 @@ describe Mongoid::Serialization do
821
868
  end
822
869
 
823
870
  it "properly types the hash" do
824
- person.to_xml.should include("<map>")
871
+ expect(person.to_xml).to include("<map>")
825
872
  end
826
873
 
827
874
  it "serializes the hash" do
828
- person.to_xml.should include("<lat type=\"float\">24.5</lat>")
829
- person.to_xml.should include("<long type=\"float\">22.1</long>")
875
+ expect(person.to_xml).to include("<lat type=\"float\">24.5</lat>")
876
+ expect(person.to_xml).to include("<long type=\"float\">22.1</long>")
830
877
  end
831
878
  end
832
879
  end