mongoid 3.1.6 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +479 -8
  3. data/README.md +10 -7
  4. data/lib/config/locales/en.yml +34 -20
  5. data/lib/mongoid.rb +10 -76
  6. data/lib/mongoid/atomic.rb +3 -14
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  9. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  10. data/lib/mongoid/atomic/paths/root.rb +0 -13
  11. data/lib/mongoid/attributes.rb +65 -101
  12. data/lib/mongoid/attributes/dynamic.rb +154 -0
  13. data/lib/mongoid/attributes/nested.rb +82 -0
  14. data/lib/mongoid/attributes/processing.rb +13 -66
  15. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  16. data/lib/mongoid/composable.rb +105 -0
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/config/options.rb +1 -1
  19. data/lib/mongoid/contextual.rb +2 -0
  20. data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
  21. data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
  22. data/lib/mongoid/contextual/atomic.rb +53 -53
  23. data/lib/mongoid/contextual/geo_near.rb +1 -1
  24. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  25. data/lib/mongoid/contextual/memory.rb +23 -11
  26. data/lib/mongoid/contextual/mongo.rb +75 -57
  27. data/lib/mongoid/contextual/none.rb +90 -0
  28. data/lib/mongoid/contextual/text_search.rb +178 -0
  29. data/lib/mongoid/copyable.rb +2 -3
  30. data/lib/mongoid/criteria.rb +39 -34
  31. data/lib/mongoid/criteria/#findable.rb# +141 -0
  32. data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
  33. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  34. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  35. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  36. data/lib/mongoid/criteria/permission.rb +70 -0
  37. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  38. data/lib/mongoid/document.rb +39 -24
  39. data/lib/mongoid/errors.rb +4 -1
  40. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  41. data/lib/mongoid/errors/document_not_found.rb +2 -1
  42. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  43. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  44. data/lib/mongoid/errors/invalid_value.rb +16 -0
  45. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  46. data/lib/mongoid/errors/readonly_document.rb +24 -0
  47. data/lib/mongoid/extensions.rb +15 -7
  48. data/lib/mongoid/extensions/array.rb +3 -3
  49. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  50. data/lib/mongoid/extensions/boolean.rb +15 -17
  51. data/lib/mongoid/extensions/date.rb +1 -1
  52. data/lib/mongoid/extensions/date_time.rb +3 -3
  53. data/lib/mongoid/extensions/float.rb +2 -1
  54. data/lib/mongoid/extensions/hash.rb +3 -3
  55. data/lib/mongoid/extensions/integer.rb +1 -1
  56. data/lib/mongoid/extensions/object.rb +7 -7
  57. data/lib/mongoid/extensions/object_id.rb +5 -5
  58. data/lib/mongoid/extensions/range.rb +9 -3
  59. data/lib/mongoid/extensions/regexp.rb +1 -1
  60. data/lib/mongoid/extensions/set.rb +1 -1
  61. data/lib/mongoid/extensions/string.rb +6 -18
  62. data/lib/mongoid/extensions/symbol.rb +1 -1
  63. data/lib/mongoid/extensions/time.rb +3 -3
  64. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  65. data/lib/mongoid/factory.rb +8 -6
  66. data/lib/mongoid/fields.rb +41 -8
  67. data/lib/mongoid/fields/foreign_key.rb +3 -3
  68. data/lib/mongoid/fields/localized.rb +1 -1
  69. data/lib/mongoid/fields/standard.rb +5 -17
  70. data/lib/mongoid/fields/validators/macro.rb +15 -5
  71. data/lib/mongoid/{finders.rb → findable.rb} +35 -7
  72. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  73. data/lib/mongoid/indexable/specification.rb +104 -0
  74. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  75. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  76. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  77. data/lib/mongoid/log_subscriber.rb +55 -0
  78. data/lib/mongoid/matchable.rb +152 -0
  79. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  81. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  82. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  86. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  87. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  88. data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
  89. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  90. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  91. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  92. data/lib/mongoid/persistable.rb +216 -0
  93. data/lib/mongoid/persistable/creatable.rb +189 -0
  94. data/lib/mongoid/persistable/deletable.rb +149 -0
  95. data/lib/mongoid/persistable/destroyable.rb +60 -0
  96. data/lib/mongoid/persistable/incrementable.rb +36 -0
  97. data/lib/mongoid/persistable/logical.rb +38 -0
  98. data/lib/mongoid/persistable/poppable.rb +39 -0
  99. data/lib/mongoid/persistable/pullable.rb +55 -0
  100. data/lib/mongoid/persistable/pushable.rb +62 -0
  101. data/lib/mongoid/persistable/renamable.rb +35 -0
  102. data/lib/mongoid/persistable/savable.rb +52 -0
  103. data/lib/mongoid/persistable/settable.rb +33 -0
  104. data/lib/mongoid/persistable/unsettable.rb +36 -0
  105. data/lib/mongoid/persistable/updatable.rb +153 -0
  106. data/lib/mongoid/persistable/upsertable.rb +55 -0
  107. data/lib/mongoid/positional.rb +71 -0
  108. data/lib/mongoid/query_cache.rb +255 -0
  109. data/lib/mongoid/railtie.rb +34 -60
  110. data/lib/mongoid/railties/database.rake +9 -25
  111. data/lib/mongoid/relations.rb +11 -25
  112. data/lib/mongoid/relations/accessors.rb +15 -51
  113. data/lib/mongoid/relations/auto_save.rb +15 -36
  114. data/lib/mongoid/relations/binding.rb +2 -25
  115. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  116. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  117. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  118. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
  119. data/lib/mongoid/relations/builder.rb +1 -1
  120. data/lib/mongoid/relations/builders.rb +2 -2
  121. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  122. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  123. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
  124. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  125. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  126. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  127. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  128. data/lib/mongoid/relations/cascading.rb +3 -5
  129. data/lib/mongoid/relations/constraint.rb +1 -1
  130. data/lib/mongoid/relations/conversions.rb +1 -1
  131. data/lib/mongoid/relations/counter_cache.rb +39 -15
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/eager/base.rb +149 -0
  134. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  135. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  136. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  137. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  138. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  139. data/lib/mongoid/relations/embedded/in.rb +4 -4
  140. data/lib/mongoid/relations/embedded/many.rb +14 -32
  141. data/lib/mongoid/relations/embedded/one.rb +1 -1
  142. data/lib/mongoid/relations/macros.rb +3 -4
  143. data/lib/mongoid/relations/many.rb +51 -31
  144. data/lib/mongoid/relations/marshalable.rb +3 -3
  145. data/lib/mongoid/relations/metadata.rb +14 -79
  146. data/lib/mongoid/relations/nested_builder.rb +2 -2
  147. data/lib/mongoid/relations/one.rb +1 -1
  148. data/lib/mongoid/relations/options.rb +1 -0
  149. data/lib/mongoid/relations/polymorphic.rb +0 -1
  150. data/lib/mongoid/relations/proxy.rb +21 -41
  151. data/lib/mongoid/relations/referenced/in.rb +4 -20
  152. data/lib/mongoid/relations/referenced/many.rb +22 -35
  153. data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
  154. data/lib/mongoid/relations/referenced/one.rb +6 -25
  155. data/lib/mongoid/relations/synchronization.rb +4 -4
  156. data/lib/mongoid/relations/targets/enumerable.rb +10 -10
  157. data/lib/mongoid/relations/touchable.rb +34 -1
  158. data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
  159. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  160. data/lib/mongoid/selectable.rb +59 -0
  161. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  162. data/lib/mongoid/sessions.rb +37 -345
  163. data/lib/mongoid/sessions/factory.rb +2 -0
  164. data/lib/mongoid/sessions/options.rb +185 -0
  165. data/lib/mongoid/sessions/storage_options.rb +140 -0
  166. data/lib/mongoid/sessions/thread_options.rb +19 -0
  167. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  168. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  169. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  170. data/lib/mongoid/support/query_counter.rb +23 -0
  171. data/lib/mongoid/tasks/database.rake +31 -0
  172. data/lib/mongoid/tasks/database.rb +107 -0
  173. data/lib/mongoid/threaded.rb +26 -172
  174. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  175. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  176. data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
  177. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  178. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  179. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  180. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  181. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  182. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  183. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  184. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  185. data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
  186. data/lib/mongoid/version.rb +1 -1
  187. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
  188. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  189. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  190. data/lib/rails/generators/mongoid_generator.rb +3 -40
  191. data/lib/rails/mongoid.rb +0 -122
  192. data/lib/support/ruby_version.rb +1 -1
  193. data/spec/app/models/account.rb +2 -6
  194. data/spec/app/models/acolyte.rb +2 -1
  195. data/spec/app/models/actor.rb +0 -1
  196. data/spec/app/models/address.rb +8 -3
  197. data/spec/app/models/animal.rb +1 -1
  198. data/spec/app/models/appointment.rb +3 -3
  199. data/spec/app/models/article.rb +1 -4
  200. data/spec/app/models/audio.rb +5 -0
  201. data/spec/app/models/author.rb +0 -2
  202. data/spec/app/models/band.rb +3 -2
  203. data/spec/app/models/bar.rb +1 -0
  204. data/spec/app/models/book.rb +1 -0
  205. data/spec/app/models/building.rb +0 -2
  206. data/spec/app/models/building_address.rb +0 -2
  207. data/spec/app/models/bus.rb +1 -1
  208. data/spec/app/models/canvas.rb +1 -1
  209. data/spec/app/models/contextable_item.rb +5 -0
  210. data/spec/app/models/contractor.rb +0 -2
  211. data/spec/app/models/country_code.rb +1 -1
  212. data/spec/app/models/definition.rb +2 -2
  213. data/spec/app/models/dog.rb +1 -1
  214. data/spec/app/models/draft.rb +9 -0
  215. data/spec/app/models/dragon.rb +4 -0
  216. data/spec/app/models/drug.rb +1 -3
  217. data/spec/app/models/dungeon.rb +4 -0
  218. data/spec/app/models/edit.rb +5 -0
  219. data/spec/app/models/even.rb +7 -0
  220. data/spec/app/models/event.rb +1 -1
  221. data/spec/app/models/filesystem.rb +1 -0
  222. data/spec/app/models/fish.rb +0 -1
  223. data/spec/app/models/fruits.rb +6 -0
  224. data/spec/app/models/game.rb +0 -2
  225. data/spec/app/models/house.rb +1 -3
  226. data/spec/app/models/id_key.rb +6 -0
  227. data/spec/app/models/item.rb +1 -5
  228. data/spec/app/models/jar.rb +1 -1
  229. data/spec/app/models/label.rb +4 -4
  230. data/spec/app/models/line_item.rb +1 -1
  231. data/spec/app/models/login.rb +1 -1
  232. data/spec/app/models/message.rb +8 -0
  233. data/spec/app/models/movie.rb +1 -0
  234. data/spec/app/models/name.rb +3 -3
  235. data/spec/app/models/note.rb +3 -1
  236. data/spec/app/models/odd.rb +7 -0
  237. data/spec/app/models/oscar.rb +1 -1
  238. data/spec/app/models/parent_doc.rb +1 -1
  239. data/spec/app/models/person.rb +16 -10
  240. data/spec/app/models/phone.rb +1 -3
  241. data/spec/app/models/player.rb +3 -3
  242. data/spec/app/models/post.rb +5 -3
  243. data/spec/app/models/preference.rb +1 -1
  244. data/spec/app/models/quiz.rb +0 -3
  245. data/spec/app/models/record.rb +10 -5
  246. data/spec/app/models/registry.rb +1 -1
  247. data/spec/app/models/server.rb +1 -1
  248. data/spec/app/models/service.rb +3 -3
  249. data/spec/app/models/sound.rb +5 -0
  250. data/spec/app/models/symptom.rb +1 -1
  251. data/spec/app/models/template.rb +1 -1
  252. data/spec/app/models/title.rb +0 -1
  253. data/spec/app/models/track.rb +5 -5
  254. data/spec/app/models/tree.rb +3 -3
  255. data/spec/app/models/video.rb +1 -5
  256. data/spec/app/models/wiki_page.rb +2 -5
  257. data/spec/app/models/word.rb +3 -0
  258. data/spec/app/models/word_origin.rb +1 -1
  259. data/spec/config/mongoid.yml +7 -8
  260. data/spec/helpers.rb +18 -0
  261. data/spec/mongoid/#atomic_spec.rb# +365 -0
  262. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  263. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  264. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  265. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  266. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  267. data/spec/mongoid/atomic_spec.rb +19 -19
  268. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
  269. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  270. data/spec/mongoid/attributes_spec.rb +349 -434
  271. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  272. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  273. data/spec/mongoid/config/environment_spec.rb +3 -3
  274. data/spec/mongoid/config/options_spec.rb +6 -6
  275. data/spec/mongoid/config_spec.rb +24 -48
  276. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  277. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
  278. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  279. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  280. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  281. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  282. data/spec/mongoid/contextual/memory_spec.rb +156 -94
  283. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  284. data/spec/mongoid/contextual/none_spec.rb +127 -0
  285. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  286. data/spec/mongoid/copyable_spec.rb +56 -68
  287. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  288. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  289. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  290. data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
  291. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  292. data/spec/mongoid/criteria_spec.rb +715 -2421
  293. data/spec/mongoid/document_spec.rb +171 -121
  294. data/spec/mongoid/equality_spec.rb +22 -22
  295. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  296. data/spec/mongoid/errors/callback_spec.rb +3 -3
  297. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  298. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  299. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  300. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  302. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  305. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  306. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  307. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  308. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  309. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  310. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  311. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  312. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  313. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  314. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  315. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  316. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  317. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  318. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  319. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  320. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  321. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  322. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  323. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  324. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  325. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  326. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  327. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  328. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  329. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  330. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  331. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  332. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  333. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  334. data/spec/mongoid/errors/validations_spec.rb +7 -7
  335. data/spec/mongoid/extensions/array_spec.rb +61 -61
  336. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  337. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  338. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  339. data/spec/mongoid/extensions/date_spec.rb +13 -13
  340. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  341. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  342. data/spec/mongoid/extensions/float_spec.rb +29 -15
  343. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  344. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  345. data/spec/mongoid/extensions/module_spec.rb +2 -2
  346. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  347. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  348. data/spec/mongoid/extensions/object_spec.rb +26 -26
  349. data/spec/mongoid/extensions/range_spec.rb +61 -12
  350. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  351. data/spec/mongoid/extensions/set_spec.rb +4 -4
  352. data/spec/mongoid/extensions/string_spec.rb +35 -46
  353. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  354. data/spec/mongoid/extensions/time_spec.rb +49 -49
  355. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  356. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  357. data/spec/mongoid/extensions_spec.rb +29 -0
  358. data/spec/mongoid/factory_spec.rb +15 -15
  359. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  360. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  361. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  362. data/spec/mongoid/fields/localized_spec.rb +38 -23
  363. data/spec/mongoid/fields/standard_spec.rb +12 -12
  364. data/spec/mongoid/fields_spec.rb +263 -217
  365. data/spec/mongoid/findable_spec.rb +509 -0
  366. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  367. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  368. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  369. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  370. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  371. data/spec/mongoid/loggable_spec.rb +1 -1
  372. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  373. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  374. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  375. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  376. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  377. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  378. data/spec/mongoid/matchable/in_spec.rb +49 -0
  379. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  380. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  381. data/spec/mongoid/matchable/ne_spec.rb +46 -0
  382. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  383. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  384. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  385. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  386. data/spec/mongoid/persistable/creatable_spec.rb +553 -0
  387. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  388. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  389. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  390. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  391. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  392. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  393. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  394. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  395. data/spec/mongoid/persistable/savable_spec.rb +498 -0
  396. data/spec/mongoid/persistable/settable_spec.rb +162 -0
  397. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  398. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  399. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  400. data/spec/mongoid/persistable_spec.rb +206 -0
  401. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
  402. data/spec/mongoid/query_cache_spec.rb +263 -0
  403. data/spec/mongoid/railties/document_spec.rb +2 -2
  404. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  405. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  406. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  407. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  408. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  409. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  410. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  411. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  412. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  413. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  414. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  415. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  416. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  417. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  418. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  419. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  420. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  421. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  422. data/spec/mongoid/relations/builders_spec.rb +21 -21
  423. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  424. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  425. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  426. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  427. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  428. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  429. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  430. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  431. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  432. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  433. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  434. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  435. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  436. data/spec/mongoid/relations/eager_spec.rb +228 -0
  437. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  438. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  439. data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
  440. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  441. data/spec/mongoid/relations/macros_spec.rb +108 -102
  442. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  443. data/spec/mongoid/relations/options_spec.rb +1 -1
  444. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  445. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  446. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  447. data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
  448. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
  449. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  450. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  451. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  452. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  453. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  454. data/spec/mongoid/relations_spec.rb +16 -15
  455. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
  456. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  457. data/spec/mongoid/selectable_spec.rb +134 -0
  458. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  459. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  460. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  461. data/spec/mongoid/sessions/options_spec.rb +108 -0
  462. data/spec/mongoid/sessions_spec.rb +319 -178
  463. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  464. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  465. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  466. data/spec/mongoid/tasks/database_spec.rb +160 -0
  467. data/spec/mongoid/threaded_spec.rb +17 -70
  468. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  469. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  470. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  471. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  472. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  473. data/spec/mongoid/timestamps_spec.rb +9 -13
  474. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  475. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  476. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  477. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  478. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  479. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  480. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  481. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  482. data/spec/mongoid_spec.rb +8 -8
  483. data/spec/rails/mongoid_spec.rb +19 -335
  484. data/spec/spec_helper.rb +31 -13
  485. metadata +303 -283
  486. data/lib/mongoid/atomic/positionable.rb +0 -73
  487. data/lib/mongoid/components.rb +0 -92
  488. data/lib/mongoid/config/inflections.rb +0 -6
  489. data/lib/mongoid/contextual/eager.rb +0 -158
  490. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  491. data/lib/mongoid/identity_map.rb +0 -163
  492. data/lib/mongoid/json.rb +0 -16
  493. data/lib/mongoid/matchers.rb +0 -32
  494. data/lib/mongoid/matchers/strategies.rb +0 -97
  495. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  496. data/lib/mongoid/nested_attributes.rb +0 -78
  497. data/lib/mongoid/observer.rb +0 -192
  498. data/lib/mongoid/paranoia.rb +0 -136
  499. data/lib/mongoid/persistence.rb +0 -357
  500. data/lib/mongoid/persistence/atomic.rb +0 -231
  501. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  502. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  503. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  504. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  505. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  506. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  507. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  508. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  509. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  510. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  511. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  512. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  513. data/lib/mongoid/persistence/deletion.rb +0 -31
  514. data/lib/mongoid/persistence/insertion.rb +0 -38
  515. data/lib/mongoid/persistence/modification.rb +0 -35
  516. data/lib/mongoid/persistence/operations.rb +0 -214
  517. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  518. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  519. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  520. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  521. data/lib/mongoid/persistence/operations/update.rb +0 -59
  522. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  523. data/lib/mongoid/persistence/upsertion.rb +0 -31
  524. data/lib/mongoid/unit_of_work.rb +0 -61
  525. data/lib/mongoid/versioning.rb +0 -217
  526. data/lib/rack/mongoid.rb +0 -2
  527. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  528. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  529. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  530. data/spec/app/models/actor_observer.rb +0 -15
  531. data/spec/app/models/callback_recorder.rb +0 -25
  532. data/spec/app/models/paranoid_phone.rb +0 -25
  533. data/spec/app/models/paranoid_post.rb +0 -36
  534. data/spec/app/models/phone_observer.rb +0 -6
  535. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  536. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  537. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  538. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  539. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  540. data/spec/mongoid/finders_spec.rb +0 -321
  541. data/spec/mongoid/identity_map_spec.rb +0 -564
  542. data/spec/mongoid/json_spec.rb +0 -33
  543. data/spec/mongoid/matchers/in_spec.rb +0 -25
  544. data/spec/mongoid/matchers/ne_spec.rb +0 -25
  545. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  546. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  547. data/spec/mongoid/observer_spec.rb +0 -290
  548. data/spec/mongoid/paranoia_spec.rb +0 -759
  549. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  550. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  551. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  552. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  553. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  554. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  555. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  556. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  557. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  558. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  559. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  560. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  561. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  562. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  563. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  564. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  565. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  566. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  567. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  568. data/spec/mongoid/persistence_spec.rb +0 -2279
  569. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  570. data/spec/mongoid/versioning_spec.rb +0 -540
  571. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -9,7 +9,7 @@ describe Mongoid::Fields::Standard do
