mongoid 2.4.10 → 3.0.0.rc

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 (351) hide show
  1. data/CHANGELOG.md +843 -9
  2. data/LICENSE +1 -1
  3. data/README.md +10 -11
  4. data/Rakefile +2 -17
  5. data/lib/config/locales/en.yml +441 -51
  6. data/lib/mongoid/atomic/modifiers.rb +2 -2
  7. data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
  8. data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
  9. data/lib/mongoid/atomic/paths/embedded.rb +4 -5
  10. data/lib/mongoid/atomic/paths/root.rb +4 -5
  11. data/lib/mongoid/atomic.rb +16 -9
  12. data/lib/mongoid/attributes/processing.rb +14 -10
  13. data/lib/mongoid/attributes/readonly.rb +56 -0
  14. data/lib/mongoid/attributes.rb +95 -32
  15. data/lib/mongoid/callbacks.rb +100 -42
  16. data/lib/mongoid/collections/retry.rb +2 -3
  17. data/lib/mongoid/components.rb +10 -22
  18. data/lib/mongoid/config/environment.rb +4 -3
  19. data/lib/mongoid/config/inflections.rb +6 -0
  20. data/lib/mongoid/config/options.rb +1 -1
  21. data/lib/mongoid/config/validators/option.rb +25 -0
  22. data/lib/mongoid/config/validators/session.rb +140 -0
  23. data/lib/mongoid/config/validators.rb +3 -0
  24. data/lib/mongoid/config.rb +87 -233
  25. data/lib/mongoid/contextual/aggregable/memory.rb +98 -0
  26. data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
  27. data/lib/mongoid/contextual/atomic.rb +179 -0
  28. data/lib/mongoid/contextual/command.rb +43 -0
  29. data/lib/mongoid/contextual/find_and_modify.rb +66 -0
  30. data/lib/mongoid/contextual/map_reduce.rb +273 -0
  31. data/lib/mongoid/contextual/memory.rb +383 -0
  32. data/lib/mongoid/contextual/mongo.rb +543 -0
  33. data/lib/mongoid/contextual.rb +50 -0
  34. data/lib/mongoid/copyable.rb +2 -2
  35. data/lib/mongoid/criteria.rb +436 -248
  36. data/lib/mongoid/criterion/inspection.rb +14 -8
  37. data/lib/mongoid/criterion/scoping.rb +114 -44
  38. data/lib/mongoid/dirty.rb +152 -67
  39. data/lib/mongoid/document.rb +68 -49
  40. data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
  41. data/lib/mongoid/errors/callback.rb +5 -6
  42. data/lib/mongoid/errors/delete_restriction.rb +29 -0
  43. data/lib/mongoid/errors/document_not_found.rb +98 -17
  44. data/lib/mongoid/errors/eager_load.rb +3 -6
  45. data/lib/mongoid/errors/invalid_collection.rb +3 -3
  46. data/lib/mongoid/errors/invalid_config_option.rb +27 -0
  47. data/lib/mongoid/errors/invalid_database.rb +3 -3
  48. data/lib/mongoid/errors/invalid_field.rb +54 -8
  49. data/lib/mongoid/errors/invalid_field_option.rb +35 -0
  50. data/lib/mongoid/errors/invalid_find.rb +3 -3
  51. data/lib/mongoid/errors/invalid_index.rb +28 -0
  52. data/lib/mongoid/errors/invalid_options.rb +4 -4
  53. data/lib/mongoid/errors/invalid_scope.rb +24 -0
  54. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
  55. data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
  56. data/lib/mongoid/errors/invalid_time.rb +3 -6
  57. data/lib/mongoid/errors/inverse_not_found.rb +29 -0
  58. data/lib/mongoid/errors/mixed_relations.rb +4 -9
  59. data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
  60. data/lib/mongoid/errors/mongoid_error.rb +54 -3
  61. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
  62. data/lib/mongoid/errors/no_default_session.rb +23 -0
  63. data/lib/mongoid/errors/no_environment.rb +3 -3
  64. data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
  65. data/lib/mongoid/errors/no_parent.rb +24 -0
  66. data/lib/mongoid/errors/no_session_config.rb +22 -0
  67. data/lib/mongoid/errors/no_session_database.rb +27 -0
  68. data/lib/mongoid/errors/no_session_hosts.rb +27 -0
  69. data/lib/mongoid/errors/no_sessions_config.rb +20 -0
  70. data/lib/mongoid/errors/readonly_attribute.rb +25 -0
  71. data/lib/mongoid/errors/scope_overwrite.rb +4 -4
  72. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
  73. data/lib/mongoid/errors/unknown_attribute.rb +25 -0
  74. data/lib/mongoid/errors/unsaved_document.rb +4 -8
  75. data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
  76. data/lib/mongoid/errors/unsupported_version.rb +4 -4
  77. data/lib/mongoid/errors/validations.rb +7 -6
  78. data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
  79. data/lib/mongoid/errors.rb +22 -1
  80. data/lib/mongoid/extensions/array.rb +127 -0
  81. data/lib/mongoid/extensions/big_decimal.rb +42 -0
  82. data/lib/mongoid/extensions/boolean.rb +24 -0
  83. data/lib/mongoid/extensions/date.rb +70 -0
  84. data/lib/mongoid/extensions/date_time.rb +68 -0
  85. data/lib/mongoid/extensions/false_class.rb +26 -0
  86. data/lib/mongoid/extensions/float.rb +44 -0
  87. data/lib/mongoid/extensions/hash.rb +91 -0
  88. data/lib/mongoid/extensions/integer.rb +54 -0
  89. data/lib/mongoid/extensions/module.rb +28 -0
  90. data/lib/mongoid/extensions/nil_class.rb +21 -0
  91. data/lib/mongoid/extensions/object.rb +188 -0
  92. data/lib/mongoid/extensions/object_id.rb +53 -0
  93. data/lib/mongoid/extensions/range.rb +55 -0
  94. data/lib/mongoid/extensions/regexp.rb +27 -0
  95. data/lib/mongoid/extensions/set.rb +55 -0
  96. data/lib/mongoid/extensions/string.rb +155 -0
  97. data/lib/mongoid/extensions/symbol.rb +54 -0
  98. data/lib/mongoid/extensions/time.rb +78 -0
  99. data/lib/mongoid/extensions/time_with_zone.rb +55 -0
  100. data/lib/mongoid/extensions/true_class.rb +26 -0
  101. data/lib/mongoid/extensions.rb +28 -76
  102. data/lib/mongoid/factory.rb +1 -1
  103. data/lib/mongoid/fields/foreign_key.rb +134 -0
  104. data/lib/mongoid/fields/localized.rb +73 -0
  105. data/lib/mongoid/fields/standard.rb +268 -0
  106. data/lib/mongoid/fields/validators/macro.rb +83 -0
  107. data/lib/mongoid/fields/validators.rb +2 -0
  108. data/lib/mongoid/fields.rb +129 -194
  109. data/lib/mongoid/finders.rb +42 -43
  110. data/lib/mongoid/hierarchy.rb +25 -14
  111. data/lib/mongoid/identity_map.rb +31 -19
  112. data/lib/mongoid/indexes/validators/options.rb +80 -0
  113. data/lib/mongoid/indexes.rb +66 -15
  114. data/lib/mongoid/inspection.rb +1 -1
  115. data/lib/mongoid/javascript.rb +1 -1
  116. data/lib/mongoid/json.rb +2 -2
  117. data/lib/mongoid/loggable.rb +69 -0
  118. data/lib/mongoid/matchers/all.rb +7 -8
  119. data/lib/mongoid/matchers/and.rb +3 -3
  120. data/lib/mongoid/matchers/default.rb +6 -4
  121. data/lib/mongoid/matchers/exists.rb +2 -2
  122. data/lib/mongoid/matchers/gt.rb +2 -2
  123. data/lib/mongoid/matchers/gte.rb +2 -2
  124. data/lib/mongoid/matchers/in.rb +3 -7
  125. data/lib/mongoid/matchers/lt.rb +2 -2
  126. data/lib/mongoid/matchers/lte.rb +2 -2
  127. data/lib/mongoid/matchers/ne.rb +2 -2
  128. data/lib/mongoid/matchers/nin.rb +2 -2
  129. data/lib/mongoid/matchers/or.rb +2 -2
  130. data/lib/mongoid/matchers/size.rb +2 -2
  131. data/lib/mongoid/matchers/strategies.rb +3 -3
  132. data/lib/mongoid/matchers.rb +1 -1
  133. data/lib/mongoid/multi_parameter_attributes.rb +8 -10
  134. data/lib/mongoid/nested_attributes.rb +17 -9
  135. data/lib/mongoid/observer.rb +1 -2
  136. data/lib/mongoid/paranoia.rb +13 -18
  137. data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
  138. data/lib/mongoid/persistence/atomic/bit.rb +5 -7
  139. data/lib/mongoid/persistence/atomic/inc.rb +5 -7
  140. data/lib/mongoid/persistence/atomic/operation.rb +45 -6
  141. data/lib/mongoid/persistence/atomic/pop.rb +5 -7
  142. data/lib/mongoid/persistence/atomic/pull.rb +5 -7
  143. data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
  144. data/lib/mongoid/persistence/atomic/push.rb +4 -10
  145. data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
  146. data/lib/mongoid/persistence/atomic/rename.rb +6 -7
  147. data/lib/mongoid/persistence/atomic/sets.rb +5 -7
  148. data/lib/mongoid/persistence/atomic/unset.rb +4 -5
  149. data/lib/mongoid/persistence/atomic.rb +2 -2
  150. data/lib/mongoid/persistence/deletion.rb +2 -2
  151. data/lib/mongoid/persistence/insertion.rb +10 -16
  152. data/lib/mongoid/persistence/modification.rb +5 -9
  153. data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
  154. data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
  155. data/lib/mongoid/persistence/operations/insert.rb +4 -4
  156. data/lib/mongoid/persistence/operations/remove.rb +4 -4
  157. data/lib/mongoid/persistence/operations/update.rb +5 -5
  158. data/lib/mongoid/persistence/operations.rb +6 -19
  159. data/lib/mongoid/persistence.rb +64 -27
  160. data/lib/mongoid/railtie.rb +26 -11
  161. data/lib/mongoid/railties/database.rake +22 -108
  162. data/lib/mongoid/relations/accessors.rb +119 -19
  163. data/lib/mongoid/relations/auto_save.rb +59 -5
  164. data/lib/mongoid/relations/binding.rb +211 -2
  165. data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
  166. data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
  167. data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
  168. data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
  169. data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
  170. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
  171. data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
  172. data/lib/mongoid/relations/builder.rb +3 -3
  173. data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
  174. data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
  175. data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
  176. data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
  177. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -4
  178. data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
  179. data/lib/mongoid/relations/builders/referenced/many.rb +5 -5
  180. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
  181. data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
  182. data/lib/mongoid/relations/builders.rb +19 -16
  183. data/lib/mongoid/relations/cascading/delete.rb +3 -5
  184. data/lib/mongoid/relations/cascading/destroy.rb +3 -3
  185. data/lib/mongoid/relations/cascading/nullify.rb +3 -3
  186. data/lib/mongoid/relations/cascading/restrict.rb +37 -0
  187. data/lib/mongoid/relations/cascading.rb +6 -4
  188. data/lib/mongoid/relations/constraint.rb +4 -3
  189. data/lib/mongoid/relations/conversions.rb +5 -6
  190. data/lib/mongoid/relations/cyclic.rb +7 -7
  191. data/lib/mongoid/relations/embedded/batchable.rb +346 -0
  192. data/lib/mongoid/relations/embedded/in.rb +23 -12
  193. data/lib/mongoid/relations/embedded/many.rb +99 -160
  194. data/lib/mongoid/relations/embedded/one.rb +25 -14
  195. data/lib/mongoid/relations/macros.rb +105 -60
  196. data/lib/mongoid/relations/many.rb +93 -14
  197. data/lib/mongoid/relations/metadata.rb +231 -45
  198. data/lib/mongoid/relations/nested_builder.rb +3 -5
  199. data/lib/mongoid/relations/one.rb +2 -2
  200. data/lib/mongoid/relations/options.rb +2 -2
  201. data/lib/mongoid/relations/polymorphic.rb +9 -9
  202. data/lib/mongoid/relations/proxy.rb +60 -31
  203. data/lib/mongoid/relations/referenced/in.rb +40 -15
  204. data/lib/mongoid/relations/referenced/many.rb +116 -128
  205. data/lib/mongoid/relations/referenced/many_to_many.rb +101 -46
  206. data/lib/mongoid/relations/referenced/one.rb +34 -13
  207. data/lib/mongoid/relations/reflections.rb +3 -3
  208. data/lib/mongoid/relations/synchronization.rb +19 -23
  209. data/lib/mongoid/relations/targets/enumerable.rb +86 -57
  210. data/lib/mongoid/relations/touchable.rb +32 -0
  211. data/lib/mongoid/relations.rb +6 -6
  212. data/lib/mongoid/reloading.rb +12 -14
  213. data/lib/mongoid/scoping.rb +329 -0
  214. data/lib/mongoid/serialization.rb +13 -30
  215. data/lib/mongoid/sessions/factory.rb +106 -0
  216. data/lib/mongoid/sessions/mongo_uri.rb +93 -0
  217. data/lib/mongoid/sessions/validators/storage.rb +49 -0
  218. data/lib/mongoid/sessions/validators.rb +2 -0
  219. data/lib/mongoid/sessions.rb +359 -0
  220. data/lib/mongoid/sharding.rb +6 -6
  221. data/lib/mongoid/state.rb +6 -7
  222. data/lib/mongoid/threaded/lifecycle.rb +21 -21
  223. data/lib/mongoid/threaded/sessions.rb +0 -0
  224. data/lib/mongoid/threaded.rb +167 -59
  225. data/lib/mongoid/timestamps/created.rb +8 -4
  226. data/lib/mongoid/timestamps/timeless.rb +6 -4
  227. data/lib/mongoid/timestamps/updated.rb +3 -3
  228. data/lib/mongoid/timestamps.rb +1 -1
  229. data/lib/mongoid/unit_of_work.rb +61 -0
  230. data/lib/mongoid/validations/associated.rb +2 -2
  231. data/lib/mongoid/validations/format.rb +2 -2
  232. data/lib/mongoid/validations/presence.rb +34 -4
  233. data/lib/mongoid/validations/uniqueness.rb +8 -10
  234. data/lib/mongoid/validations.rb +28 -20
  235. data/lib/mongoid/version.rb +2 -2
  236. data/lib/mongoid/versioning.rb +25 -26
  237. data/lib/mongoid.rb +24 -39
  238. data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
  239. data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
  240. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +59 -19
  241. data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
  242. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
  243. data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
  244. data/lib/rails/generators/mongoid_generator.rb +5 -5
  245. data/lib/rails/mongoid.rb +69 -25
  246. metadata +92 -154
  247. data/lib/config/locales/bg.yml +0 -61
  248. data/lib/config/locales/de.yml +0 -61
  249. data/lib/config/locales/en-GB.yml +0 -64
  250. data/lib/config/locales/es.yml +0 -59
  251. data/lib/config/locales/fr.yml +0 -62
  252. data/lib/config/locales/hi.yml +0 -53
  253. data/lib/config/locales/hu.yml +0 -64
  254. data/lib/config/locales/id.yml +0 -62
  255. data/lib/config/locales/it.yml +0 -59
  256. data/lib/config/locales/ja.yml +0 -57
  257. data/lib/config/locales/kr.yml +0 -54
  258. data/lib/config/locales/nl.yml +0 -61
  259. data/lib/config/locales/pl.yml +0 -59
  260. data/lib/config/locales/pt-BR.yml +0 -60
  261. data/lib/config/locales/pt.yml +0 -60
  262. data/lib/config/locales/ro.yml +0 -66
  263. data/lib/config/locales/ru.yml +0 -61
  264. data/lib/config/locales/sv.yml +0 -60
  265. data/lib/config/locales/vi.yml +0 -62
  266. data/lib/config/locales/zh-CN.yml +0 -53
  267. data/lib/mongoid/collection.rb +0 -157
  268. data/lib/mongoid/collections/master.rb +0 -45
  269. data/lib/mongoid/collections/operations.rb +0 -44
  270. data/lib/mongoid/collections.rb +0 -120
  271. data/lib/mongoid/config/database.rb +0 -181
  272. data/lib/mongoid/config/replset_database.rb +0 -80
  273. data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
  274. data/lib/mongoid/contexts/enumerable.rb +0 -313
  275. data/lib/mongoid/contexts/mongo.rb +0 -487
  276. data/lib/mongoid/contexts.rb +0 -25
  277. data/lib/mongoid/criterion/builder.rb +0 -34
  278. data/lib/mongoid/criterion/complex.rb +0 -84
  279. data/lib/mongoid/criterion/creational.rb +0 -34
  280. data/lib/mongoid/criterion/exclusion.rb +0 -108
  281. data/lib/mongoid/criterion/inclusion.rb +0 -290
  282. data/lib/mongoid/criterion/optional.rb +0 -259
  283. data/lib/mongoid/criterion/selector.rb +0 -177
  284. data/lib/mongoid/cursor.rb +0 -88
  285. data/lib/mongoid/default_scope.rb +0 -36
  286. data/lib/mongoid/errors/invalid_type.rb +0 -25
  287. data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
  288. data/lib/mongoid/extensions/array/deletion.rb +0 -29
  289. data/lib/mongoid/extensions/false_class/equality.rb +0 -26
  290. data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
  291. data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
  292. data/lib/mongoid/extensions/hash/scoping.rb +0 -25
  293. data/lib/mongoid/extensions/integer/checks.rb +0 -23
  294. data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
  295. data/lib/mongoid/extensions/object/checks.rb +0 -29
  296. data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
  297. data/lib/mongoid/extensions/object/reflections.rb +0 -48
  298. data/lib/mongoid/extensions/object/substitutable.rb +0 -15
  299. data/lib/mongoid/extensions/object/yoda.rb +0 -44
  300. data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
  301. data/lib/mongoid/extensions/proc/scoping.rb +0 -25
  302. data/lib/mongoid/extensions/string/checks.rb +0 -36
  303. data/lib/mongoid/extensions/string/conversions.rb +0 -22
  304. data/lib/mongoid/extensions/string/inflections.rb +0 -118
  305. data/lib/mongoid/extensions/symbol/checks.rb +0 -23
  306. data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
  307. data/lib/mongoid/extensions/true_class/equality.rb +0 -26
  308. data/lib/mongoid/extras.rb +0 -31
  309. data/lib/mongoid/fields/internal/array.rb +0 -76
  310. data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
  311. data/lib/mongoid/fields/internal/bignum.rb +0 -10
  312. data/lib/mongoid/fields/internal/binary.rb +0 -11
  313. data/lib/mongoid/fields/internal/boolean.rb +0 -58
  314. data/lib/mongoid/fields/internal/date.rb +0 -51
  315. data/lib/mongoid/fields/internal/date_time.rb +0 -28
  316. data/lib/mongoid/fields/internal/false_class.rb +0 -10
  317. data/lib/mongoid/fields/internal/fixnum.rb +0 -10
  318. data/lib/mongoid/fields/internal/float.rb +0 -47
  319. data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
  320. data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
  321. data/lib/mongoid/fields/internal/hash.rb +0 -11
  322. data/lib/mongoid/fields/internal/integer.rb +0 -59
  323. data/lib/mongoid/fields/internal/localized.rb +0 -62
  324. data/lib/mongoid/fields/internal/nil_class.rb +0 -53
  325. data/lib/mongoid/fields/internal/object.rb +0 -11
  326. data/lib/mongoid/fields/internal/object_id.rb +0 -46
  327. data/lib/mongoid/fields/internal/range.rb +0 -61
  328. data/lib/mongoid/fields/internal/set.rb +0 -57
  329. data/lib/mongoid/fields/internal/string.rb +0 -42
  330. data/lib/mongoid/fields/internal/symbol.rb +0 -43
  331. data/lib/mongoid/fields/internal/time.rb +0 -23
  332. data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
  333. data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
  334. data/lib/mongoid/fields/internal/true_class.rb +0 -10
  335. data/lib/mongoid/fields/mappings.rb +0 -42
  336. data/lib/mongoid/fields/serializable.rb +0 -270
  337. data/lib/mongoid/identity.rb +0 -92
  338. data/lib/mongoid/keys.rb +0 -144
  339. data/lib/mongoid/logger.rb +0 -45
  340. data/lib/mongoid/multi_database.rb +0 -36
  341. data/lib/mongoid/named_scope.rb +0 -166
  342. data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
  343. data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
  344. data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
  345. data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
  346. data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
  347. data/lib/mongoid/relations/embedded/atomic.rb +0 -89
  348. data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
  349. data/lib/mongoid/relations/referenced/batch.rb +0 -73
  350. data/lib/mongoid/safety.rb +0 -105
  351. data/lib/mongoid/scope.rb +0 -31
