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
@@ -66,4 +66,4 @@ module Mongoid
66
66
  end
67
67
 
68
68
  ::BigDecimal.__send__(:include, Mongoid::Extensions::BigDecimal)
69
- ::BigDecimal.__send__(:extend, Mongoid::Extensions::BigDecimal::ClassMethods)
69
+ ::BigDecimal.extend(Mongoid::Extensions::BigDecimal::ClassMethods)
@@ -1,24 +1,22 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid
3
- module Extensions
4
- module Boolean
5
- module ClassMethods
3
+ class Boolean
6
4
 
7
- # Turn the object from the ruby type we deal with to a Mongo friendly
8
- # type.
9
- #
10
- # @example Mongoize the object.
11
- # Boolean.mongoize("123.11")
12
- #
13
- # @return [ String ] The object mongoized.
14
- #
15
- # @since 3.0.0
16
- def mongoize(object)
17
- evolve(object)
18
- end
5
+ class << self
6
+
7
+ # Turn the object from the ruby type we deal with to a Mongo friendly
8
+ # type.
9
+ #
10
+ # @example Mongoize the object.
11
+ # Boolean.mongoize("123.11")
12
+ #
13
+ # @return [ String ] The object mongoized.
14
+ #
15
+ # @since 3.0.0
16
+ def mongoize(object)
17
+ ::Boolean.evolve(object)
19
18
  end
19
+ alias :evolve :mongoize
20
20
  end
21
21
  end
22
22
  end
23
-
24
- ::Boolean.__send__(:extend, Mongoid::Extensions::Boolean::ClassMethods)
@@ -74,4 +74,4 @@ module Mongoid
74
74
  end
75
75
 
76
76
  ::Date.__send__(:include, Mongoid::Extensions::Date)
77
- ::Date.__send__(:extend, Mongoid::Extensions::Date::ClassMethods)
77
+ ::Date.extend(Mongoid::Extensions::Date::ClassMethods)
@@ -12,9 +12,9 @@ module Mongoid
12
12
  #
13
13
  # @since 3.0.0
14
14
  def __mongoize_time__
15
- return self if utc? && Mongoid.use_utc?
15
+ return to_time if utc? && Mongoid.use_utc?
16
16
  if Mongoid.use_activesupport_time_zone?
17
- in_time_zone(::Time.zone)
17
+ in_time_zone(::Time.zone).to_time
18
18
  else
19
19
  time = to_time
20
20
  time.respond_to?(:getlocal) ? time.getlocal : time
@@ -70,4 +70,4 @@ module Mongoid
70
70
  end
71
71
 
72
72
  ::DateTime.__send__(:include, Mongoid::Extensions::DateTime)
73
- ::DateTime.__send__(:extend, Mongoid::Extensions::DateTime::ClassMethods)
73
+ ::DateTime.extend(Mongoid::Extensions::DateTime::ClassMethods)
@@ -47,10 +47,11 @@ module Mongoid
47
47
  nil
48
48
  end
49
49
  end
50
+ alias :demongoize :mongoize
50
51
  end
51
52
  end
52
53
  end
53
54
  end
54
55
 
55
56
  ::Float.__send__(:include, Mongoid::Extensions::Float)
56
- ::Float.__send__(:extend, Mongoid::Extensions::Float::ClassMethods)
57
+ ::Float.extend(Mongoid::Extensions::Float::ClassMethods)
@@ -40,7 +40,7 @@ module Mongoid
40
40
  each_pair do |key, value|
41
41
  if key =~ /\$/
42
42
  value.each_pair do |_key, _value|
43
- value[_key] = mongoize_for(key, klass, _key, _value)
43
+ value[_key] = (key == "$rename") ? _value.to_s : mongoize_for(key, klass, _key, _value)
44
44
  end
45
45
  (consolidated[key] ||= {}).merge!(value)
46
46
  else
@@ -170,7 +170,7 @@ module Mongoid
170
170
  field = klass.fields[key.to_s]
171
171
  if field
172
172
  val = field.mongoize(value)
173
- if Mongoid::Persistence::LIST_OPERATIONS.include?(operator) && field.resizable?
173
+ if Mongoid::Persistable::LIST_OPERATIONS.include?(operator) && field.resizable?
174
174
  val = val.first if !value.is_a?(Array)