9
9
  end
10
10
 
11
11
  it "returns false" do
12
- field.should_not be_lazy
12
+ expect(field).to_not be_lazy
13
13
  end
14
14
  end
15
15
 
@@ -42,7 +42,7 @@ describe Mongoid::Fields::Standard do
42
42
  end
43
43
 
44
44
  it "returns true" do
45
- field.should be_pre_processed
45
+ expect(field).to be_pre_processed
46
46
  end
47
47
  end
48
48
 
@@ -58,7 +58,7 @@ describe Mongoid::Fields::Standard do
58
58
  end
59
59
 
60
60
  it "returns false" do
61
- field.should_not be_pre_processed
61
+ expect(field).to_not be_pre_processed
62
62
  end
63
63
  end
64
64
  end
@@ -75,7 +75,7 @@ describe Mongoid::Fields::Standard do
75
75
  end
76
76
 
77
77
  it "returns true" do
78
- field.should be_pre_processed
78
+ expect(field).to be_pre_processed
79
79
  end
80
80
  end
81
81
  end
@@ -90,7 +90,7 @@ describe Mongoid::Fields::Standard do
90
90
  end
91
91
 
92
92
  it "returns false" do
93
- field.should_not be_pre_processed
93
+ expect(field).to_not be_pre_processed
94
94
  end