@@ -1,34 +1,10 @@
1
1
  # encoding: utf-8
2
- require "mongoid/fields/mappings"
3
- require "mongoid/fields/serializable"
4
- require "mongoid/fields/internal/timekeeping"
5
- require "mongoid/fields/internal/array"
6
- require "mongoid/fields/internal/big_decimal"
7
- require "mongoid/fields/internal/binary"
8
- require "mongoid/fields/internal/boolean"
9
- require "mongoid/fields/internal/date"
10
- require "mongoid/fields/internal/date_time"
11
- require "mongoid/fields/internal/false_class"
12
- require "mongoid/fields/internal/float"
13
- require "mongoid/fields/internal/hash"
14
- require "mongoid/fields/internal/integer"
15
- require "mongoid/fields/internal/bignum"
16
- require "mongoid/fields/internal/fixnum"
17
- require "mongoid/fields/internal/localized"
18
- require "mongoid/fields/internal/nil_class"
19
- require "mongoid/fields/internal/object"
20
- require "mongoid/fields/internal/object_id"
21
- require "mongoid/fields/internal/range"
22
- require "mongoid/fields/internal/set"
23
- require "mongoid/fields/internal/string"
24
- require "mongoid/fields/internal/symbol"
25
- require "mongoid/fields/internal/time"
26
- require "mongoid/fields/internal/time_with_zone"
27
- require "mongoid/fields/internal/true_class"
28
- require "mongoid/fields/internal/foreign_keys/array"
29
- require "mongoid/fields/internal/foreign_keys/object"
30
-
31
- module Mongoid #:nodoc
2
+ require "mongoid/fields/standard"
3
+ require "mongoid/fields/foreign_key"
4
+ require "mongoid/fields/localized"
5
+ require "mongoid/fields/validators"
6
+
7
+ module Mongoid
32
8
 
