mongoid 3.1.7 → 4.0.0

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 (562) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +423 -9
  3. data/README.md +5 -6
  4. data/lib/config/locales/en.yml +32 -18
  5. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  6. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/root.rb +0 -13
  9. data/lib/mongoid/atomic.rb +1 -12
  10. data/lib/mongoid/attributes/dynamic.rb +154 -0
  11. data/lib/mongoid/attributes/nested.rb +82 -0
  12. data/lib/mongoid/attributes/processing.rb +13 -66
  13. data/lib/mongoid/attributes.rb +61 -99
  14. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  15. data/lib/mongoid/composable.rb +105 -0
  16. data/lib/mongoid/config/options.rb +1 -1
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
  19. data/lib/mongoid/contextual/atomic.rb +53 -53
  20. data/lib/mongoid/contextual/geo_near.rb +1 -1
  21. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  22. data/lib/mongoid/contextual/memory.rb +18 -6
  23. data/lib/mongoid/contextual/mongo.rb +64 -56
  24. data/lib/mongoid/contextual/none.rb +90 -0
  25. data/lib/mongoid/contextual/text_search.rb +178 -0
  26. data/lib/mongoid/contextual.rb +2 -0
  27. data/lib/mongoid/copyable.rb +2 -3
  28. data/lib/mongoid/criteria/{#findable.rb# → findable.rb} +0 -2
  29. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  30. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  31. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  32. data/lib/mongoid/criteria/permission.rb +70 -0
  33. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  34. data/lib/mongoid/criteria.rb +39 -34
  35. data/lib/mongoid/document.rb +32 -17
  36. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  37. data/lib/mongoid/errors/document_not_found.rb +2 -1
  38. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  39. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  40. data/lib/mongoid/errors/invalid_value.rb +16 -0
  41. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  42. data/lib/mongoid/errors/readonly_document.rb +24 -0
  43. data/lib/mongoid/errors.rb +4 -1
  44. data/lib/mongoid/extensions/array.rb +3 -3
  45. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  46. data/lib/mongoid/extensions/boolean.rb +15 -17
  47. data/lib/mongoid/extensions/date.rb +1 -1
  48. data/lib/mongoid/extensions/date_time.rb +3 -3
  49. data/lib/mongoid/extensions/float.rb +2 -1
  50. data/lib/mongoid/extensions/hash.rb +3 -3
  51. data/lib/mongoid/extensions/integer.rb +1 -1
  52. data/lib/mongoid/extensions/object.rb +7 -7
  53. data/lib/mongoid/extensions/object_id.rb +5 -5
  54. data/lib/mongoid/extensions/range.rb +9 -3
  55. data/lib/mongoid/extensions/regexp.rb +1 -1
  56. data/lib/mongoid/extensions/set.rb +1 -1
  57. data/lib/mongoid/extensions/string.rb +6 -18
  58. data/lib/mongoid/extensions/symbol.rb +1 -1
  59. data/lib/mongoid/extensions/time.rb +3 -3
  60. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  61. data/lib/mongoid/extensions.rb +2 -7
  62. data/lib/mongoid/factory.rb +8 -6
  63. data/lib/mongoid/fields/foreign_key.rb +3 -3
  64. data/lib/mongoid/fields/localized.rb +1 -1
  65. data/lib/mongoid/fields/standard.rb +5 -17
  66. data/lib/mongoid/fields/validators/macro.rb +15 -5
  67. data/lib/mongoid/fields.rb +41 -8
  68. data/lib/mongoid/{finders.rb → findable.rb} +8 -2
  69. data/lib/mongoid/indexable/specification.rb +104 -0
  70. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  71. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  72. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  73. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  74. data/lib/mongoid/log_subscriber.rb +55 -0
  75. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  76. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  77. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  78. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  79. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  81. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  82. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/ne.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  86. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  87. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  88. data/lib/mongoid/matchable.rb +152 -0
  89. data/lib/mongoid/persistable/creatable.rb +188 -0
  90. data/lib/mongoid/persistable/deletable.rb +149 -0
  91. data/lib/mongoid/persistable/destroyable.rb +60 -0
  92. data/lib/mongoid/persistable/incrementable.rb +36 -0
  93. data/lib/mongoid/persistable/logical.rb +38 -0
  94. data/lib/mongoid/persistable/poppable.rb +39 -0
  95. data/lib/mongoid/persistable/pullable.rb +55 -0
  96. data/lib/mongoid/persistable/pushable.rb +62 -0
  97. data/lib/mongoid/persistable/renamable.rb +35 -0
  98. data/lib/mongoid/persistable/savable.rb +52 -0
  99. data/lib/mongoid/persistable/settable.rb +33 -0
  100. data/lib/mongoid/persistable/unsettable.rb +36 -0
  101. data/lib/mongoid/persistable/updatable.rb +152 -0
  102. data/lib/mongoid/persistable/upsertable.rb +55 -0
  103. data/lib/mongoid/persistable.rb +216 -0
  104. data/lib/mongoid/positional.rb +71 -0
  105. data/lib/mongoid/query_cache.rb +247 -0
  106. data/lib/mongoid/railtie.rb +32 -45
  107. data/lib/mongoid/railties/database.rake +9 -25
  108. data/lib/mongoid/relations/accessors.rb +13 -49
  109. data/lib/mongoid/relations/auto_save.rb +15 -36
  110. data/lib/mongoid/relations/binding.rb +1 -24
  111. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  112. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  113. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  114. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +3 -1
  115. data/lib/mongoid/relations/builder.rb +1 -1
  116. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  117. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
  118. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  119. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  120. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  121. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  122. data/lib/mongoid/relations/builders.rb +2 -2
  123. data/lib/mongoid/relations/cascading.rb +3 -5
  124. data/lib/mongoid/relations/constraint.rb +1 -1
  125. data/lib/mongoid/relations/conversions.rb +1 -1
  126. data/lib/mongoid/relations/counter_cache.rb +39 -15
  127. data/lib/mongoid/relations/eager/base.rb +149 -0
  128. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  129. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  130. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  131. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  134. data/lib/mongoid/relations/embedded/in.rb +4 -4
  135. data/lib/mongoid/relations/embedded/many.rb +14 -32
  136. data/lib/mongoid/relations/embedded/one.rb +1 -1
  137. data/lib/mongoid/relations/macros.rb +3 -4
  138. data/lib/mongoid/relations/many.rb +30 -31
  139. data/lib/mongoid/relations/marshalable.rb +3 -3
  140. data/lib/mongoid/relations/metadata.rb +14 -79
  141. data/lib/mongoid/relations/nested_builder.rb +2 -2
  142. data/lib/mongoid/relations/options.rb +1 -0
  143. data/lib/mongoid/relations/polymorphic.rb +0 -1
  144. data/lib/mongoid/relations/proxy.rb +21 -41
  145. data/lib/mongoid/relations/referenced/in.rb +4 -20
  146. data/lib/mongoid/relations/referenced/many.rb +19 -32
  147. data/lib/mongoid/relations/referenced/many_to_many.rb +15 -38
  148. data/lib/mongoid/relations/referenced/one.rb +6 -25
  149. data/lib/mongoid/relations/synchronization.rb +3 -3
  150. data/lib/mongoid/relations/touchable.rb +34 -1
  151. data/lib/mongoid/relations.rb +11 -25
  152. data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
  153. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  154. data/lib/mongoid/selectable.rb +59 -0
  155. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  156. data/lib/mongoid/sessions/factory.rb +2 -0
  157. data/lib/mongoid/sessions/options.rb +180 -0
  158. data/lib/mongoid/sessions/storage_options.rb +140 -0
  159. data/lib/mongoid/sessions/thread_options.rb +19 -0
  160. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  161. data/lib/mongoid/sessions.rb +37 -345
  162. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  163. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  164. data/lib/mongoid/support/query_counter.rb +23 -0
  165. data/lib/mongoid/tasks/database.rake +31 -0
  166. data/lib/mongoid/tasks/database.rb +107 -0
  167. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  168. data/lib/mongoid/threaded.rb +0 -157
  169. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  170. data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
  171. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  172. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  173. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  174. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  175. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  176. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  177. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  178. data/lib/mongoid/{validations → validatable}/uniqueness.rb +23 -19
  179. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  180. data/lib/mongoid/version.rb +1 -1
  181. data/lib/mongoid.rb +10 -76
  182. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +13 -24
  183. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  184. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  185. data/lib/rails/generators/mongoid_generator.rb +3 -40
  186. data/lib/rails/mongoid.rb +0 -122
  187. data/lib/support/ruby_version.rb +1 -1
  188. data/spec/app/models/account.rb +2 -6
  189. data/spec/app/models/acolyte.rb +2 -1
  190. data/spec/app/models/actor.rb +0 -1
  191. data/spec/app/models/address.rb +8 -3
  192. data/spec/app/models/animal.rb +1 -1
  193. data/spec/app/models/appointment.rb +3 -3
  194. data/spec/app/models/article.rb +1 -4
  195. data/spec/app/models/audio.rb +5 -0
  196. data/spec/app/models/author.rb +0 -2
  197. data/spec/app/models/band.rb +3 -2
  198. data/spec/app/models/bar.rb +1 -0
  199. data/spec/app/models/book.rb +1 -0
  200. data/spec/app/models/building.rb +0 -2
  201. data/spec/app/models/building_address.rb +0 -2
  202. data/spec/app/models/bus.rb +1 -1
  203. data/spec/app/models/canvas.rb +1 -1
  204. data/spec/app/models/contractor.rb +0 -2
  205. data/spec/app/models/country_code.rb +1 -1
  206. data/spec/app/models/definition.rb +2 -2
  207. data/spec/app/models/dog.rb +1 -1
  208. data/spec/app/models/dragon.rb +4 -0
  209. data/spec/app/models/drug.rb +1 -3
  210. data/spec/app/models/dungeon.rb +4 -0
  211. data/spec/app/models/edit.rb +5 -0
  212. data/spec/app/models/even.rb +7 -0
  213. data/spec/app/models/event.rb +1 -1
  214. data/spec/app/models/filesystem.rb +1 -0
  215. data/spec/app/models/fish.rb +0 -1
  216. data/spec/app/models/fruits.rb +6 -0
  217. data/spec/app/models/game.rb +0 -2
  218. data/spec/app/models/house.rb +1 -3
  219. data/spec/app/models/item.rb +1 -5
  220. data/spec/app/models/jar.rb +1 -1
  221. data/spec/app/models/label.rb +4 -4
  222. data/spec/app/models/line_item.rb +1 -1
  223. data/spec/app/models/login.rb +1 -1
  224. data/spec/app/models/message.rb +8 -0
  225. data/spec/app/models/movie.rb +1 -0
  226. data/spec/app/models/name.rb +3 -3
  227. data/spec/app/models/note.rb +3 -1
  228. data/spec/app/models/odd.rb +7 -0
  229. data/spec/app/models/oscar.rb +1 -1
  230. data/spec/app/models/parent_doc.rb +1 -1
  231. data/spec/app/models/person.rb +16 -10
  232. data/spec/app/models/phone.rb +1 -3
  233. data/spec/app/models/player.rb +3 -3
  234. data/spec/app/models/post.rb +5 -3
  235. data/spec/app/models/preference.rb +1 -1
  236. data/spec/app/models/quiz.rb +0 -3
  237. data/spec/app/models/record.rb +10 -5
  238. data/spec/app/models/registry.rb +1 -1
  239. data/spec/app/models/server.rb +1 -1
  240. data/spec/app/models/service.rb +3 -3
  241. data/spec/app/models/sound.rb +5 -0
  242. data/spec/app/models/symptom.rb +1 -1
  243. data/spec/app/models/template.rb +1 -1
  244. data/spec/app/models/title.rb +0 -1
  245. data/spec/app/models/track.rb +5 -5
  246. data/spec/app/models/tree.rb +3 -3
  247. data/spec/app/models/video.rb +1 -5
  248. data/spec/app/models/wiki_page.rb +2 -5
  249. data/spec/app/models/word.rb +3 -0
  250. data/spec/app/models/word_origin.rb +1 -1
  251. data/spec/config/mongoid.yml +7 -8
  252. data/spec/helpers.rb +18 -0
  253. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  254. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  255. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  256. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  257. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  258. data/spec/mongoid/atomic_spec.rb +19 -19
  259. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +335 -448
  260. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  261. data/spec/mongoid/attributes_spec.rb +300 -436
  262. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  263. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  264. data/spec/mongoid/config/environment_spec.rb +3 -3
  265. data/spec/mongoid/config/options_spec.rb +6 -6
  266. data/spec/mongoid/config_spec.rb +24 -48
  267. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  268. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +46 -38
  269. data/spec/mongoid/contextual/atomic_spec.rb +69 -59
  270. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  271. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  272. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  273. data/spec/mongoid/contextual/memory_spec.rb +151 -94
  274. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  275. data/spec/mongoid/contextual/none_spec.rb +127 -0
  276. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  277. data/spec/mongoid/copyable_spec.rb +56 -68
  278. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  279. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  280. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  281. data/spec/mongoid/criteria/modifiable_spec.rb +1255 -0
  282. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  283. data/spec/mongoid/criteria_spec.rb +576 -2293
  284. data/spec/mongoid/document_spec.rb +166 -120
  285. data/spec/mongoid/equality_spec.rb +22 -22
  286. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  287. data/spec/mongoid/errors/callback_spec.rb +3 -3
  288. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  289. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  290. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  291. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  292. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  293. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  294. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  295. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  296. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  297. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  298. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  299. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  300. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  302. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  305. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  306. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  307. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  308. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  309. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  310. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  311. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  312. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  313. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  314. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  315. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  316. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  317. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  318. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  319. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  320. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  321. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  322. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  323. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  324. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  325. data/spec/mongoid/errors/validations_spec.rb +7 -7
  326. data/spec/mongoid/extensions/array_spec.rb +61 -61
  327. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  328. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  329. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  330. data/spec/mongoid/extensions/date_spec.rb +13 -13
  331. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  332. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  333. data/spec/mongoid/extensions/float_spec.rb +29 -15
  334. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  335. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  336. data/spec/mongoid/extensions/module_spec.rb +2 -2
  337. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  338. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  339. data/spec/mongoid/extensions/object_spec.rb +26 -26
  340. data/spec/mongoid/extensions/range_spec.rb +61 -12
  341. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  342. data/spec/mongoid/extensions/set_spec.rb +4 -4
  343. data/spec/mongoid/extensions/string_spec.rb +35 -46
  344. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  345. data/spec/mongoid/extensions/time_spec.rb +49 -49
  346. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  347. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  348. data/spec/mongoid/extensions_spec.rb +15 -0
  349. data/spec/mongoid/factory_spec.rb +15 -15
  350. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  351. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  352. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  353. data/spec/mongoid/fields/localized_spec.rb +38 -23
  354. data/spec/mongoid/fields/standard_spec.rb +12 -12
  355. data/spec/mongoid/fields_spec.rb +263 -217
  356. data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +127 -27
  357. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  358. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  359. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  360. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  361. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  362. data/spec/mongoid/loggable_spec.rb +1 -1
  363. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  364. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  365. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  366. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  367. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  368. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  369. data/spec/mongoid/matchable/in_spec.rb +49 -0
  370. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  371. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  372. data/spec/mongoid/{matchers → matchable}/ne_spec.rb +3 -3
  373. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  374. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  375. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  376. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  377. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  378. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  379. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  380. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  381. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  382. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  383. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  384. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  385. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  386. data/spec/mongoid/persistable/savable_spec.rb +461 -0
  387. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  388. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  389. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  390. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  391. data/spec/mongoid/persistable_spec.rb +206 -0
  392. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +19 -14
  393. data/spec/mongoid/query_cache_spec.rb +231 -0
  394. data/spec/mongoid/railties/document_spec.rb +2 -2
  395. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  396. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  397. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  398. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  399. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  400. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  401. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  402. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  403. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  404. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  405. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  406. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  407. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  408. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  409. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  410. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  411. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  412. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  413. data/spec/mongoid/relations/builders_spec.rb +21 -21
  414. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  415. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  416. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  417. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  418. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  419. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  420. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  421. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  422. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  423. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  424. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  425. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  426. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  427. data/spec/mongoid/relations/eager_spec.rb +228 -0
  428. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  429. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  430. data/spec/mongoid/relations/embedded/many_spec.rb +393 -372
  431. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  432. data/spec/mongoid/relations/macros_spec.rb +108 -102
  433. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  434. data/spec/mongoid/relations/options_spec.rb +1 -1
  435. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  436. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  437. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  438. data/spec/mongoid/relations/referenced/many_spec.rb +434 -527
  439. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +352 -424
  440. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  441. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  442. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  443. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  444. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  445. data/spec/mongoid/relations_spec.rb +16 -15
  446. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +20 -60
  447. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  448. data/spec/mongoid/selectable_spec.rb +134 -0
  449. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  450. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  451. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  452. data/spec/mongoid/sessions/options_spec.rb +107 -0
  453. data/spec/mongoid/sessions_spec.rb +289 -178
  454. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  455. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  456. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  457. data/spec/mongoid/tasks/database_spec.rb +160 -0
  458. data/spec/mongoid/threaded_spec.rb +17 -70
  459. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  460. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  461. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  462. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  463. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  464. data/spec/mongoid/timestamps_spec.rb +9 -13
  465. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  466. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  467. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  468. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  469. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  470. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  471. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  472. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  473. data/spec/mongoid_spec.rb +8 -8
  474. data/spec/rails/mongoid_spec.rb +19 -350
  475. data/spec/spec_helper.rb +24 -15
  476. metadata +259 -251
  477. data/lib/mongoid/atomic/positionable.rb +0 -73
  478. data/lib/mongoid/components.rb +0 -92
  479. data/lib/mongoid/config/inflections.rb +0 -6
  480. data/lib/mongoid/contextual/eager.rb +0 -158
  481. data/lib/mongoid/criterion/findable.rb +0 -179
  482. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  483. data/lib/mongoid/identity_map.rb +0 -163
  484. data/lib/mongoid/json.rb +0 -16
  485. data/lib/mongoid/matchers/strategies.rb +0 -97
  486. data/lib/mongoid/matchers.rb +0 -32
  487. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  488. data/lib/mongoid/nested_attributes.rb +0 -78
  489. data/lib/mongoid/observer.rb +0 -192
  490. data/lib/mongoid/paranoia.rb +0 -136
  491. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  492. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  493. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  494. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  495. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  496. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  497. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  498. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  499. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  500. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  501. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  502. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  503. data/lib/mongoid/persistence/atomic.rb +0 -231
  504. data/lib/mongoid/persistence/deletion.rb +0 -31
  505. data/lib/mongoid/persistence/insertion.rb +0 -38
  506. data/lib/mongoid/persistence/modification.rb +0 -35
  507. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  508. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  509. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  510. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  511. data/lib/mongoid/persistence/operations/update.rb +0 -59
  512. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  513. data/lib/mongoid/persistence/operations.rb +0 -214
  514. data/lib/mongoid/persistence/upsertion.rb +0 -31
  515. data/lib/mongoid/persistence.rb +0 -357
  516. data/lib/mongoid/unit_of_work.rb +0 -61
  517. data/lib/mongoid/versioning.rb +0 -217
  518. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  519. data/lib/rack/mongoid.rb +0 -2
  520. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  521. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  522. data/spec/app/models/actor_observer.rb +0 -15
  523. data/spec/app/models/callback_recorder.rb +0 -25
  524. data/spec/app/models/paranoid_phone.rb +0 -25
  525. data/spec/app/models/paranoid_post.rb +0 -36
  526. data/spec/app/models/phone_observer.rb +0 -6
  527. data/spec/mongoid/#atomic_spec.rb# +0 -365
  528. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  529. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  530. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  531. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  532. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  533. data/spec/mongoid/identity_map_spec.rb +0 -564
  534. data/spec/mongoid/json_spec.rb +0 -33
  535. data/spec/mongoid/matchers/in_spec.rb +0 -25
  536. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  537. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  538. data/spec/mongoid/observer_spec.rb +0 -290
  539. data/spec/mongoid/paranoia_spec.rb +0 -759
  540. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  541. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  542. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  543. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  544. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  545. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  546. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  547. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  548. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  549. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  550. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  551. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  552. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  553. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  554. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  555. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  556. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  557. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  558. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  559. data/spec/mongoid/persistence_spec.rb +0 -2279
  560. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  561. data/spec/mongoid/versioning_spec.rb +0 -540
  562. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -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)