175
175
  end
176
176
  val
@@ -214,4 +214,4 @@ module Mongoid
214
214
  end
215
215
 
216
216
  ::Hash.__send__(:include, Mongoid::Extensions::Hash)
217
- ::Hash.__send__(:extend, Mongoid::Extensions::Hash::ClassMethods)
217
+ ::Hash.extend(Mongoid::Extensions::Hash::ClassMethods)
@@ -64,4 +64,4 @@ module Mongoid
64
64
  end
65
65
 
66
66
  ::Integer.__send__(:include, Mongoid::Extensions::Integer)
67
- ::Integer.__send__(:extend, Mongoid::Extensions::Integer::ClassMethods)
67
+ ::Integer.extend(Mongoid::Extensions::Integer::ClassMethods)
@@ -104,19 +104,19 @@ module Mongoid
104
104
  send(name, *args) if name && respond_to?(name)
105
105
  end
106
106
 
107
- # Get the value for an instance variable or nil if it doesn't exist.
107
+ # Get the value for an instance variable or false if it doesn't exist.
108
108
  #
109
109
  # @example Get the value for an instance var.
110
110
  # document.ivar("person")
111
111
  #
112
112
  # @param [ String ] name The name of the variable.
113
113
  #
114
- # @return [ Object, nil ] The value or nil.
114
+ # @return [ Object, false ] The value or false.
115
115
  #
116
116
  # @since 2.0.0.rc.1
117
117
  def ivar(name)
118
- if instance_variable_defined?("@#{name}")
119
- return instance_variable_get("@#{name}")
118
+ if instance_variable_defined?("@_#{name}")
119
+ return instance_variable_get("@_#{name}")
120
120
  else
121
121
  false
122
122
  end
@@ -170,8 +170,8 @@ module Mongoid
170
170
  #
171
171
  # @since 2.1.0
172
172
  def remove_ivar(name)
173
- if instance_variable_defined?("@#{name}")
174
- return remove_instance_variable("@#{name}")
173
+ if instance_variable_defined?("@_#{name}")
174
+ return remove_instance_variable("@_#{name}")
175
175
  else
176
176
  false
177
177
  end
@@ -271,4 +271,4 @@ module Mongoid
271
271
  end
272
272
 
273
273
  ::Object.__send__(:include, Mongoid::Extensions::Object)
274
- ::Object.__send__(:extend, Mongoid::Extensions::Object::ClassMethods)
274
+ ::Object.extend(Mongoid::Extensions::Object::ClassMethods)
@@ -8,7 +8,7 @@ module Mongoid
8
8
  # @example Evolve the object id.
9
9
  # object_id.__evolve_object_id__
10
10
  #
11
- # @return [ Moped::BSON::ObjectId ] self.
11
+ # @return [ BSON::ObjectId ] self.
12
12
  #
13
13
  # @since 3.0.0
14
14
  def __evolve_object_id__
@@ -25,7 +25,7 @@ module Mongoid
25
25
  #
26
26
  # @param [ Object ] object The object to evolve.
27
27
  #
28
- # @return [ Moped::BSON::ObjectId ] The object id.
28
+ # @return [ BSON::ObjectId ] The object id.
29
29
  #
30
30
  # @since 3.0.0
31
31
  def evolve(object)
@@ -39,7 +39,7 @@ module Mongoid
39
39
  #
40
40
  # @param [ Object ] object The object to convert.
41
41
  #
42
- # @return [ Moped::BSON::ObjectId ] The object id.
42
+ # @return [ BSON::ObjectId ] The object id.
43
43
  #
44
44
  # @since 3.0.0
45
45
  def mongoize(object)
@@ -50,5 +50,5 @@ module Mongoid
50
50
  end
51
51
  end
52
52
 
53
- Moped::BSON::ObjectId.__send__(:include, Mongoid::Extensions::ObjectId)
54
- Moped::BSON::ObjectId.__send__(:extend, Mongoid::Extensions::ObjectId::ClassMethods)
53
+ BSON::ObjectId.__send__(:include, Mongoid::Extensions::ObjectId)
54
+ BSON::ObjectId.extend(Mongoid::Extensions::ObjectId::ClassMethods)
@@ -53,7 +53,7 @@ module Mongoid
53
53
  #