33
9
  # This module defines behaviour for fields.
34
10
  module Fields
@@ -37,31 +13,38 @@ module Mongoid #:nodoc
37
13
  included do
38
14
  class_attribute :aliased_fields
39
15
  class_attribute :fields
40
- class_attribute :non_proc_defaults
41
- class_attribute :proc_defaults
16
+ class_attribute :pre_processed_defaults
17
+ class_attribute :post_processed_defaults
42
18
 
43
- self.aliased_fields = {}
19
+ self.aliased_fields = { "id" => "_id" }
44
20
  self.fields = {}
45
- self.non_proc_defaults = []
46
- self.proc_defaults = []
21
+ self.pre_processed_defaults = []
22
+ self.post_processed_defaults = []
47
23
 
48
- field(:_type, :type => String)
49
- field(:_id, :type => BSON::ObjectId)
24
+ field(:_type, default: ->{ self.class.name if hereditary? }, type: String)
25
+ field(
26
+ :_id,
27
+ default: ->{ BSON::ObjectId.new },
28
+ pre_processed: true,
29
+ type: BSON::ObjectId
30
+ )
50
31
 
51
32
  alias :id :_id
52
33
  alias :id= :_id=
34
+
35
+ attr_protected(:id, :_id, :_type) if Mongoid.protect_sensitive_fields?
53
36
  end