@@ -1,12 +1,7 @@
1
1
  # encoding: utf-8
2
- unless defined?(Boolean)
3
- class Boolean; end
4
- end
5
-
6
- class Moped::BSON::ObjectId
7
- undef :as_json
2
+ class BSON::ObjectId
8
3
  def as_json(options = nil)
9
- to_s
4
+ { "$oid" => to_s }
10
5
  end
11
6
  def to_xml(options = nil)
12
7
  ActiveSupport::XmlMini.to_tag(options[:root], self.to_s, options)
@@ -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
@@ -99,12 +99,12 @@ module Mongoid
99
99
  end
100
100
  end
101
101
 
102
- # Is the field a Moped::BSON::ObjectId?
102
+ # Is the field a BSON::ObjectId?
103
103
  #
104
- # @example Is the field a Moped::BSON::ObjectId?
104
+ # @example Is the field a BSON::ObjectId?
105
105
  # field.object_id_field?
106
106
  #
107
- # @return [ true, false ] If the field is a Moped::BSON::ObjectId.
107
+ # @return [ true, false ] If the field is a BSON::ObjectId.
108
108
  #
109
109
  # @since 2.2.0
110
110
  def object_id_field?
@@ -63,7 +63,7 @@ module Mongoid
63
63
  def lookup(object)