95
95
  end
96
96
  end
@@ -102,7 +102,7 @@ describe Mongoid::Fields::Standard do
102
102
  end
103
103
 
104
104
  it "does not conflict with the ruby core hash" do
105
- image.hash_is_hash.should be_true
105
+ expect(image.hash_is_hash).to be true
106
106
  end
107
107
  end
108
108
 
@@ -119,14 +119,14 @@ describe Mongoid::Fields::Standard do
119
119
  end
120
120
 
121
121
  it "allows normal hash access" do
122
- hash[:key].should eq("value")
122
+ expect(hash[:key]).to eq("value")
123
123
  end
124
124
  end
125
125
 
126
126
  context "when getting a non existant value" do
127
127
 
128
128
  it "returns nil" do
129
- hash[:key].should be_nil
129
+ expect(hash[:key]).to be_nil
130
130
  end
131
131
  end
132
132
  end
@@ -138,11 +138,11 @@ describe Mongoid::Fields::Standard do
138
138
  end
139
139
 
140
140
  it "inherits the parents deserialize method" do
141
- Thumbnail.demongoize("testy").name.should eq("testy")
141
+ expect(Thumbnail.demongoize("testy").name).to eq("testy")
142
142
  end
143
143
 
144
144
  it "inherits the parents serialize method" do
145
- thumbnail.mongoize.should eq("test")
145
+ expect(thumbnail.mongoize).to eq("test")
146
146
  end
147
147
 
148
148
  context "when instantiating the class" do