54
37
 
55
38
  # Apply all default values to the document which are not procs.
56
39
  #
57
40
  # @example Apply all the non-proc defaults.
58
- # model.apply_non_proc_defaults
41
+ # model.apply_pre_processed_defaults
59
42
  #
60
43
  # @return [ Array<String ] The names of the non-proc defaults.
61
44
  #
62
45
  # @since 2.4.0
63
- def apply_non_proc_defaults
64
- non_proc_defaults.each do |name|
46
+ def apply_pre_processed_defaults
47
+ pre_processed_defaults.each do |name|
65
48
  apply_default(name)
66
49
  end
67
50
  end
@@ -69,13 +52,13 @@ module Mongoid #:nodoc
69
52
  # Apply all default values to the document which are procs.
70
53
  #
71
54
  # @example Apply all the proc defaults.
72
- # model.apply_proc_defaults
55
+ # model.apply_post_processed_defaults
73
56
  #
74
57
  # @return [ Array<String ] The names of the proc defaults.
75
58
  #
76
59
  # @since 2.4.0
77
- def apply_proc_defaults
78
- proc_defaults.each do |name|
60
+ def apply_post_processed_defaults
61
+ post_processed_defaults.each do |name|
79
62
  apply_default(name)
80
63
  end
81
64
  end
