mongoid 2.4.9 → 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 +869 -8
  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 -6
  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 +4 -4
  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 +39 -12
  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 +12 -4
  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 -148
  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 +14 -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 -122
  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 +103 -25
  234. data/lib/mongoid/validations.rb +62 -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 +93 -155
  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 -485
  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 -31
  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,20 +1,16 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Errors #:nodoc
2
+ module Mongoid
3
+ module Errors
4
4
 
5
5
  # Raised when attempting to call create or create! through a
6
6
  # references_many when the parent document has not been saved. This
7
7
  # prevents the child from getting presisted and immediately being orphaned.
8
8
  class UnsavedDocument < MongoidError
9
-
10
- attr_reader :base, :document
11
-
12
9
  def initialize(base, document)
13
- @base, @document = base, document
14
10
  super(
15
- translate(
11
+ compose_message(
16
12
  "unsaved_document",
17
- { :base => base.class.name, :document => document.class.name }
13
+ { base: base.class.name, document: document.class.name }
18
14
  )
19
15
  )
20
16
  end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Raised when Javascript criteria selector is passed for embedded document.
6
+ class UnsupportedJavascript < MongoidError
7
+
8
+ # Create the new error caused by using Javascript in embedded document criteria selector.
9
+ #
10
+ # @example Create the error.
11
+ # UnsupportedJavascriptSelector.new(Album, "this.name == '101'")
12
+ #
13
+ # @param [ Class ] klass The embedded document class.
14
+ # @param [ String ] javascript The javascript expression.
15
+ #
16
+ # @since 3.0.0
17
+ def initialize(klass, javascript)
18
+ super(
19
+ compose_message(
20
+ "unsupported_javascript",
21
+ { klass: klass, javascript: javascript }
22
+ )
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Errors #:nodoc
2
+ module Mongoid
3
+ module Errors
4
4
 
5
5
  # Raised when the database version is not supported by Mongoid.
6
6
  #
@@ -9,9 +9,9 @@ module Mongoid #:nodoc
9
9
  class UnsupportedVersion < MongoidError
10
10
  def initialize(version)
11
11
  super(
12
- translate(
12
+ compose_message(
13
13
  "unsupported_version",
14
- { :version => version, :mongo_version => Mongoid::MONGODB_VERSION }
14
+ { version: version, mongo_version: Mongoid::MONGODB_VERSION }
15
15
  )
16
16
  )
17
17
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Errors #:nodoc
2
+ module Mongoid
3
+ module Errors
4
4
 
5
5
  # Raised when a persistence method ending in ! fails validation. The message
6
6
  # will contain the full error messages from the +Document+ in question.
@@ -8,13 +8,14 @@ module Mongoid #:nodoc
8
8
  # @example Create the error.
9
9
  # Validations.new(person.errors)
10
10
  class Validations < MongoidError
11
- attr_reader :document
12
11
  def initialize(document)
13
- @document = document
14
12
  super(
15
- translate(
13
+ compose_message(
16
14
  "validations",
17
- { :errors => document.errors.full_messages.join(", ") }
15
+ {
16
+ document: document.class,
17
+ errors: document.errors.full_messages.join(", ")
18
+ }
18
19
  )
19
20
  )
20
21
  end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when attempting to version an embedded document.
6
+ class VersioningNotOnRoot < MongoidError
7
+
8
+ # Create the new error.
9
+ #
10
+ # @example Create the new error.
11
+ # VersioningNotOnRoot.new(Address)
12
+ #
13
+ # @param [ Class ] klass The embedded class.
14
+ #
15
+ # @since 3.0.0
16
+ def initialize(klass)
17
+ super(
18
+ compose_message("versioning_not_on_root", { klass: klass })
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,19 +1,40 @@
1
1
  # encoding: utf-8
2
2
  require "mongoid/errors/mongoid_error"
3
+ require "mongoid/errors/ambiguous_relationship"
3
4
  require "mongoid/errors/callback"
4
5
  require "mongoid/errors/document_not_found"
5
6
  require "mongoid/errors/eager_load"
6
7
  require "mongoid/errors/invalid_collection"
8
+ require "mongoid/errors/invalid_config_option"
7
9
  require "mongoid/errors/invalid_database"
8
10
  require "mongoid/errors/invalid_field"
11
+ require "mongoid/errors/invalid_field_option"
9
12
  require "mongoid/errors/invalid_find"
13
+ require "mongoid/errors/invalid_index"
10
14
  require "mongoid/errors/invalid_options"
15
+ require "mongoid/errors/invalid_scope"
16
+ require "mongoid/errors/invalid_set_polymorphic_relation"
17
+ require "mongoid/errors/invalid_storage_options"
11
18
  require "mongoid/errors/invalid_time"
12
- require "mongoid/errors/invalid_type"
19
+ require "mongoid/errors/inverse_not_found"
13
20
  require "mongoid/errors/mixed_relations"
21
+ require "mongoid/errors/mixed_session_configuration"
22
+ require "mongoid/errors/nested_attributes_metadata_not_found"
23
+ require "mongoid/errors/no_default_session"
14
24
  require "mongoid/errors/no_environment"
25
+ require "mongoid/errors/no_map_reduce_output"
26
+ require "mongoid/errors/no_parent"
27
+ require "mongoid/errors/no_session_config"
28
+ require "mongoid/errors/no_sessions_config"
29
+ require "mongoid/errors/no_session_database"
30
+ require "mongoid/errors/no_session_hosts"
31
+ require "mongoid/errors/readonly_attribute"
15
32
  require "mongoid/errors/scope_overwrite"
16
33
  require "mongoid/errors/too_many_nested_attribute_records"
34
+ require "mongoid/errors/unknown_attribute"
17
35
  require "mongoid/errors/unsaved_document"
36
+ require "mongoid/errors/unsupported_javascript"
18
37
  require "mongoid/errors/unsupported_version"
19
38
  require "mongoid/errors/validations"
39
+ require "mongoid/errors/versioning_not_on_root"
40
+ require "mongoid/errors/delete_restriction"
@@ -0,0 +1,127 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Array
5
+
6
+ # Evolve the array into an array of object ids.
7
+ #
8
+ # @example Evolve the array to object ids.
9
+ # [ id ].__evolve_object_id__
10
+ #
11
+ # @return [ Array<Moped::BSON::ObjectId> ] The converted array.
12
+ #
13
+ # @since 3.0.0
14
+ def __evolve_object_id__
15
+ map!(&:__evolve_object_id__).compact!
16
+ self
17
+ end
18
+
19
+ # Converts the array for storing as a time.
20
+ #
21
+ # @example Convert the array to a time.
22
+ # [ 2010, 1, 1 ].__mongoize_time__
23
+ #
24
+ # @return [ Time ] The time.
25
+ #
26
+ # @since 3.0.0
27
+ def __mongoize_time__
28
+ ::Time.configured.local(*self)
29
+ end
30
+
31
+ # Turn the object from the ruby type we deal with to a Mongo friendly
32
+ # type.
33
+ #
34
+ # @example Mongoize the object.
35
+ # object.mongoize
36
+ #
37
+ # @return [ Array ] The object.
38
+ #
39
+ # @since 3.0.0
40
+ def mongoize
41
+ ::Array.mongoize(self)
42
+ end
43
+
44
+ # Delete the first object in the array that is equal to the supplied
45
+ # object and return it. This is much faster than performing a standard
46
+ # delete for large arrays ince it attempt to delete multiple in the
47
+ # other.
48
+ #
49
+ # @example Delete the first object.
50
+ # [ "1", "2", "1" ].delete_one("1")
51
+ #
52
+ # @param [ Object ] object The object to delete.
53
+ #
54
+ # @return [ Object ] The deleted object.
55
+ #
56
+ # @since 2.1.0
57
+ def delete_one(object)
58
+ position = index(object)
59
+ position ? delete_at(position) : nil
60
+ end
61
+
62
+ # Is the object's size changable?
63
+ #
64
+ # @example Is the object resizable?
65
+ # object.resizable?
66
+ #
67
+ # @return [ true ] true.
68
+ #
69
+ # @since 3.0.0
70
+ def resizable?
71
+ true
72
+ end
73
+
74
+ module ClassMethods
75
+
76
+ # Convert the provided object to a propery array of foreign keys.
77
+ #
78
+ # @example Mongoize the object.
79
+ # Array.__mongoize_fk__(constraint, object)
80
+ #
81
+ # @param [ Constraint ] constraint The metadata constraint.
82
+ # @param [ Object ] object The object to convert.
83
+ #
84
+ # @return [ Array ] The array of ids.
85
+ #
86
+ # @since 3.0.0
87
+ def __mongoize_fk__(constraint, object)
88
+ if object.resizable?
89
+ object.blank? ? object : constraint.convert(object)
90
+ else
91
+ object.blank? ? [] : constraint.convert(Array(object))
92
+ end
93
+ end
94
+
95
+ # Turn the object from the ruby type we deal with to a Mongo friendly
96
+ # type.
97
+ #
98
+ # @example Mongoize the object.
99
+ # Array.mongoize([ 1, 2, 3 ])
100
+ #
101
+ # @param [ Object ] object The object to mongoize.
102
+ #
103
+ # @return [ Array ] The object mongoized.
104
+ #
105
+ # @since 3.0.0
106
+ def mongoize(object)
107
+ evolve(object)
108
+ end
109
+
110
+ # Is the object's size changable?
111
+ #
112
+ # @example Is the object resizable?
113
+ # Array.resizable?
114
+ #
115
+ # @return [ true ] true.
116
+ #
117
+ # @since 3.0.0
118
+ def resizable?
119
+ true
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
125
+
126
+ ::Array.__send__(:include, Mongoid::Extensions::Array)
127
+ ::Array.__send__(:extend, Mongoid::Extensions::Array::ClassMethods)
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module BigDecimal
5
+
6
+ # Turn the object from the ruby type we deal with to a Mongo friendly
7
+ # type.
8
+ #
9
+ # @example Mongoize the object.
10
+ # object.mongoize
11
+ #
12
+ # @return [ Object ] The object.
13
+ #
14
+ # @since 3.0.0
15
+ def mongoize
16
+ to_s
17
+ end
18
+
19
+ module ClassMethods
20
+
21
+ # Convert the object from it's mongo friendly ruby type to this type.
22
+ #
23
+ # @example Demongoize the object.
24
+ # Object.demongoize(object)
25
+ #
26
+ # @param [ Object ] object The object to demongoize.
27
+ #
28
+ # @return [ Object ] The object.
29
+ #
30
+ # @since 3.0.0
31
+ def demongoize(object)
32
+ if object
33
+ object.numeric? ? ::BigDecimal.new(object) : object
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ ::BigDecimal.__send__(:include, Mongoid::Extensions::BigDecimal)
42
+ ::BigDecimal.__send__(:extend, Mongoid::Extensions::BigDecimal::ClassMethods)
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Boolean
5
+ module ClassMethods
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
+ evolve(object)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ ::Boolean.__send__(:extend, Mongoid::Extensions::Boolean::ClassMethods)
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Date
5
+
6
+ # Convert the date into a time.
7
+ #
8
+ # @example Convert the date to a time.
9
+ # date.__mongoize_time__
10
+ #
11
+ # @return [ Time ] The converted time.
12
+ #
13
+ # @since 3.0.0
14
+ def __mongoize_time__
15
+ ::Time.configured.local(year, month, day)
16
+ end
17
+
18
+ # Turn the object from the ruby type we deal with to a Mongo friendly
19
+ # type.
20
+ #
21
+ # @example Mongoize the object.
22
+ # date.mongoize
23
+ #
24
+ # @return [ Time ] The object mongoized.
25
+ #
26
+ # @since 3.0.0
27
+ def mongoize
28
+ ::Date.mongoize(self)
29
+ end
30
+
31
+ module ClassMethods
32
+
33
+ # Convert the object from it's mongo friendly ruby type to this type.
34
+ #
35
+ # @example Demongoize the object.
36
+ # Date.demongoize(object)
37
+ #
38
+ # @param [ Time ] object The time from Mongo.
39
+ #
40
+ # @return [ Date ] The object as a date.
41
+ #
42
+ # @since 3.0.0
43
+ def demongoize(object)
44
+ ::Date.new(object.year, object.month, object.day) if object
45
+ end
46
+
47
+ # Turn the object from the ruby type we deal with to a Mongo friendly
48
+ # type.
49
+ #
50
+ # @example Mongoize the object.
51
+ # Date.mongoize("2012-1-1")
52
+ #
53
+ # @param [ Object ] object The object to mongoize.
54
+ #
55
+ # @return [ Time ] The object mongoized.
56
+ #
57
+ # @since 3.0.0
58
+ def mongoize(object)
59
+ unless object.blank?
60
+ time = object.__mongoize_time__
61
+ ::Time.utc(time.year, time.month, time.day)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ ::Date.__send__(:include, Mongoid::Extensions::Date)
70
+ ::Date.__send__(:extend, Mongoid::Extensions::Date::ClassMethods)
@@ -0,0 +1,68 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module DateTime
5
+
6
+ # Mongoize the date time into a time.
7
+ #
8
+ # @example Mongoize the date time.
9
+ # date_time.__mongoize_time__
10
+ #
11
+ # @return [ Time ] The mongoized time.
12
+ #
13
+ # @since 3.0.0
14
+ def __mongoize_time__
15
+ return self if utc? && Mongoid.use_utc?
16
+ ::Time.configured.local(year, month, day, hour, min, sec)
17
+ end
18
+
19
+ # Turn the object from the ruby type we deal with to a Mongo friendly
20
+ # type.
21
+ #
22
+ # @example Mongoize the object.
23
+ # date_time.mongoize
24
+ #
25
+ # @return [ Time ] The object mongoized.
26
+ #
27
+ # @since 3.0.0
28
+ def mongoize
29
+ ::DateTime.mongoize(self)
30
+ end
31
+
32
+ module ClassMethods
33
+
34
+ # Convert the object from it's mongo friendly ruby type to this type.
35
+ #
36
+ # @example Demongoize the object.
37
+ # DateTime.demongoize(object)
38
+ #
39
+ # @param [ Time ] object The time from Mongo.
40
+ #
41
+ # @return [ DateTime ] The object as a date.
42
+ #
43
+ # @since 3.0.0
44
+ def demongoize(object)
45
+ ::Time.demongoize(object).try(:to_datetime)
46
+ end
47
+
48
+ # Turn the object from the ruby type we deal with to a Mongo friendly
49
+ # type.
50
+ #
51
+ # @example Mongoize the object.
52
+ # DateTime.mongoize("2012-1-1")
53
+ #
54
+ # @param [ Object ] object The object to convert.
55
+ #
56
+ # @return [ Time ] The object mongoized.
57
+ #
58
+ # @since 3.0.0
59
+ def mongoize(object)
60
+ ::Time.mongoize(object)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ ::DateTime.__send__(:include, Mongoid::Extensions::DateTime)
68
+ ::DateTime.__send__(:extend, Mongoid::Extensions::DateTime::ClassMethods)
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module FalseClass
5
+
6
+ # Is the passed value a boolean?
7
+ #
8
+ # @example Is the value a boolean type?
9
+ # false.is_a?(Boolean)
10
+ #
11
+ # @param [ Class ] other The class to check.
12
+ #
13
+ # @return [ true, false ] If the other is a boolean.
14
+ #
15
+ # @since 1.0.0
16
+ def is_a?(other)
17
+ if other == ::Boolean || other.class == ::Boolean
18
+ return true
19
+ end
20
+ super(other)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ ::FalseClass.__send__(:include, Mongoid::Extensions::FalseClass)
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Float
5
+
6
+ # Convert the float into a time.
7
+ #
8
+ # @example Convert the float into a time.
9
+ # 1335532685.117847.__mongoize_time__
10
+ #
11
+ # @return [ Time ] The float as a time.
12
+ #
13
+ # @since 3.0.0
14
+ def __mongoize_time__
15
+ ::Time.at(self)
16
+ end
17
+
18
+ module ClassMethods
19
+
20
+ # Turn the object from the ruby type we deal with to a Mongo friendly
21
+ # type.
22
+ #
23
+ # @example Mongoize the object.
24
+ # Float.mongoize("123.11")
25
+ #
26
+ # @param [ Object ] object The object to mongoize.
27
+ #
28
+ # @return [ String ] The object mongoized.
29
+ #
30
+ # @since 3.0.0
31
+ def mongoize(object)
32
+ unless object.blank?
33
+ __numeric__(object) rescue 0.0
34
+ else
35
+ nil
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ ::Float.__send__(:include, Mongoid::Extensions::Float)
44
+ ::Float.__send__(:extend, Mongoid::Extensions::Float::ClassMethods)
@@ -0,0 +1,91 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Hash
5
+
6
+ # Evolves each value in the hash to an object id if it is convertable.
7
+ #
8
+ # @example Convert the hash values.
9
+ # { field: id }.__evolve_object_id__
10
+ #
11
+ # @return [ Hash ] The converted hash.
12
+ #
13
+ # @since 3.0.0
14
+ def __evolve_object_id__
15
+ update_values(&:__evolve_object_id__)
16
+ end
17
+
18
+ # Get the id attribute from this hash, whether it's prefixed with an
19
+ # underscore or is a symbol.
20
+ #
21
+ # @example Extract the id.
22
+ # { :_id => 1 }.extract_id
23
+ #
24
+ # @return [ Object ] The value of the id.
25
+ #
26
+ # @since 2.3.2
27
+ def extract_id
28
+ self["id"] || self["_id"] || self[:id] || self[:_id]
29
+ end
30
+
31
+ # Turn the object from the ruby type we deal with to a Mongo friendly
32
+ # type.
33
+ #
34
+ # @example Mongoize the object.
35
+ # object.mongoize
36
+ #
37
+ # @return [ Hash ] The object.
38
+ #
39
+ # @since 3.0.0
40
+ def mongoize
41
+ ::Hash.mongoize(self)
42
+ end
43
+
44
+ # Can the size of this object change?
45
+ #
46
+ # @example Is the hash resizable?
47
+ # {}.resizable?
48
+ #
49
+ # @return [ true ] true.
50
+ #
51
+ # @since 3.0.0
52
+ def resizable?
53
+ true
54
+ end
55
+
56
+ module ClassMethods
57
+
58
+ # Turn the object from the ruby type we deal with to a Mongo friendly
59
+ # type.
60
+ #
61
+ # @example Mongoize the object.
62
+ # Hash.mongoize([ 1, 2, 3 ])
63
+ #
64
+ # @param [ Object ] object The object to mongoize.
65
+ #
66
+ # @return [ Hash ] The object mongoized.
67
+ #
68
+ # @since 3.0.0
69
+ def mongoize(object)
70
+ return if object.nil?
71
+ evolve(object).update_values { |value| value.mongoize }
72
+ end
73
+
74
+ # Can the size of this object change?
75
+ #
76
+ # @example Is the hash resizable?
77
+ # {}.resizable?
78
+ #
79
+ # @return [ true ] true.
80
+ #
81
+ # @since 3.0.0
82
+ def resizable?
83
+ true
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ ::Hash.__send__(:include, Mongoid::Extensions::Hash)
91
+ ::Hash.__send__(:extend, Mongoid::Extensions::Hash::ClassMethods)