54
54
  # @since 3.0.0
55
55
  def demongoize(object)
56
- object.nil? ? nil : ::Range.new(object["min"], object["max"])
56
+ object.nil? ? nil : ::Range.new(object["min"], object["max"], object["exclude_end"])
57
57
  end
58
58
 
59
59
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -68,7 +68,13 @@ module Mongoid
68
68
  #
69
69
  # @since 3.0.0
70
70
  def mongoize(object)
71
- object.nil? ? nil : { "min" => object.first, "max" => object.last }
71
+ return nil if object.nil?
72
+ return object if object.is_a?(::Hash)
73
+ hash = { "min" => object.first, "max" => object.last }
74
+ if object.respond_to?(:exclude_end?) && object.exclude_end?
75
+ hash.merge!("exclude_end" => true)
76
+ end
77
+ hash
72
78
  end
73
79
  end
74
80
  end
@@ -76,4 +82,4 @@ module Mongoid
76
82
  end
77
83
 
78
84
  ::Range.__send__(:include, Mongoid::Extensions::Range)
79
- ::Range.__send__(:extend, Mongoid::Extensions::Range::ClassMethods)
85
+ ::Range.extend(Mongoid::Extensions::Range::ClassMethods)
@@ -24,4 +24,4 @@ module Mongoid
24
24
  end
25
25
  end
26
26
 
27
- ::Regexp.__send__(:extend, Mongoid::Extensions::Regexp::ClassMethods)
27
+ ::Regexp.extend(Mongoid::Extensions::Regexp::ClassMethods)
@@ -52,4 +52,4 @@ module Mongoid
52
52
  end
53
53
 
54
54
  ::Set.__send__(:include, Mongoid::Extensions::Set)
55
- ::Set.__send__(:extend, Mongoid::Extensions::Set::ClassMethods)
55
+ ::Set.extend(Mongoid::Extensions::Set::ClassMethods)
@@ -11,7 +11,7 @@ module Mongoid
11
11
  # @example Evolve the string.
12
12
  # "test".__evolve_object_id__
13
13
  #
14
- # @return [ String, Moped::BSON::ObjectId ] The evolved string.
14
+ # @return [ String, BSON::ObjectId ] The evolved string.
15
15
  #
16
16
  # @since 3.0.0
17
17
  def __evolve_object_id__
@@ -23,7 +23,7 @@ module Mongoid
23
23
  # @example Evolve the string.
24
24
  # "test".__mongoize_object_id__
25
25
  #
26
- # @return [ String, Moped::BSON::ObjectId, nil ] The mongoized string.
26
+ # @return [ String, BSON::ObjectId, nil ] The mongoized string.
27
27
  #
28
28
  # @since 3.0.0
29
29
  def __mongoize_object_id__
@@ -96,18 +96,6 @@ module Mongoid
96
96
  delete("=").sub(/\_before\_type\_cast$/, '')
97
97
  end
98
98
 
99
- # Convert the string to an array with the string in it.
100
- #
101
- # @example Convert the string to an array.
102
- # "Testing".to_a
103
- #
104
- # @return [ Array ] An array with only the string in it.
105
- #
106
- # @since 1.0.0
107
- def to_a
108
- [ self ]
109
- end
110
-
111
99
  # Is this string a writer?
112
100
  #
113
101
  # @example Is the string a setter method?
@@ -129,7 +117,7 @@ module Mongoid
129
117
  #
130
118
  # @since 3.0.15
131
119
  def valid_method_name?