64
64
  locale = ::I18n.locale
65
65
  if ::I18n.respond_to?(:fallbacks)
66
- object[::I18n.fallbacks[locale].map(&:to_s).find{ |loc| object[loc] }]
66
+ object[::I18n.fallbacks[locale].map(&:to_s).find{ |loc| object.has_key?(loc) }]
67
67
  else
68
68
  object[locale.to_s]
69
69
  end
@@ -50,7 +50,7 @@ module Mongoid
50
50
  #
51
51
  # @since 2.1.8
52
52
  def eval_default(doc)
53
- if fields = Threaded.selection(doc.criteria_instance_id)
53
+ if fields = doc.__selected_fields
54
54
  evaluated_default(doc) if included?(fields)
55
55
  else
56
56
  evaluated_default(doc)
@@ -131,16 +131,16 @@ module Mongoid
131
131
  @metadata ||= options[:metadata]
132
132
  end
133
133
 
134
- # Is the field a Moped::BSON::ObjectId?
134
+ # Is the field a BSON::ObjectId?
135
135
  #
136
- # @example Is the field a Moped::BSON::ObjectId?
136
+ # @example Is the field a BSON::ObjectId?
137
137
  # field.object_id_field?
138
138
  #
139
- # @return [ true, false ] If the field is a Moped::BSON::ObjectId.
139
+ # @return [ true, false ] If the field is a BSON::ObjectId.
140
140
  #