@@ -107,20 +90,20 @@ module Mongoid #:nodoc
107
90
  #
108
91
  # @since 2.4.0
109
92
  def apply_defaults
110
- apply_non_proc_defaults
111
- apply_proc_defaults
93
+ apply_pre_processed_defaults
94
+ apply_post_processed_defaults
112
95
  end
113
96
 
114
- # Get a list of all the default fields for the model.
97
+ # Is the document using object ids?
115
98
  #
116
- # @example Get a list of the defaults.
117
- # model.defaults
99
+ # @note Refactored from using delegate for class load performance.
118
100
  #
119
- # @return [ Array<String ] The names of all defaults.
101
+ # @example Is the document using object ids?
102
+ # model.using_object_ids?
120
103
  #
121
- # @since 2.4.0
122
- def defaults
123
- self.class.defaults
104
+ # @return [ true, false ] Using object ids.
105
+ def using_object_ids?
106
+ self.class.using_object_ids?
124
107
  end
125
108
 
126
109
  class << self
@@ -160,18 +143,21 @@ module Mongoid #:nodoc
160
143
  end
161
144
  end
162
145
 
163
- module ClassMethods #:nodoc
146
+ module ClassMethods
164
147
 
165
- # Get a list of all the default fields for the model.
148
+ # Returns an array of names for the attributes available on this object.
166
149
  #
167
- # @example Get a list of the defaults.
168
- # Model.defaults
150
+ # Provides the field names in an ORM-agnostic way. Rails v3.1+ uses this
151
+ # meathod to automatically wrap params in JSON requests.
169
152
  #
170
- # @return [ Array<String ] The names of all defaults.
153
+ # @example Get the field names
154
+ # Model.attribute_names
171
155
  #
172
- # @since 2.4.0
173
- def defaults
174
- non_proc_defaults + proc_defaults
156
+ # @return [ Array<String> ] The field names
157
+ #
158
+ # @since 3.0.0
159
+ def attribute_names
160
+ fields.keys
175
161
  end
176
162
 
177
163
  # Defines all the fields that are accessible on the Document
@@ -191,12 +177,12 @@ module Mongoid #:nodoc
191
177
  # @return [ Field ] The generated field
192
178
  def field(name, options = {})
193
179
  named = name.to_s
194
- check_field_name!(name)
195
- add_field(named, options).tap do
196
- descendants.each do |subclass|
197
- subclass.add_field(named, options)
198
- end
180
+ Validators::Macro.validate(self, name, options)
181
+ added = add_field(named, options)
182
+ descendants.each do |subclass|
183
+ subclass.add_field(named, options)
199
184
  end
185
+ added
200
186
  end
201
187
 
202
188
  # When inheriting, we want to copy the fields from the parent class and
@@ -211,25 +197,8 @@ module Mongoid #:nodoc
211
197
  # @since 2.0.0.rc.6
212
198
  def inherited(subclass)
213
199
  super
214
- subclass.fields, subclass.non_proc_defaults, subclass.proc_defaults =
215
- fields.dup, non_proc_defaults.dup, proc_defaults.dup
216
- end
217
-
218
- # Is the field with the provided name a BSON::ObjectId?
219
- #
220
- # @example Is the field a BSON::ObjectId?
221
- # Person.object_id_field?(:name)
222
- #
223
- # @param [ String, Symbol ] name The name of the field.
224
- #
225
- # @return [ true, false ] If the field is a BSON::ObjectId.
226
- #
227
- # @since 2.2.0
228
- def object_id_field?(name)
229
- field_name = name.to_s
230
- field_name = "_id" if field_name == "id"
231
- field = fields[field_name]
232
- field ? field.object_id_field? : false
200
+ subclass.fields, subclass.pre_processed_defaults, subclass.post_processed_defaults =
201
+ fields.dup, pre_processed_defaults.dup, post_processed_defaults.dup
233
202
  end