132
- /[@$"]/ !~ to_sym.inspect
120
+ /[@$"]/ !~ self
133
121
  end
134
122
 
135
123
  # Does the string end with _before_type_cast?
@@ -165,11 +153,11 @@ module Mongoid
165
153
  # @example Convert to the object id.
166
154
  # string.convert_to_object_id
167
155
  #
168
- # @return [ String, Moped::BSON::ObjectId ] The string or the id.
156
+ # @return [ String, BSON::ObjectId ] The string or the id.
169
157
  #
170
158
  # @since 3.0.0
171
159
  def convert_to_object_id
172
- Moped::BSON::ObjectId.legal?(self) ? Moped::BSON::ObjectId.from_string(self) : self
160
+ BSON::ObjectId.legal?(self) ? BSON::ObjectId.from_string(self) : self
173
161
  end
174
162
 
175
163
  module ClassMethods
@@ -208,4 +196,4 @@ module Mongoid
208
196
  end
209
197
 
210
198
  ::String.__send__(:include, Mongoid::Extensions::String)
211
- ::String.__send__(:extend, Mongoid::Extensions::String::ClassMethods)
199
+ ::String.extend(Mongoid::Extensions::String::ClassMethods)
@@ -51,4 +51,4 @@ module Mongoid
51
51
  end
52
52
 
53
53
  ::Symbol.__send__(:include, Mongoid::Extensions::Symbol)
54
- ::Symbol.__send__(:extend, Mongoid::Extensions::Symbol::ClassMethods)
54
+ ::Symbol.extend(Mongoid::Extensions::Symbol::ClassMethods)
@@ -68,8 +68,8 @@ module Mongoid
68
68
  return nil if object.blank?
69
69
  begin
70
70
  time = object.__mongoize_time__
71
- if time.respond_to?(:sec_fraction)
72
- ::Time.at(time.to_i, time.sec_fraction * 10**6).utc
71
+ if object.respond_to?(:sec_fraction)
72
+ ::Time.at(time.to_i, object.sec_fraction * 10**6).utc
73
73
  elsif time.respond_to?(:subsec)
74
74
  ::Time.at(time.to_i, time.subsec * 10**6).utc
75
75
  else
@@ -85,4 +85,4 @@ module Mongoid
85
85
  end
86
86
 
87
87
  ::Time.__send__(:include, Mongoid::Extensions::Time)
88
- ::Time.__send__(:extend, Mongoid::Extensions::Time::ClassMethods)
88
+ ::Time.extend(Mongoid::Extensions::Time::ClassMethods)
@@ -53,4 +53,4 @@ module Mongoid
53
53
  end
54
54
 
55
55
  ::ActiveSupport::TimeWithZone.__send__(:include, Mongoid::Extensions::TimeWithZone)
56
- ::ActiveSupport::TimeWithZone.__send__(:extend, Mongoid::Extensions::TimeWithZone::ClassMethods)
56
+ ::ActiveSupport::TimeWithZone.extend(Mongoid::Extensions::TimeWithZone::ClassMethods)
@@ -15,12 +15,12 @@ module Mongoid
15
15
  # @param [ Hash ] options The mass assignment scoping options.
16
16
  #
17
17
  # @return [ Document ] The instantiated document.
18
- def build(klass, attributes = nil, options = {})
18
+ def build(klass, attributes = nil)
19
19
  type = (attributes || {})["_type"]
20
20
  if type && klass._types.include?(type)
21
- type.constantize.new(attributes, options)
21
+ type.constantize.new(attributes)
22
22
  else
23
- klass.new(attributes, options)
23
+ klass.new(attributes)
24
24
  end
25
25
  end
26
26
 
@@ -32,14 +32,16 @@ module Mongoid
32
32
  #
33
33
  # @param [ Class ] klass The class to instantiate from if _type is not present.
34
34
  # @param [ Hash ] attributes The document attributes.
35
+ # @param [ Array ] selected_fields If instantiated from a criteria using
36
+ # #only we give the document a list of the selected fields.
35
37
  #
36
38
  # @return [ Document ] The instantiated document.
37
- def from_db(klass, attributes = nil, criteria_instance_id = nil)
39
+ def from_db(klass, attributes = nil, selected_fields = nil)
38
40
  type = (attributes || {})["_type"]
39
41
  if type.blank?
40
- klass.instantiate(attributes, criteria_instance_id)
42
+ klass.instantiate(attributes, selected_fields)
41
43
  else
42
- type.camelize.constantize.instantiate(attributes, criteria_instance_id)
44
+ type.camelize.constantize.instantiate(attributes, selected_fields)
43
45
  end
44
46
  end
45
47
  end
@@ -10,6 +10,28 @@ module Mongoid
10
10
  module Fields
11
11
  extend ActiveSupport::Concern
12
12
 
13
+ # For fields defined with symbols use the correct class.
14
+ #
15
+ # @since 4.0.0
16
+ TYPE_MAPPINGS = {
17
+ array: Array,
18
+ big_decimal: BigDecimal,
19
+ binary: BSON::Binary,
20
+ boolean: Mongoid::Boolean,
21
+ date: Date,
22
+ date_time: DateTime,
23
+ float: Float,
24
+ hash: Hash,
25
+ integer: Integer,
26
+ object_id: BSON::ObjectId,
27
+ range: Range,
28
+ regexp: Regexp,
29
+ set: Set,
30
+ string: String,
31
+ symbol: Symbol,
32
+ time: Time
33
+ }.with_indifferent_access
34
+
13
35
  included do
14
36
  class_attribute :aliased_fields
15
37
  class_attribute :localized_fields
@@ -25,15 +47,13 @@ module Mongoid
25
47
 
26
48
  field(
27
49
  :_id,
28
- default: ->{ Moped::BSON::ObjectId.new },
50
+ default: ->{ BSON::ObjectId.new },
29
51
  pre_processed: true,
30
- type: Moped::BSON::ObjectId
52
+ type: BSON::ObjectId
31
53
  )
32
54
 
33
55
  alias :id :_id
34
56
  alias :id= :_id=
35
-
36
- attr_protected(:id, :_id, :_type) if Mongoid.protect_sensitive_fields?
37
57
  end
38
58
 
39
59
  # Apply all default values to the document which are not procs.
@@ -264,13 +284,13 @@ module Mongoid
264
284
  add_field(name, fields[name].options.merge(type: type))
265
285
  end
266
286
 
267
- # Convenience method for determining if we are using +Moped::BSON::ObjectIds+ as
287
+ # Convenience method for determining if we are using +BSON::ObjectIds+ as
268
288
  # our id.
269
289
  #
270
290
  # @example Does this class use object ids?
271
291
  # person.using_object_ids?
272
292
  #
273
- # @return [ true, false ] If the class uses Moped::BSON::ObjectIds for the id.
293
+ # @return [ true, false ] If the class uses BSON::ObjectIds for the id.
274
294
  #
275
295
  # @since 1.0.0
276
296
  def using_object_ids?
@@ -434,10 +454,11 @@ module Mongoid
434
454
  def create_field_setter(name, meth, field)
435
455
  generated_methods.module_eval do
436
456
  re_define_method("#{meth}=") do |value|
437
- write_attribute(name, value)
457
+ val = write_attribute(name, value)
438
458
  if field.foreign_key?
439
459
  remove_ivar(field.metadata.name)
440
460
  end
461
+ val
441
462
  end
442
463
  end
443
464
  end
@@ -472,8 +493,9 @@ module Mongoid
472
493
  def create_translations_getter(name, meth)
473
494
  generated_methods.module_eval do
474
495
  re_define_method("#{meth}_translations") do
475
- attributes[name] ||= {}
496
+ (attributes[name] ||= {}).with_indifferent_access
476
497
  end
498
+ alias_method :"#{meth}_t", :"#{meth}_translations"
477
499
  end
478
500
  end
479
501
 
@@ -498,6 +520,7 @@ module Mongoid
498
520
  end
499
521
  attributes[name] = value
500
522
  end
523
+ alias_method :"#{meth}_t=", :"#{meth}_translations="
501
524
  end
502
525
  end
503
526
 
@@ -532,10 +555,20 @@ module Mongoid
532
555
 
533
556
  def field_for(name, options)
534
557
  opts = options.merge(klass: self)
558
+ type_mapping = TYPE_MAPPINGS[options[:type]]
559
+ opts[:type] = type_mapping || unmapped_type(options)
535
560
  return Fields::Localized.new(name, opts) if options[:localize]
536
561
  return Fields::ForeignKey.new(name, opts) if options[:identity]
537
562
  Fields::Standard.new(name, opts)
538
563
  end
564
+
565
+ def unmapped_type(options)
566
+ if "Boolean" == options[:type].to_s
567
+ Mongoid::Boolean
568
+ else
569
+ options[:type] || Object
570
+ end
571
+ end
539
572
  end
540
573
  end
541
574
  end