141
141
  # @since 2.2.0
142
142
  def object_id_field?
143
- @object_id_field ||= (type == Moped::BSON::ObjectId)
143
+ @object_id_field ||= (type == BSON::ObjectId)
144
144
  end
145
145
 
146
146
  # Does the field pre-process its default value?
@@ -168,18 +168,6 @@ module Mongoid
168
168
  @type ||= options[:type] || Object
169
169
  end
170
170
 
171
- # Is this field included in versioned attributes?
172
- #
173
- # @example Is the field versioned?
174
- # field.versioned?
175
- #
176
- # @return [ true, false ] If the field is included in versioning.
177
- #
178
- # @since 2.1.0
179
- def versioned?
180
- @versioned ||= (options[:versioned].nil? ? true : options[:versioned])
181
- end
182
-
183
171
  private
184
172
 
185
173
  # Get the name of the default method for this field.
@@ -17,7 +17,7 @@ module Mongoid
17
17
  :pre_processed,
18
18
  :subtype,
19
19
  :type,
20
- :versioned
20
+ :overwrite
21
21
  ]
22
22
 
23
23
  # Validate the field definition.
@@ -31,7 +31,7 @@ module Mongoid
31
31
  #
32
32
  # @since 3.0.0
33
33
  def validate(klass, name, options)