234
203
 
235
204
  # Replace a field with a new type.
@@ -244,8 +213,21 @@ module Mongoid #:nodoc
244
213
  #
245
214
  # @since 2.1.0
246
215
  def replace_field(name, type)
247
- defaults.delete_one(name)
248
- add_field(name, fields[name].options.merge(:type => type))
216
+ remove_defaults(name)
217
+ add_field(name, fields[name].options.merge(type: type))
218
+ end
219
+
220
+ # Convenience method for determining if we are using +BSON::ObjectIds+ as
221
+ # our id.
222
+ #
223
+ # @example Does this class use object ids?
224
+ # person.using_object_ids?
225
+ #
226
+ # @return [ true, false ] If the class uses BSON::ObjectIds for the id.
227
+ #
228
+ # @since 1.0.0
229
+ def using_object_ids?
230
+ fields["_id"].object_id_field?
249
231
  end
250
232
 
251
233
  protected
@@ -261,11 +243,12 @@ module Mongoid #:nodoc
261
243
  # @since 2.4.0
262
244
  def add_defaults(field)
263
245
  default, name = field.default_val, field.name.to_s
246
+ remove_defaults(name)
264
247
  unless default.nil?
265
- if field.default_val.is_a?(::Proc)
266
- proc_defaults.push(name)
248
+ if field.pre_processed?
249
+ pre_processed_defaults.push(name)
267
250
  else
268
- non_proc_defaults.push(name)
251
+ post_processed_defaults.push(name)
269
252
  end
270
253
  end
271
254
  end
@@ -280,16 +263,15 @@ module Mongoid #:nodoc
280
263
  def add_field(name, options = {})
281
264
  aliased = options[:as]
282
265
  aliased_fields[aliased.to_s] = name if aliased
283
- type = options[:localize] ? Fields::Internal::Localized : options[:type]
284
- Mappings.for(type, options[:identity]).instantiate(name, options).tap do |field|
285
- fields[name] = field
286
- add_defaults(field)
287
- create_accessors(name, name, options)
288
- create_accessors(name, aliased, options) if aliased
289
- process_options(field)
290
- create_dirty_methods(name, name)
291
- create_dirty_methods(name, aliased) if aliased
292
- end
266
+ field = field_for(name, options)
267
+ fields[name] = field
268
+ add_defaults(field)
269
+ create_accessors(name, name, options)
270
+ create_accessors(name, aliased, options) if aliased
271
+ process_options(field)
272
+ create_dirty_methods(name, name)
273
+ create_dirty_methods(name, aliased) if aliased
274
+ field
293
275
  end
294
276
 
295
277
  # Run through all custom options stored in Mongoid::Fields.options and
@@ -315,22 +297,6 @@ module Mongoid #:nodoc
315
297
  end
316
298
  end
317
299
 
318
- # Determine if the field name is allowed, if not raise an error.
319
- #
320
- # @example Check the field name.
321
- # Model.check_field_name!(:collection)
322
- #
323
- # @param [ Symbol ] name The field name.
324
- #
325
- # @raise [ Errors::InvalidField ] If the name is not allowed.
326
- #
327
- # @since 2.1.8
328
- def check_field_name!(name)
329
- if Mongoid.destructive_fields.include?(name)
330
- raise Errors::InvalidField.new(name)
331
- end
332
- end
333
-
334
300
  # Create the field accessors.
335
301
  #
336
302
  # @example Generate the accessors.
@@ -348,12 +314,12 @@ module Mongoid #:nodoc
348
314
  field = fields[name]
349
315
 
350
316
  create_field_getter(name, meth, field)
351
- create_field_setter(name, meth)
317
+ create_field_setter(name, meth, field)
352
318
  create_field_check(name, meth)
353
319
 
354
320
  if options[:localize]
355
321
  create_translations_getter(name, meth)
356
- create_translations_setter(name, meth)
322
+ create_translations_setter(name, meth, field)
357
323
  end
358
324
  end
359
325
 
@@ -369,38 +335,10 @@ module Mongoid #:nodoc
369
335
  # @since 2.4.0
370
336
  def create_field_getter(name, meth, field)
371
337
  generated_methods.module_eval do