@@ -155,11 +155,11 @@ describe Mongoid::Fields::Standard do
155
155
  end
156
156
 
157
157
  it "deserializes the parent type" do
158
- movie.poster.name.should eq("poster")
158
+ expect(movie.poster.name).to eq("poster")
159
159
  end
160
160
 
161
161
  it "deserializes the child type" do
162
- movie.poster_thumb.name.should eq("thumb")
162
+ expect(movie.poster_thumb.name).to eq("thumb")
163
163
  end
164
164
  end
165
165
  end
@@ -31,10 +31,14 @@ describe Mongoid::Fields do
31
31
  end
32
32
 
33
33
  it "returns all the translations" do
34
- translations.should eq(
34
+ expect(translations).to eq(
35
35
  { "en" => "test", "de" => "The best" }
36
36
  )
37
37
  end
38
+
39
+ it "returns translations as a HashWithIndifferentAccess" do
40
+ expect(translations[:en]).to eq("test")
41
+ end
38
42
  end
39
43
 
40
44
  context "when translations do not exist" do
@@ -42,25 +46,33 @@ describe Mongoid::Fields do
42
46
  context "when no default is provided" do
43
47
 
44
48
  it "returns an empty hash" do
45
- product.description_translations.should be_empty
49
+ expect(product.description_translations).to be_empty
46
50
  end
47
51
  end
48
52
 
49
53
  context "when a default is provided" do
50
54
 
51
55
  it "returns the translations with the default" do
52
- product.name_translations.should eq(
56
+ expect(product.name_translations).to eq(
53
57
  { "en" => "no translation" }
54
58
  )
55
59
  end
56
60
  end
57
61
  end
62
+
63
+ it "should have alias method #\{field}_t" do
64
+ expect(product.method(:name_t)).to eq product.method(:name_translations)
65
+ end
58
66
  end
59
67
 
60
68
  context "when the field is not localized" do
61
69
 
62
70
  it "does not respond to the method" do
63
- product.should_not respond_to(:price_translations)
71
+ expect(product).to_not respond_to(:price_translations)
72
+ end
73
+
74
+ it "does not respond to the alias method" do
75
+ expect(product).to_not respond_to(:price_t)
64
76
  end
65
77
  end
66
78
  end
@@ -88,7 +100,7 @@ describe Mongoid::Fields do
88
100
  end
89
101
 
90
102
  it "sets the raw values of the translations" do
91
- product.description_translations.should eq(translations)
103
+ expect(product.description_translations).to eq(translations)
92
104
  end
93
105
 
94
106
  context "when saving the new translations" do
@@ -98,7 +110,7 @@ describe Mongoid::Fields do
98
110
  end
99
111
 
100
112
  it "persists the changes" do
101
- product.reload.description_translations.should eq(translations)
113
+ expect(product.reload.description_translations).to eq(translations)
102
114
  end
103
115
 
104
116
  context "when updating the translations" do
@@ -109,7 +121,7 @@ describe Mongoid::Fields do
109
121
  end
110
122
 
111
123
  it "persists the changes" do
112
- product.reload.description_translations.should eq(
124
+ expect(product.reload.description_translations).to eq(
113
125
  { "en" => "overwritten" }
114
126
  )
115
127
  end
@@ -128,7 +140,7 @@ describe Mongoid::Fields do
128
140
  end
129
141
 
130
142
  it "sets the mongoized values of the translations" do
131
- dictionary.description_translations.should eq(
143
+ expect(dictionary.description_translations).to eq(
132
144
  { "en" => "1", "de" => "2" }
133
145
  )
134
146
  end
@@ -140,7 +152,7 @@ describe Mongoid::Fields do
140
152
  end
141
153
 
142
154
  it "persists the changes" do
143
- dictionary.reload.description_translations.should eq(
155
+ expect(dictionary.reload.description_translations).to eq(
144
156
  { "en" => "1", "de" => "2" }
145
157
  )
146
158
  end
@@ -153,19 +165,27 @@ describe Mongoid::Fields do
153
165
  end
154
166
 
155
167
  it "persists the changes" do
156
- dictionary.reload.description_translations.should eq(
168
+ expect(dictionary.reload.description_translations).to eq(
157
169
  { "en" => "overwritten" }
158
170
  )
159
171
  end
160
172
  end
161
173
  end
162
174
  end
175
+
176
+ it "should have alias method #\{field}_t=" do
177
+ expect(product.method(:name_t=)).to eq product.method(:name_translations=)
178
+ end
163
179
  end
164
180
 
165
181
  context "when the field is not localized" do
166
182
 
167
183
  it "does not respond to the method" do
168
- product.should_not respond_to(:price_translations=)
184
+ expect(product).to_not respond_to(:price_translations=)
185
+ end
186
+
187
+ it "does not respond to the alias method" do
188
+ expect(product).to_not respond_to(:price_t=)
169
189
  end
170
190
  end
171
191
  end
@@ -179,7 +199,7 @@ describe Mongoid::Fields do
179
199
  context "when the document is subclassed" do
180
200
 
181
201
  it "does not include the child aliases" do
182
- person.aliased_fields.keys.should_not include("spec")
202
+ expect(person.aliased_fields.keys).to_not include("spec")
183
203
  end
184
204
  end
185
205
  end
@@ -193,19 +213,19 @@ describe Mongoid::Fields do
193
213
  end
194
214
 
195
215
  it "includes the _id field" do
196
- shape.attribute_names.should include("_id")
216
+ expect(shape.attribute_names).to include("_id")
197
217
  end
198
218
 
199
219
  it "includes the _type field" do
200
- shape.attribute_names.should include("_type")
220
+ expect(shape.attribute_names).to include("_type")
201
221
  end
202
222
 
203
223
  it "includes its own fields" do
204
- shape.attribute_names.should include("x")
224
+ expect(shape.attribute_names).to include("x")
205
225
  end
206
226
 
207
227
  it "does not return subclass fields" do
208
- shape.attribute_names.should_not include("radius")
228
+ expect(shape.attribute_names).to_not include("radius")
209
229
  end
210
230
  end
211
231
 
@@ -216,23 +236,23 @@ describe Mongoid::Fields do
216
236
  end
217
237
 
218
238
  it "includes the _id field" do
219
- circle.attribute_names.should include("_id")
239
+ expect(circle.attribute_names).to include("_id")
220
240
  end
221
241
 
222
242
  it "includes the _type field" do
223
- circle.attribute_names.should include("_type")
243
+ expect(circle.attribute_names).to include("_type")
224
244
  end
225
245
 
226
246
  it "includes the first parent field" do
227
- circle.attribute_names.should include("x")
247
+ expect(circle.attribute_names).to include("x")
228
248
  end
229
249
 
230
250
  it "includes the second parent field" do
231
- circle.attribute_names.should include("y")
251
+ expect(circle.attribute_names).to include("y")
232
252
  end
233
253
 
234
254
  it "includes the child fields" do
235
- circle.attribute_names.should include("radius")
255
+ expect(circle.attribute_names).to include("radius")
236
256
  end
237
257
  end
238
258
  end
@@ -242,42 +262,42 @@ describe Mongoid::Fields do
242
262
  context "when the class is a parent" do
243
263
 
244
264
  it "includes the _id field" do
245
- Shape.attribute_names.should include("_id")
265
+ expect(Shape.attribute_names).to include("_id")
246
266
  end
247
267
 
248
268
  it "includes the _type field" do
249
- Shape.attribute_names.should include("_type")
269
+ expect(Shape.attribute_names).to include("_type")
250
270
  end
251
271
 
252
272
  it "includes its own fields" do
253
- Shape.attribute_names.should include("x")
273
+ expect(Shape.attribute_names).to include("x")
254
274
  end
255
275
 
256
276
  it "does not return subclass fields" do
257
- Shape.attribute_names.should_not include("radius")
277
+ expect(Shape.attribute_names).to_not include("radius")
258
278
  end
259
279
  end
260
280
 
261
281
  context "when the class is a subclass" do
262
282
 
263
283
  it "includes the _id field" do
264
- Circle.attribute_names.should include("_id")
284
+ expect(Circle.attribute_names).to include("_id")
265
285
  end
266
286
 
267
287
  it "includes the _type field" do
268
- Circle.attribute_names.should include("_type")
288
+ expect(Circle.attribute_names).to include("_type")
269
289
  end
270
290
 
271
291
  it "includes the first parent field" do
272
- Circle.attribute_names.should include("x")
292
+ expect(Circle.attribute_names).to include("x")
273
293
  end
274
294
 
275
295
  it "includes the second parent field" do
276
- Circle.attribute_names.should include("y")
296
+ expect(Circle.attribute_names).to include("y")
277
297
  end
278
298
 
279
299
  it "includes the child fields" do
280
- Circle.attribute_names.should include("radius")
300
+ expect(Circle.attribute_names).to include("radius")
281
301
  end
282
302
  end
283
303
  end
@@ -289,6 +309,92 @@ describe Mongoid::Fields do
289
309
  end
290
310
  end
291
311
 
312
+ context "when providing a root Boolean type" do
313
+
314
+ let(:klass) do
315
+ Class.new do
316
+ include Mongoid::Document
317
+ end
318
+ end
319
+
320
+ it "converts to Mongoid::Boolean" do
321
+ expect(klass.field(:test, type: Boolean).type).to be(Mongoid::Boolean)
322
+ end
323
+ end
324
+
325
+ context "when using symbol types" do
326
+
327
+ let(:klass) do
328
+ Class.new do
329
+ include Mongoid::Document
330
+ end
331
+ end
332
+
333
+ it "converts :array to Array" do
334
+ expect(klass.field(:test, type: :array).type).to be(Array)
335
+ end
336
+
337
+ it "converts :big_decimal to BigDecimal" do
338
+ expect(klass.field(:test, type: :big_decimal).type).to be(BigDecimal)
339
+ end
340
+
341
+ it "converts :binary to BSON::Binary" do
342
+ expect(klass.field(:test, type: :binary).type).to be(BSON::Binary)
343
+ end
344
+
345
+ it "converts :boolean to Mongoid::Boolean" do
346
+ expect(klass.field(:test, type: :boolean).type).to be(Mongoid::Boolean)
347
+ end
348
+
349
+ it "converts :date to Date" do
350
+ expect(klass.field(:test, type: :date).type).to be(Date)
351
+ end
352
+
353
+ it "converts :date_time to DateTime" do
354
+ expect(klass.field(:test, type: :date_time).type).to be(DateTime)
355
+ end
356
+
357
+ it "converts :float to Float" do
358
+ expect(klass.field(:test, type: :float).type).to be(Float)
359
+ end
360
+
361
+ it "converts :hash to Hash" do
362
+ expect(klass.field(:test, type: :hash).type).to be(Hash)
363
+ end
364
+
365
+ it "converts :integer to Integer" do
366
+ expect(klass.field(:test, type: :integer).type).to be(Integer)
367
+ end
368
+
369
+ it "converts :object_id to BSON::ObjectId" do
370
+ expect(klass.field(:test, type: :object_id).type).to be(BSON::ObjectId)
371
+ end
372
+
373
+ it "converts :range to Range" do
374
+ expect(klass.field(:test, type: :range).type).to be(Range)
375
+ end
376
+
377
+ it "converts :regexp to Rexegp" do
378
+ expect(klass.field(:test, type: :regexp).type).to be(Regexp)
379
+ end
380
+
381
+ it "converts :set to Set" do
382
+ expect(klass.field(:test, type: :set).type).to be(Set)
383
+ end
384
+
385
+ it "converts :string to String" do
386
+ expect(klass.field(:test, type: :string).type).to be(String)
387
+ end
388
+
389
+ it "converts :symbol to Symbol" do
390
+ expect(klass.field(:test, type: :symbol).type).to be(Symbol)
391
+ end
392
+
393
+ it "converts :time to Time" do
394
+ expect(klass.field(:test, type: :time).type).to be(Time)
395
+ end
396
+ end
397
+
292
398
  context "when the options are valid" do
293
399
 
294
400
  context "when the options are all standard" do
@@ -302,7 +408,7 @@ describe Mongoid::Fields do
302
408
  end
303
409
 
304
410
  it "adds the field to the model" do
305
- Band.fields["acceptable"].should_not be_nil
411
+ expect(Band.fields["acceptable"]).to_not be_nil
306
412
  end
307
413
  end
308
414
 
@@ -313,7 +419,7 @@ describe Mongoid::Fields do
313
419
  end
314
420
 
315
421
  it "adds the field to the model" do
316
- Band.fields["acceptable"].should_not be_nil
422
+ expect(Band.fields["acceptable"]).to_not be_nil
317
423
  end
318
424
  end
319
425
  end
@@ -333,7 +439,7 @@ describe Mongoid::Fields do
333
439
  context "when the field is binary" do
334
440
 
335
441
  let(:binary) do
336
- Moped::BSON::Binary.new(:md5, "testing")
442
+ BSON::Binary.new("testing", :md5)
337
443
  end
338
444
 
339
445
  let(:registry) do
@@ -341,7 +447,7 @@ describe Mongoid::Fields do
341
447
  end
342
448
 
343
449
  it "returns the binary data intact" do
344
- registry.data.should eq(binary)
450
+ expect(registry.data).to eq(binary)
345
451
  end
346
452
  end
347
453
 
@@ -362,7 +468,7 @@ describe Mongoid::Fields do
362
468
  end
363
469
 
364
470
  it "returns the default locale value" do
365
- description.should eq("The best")
471
+ expect(description).to eq("The best")
366
472
  end
367
473
  end
368
474
 
@@ -382,7 +488,7 @@ describe Mongoid::Fields do
382
488
  end
383
489
 
384
490
  it "returns the set locale value" do
385
- description.should eq("The best")
491
+ expect(description).to eq("The best")
386
492
  end
387
493
  end
388
494
 
@@ -403,7 +509,7 @@ describe Mongoid::Fields do
403
509
  end
404
510
 
405
511
  it "returns the current locale value" do
406
- description.should eq("Cheaper drinks")
512
+ expect(description).to eq("Cheaper drinks")
407
513
  end
408
514
  end
409
515
  end
@@ -417,7 +523,7 @@ describe Mongoid::Fields do
417
523
  context "when the attribute has not been assigned" do
418
524
 
419
525
  it "delgates to the getter" do
420
- person.age_before_type_cast.should eq(person.age)
526
+ expect(person.age_before_type_cast).to eq(person.age)
421
527
  end
422
528
  end
423
529
 
@@ -425,7 +531,7 @@ describe Mongoid::Fields do
425
531
 
426
532
  it "returns the attribute before type cast" do
427
533
  person.age = "old"
428
- person.age_before_type_cast.should eq("old")
534
+ expect(person.age_before_type_cast).to eq("old")
429
535
  end
430
536
  end
431
537
  end
@@ -436,10 +542,24 @@ describe Mongoid::Fields do
436
542
  Product.new
437
543
  end
438
544
 
545
+ context "when setting via the setter" do
546
+
547
+ it "returns the set value" do
548
+ expect(product.price = 10).to eq(10)
549
+ end
550
+ end
551
+
552
+ context "when setting via send" do
553
+
554
+ it "returns the set value" do
555
+ expect(product.send(:price=, 10)).to eq(10)
556
+ end
557
+ end
558
+
439
559
  context "when the field is binary" do
440
560
 
441
561
  let(:binary) do
442
- Moped::BSON::Binary.new(:md5, "testing")
562
+ BSON::Binary.new("testing", :md5)
443
563
  end
444
564
 
445
565
  let(:registry) do
@@ -451,7 +571,7 @@ describe Mongoid::Fields do
451
571
  end
452
572
 
453
573
  it "returns the binary data intact" do
454
- registry.data.should eq(binary)
574
+ expect(registry.data).to eq(binary)
455
575
  end
456
576
  end
457
577
 
@@ -470,7 +590,7 @@ describe Mongoid::Fields do
470
590
  end
471
591
 
472
592
  it "allows the set" do
473
- product.stores.should be_nil
593
+ expect(product.stores).to be_nil
474
594
  end
475
595
  end
476
596
 
@@ -482,11 +602,11 @@ describe Mongoid::Fields do
482
602
  end
483
603
 
484
604
  it "allows the set of nil values" do
485
- product.stores.should eq([ "kadewe", nil ])
605
+ expect(product.stores).to eq([ "kadewe", nil ])
486
606
  end
487
607
 
488
608
  it "persists the nil values" do
489
- product.reload.stores.should eq([ "kadewe", nil ])
609
+ expect(product.reload.stores).to eq([ "kadewe", nil ])
490
610
  end
491
611
  end
492
612
 
@@ -498,11 +618,11 @@ describe Mongoid::Fields do
498
618
  end
499
619
 
500
620
  it "reverses the values" do
501
- product.stores.should eq([ "karstadt", "kadewe" ])
621
+ expect(product.stores).to eq([ "karstadt", "kadewe" ])
502
622
  end
503
623
 
504
624
  it "persists the changes" do
505
- product.reload.stores.should eq([ "karstadt", "kadewe" ])
625
+ expect(product.reload.stores).to eq([ "karstadt", "kadewe" ])
506
626
  end
507
627
  end
508
628
  end
@@ -520,7 +640,7 @@ describe Mongoid::Fields do
520
640
  end
521
641
 
522
642
  it "sets the value in the default locale" do
523
- description.should eq({ "en" => "Cheap drinks" })
643
+ expect(description).to eq({ "en" => "Cheap drinks" })
524
644
  end
525
645
  end
526
646
 
@@ -540,7 +660,7 @@ describe Mongoid::Fields do
540
660
  end
541
661
 
542
662
  it "sets the value in the default locale" do
543
- description.should eq({ "de" => "Cheaper drinks" })
663
+ expect(description).to eq({ "de" => "Cheaper drinks" })
544
664
  end
545
665
  end
546
666
 
@@ -561,7 +681,7 @@ describe Mongoid::Fields do
561
681
  end
562
682
 
563
683
  it "sets the value in both locales" do
564
- description.should eq(
684
+ expect(description).to eq(
565
685
  { "de" => "Cheaper drinks", "en" => "Cheap drinks" }
566
686
  )
567
687
  end
@@ -584,7 +704,7 @@ describe Mongoid::Fields do
584
704
  context "when provided a default array" do
585
705
 
586
706
  before do
587
- Person.field(:array_testing, type: Array, default: [])
707
+ Person.field(:array_testing, type: Array, default: [], overwrite: true)
588
708
  end
589
709
 
590
710
  after do
@@ -593,7 +713,7 @@ describe Mongoid::Fields do
593
713
  end
594
714
 
595
715
  it "returns an equal object of a different instance" do
596
- person_one.array_testing.object_id.should_not eq(
716
+ expect(person_one.array_testing.object_id).to_not eq(
597
717
  person_two.array_testing.object_id
598
718
  )
599
719
  end
@@ -602,7 +722,7 @@ describe Mongoid::Fields do
602
722
  context "when provided a default hash" do
603
723
 
604
724
  before do
605
- Person.field(:hash_testing, type: Hash, default: {})
725
+ Person.field(:hash_testing, type: Hash, default: {}, overwrite: true)
606
726
  end
607
727
 
608
728
  after do
@@ -610,7 +730,7 @@ describe Mongoid::Fields do
610
730
  end
611
731
 
612
732
  it "returns an equal object of a different instance" do
613
- person_one.hash_testing.object_id.should_not eq(
733
+ expect(person_one.hash_testing.object_id).to_not eq(
614
734
  person_two.hash_testing.object_id
615
735
  )
616
736
  end
@@ -624,7 +744,8 @@ describe Mongoid::Fields do
624
744
  Person.field(
625
745
  :generated_testing,
626
746
  type: Float,
627
- default: ->{ Time.now.to_f }
747
+ default: ->{ Time.now.to_f },
748
+ overwrite: true
628
749
  )
629
750
  end
630
751
 
@@ -634,7 +755,7 @@ describe Mongoid::Fields do
634
755
  end
635
756
 
636
757
  it "returns an equal object of a different instance" do
637
- person_one.generated_testing.object_id.should_not eq(
758
+ expect(person_one.generated_testing.object_id).to_not eq(
638
759
  person_two.generated_testing.object_id
639
760
  )
640
761
  end
@@ -646,7 +767,8 @@ describe Mongoid::Fields do
646
767
  Person.field(
647
768
  :rank,
648
769
  type: Integer,
649
- default: ->{ title? ? 1 : 2 }
770
+ default: ->{ title? ? 1 : 2 },
771
+ overwrite: true
650
772
  )
651
773
  end
652
774
 
@@ -656,7 +778,7 @@ describe Mongoid::Fields do
656
778
  end
657
779
 
658
780
  it "yields the document to the proc" do
659
- Person.new.rank.should eq(2)
781
+ expect(Person.new.rank).to eq(2)
660
782
  end
661
783
  end
662
784
  end
@@ -669,7 +791,7 @@ describe Mongoid::Fields do
669
791
  end
670
792
 
671
793
  it "does not return subclass defaults" do
672
- shape.pre_processed_defaults.should eq([ "_id", "x", "y", "_type" ])
794
+ expect(shape.pre_processed_defaults).to eq([ "_id", "x", "y", "_type" ])
673
795
  end
674
796
  end
675
797
 
@@ -680,7 +802,7 @@ describe Mongoid::Fields do
680
802
  end
681
803
 
682
804
  it "has the parent and child defaults" do
683
- circle.pre_processed_defaults.should eq([ "_id", "x", "y", "_type", "radius" ])
805
+ expect(circle.pre_processed_defaults).to eq([ "_id", "x", "y", "_type", "radius" ])
684
806
  end
685
807
  end
686
808
  end
@@ -688,21 +810,46 @@ describe Mongoid::Fields do
688
810
  describe ".field" do
689
811
 
690
812
  it "returns the generated field" do
691
- Person.field(:testing).should equal Person.fields["testing"]
813
+ expect(Person.field(:testing)).to eq(Person.fields["testing"])
692
814
  end
693
815
 
694
816
  context "when the field name conflicts with mongoid's internals" do
695
817
 
696
- context "when the field is named metadata" do
818
+ [:__metadata, :invalid].each do |meth|
819
+ context "when the field is named #{meth}" do
697
820
 
698
- it "raises an error" do
699
- expect {
700
- Person.field(:metadata)
701
- }.to raise_error(Mongoid::Errors::InvalidField)
821
+ it "raises an error" do
822
+ expect {
823
+ Person.field(meth)
824
+ }.to raise_error(Mongoid::Errors::InvalidField)
825
+ end
702
826
  end
703
827
  end
704
828
  end
705
829
 
830
+ context "when field already exist and validate_duplicate is enable" do
831
+
832
+ before do
833
+ Mongoid.duplicate_fields_exception = true
834
+ end
835
+
836
+ after do
837
+ Mongoid.duplicate_fields_exception = false
838
+ end
839
+
840
+ it "raises an error" do
841
+ expect {
842
+ Person.field(:title)
843
+ }.to raise_error(Mongoid::Errors::InvalidField)
844
+ end
845
+
846
+ it "doesn't raise an error" do
847
+ expect {
848
+ Class.new(Person)
849
+ }.to_not raise_error
850
+ end
851
+ end
852
+
706
853
  context "when the field is a time" do
707
854
 
708
855
  let!(:time) do
@@ -724,7 +871,7 @@ describe Mongoid::Fields do
724
871
  end
725
872
 
726
873
  it "performs the necessary time conversions" do
727
- person.lunch_time.to_s.should eq(time.getlocal.to_s)
874
+ expect(person.lunch_time.to_s).to eq(time.getlocal.to_s)
728
875
  end
729
876
  end
730
877
  end
@@ -732,7 +879,7 @@ describe Mongoid::Fields do
732
879
  context "when providing no options" do
733
880
 
734
881
  before do
735
- Person.field(:testing)
882
+ Person.field(:testing, overwrite: true)
736
883
  end
737
884
 
738
885
  let(:person) do
@@ -740,15 +887,15 @@ describe Mongoid::Fields do
740
887
  end
741
888
 
742
889
  it "adds a reader for the fields defined" do
743
- person.testing.should eq("Test")
890
+ expect(person.testing).to eq("Test")
744
891
  end
745
892
 
746
893
  it "adds a writer for the fields defined" do
747
- (person.testing = "Testy").should eq("Testy")
894
+ (person.testing = expect("Testy")).to eq("Testy")
748
895
  end
749
896
 
750
897
  it "adds an existance method" do
751
- Person.new.testing?.should be_false
898
+ expect(Person.new.testing?).to be false
752
899
  end
753
900
 
754
901
  context "when overwriting an existing field" do
@@ -765,7 +912,7 @@ describe Mongoid::Fields do
765
912
  end
766
913
 
767
914
  it "properly overwrites the method" do
768
- person.testing_override_called.should be_true
915
+ expect(person.testing_override_called).to be true
769
916
  end
770
917
  end
771
918
  end
@@ -777,7 +924,7 @@ describe Mongoid::Fields do
777
924
  end
778
925
 
779
926
  it "returns the given value" do
780
- bob.reading.should eq(10.023)
927
+ expect(bob.reading).to eq(10.023)
781
928
  end
782
929
  end
783
930
 
@@ -788,7 +935,7 @@ describe Mongoid::Fields do
788
935
  end
789
936
 
790
937
  it "adds an accessor method with a question mark" do
791
- person.terms?.should be_true
938
+ expect(person.terms?).to be true
792
939
  end
793
940
  end
794
941
 
@@ -799,39 +946,39 @@ describe Mongoid::Fields do
799
946
  end
800
947
 
801
948
  before do
802
- Person.field :aliased, as: :alias, type: Boolean
949
+ Person.field :aliased, as: :alias, type: Boolean, overwrite: true
803
950
  end
804
951
 
805
952
  it "uses the alias to write the attribute" do
806
- (person.alias = true).should be_true
953
+ (person.alias = expect(true)).to be true
807
954
  end
808
955
 
809
956
  it "uses the alias to read the attribute" do
810
- person.alias.should be_true
957
+ expect(person.alias).to be true
811
958
  end
812
959
 
813
960
  it "uses the alias for the query method" do
814
- person.should be_alias
961
+ expect(person).to be_alias
815
962
  end
816
963
 
817
964
  it "uses the name to write the attribute" do
818
- (person.aliased = true).should be_true
965
+ (person.aliased = expect(true)).to be true
819
966
  end
820
967
 
821
968
  it "uses the name to read the attribute" do
822
- person.aliased.should be_true
969
+ expect(person.aliased).to be true
823
970
  end
824
971
 
825
972
  it "uses the name for the query method" do
826
- person.should be_aliased
973
+ expect(person).to be_aliased
827
974
  end
828
975
 
829
976
  it "creates dirty methods for the name" do
830
- person.should respond_to(:aliased_changed?)
977
+ expect(person).to respond_to(:aliased_changed?)
831
978
  end
832
979
 
833
980
  it "creates dirty methods for the alias" do
834
- person.should respond_to(:alias_changed?)
981
+ expect(person).to respond_to(:alias_changed?)
835
982
  end
836
983
 
837
984
  context "when changing the name" do
@@ -841,11 +988,11 @@ describe Mongoid::Fields do
841
988
  end
842
989
 
843
990
  it "sets name_changed?" do
844
- person.aliased_changed?.should be_true
991
+ expect(person.aliased_changed?).to be true
845
992
  end
846
993
 
847
994
  it "sets alias_changed?" do
848
- person.alias_changed?.should be_true
995
+ expect(person.alias_changed?).to be true
849
996
  end
850
997
  end
851
998
 
@@ -856,11 +1003,11 @@ describe Mongoid::Fields do
856
1003
  end
857
1004
 
858
1005
  it "sets name_changed?" do
859
- person.aliased_changed?.should be_true
1006
+ expect(person.aliased_changed?).to be true
860
1007
  end
861
1008
 
862
1009
  it "sets alias_changed?" do
863
- person.alias_changed?.should be_true
1010
+ expect(person.alias_changed?).to be true
864
1011
  end
865
1012
  end
866
1013
 
@@ -871,7 +1018,7 @@ describe Mongoid::Fields do
871
1018
  end
872
1019
 
873
1020
  it "properly serializes the aliased field" do
874
- criteria.selector.should eq({ "aliased" => true })
1021
+ expect(criteria.selector).to eq({ "aliased" => true })
875
1022
  end
876
1023
  end
877
1024
  end
@@ -889,44 +1036,24 @@ describe Mongoid::Fields do
889
1036
  context "when option is provided" do
890
1037
 
891
1038
  it "calls the handler with the model" do
892
- handler.should_receive(:call).with do |model,_,_|
893
- model.should eql User
894
- end
895
-
896
- User.field :custom, option: true
897
- end
898
-
899
- it "calls the handler with the field" do
900
- handler.should_receive(:call).with do |_,field,_|
901
- field.should eql User.fields["custom"]
902
- end
903
-
904
- User.field :custom, option: true
905
- end
906
-
907
- it "calls the handler with the option value" do
908
- handler.should_receive(:call).with do |_,_,value|
909
- value.should eql true
910
- end
911
-
912
- User.field :custom, option: true
1039
+ User.field :custom, option: true, overwrite: true
1040
+ expect(User.fields["custom"].options[:option]).to be_truthy
913
1041
  end
914
1042
  end
915
1043
 
916
1044
  context "when option is nil" do
917
1045
 
918
1046
  it "calls the handler" do
919
- handler.should_receive(:call)
920
- User.field :custom, option: nil
1047
+ expect(handler).to receive(:call)
1048
+ User.field :custom, option: nil, overwrite: true
921
1049
  end
922
1050
  end
923
1051
 
924
1052
  context "when option is not provided" do
925
1053
 
926
1054
  it "does not call the handler" do
927
- handler.should_receive(:call).never
928
-
929
- User.field :custom
1055
+ expect(handler).to receive(:call).never
1056
+ User.field :custom, overwrite: true
930
1057
  end
931
1058
  end
932
1059
  end
@@ -941,11 +1068,11 @@ describe Mongoid::Fields do
941
1068
  end
942
1069
 
943
1070
  it "includes its own fields" do
944
- shape.fields.keys.should include("x")
1071
+ expect(shape.fields.keys).to include("x")
945
1072
  end
946
1073
 
947
1074
  it "does not return subclass fields" do
948
- shape.fields.keys.should_not include("radius")
1075
+ expect(shape.fields.keys).to_not include("radius")
949
1076
  end
950
1077
  end
951
1078
 
@@ -956,15 +1083,15 @@ describe Mongoid::Fields do
956
1083
  end
957
1084
 
958
1085
  it "includes the first parent field" do
959
- circle.fields.keys.should include("x")
1086
+ expect(circle.fields.keys).to include("x")
960
1087
  end
961
1088
 
962
1089
  it "includes the second parent field" do
963
- circle.fields.keys.should include("y")
1090
+ expect(circle.fields.keys).to include("y")
964
1091
  end
965
1092
 
966
1093
  it "includes the child fields" do
967
- circle.fields.keys.should include("radius")
1094
+ expect(circle.fields.keys).to include("radius")
968
1095
  end
969
1096
  end
970
1097
  end
@@ -972,7 +1099,7 @@ describe Mongoid::Fields do
972
1099
  describe ".replace_field" do
973
1100
 
974
1101
  let!(:original) do
975
- Person.field(:id_test, type: Moped::BSON::ObjectId, label: "id")
1102
+ Person.field(:id_test, type: BSON::ObjectId, label: "id")
976
1103
  end
977
1104
 
978
1105
  let!(:altered) do
@@ -988,11 +1115,11 @@ describe Mongoid::Fields do
988
1115
  end
989
1116
 
990
1117
  it "sets the new type on the field" do
991
- new_field.type.should eq(String)
1118
+ expect(new_field.type).to eq(String)
992
1119
  end
993
1120
 
994
1121
  it "keeps the options from the old field" do
995
- new_field.options[:label].should eq("id")
1122
+ expect(new_field.options[:label]).to eq("id")
996
1123
  end
997
1124
  end
998
1125
 
@@ -1009,7 +1136,7 @@ describe Mongoid::Fields do
1009
1136
  end
1010
1137
 
1011
1138
  it "resets the fields" do
1012
- fields.keys.should include("user_id")
1139
+ expect(fields.keys).to include("user_id")
1013
1140
  end
1014
1141
  end
1015
1142
 
@@ -1020,7 +1147,7 @@ describe Mongoid::Fields do
1020
1147
  end
1021
1148
 
1022
1149
  it "resets the fields" do
1023
- fields.keys.should include("user_id")
1150
+ expect(fields.keys).to include("user_id")
1024
1151
  end
1025
1152
  end
1026
1153
  end
@@ -1032,88 +1159,7 @@ describe Mongoid::Fields do
1032
1159
  end
1033
1160
 
1034
1161
  it "sets the default value pre process" do
1035
- person.map_with_default.should eq({ "key" => "testing" })
1036
- end
1037
- end
1038
-
1039
- context "when dealing with auto protection" do
1040
-
1041
- context "when auto protect ids and types is true" do
1042
-
1043
- context "when redefining as accessible" do
1044
-
1045
- before do
1046
- Person.attr_accessible :id, :_id, :_type
1047
- end
1048
-
1049
- after do
1050
- Person.attr_protected :id, :_id, :_type
1051
- end
1052
-
1053
- let(:bson_id) do
1054
- Moped::BSON::ObjectId.new
1055
- end
1056
-
1057
- it "allows mass assignment of id" do
1058
- Person.new(_id: bson_id).id.should eq(bson_id)
1059
- end
1060
-
1061
- it "allows mass assignment of type" do
1062
- Person.new(_type: "Something")._type.should eq("Something")
1063
- end
1064
- end
1065
-
1066
- context "when redefining as protected" do
1067
-
1068
- before do
1069
- Person.attr_protected :id, :_id, :_type
1070
- end
1071
-
1072
- let(:bson_id) do
1073
- Moped::BSON::ObjectId.new
1074
- end
1075
-
1076
- it "protects assignment of id" do
1077
- Person.new(_id: bson_id).id.should_not eq(bson_id)
1078
- end
1079
-
1080
- it "protects assignment of type" do
1081
- Person.new(_type: "Something")._type.should_not eq("Something")
1082
- end
1083
- end
1084
- end
1085
-
1086
- context "when auto protecting ids and types is false" do
1087
-
1088
- before do
1089
- Mongoid.protect_sensitive_fields = false
1090
- end
1091
-
1092
- after do
1093
- Mongoid.protect_sensitive_fields = true
1094
- end
1095
-
1096
- let(:klass) do
1097
- Class.new do
1098
- include Mongoid::Document
1099
- end
1100
- end
1101
-
1102
- let(:bson_id) do
1103
- Moped::BSON::ObjectId.new
1104
- end
1105
-
1106
- let(:model) do
1107
- klass.new(id: bson_id, _type: "Model")
1108
- end
1109
-
1110
- it "allows mass assignment of id" do
1111
- model.id.should eq(bson_id)
1112
- end
1113
-
1114
- it "allows mass assignment of type" do
1115
- model._type.should eq("Model")
1116
- end
1162
+ expect(person.map_with_default).to eq({ "key" => "testing" })
1117
1163
  end
1118
1164
  end
1119
1165
 
@@ -1134,11 +1180,11 @@ describe Mongoid::Fields do
1134
1180
  end
1135
1181
 
1136
1182
  it "properly persists as a string" do
1137
- band.attributes["sales"].should eq(decimal.to_s)
1183
+ expect(band.attributes["sales"]).to eq(decimal.to_s)
1138
1184
  end
1139
1185
 
1140
1186
  it "returns the proper big decimal" do
1141
- band.sales.should eq(decimal)
1187
+ expect(band.sales).to eq(decimal)
1142
1188
  end
1143
1189
  end
1144
1190
 
@@ -1149,11 +1195,11 @@ describe Mongoid::Fields do
1149
1195
  end
1150
1196
 
1151
1197
  it "properly persists as a string" do
1152
- band.attributes["sales"].should eq(decimal.to_s)
1198
+ expect(band.attributes["sales"]).to eq(decimal.to_s)
1153
1199
  end
1154
1200
 
1155
1201
  it "returns the proper big decimal" do
1156
- band.sales.should eq(decimal)
1202
+ expect(band.sales).to eq(decimal)
1157
1203
  end
1158
1204
  end
1159
1205
 
@@ -1164,11 +1210,11 @@ describe Mongoid::Fields do
1164
1210
  end
1165
1211
 
1166
1212
  it "properly persists as a string" do
1167
- band.attributes["sales"].should eq("1000000")
1213
+ expect(band.attributes["sales"]).to eq("1000000")
1168
1214
  end
1169
1215
 
1170
1216
  it "returns the proper big decimal" do
1171
- band.sales.should eq(decimal)
1217
+ expect(band.sales).to eq(decimal)
1172
1218
  end
1173
1219
  end
1174
1220
 
@@ -1179,11 +1225,11 @@ describe Mongoid::Fields do
1179
1225
  end
1180
1226
 
1181
1227
  it "properly persists as a string" do
1182
- band.attributes["sales"].should eq(decimal.to_s)
1228
+ expect(band.attributes["sales"]).to eq(decimal.to_s)
1183
1229
  end
1184
1230
 
1185
1231
  it "returns the proper big decimal" do
1186
- band.sales.should eq(decimal)
1232
+ expect(band.sales).to eq(decimal)
1187
1233
  end
1188
1234
  end
1189
1235
  end
@@ -1209,7 +1255,7 @@ describe Mongoid::Fields do
1209
1255
  end
1210
1256
 
1211
1257
  it "properly updates the hash" do
1212
- person.map.should eq(
1258
+ expect(person.map).to eq(
1213
1259
  {
1214
1260
  "stack1" => [ 4, 3, 2, 1 ],
1215
1261
  "stack2" => [ 1, 2, 3, 4 ],
@@ -1219,7 +1265,7 @@ describe Mongoid::Fields do
1219
1265
  end
1220
1266
 
1221
1267
  it "persists the changes" do
1222
- person.reload.map.should eq(
1268
+ expect(person.reload.map).to eq(
1223
1269
  {
1224
1270
  "stack1" => [ 4, 3, 2, 1 ],
1225
1271
  "stack2" => [ 1, 2, 3, 4 ],
@@ -1242,11 +1288,11 @@ describe Mongoid::Fields do
1242
1288
  end
1243
1289
 
1244
1290
  it "does not override the parent" do
1245
- canvas.foo.should eq("original")
1291
+ expect(canvas.foo).to eq("original")
1246
1292
  end
1247
1293
 
1248
1294
  it "overrides the default" do
1249
- test.foo.should eq("overridden")
1295
+ expect(test.foo).to eq("overridden")
1250
1296
  end
1251
1297
  end
1252
1298
  end