34
- validate_name(klass, name)
34
+ validate_name(klass, name, options)
35
35
  validate_options(klass, name, options)
36
36
  end
37
37
 
@@ -50,9 +50,19 @@ module Mongoid
50
50
  # @raise [ Errors::InvalidField ] If the name is not allowed.
51
51
  #
52
52
  # @since 3.0.0
53
- def validate_name(klass, name)
54
- if Mongoid.destructive_fields.include?(name)
55
- raise Errors::InvalidField.new(klass, name)
53
+ def validate_name(klass, name, options)
54
+ [name, "#{name}?".to_sym, "#{name}=".to_sym].each do |n|
55
+ if Mongoid.destructive_fields.include?(n)
56
+ raise Errors::InvalidField.new(klass, n)
57
+ end
58
+ end
59
+
60
+ if !options[:overwrite] && klass.fields.keys.include?(name.to_s)
61
+ if Mongoid.duplicate_fields_exception
62
+ raise Errors::InvalidField.new(klass, name)
63
+ else
64
+ Mongoid.logger.warn("Overwriting existing field #{name} in class #{klass.name}.") if Mongoid.logger
65
+ end
56
66
  end
57
67
  end
58
68
 
@@ -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
@@ -3,7 +3,9 @@ module Mongoid
3
3
 