372
- if meth =~ /\W/
373
- if field.cast_on_read?
374
- define_method(meth) do
375
- fields[name].deserialize(read_attribute(name))
376
- end
377
- else
378
- define_method(meth) do
379
- read_attribute(name).tap do |value|
380
- if value.is_a?(Array) || value.is_a?(Hash)
381
- attribute_will_change!(name)
382
- end
383
- end
384
- end
385
- end
386
- else
387
- if field.cast_on_read?
388
- class_eval <<-EOM
389
- def #{meth}
390
- fields[#{name.inspect}].deserialize(read_attribute(#{name.inspect}))
391
- end
392
- EOM
393
- else
394
- class_eval <<-EOM
395
- def #{meth}
396
- read_attribute(#{name.inspect}).tap do |value|
397
- if value.is_a?(Array) || value.is_a?(Hash)
398
- attribute_will_change!(#{name.inspect})
399
- end
400
- end
401
- end
402
- EOM
403
- end
338
+ re_define_method(meth) do
339
+ value = fields[name].demongoize(read_attribute(name))
340
+ attribute_will_change!(name) if value.resizable?
341
+ value
404
342
  end
405
343
  end
406
344
  end
@@ -412,20 +350,16 @@ module Mongoid #:nodoc
412
350
  #
413
351
  # @param [ String ] name The name of the attribute.
414
352
  # @param [ String ] meth The name of the method.
353
+ # @param [ Field ] field The field.
415
354
  #
416
355
  # @since 2.4.0
417
- def create_field_setter(name, meth)
356
+ def create_field_setter(name, meth, field)
418
357
  generated_methods.module_eval do
419
- if meth =~ /\W/
420
- define_method(meth) do |value|
421
- write_attribute(name, value)
358
+ re_define_method("#{meth}=") do |value|
359
+ write_attribute(name, value)
360
+ if field.foreign_key?
361
+ remove_ivar(field.metadata.name)
422
362
  end
423
- else
424
- class_eval <<-EOM
425
- def #{meth}=(value)
426
- write_attribute(#{name.inspect}, value)
427
- end
428
- EOM
429
363
  end
430
364
  end
431
365
  end
@@ -441,18 +375,9 @@ module Mongoid #:nodoc
441
375
  # @since 2.4.0
442
376
  def create_field_check(name, meth)
443
377
  generated_methods.module_eval do
444
- if meth =~ /\W/
445
- define_method("#{meth}?") do
446
- attr = read_attribute(name)
447
- attr == true || attr.present?
448
- end
449
- else
450
- class_eval <<-EOM
451
- def #{meth}?
452
- attr = read_attribute(#{name.inspect})
453
- attr == true || attr.present?
454
- end
455
- EOM
378
+ re_define_method("#{meth}?") do
379
+ attr = read_attribute(name)
380
+ attr == true || attr.present?
456
381
  end
457
382
  end
458
383
  end
@@ -468,16 +393,8 @@ module Mongoid #:nodoc
468
393
  # @since 2.4.0
469
394
  def create_translations_getter(name, meth)
470
395
  generated_methods.module_eval do
471
- if meth =~ /\W/
472
- define_method("#{meth}_translations") do
473
- attributes[name]
474
- end
475
- else
476
- class_eval <<-EOM
477
- def #{meth}_translations
478
- attributes[#{name.inspect}]
479
- end
480
- EOM
396
+ re_define_method("#{meth}_translations") do
397
+ attributes[name] ||= {}
481
398
  end
482
399
  end
483
400
  end
@@ -489,22 +406,19 @@ module Mongoid #:nodoc
489
406
  #
490
407
  # @param [ String ] name The name of the attribute.
491
408
  # @param [ String ] meth The name of the method.
409
+ # @param [ Field ] field The field.
492
410
  #
493
411
  # @since 2.4.0
494
- def create_translations_setter(name, meth)
412
+ def create_translations_setter(name, meth, field)
495
413
  generated_methods.module_eval do
496
- if meth =~ /\W/
497
- define_method("#{meth}_translations=") do |value|
498
- attribute_will_change!(name)
499
- attributes[name] = value
500
- end
501
- else
502
- class_eval <<-EOM
503
- def #{meth}_translations=(value)
504
- attribute_will_change!(#{name.inspect})
505
- attributes[#{name.inspect}] = value
414
+ re_define_method("#{meth}_translations=") do |value|
415
+ attribute_will_change!(name)
416
+ if value
417
+ value.update_values do |value|
418
+ field.type.mongoize(value)
506
419
  end
507
- EOM
420
+ end
421
+ attributes[name] = value
508
422
  end
509
423
  end
510
424
  end
@@ -519,9 +433,30 @@ module Mongoid #:nodoc
519
433
  # @since 2.0.0
520
434
  def generated_methods
521
435
  @generated_methods ||= begin
522
- Module.new.tap { |mod| include(mod) }
436
+ mod = Module.new
437
+ include(mod)
438
+ mod
523
439
  end
524
440
  end
441
+
442
+ # Remove the default keys for the provided name.
443
+ #
444
+ # @example Remove the default keys.
445
+ # Model.remove_defaults(name)
446
+ #
447
+ # @param [ String ] name The field name.
448
+ #
449
+ # @since 2.4.0
450
+ def remove_defaults(name)
451
+ pre_processed_defaults.delete_one(name)
452
+ post_processed_defaults.delete_one(name)
453
+ end
454
+
455
+ def field_for(name, options)
456
+ return Fields::Localized.new(name, options) if options[:localize]
457
+ return Fields::ForeignKey.new(name, options) if options[:identity]
458
+ Fields::Standard.new(name, options)
459
+ end
525
460
  end
526
461
  end
527
462
  end
@@ -1,42 +1,25 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
2
+ module Mongoid
3
3
 
4
4
  # This module defines the finder methods that hang off the document at the
5
5
  # class level.
6
6
  module Finders
7
+ extend Origin::Forwardable
7
8
 
8
- # Delegate to the criteria methods that are natural for creating a new
9
- # criteria.
10
- critera_methods = [ :all_in, :all_of, :any_in, :any_of, :asc, :ascending,
11
- :avg, :desc, :descending, :excludes,
12
- :includes, :limit, :max, :min, :not_in, :only,
13
- :order_by, :search, :skip, :sum, :without, :where,
14
- :update, :update_all, :near ]
15
- delegate *(critera_methods.dup << { :to => :criteria })
9
+ select_with :with_default_scope
10
+ delegate :aggregates, :avg, :each, :extras, :find_and_modify, :includes,
11
+ :map_reduce, :max, :min, :sum, :update, :update_all, to: :with_default_scope
16
12
 
17
- # Find all documents that match the given conditions.
18
- #
19
- # @example Find all matching documents given conditions.
20
- # Person.all(:conditions => { :attribute => "value" })
21
- #
22
- # @param [ Array ] args The conditions with options.
23
- #
24
- # @return [ Criteria ] The matching documents.
25
- def all(*args)
26
- find(:all, *args)
27
- end
28
-
29
- # Returns a count of matching records in the database based on the
30
- # provided arguments.
13
+ # Returns a count of records in the database.
14
+ # If you want to specify conditions use where.
31
15
  #
32
16
  # @example Get the count of matching documents.
33
- # Person.count(:conditions => { :attribute => "value" })
34
- #
35
- # @param [ Array ] args The conditions.
17
+ # Person.count
18
+ # Person.where(title: "Sir").count
36
19
  #
37
20
  # @return [ Integer ] The number of matching documents.
38
- def count(*args)
39
- find(:all, *args).count
21
+ def count
22
+ with_default_scope.count
40
23
  end
41
24
 
42
25
  # Returns true if count is zero
@@ -53,11 +36,11 @@ module Mongoid #:nodoc:
53
36
  # provided arguments.
54
37
  #
55
38
  # @example Do any documents exist for the conditions?
56
- # Person.exists?(:conditions => { :attribute => "value" })
39
+ # Person.exists?
57
40
  #
58
41
  # @param [ Array ] args The conditions.
59
- def exists?(*args)
60
- find(:all, *args).count > 0
42
+ def exists?
43
+ with_default_scope.exists?
61
44
  end
62
45
 
63
46
  # Find a +Document+ in several different ways.
@@ -68,12 +51,6 @@ module Mongoid #:nodoc:
68
51
  # it will attempt to find either a single +Document+ or multiples based
69
52
  # on the conditions provided and the first parameter.
70
53
  #
71
- # @example Find the first matching document.
72
- # Person.find(:first, :conditions => { :attribute => "value" })
73
- #
74
- # @example Find all matching documents.
75
- # Person.find(:all, :conditions => { :attribute => "value" })
76
- #
77
54
  # @example Find a single document by an id.
78
55
  # Person.find(BSON::ObjectId)
79
56
  #
@@ -81,7 +58,7 @@ module Mongoid #:nodoc:
81
58
  #
82
59
  # @return [ Document, nil, Criteria ] A document or matching documents.
83
60
  def find(*args)
84
- criteria.find(*args)
61
+ with_default_scope.find(*args)
85
62
  end
86
63
 
87
64
  # Find the first +Document+ given the conditions, or creates a new document
@@ -110,6 +87,28 @@ module Mongoid #:nodoc:
110
87
  find_or(:new, attrs, &block)
111
88
  end
112
89
 
90
+ # Find the first +Document+ given the conditions, or raises
91
+ # Mongoid::Errors::DocumentNotFound
92
+ #
93
+ # @example Find the document by attribute other than id
94
+ # Person.find_by(:username => "superuser")
95
+ #
96
+ # @param [ Hash ] attrs The attributes to check.
97
+ #
98
+ # @raise [ Errors::DocumentNotFound ] If no document found.
99
+ #
100
+ # @return [ Document ] A matching document.
101
+ #
102
+ # @since 3.0.0
103
+ def find_by(attrs = {})
104
+ result = where(attrs).first
105
+ if result.nil? && Mongoid.raise_not_found_error
106
+ raise(Errors::DocumentNotFound.new(self, attrs))
107
+ end
108
+ yield(result) if result && block_given?
109
+ result
110
+ end
111
+
113
112
  # Find the first +Document+ given the conditions.
114
113
  #
115
114
  # @example Find the first document.
@@ -118,8 +117,8 @@ module Mongoid #:nodoc:
118
117
  # @param [ Array ] args The conditions with options.
119
118
  #
120
119
  # @return [ Document ] The first matching document.
121
- def first(*args)
122
- find(:first, *args)
120
+ def first
121
+ with_default_scope.first
123
122
  end
124
123
 
125
124
  # Find the last +Document+ given the conditions.
@@ -130,8 +129,8 @@ module Mongoid #:nodoc:
130
129
  # @param [ Array ] args The conditions with options.
131
130
  #
132
131
  # @return [ Document ] The last matching document.
133
- def last(*args)
134
- find(:last, *args)
132
+ def last
133
+ with_default_scope.last
135
134
  end
136
135
 
137
136
  protected
@@ -146,7 +145,7 @@ module Mongoid #:nodoc:
146
145
  #
147
146
  # @return [ Document ] The first or new document.
148
147
  def find_or(method, attrs = {}, &block)
149
- first(:conditions => attrs) || send(method, attrs, &block)
148
+ where(attrs).first || send(method, attrs, &block)
150
149
  end
151
150
  end
152
151
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Hierarchy #:nodoc
2
+ module Mongoid
3
+ module Hierarchy
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
@@ -19,18 +19,29 @@ module Mongoid #:nodoc
19
19
  #
20
20
  # @return [ Array<Document> ] All child documents in the hierarchy.
21
21
  def _children
22
- @_children ||=
23
- [].tap do |children|
24
- relations.each_pair do |name, metadata|
25
- if metadata.embedded?
26
- child = send(name)
27
- Array.wrap(child).each do |doc|
28
- children.push(doc)
29
- children.concat(doc._children) unless metadata.versioned?
30
- end if child
31
- end
32
- end
22
+ @_children ||= collect_children
23
+ end
24
+
25
+ # Collect all the children of this document.
26
+ #
27
+ # @example Collect all the children.
28
+ # document.collect_children
29
+ #
30
+ # @return [ Array<Document> ] The children.
31
+ #
32
+ # @since 2.4.0
33
+ def collect_children
34
+ children = []
35
+ embedded_relations.each_pair do |name, metadata|
36
+ without_autobuild do
37
+ child = send(name)
38
+ Array.wrap(child).each do |doc|
39
+ children.push(doc)
40
+ children.concat(doc._children) unless metadata.versioned?
41
+ end if child
33
42
  end
43
+ end
44
+ children
34
45
  end
35
46
 
36
47
  # Determines if the document is a subclass of another document.
@@ -106,7 +117,7 @@ module Mongoid #:nodoc
106
117
  object || self
107
118
  end
108
119
 
109
- module ClassMethods #:nodoc:
120
+ module ClassMethods
110
121
 
111
122
  # Determines if the document is a subclass of another document.
112
123
  #