4
4
  # This module defines the finder methods that hang off the document at the
5
5
  # class level.
6
- module Finders
6
+ #
7
+ # @since 4.0.0
8
+ module Findable
7
9
  extend Origin::Forwardable
8
10
 
9
11
  select_with :with_default_scope
@@ -19,6 +21,7 @@ module Mongoid
19
21
  :extras,
20
22
  :find_and_modify,
21
23
  :find_or_create_by,
24
+ :find_or_create_by!,
22
25
  :find_or_initialize_by,
23
26
  :first_or_create,
24
27
  :first_or_create!,
@@ -29,8 +32,10 @@ module Mongoid
29
32
  :map_reduce,
30
33
  :max,
31
34
  :min,
35
+ :none,
32
36
  :pluck,
33
37
  :sum,
38
+ :text_search,
34
39
  :update,
35
40
  :update_all, to: :with_default_scope
36
41
 
@@ -76,7 +81,7 @@ module Mongoid
76
81
  # on the conditions provided and the first parameter.
77
82
  #
78
83
  # @example Find a single document by an id.
79
- # Person.find(Moped::BSON::ObjectId)
84
+ # Person.find(BSON::ObjectId)
80
85
  #
81
86
  # @param [ Array ] args An assortment of finder options.
82
87
  #
@@ -116,6 +121,7 @@ module Mongoid
116
121
  def first
117
122
  with_default_scope.first
118
123
  end
124
+ alias :one :first
119
125
 
120
126
  # Find the last +Document+ given the conditions.
121
127
  #
@@ -0,0 +1,104 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Indexable
4
+
5
+ # Encapsulates behaviour around an index specification.
6
+ #
7
+ # @since 4.0.0
8
+ class Specification
9
+
10
+ # The mappings of nice Ruby-style names to the corresponding MongoDB
11
+ # name.
12
+ #
13
+ # @since 4.0.0
14
+ MAPPINGS = {
15
+ bucket_size: :bucketSize,
16
+ drop_dups: :dropDups,
17
+ expire_after_seconds: :expireAfterSeconds
18
+ }
19
+
20
+ # @!attribute klass
21
+ # @return [ Class ] The class the index is defined on.
22
+ # @!attribute key
23
+ # @return [ Hash ] The index key.
24
+ # @!attribute options
25
+ # @return [ Hash ] The index options.
26
+ attr_reader :klass, :key, :fields, :options
27
+
28
+ # Is this index specification equal to another?
29
+ #
30
+ # @example Check equality of the specifications.
31
+ # specification == other
32
+ #
33
+ # @param [ Specification ] other The spec to compare against.
34
+ #
35
+ # @return [ true, false ] If the specs are equal.
36
+ #
37
+ # @since 4.0.0
38
+ def ==(other)
39
+ fields == other.fields && key == other.key
40
+ end
41
+
42
+ # Instantiate a new index specification.
43
+ #
44
+ # @example Create the new specification.
45
+ # Specification.new(Band, { name: 1 }, background: true)
46
+ #
47
+ # @param [ Class ] klass The class the index is defined on.
48
+ # @param [ Hash ] key The hash of name/direction pairs.
49
+ # @param [ Hash ] opts the index options.
50
+ #
51
+ # @since 4.0.0
52
+ def initialize(klass, key, opts = nil)
53
+ options = opts || {}
54
+ Validators::Options.validate(klass, key, options)
55
+ @klass = klass
56
+ @key = normalize_key(key)
57
+ @fields = @key.keys
58
+ @options = normalize_options(options.dup)
59
+ end
60
+
61
+ private
62
+
63
+ # Normalize the spec, in case aliased fields are provided.
64
+ #
65
+ # @api private
66
+ #
67
+ # @example Normalize the spec.
68
+ # specification.normalize_key(name: 1)
69
+ #
70
+ # @param [ Hash ] key The index key(s).
71
+ #
72
+ # @return [ Hash ] The normalized specification.
73
+ #
74
+ # @since 4.0.0
75
+ def normalize_key(key)
76
+ normalized = {}
77
+ key.each_pair do |name, direction|
78
+ normalized[klass.database_field_name(name).to_sym] = direction
79
+ end
80
+ normalized
81
+ end
82
+
83
+ # Normalize the index options, if any are provided.
84
+ #
85
+ # @api private
86
+ #
87
+ # @example Normalize the index options.
88
+ # specification.normalize_options(drop_dups: true)
89
+ #
90
+ # @param [ Hash ] options The index options.
91
+ #
92
+ # @return [ Hash ] The normalized options.
93
+ #
94
+ # @since 4.0.0
95
+ def normalize_options(opts)
96
+ options = {}
97
+ opts.each_pair do |option, value|
98
+ options[MAPPINGS[option] || option] = value
99
+ end
100
+ options
101
+ end
102
+ end
103
+ end
104
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid
3
- module Indexes
3
+ module Indexable
4
4
  module Validators
5
5
 
6
6
  # Validates the options passed to the index macro.
@@ -10,6 +10,7 @@ module Mongoid
10
10
  VALID_OPTIONS = [
11
11
  :background,
12
12
  :database,
13
+ :default_language,
13
14
  :drop_dups,
14
15
  :name,
15
16
  :sparse,