mongoid 2.8.1 → 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 +802 -58
  2. data/LICENSE +1 -1
  3. data/README.md +10 -11
  4. data/Rakefile +2 -8
  5. data/lib/config/locales/en.yml +441 -51
  6. data/lib/mongoid.rb +24 -39
  7. data/lib/mongoid/atomic.rb +16 -33
  8. data/lib/mongoid/atomic/modifiers.rb +2 -2
  9. data/lib/mongoid/atomic/paths/embedded.rb +4 -5
  10. data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
  11. data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
  12. data/lib/mongoid/atomic/paths/root.rb +4 -5
  13. data/lib/mongoid/attributes.rb +95 -32
  14. data/lib/mongoid/attributes/processing.rb +14 -10
  15. data/lib/mongoid/attributes/readonly.rb +56 -0
  16. data/lib/mongoid/callbacks.rb +90 -27
  17. data/lib/mongoid/collections/retry.rb +2 -3
  18. data/lib/mongoid/components.rb +11 -23
  19. data/lib/mongoid/config.rb +87 -233
  20. data/lib/mongoid/config/environment.rb +5 -6
  21. data/lib/mongoid/config/inflections.rb +6 -0
  22. data/lib/mongoid/config/options.rb +1 -1
  23. data/lib/mongoid/config/validators.rb +3 -0
  24. data/lib/mongoid/config/validators/option.rb +25 -0
  25. data/lib/mongoid/config/validators/session.rb +140 -0
  26. data/lib/mongoid/contextual.rb +50 -0
  27. data/lib/mongoid/contextual/aggregable/memory.rb +98 -0
  28. data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
  29. data/lib/mongoid/contextual/atomic.rb +179 -0
  30. data/lib/mongoid/contextual/command.rb +43 -0
  31. data/lib/mongoid/contextual/find_and_modify.rb +66 -0
  32. data/lib/mongoid/contextual/map_reduce.rb +273 -0
  33. data/lib/mongoid/contextual/memory.rb +383 -0
  34. data/lib/mongoid/contextual/mongo.rb +543 -0
  35. data/lib/mongoid/copyable.rb +3 -34
  36. data/lib/mongoid/criteria.rb +436 -250
  37. data/lib/mongoid/criterion/inspection.rb +14 -8
  38. data/lib/mongoid/criterion/scoping.rb +114 -44
  39. data/lib/mongoid/dirty.rb +152 -67
  40. data/lib/mongoid/document.rb +69 -50
  41. data/lib/mongoid/errors.rb +22 -1
  42. data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
  43. data/lib/mongoid/errors/callback.rb +5 -6
  44. data/lib/mongoid/errors/delete_restriction.rb +29 -0
  45. data/lib/mongoid/errors/document_not_found.rb +98 -17
  46. data/lib/mongoid/errors/eager_load.rb +3 -6
  47. data/lib/mongoid/errors/invalid_collection.rb +3 -3
  48. data/lib/mongoid/errors/invalid_config_option.rb +27 -0
  49. data/lib/mongoid/errors/invalid_database.rb +3 -3
  50. data/lib/mongoid/errors/invalid_field.rb +54 -8
  51. data/lib/mongoid/errors/invalid_field_option.rb +35 -0
  52. data/lib/mongoid/errors/invalid_find.rb +3 -3
  53. data/lib/mongoid/errors/invalid_index.rb +28 -0
  54. data/lib/mongoid/errors/invalid_options.rb +4 -4
  55. data/lib/mongoid/errors/invalid_scope.rb +24 -0
  56. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
  57. data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
  58. data/lib/mongoid/errors/invalid_time.rb +3 -6
  59. data/lib/mongoid/errors/inverse_not_found.rb +29 -0
  60. data/lib/mongoid/errors/mixed_relations.rb +4 -9
  61. data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
  62. data/lib/mongoid/errors/mongoid_error.rb +54 -3
  63. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
  64. data/lib/mongoid/errors/no_default_session.rb +23 -0
  65. data/lib/mongoid/errors/no_environment.rb +3 -3
  66. data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
  67. data/lib/mongoid/errors/no_parent.rb +24 -0
  68. data/lib/mongoid/errors/no_session_config.rb +22 -0
  69. data/lib/mongoid/errors/no_session_database.rb +27 -0
  70. data/lib/mongoid/errors/no_session_hosts.rb +27 -0
  71. data/lib/mongoid/errors/no_sessions_config.rb +20 -0
  72. data/lib/mongoid/errors/readonly_attribute.rb +25 -0
  73. data/lib/mongoid/errors/scope_overwrite.rb +4 -4
  74. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
  75. data/lib/mongoid/errors/unknown_attribute.rb +25 -0
  76. data/lib/mongoid/errors/unsaved_document.rb +4 -8
  77. data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
  78. data/lib/mongoid/errors/unsupported_version.rb +4 -4
  79. data/lib/mongoid/errors/validations.rb +7 -6
  80. data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
  81. data/lib/mongoid/extensions.rb +28 -76
  82. data/lib/mongoid/extensions/array.rb +127 -0
  83. data/lib/mongoid/extensions/big_decimal.rb +42 -0
  84. data/lib/mongoid/extensions/boolean.rb +24 -0
  85. data/lib/mongoid/extensions/date.rb +70 -0
  86. data/lib/mongoid/extensions/date_time.rb +68 -0
  87. data/lib/mongoid/extensions/false_class.rb +26 -0
  88. data/lib/mongoid/extensions/float.rb +44 -0
  89. data/lib/mongoid/extensions/hash.rb +91 -0
  90. data/lib/mongoid/extensions/integer.rb +54 -0
  91. data/lib/mongoid/extensions/module.rb +28 -0
  92. data/lib/mongoid/extensions/nil_class.rb +21 -0
  93. data/lib/mongoid/extensions/object.rb +188 -0
  94. data/lib/mongoid/extensions/object_id.rb +53 -0
  95. data/lib/mongoid/extensions/range.rb +55 -0
  96. data/lib/mongoid/extensions/regexp.rb +27 -0
  97. data/lib/mongoid/extensions/set.rb +55 -0
  98. data/lib/mongoid/extensions/string.rb +155 -0
  99. data/lib/mongoid/extensions/symbol.rb +54 -0
  100. data/lib/mongoid/extensions/time.rb +78 -0
  101. data/lib/mongoid/extensions/time_with_zone.rb +55 -0
  102. data/lib/mongoid/extensions/true_class.rb +26 -0
  103. data/lib/mongoid/factory.rb +1 -1
  104. data/lib/mongoid/fields.rb +129 -194
  105. data/lib/mongoid/fields/foreign_key.rb +134 -0
  106. data/lib/mongoid/fields/localized.rb +73 -0
  107. data/lib/mongoid/fields/standard.rb +268 -0
  108. data/lib/mongoid/fields/validators.rb +2 -0
  109. data/lib/mongoid/fields/validators/macro.rb +83 -0
  110. data/lib/mongoid/finders.rb +42 -43
  111. data/lib/mongoid/hierarchy.rb +25 -14
  112. data/lib/mongoid/identity_map.rb +31 -19
  113. data/lib/mongoid/indexes.rb +66 -15
  114. data/lib/mongoid/indexes/validators/options.rb +80 -0
  115. data/lib/mongoid/inspection.rb +1 -1
  116. data/lib/mongoid/javascript.rb +1 -1
  117. data/lib/mongoid/json.rb +2 -2
  118. data/lib/mongoid/loggable.rb +69 -0
  119. data/lib/mongoid/matchers.rb +1 -1
  120. data/lib/mongoid/matchers/all.rb +7 -8
  121. data/lib/mongoid/matchers/and.rb +3 -3
  122. data/lib/mongoid/matchers/default.rb +6 -4
  123. data/lib/mongoid/matchers/exists.rb +2 -2
  124. data/lib/mongoid/matchers/gt.rb +2 -2
  125. data/lib/mongoid/matchers/gte.rb +2 -2
  126. data/lib/mongoid/matchers/in.rb +3 -7
  127. data/lib/mongoid/matchers/lt.rb +2 -2
  128. data/lib/mongoid/matchers/lte.rb +2 -2
  129. data/lib/mongoid/matchers/ne.rb +2 -2
  130. data/lib/mongoid/matchers/nin.rb +2 -2
  131. data/lib/mongoid/matchers/or.rb +2 -2
  132. data/lib/mongoid/matchers/size.rb +2 -2
  133. data/lib/mongoid/matchers/strategies.rb +3 -3
  134. data/lib/mongoid/multi_parameter_attributes.rb +8 -10
  135. data/lib/mongoid/nested_attributes.rb +17 -9
  136. data/lib/mongoid/observer.rb +1 -2
  137. data/lib/mongoid/paranoia.rb +13 -18
  138. data/lib/mongoid/persistence.rb +43 -39
  139. data/lib/mongoid/persistence/atomic.rb +2 -2
  140. data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
  141. data/lib/mongoid/persistence/atomic/bit.rb +5 -7
  142. data/lib/mongoid/persistence/atomic/inc.rb +5 -7
  143. data/lib/mongoid/persistence/atomic/operation.rb +45 -6
  144. data/lib/mongoid/persistence/atomic/pop.rb +5 -7
  145. data/lib/mongoid/persistence/atomic/pull.rb +5 -7
  146. data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
  147. data/lib/mongoid/persistence/atomic/push.rb +4 -10
  148. data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
  149. data/lib/mongoid/persistence/atomic/rename.rb +6 -7
  150. data/lib/mongoid/persistence/atomic/sets.rb +5 -7
  151. data/lib/mongoid/persistence/atomic/unset.rb +4 -5
  152. data/lib/mongoid/persistence/deletion.rb +2 -2
  153. data/lib/mongoid/persistence/insertion.rb +10 -16
  154. data/lib/mongoid/persistence/modification.rb +5 -9
  155. data/lib/mongoid/persistence/operations.rb +6 -19
  156. data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
  157. data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
  158. data/lib/mongoid/persistence/operations/insert.rb +4 -4
  159. data/lib/mongoid/persistence/operations/remove.rb +4 -4
  160. data/lib/mongoid/persistence/operations/update.rb +5 -5
  161. data/lib/mongoid/railtie.rb +26 -11
  162. data/lib/mongoid/railties/database.rake +22 -108
  163. data/lib/mongoid/relations.rb +4 -6
  164. data/lib/mongoid/relations/accessors.rb +119 -19
  165. data/lib/mongoid/relations/auto_save.rb +59 -5
  166. data/lib/mongoid/relations/binding.rb +211 -2
  167. data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
  168. data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
  169. data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
  170. data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
  171. data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
  172. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
  173. data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
  174. data/lib/mongoid/relations/builder.rb +3 -3
  175. data/lib/mongoid/relations/builders.rb +19 -16
  176. data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
  177. data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
  178. data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
  179. data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
  180. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -4
  181. data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
  182. data/lib/mongoid/relations/builders/referenced/many.rb +5 -5
  183. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
  184. data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
  185. data/lib/mongoid/relations/cascading.rb +6 -4
  186. data/lib/mongoid/relations/cascading/delete.rb +3 -5
  187. data/lib/mongoid/relations/cascading/destroy.rb +3 -3
  188. data/lib/mongoid/relations/cascading/nullify.rb +3 -3
  189. data/lib/mongoid/relations/cascading/restrict.rb +37 -0
  190. data/lib/mongoid/relations/constraint.rb +4 -3
  191. data/lib/mongoid/relations/conversions.rb +5 -6
  192. data/lib/mongoid/relations/cyclic.rb +7 -7
  193. data/lib/mongoid/relations/embedded/batchable.rb +346 -0
  194. data/lib/mongoid/relations/embedded/in.rb +23 -12
  195. data/lib/mongoid/relations/embedded/many.rb +99 -161
  196. data/lib/mongoid/relations/embedded/one.rb +25 -14
  197. data/lib/mongoid/relations/macros.rb +105 -61
  198. data/lib/mongoid/relations/many.rb +93 -14
  199. data/lib/mongoid/relations/metadata.rb +200 -45
  200. data/lib/mongoid/relations/nested_builder.rb +3 -5
  201. data/lib/mongoid/relations/one.rb +2 -2
  202. data/lib/mongoid/relations/options.rb +2 -2
  203. data/lib/mongoid/relations/polymorphic.rb +9 -9
  204. data/lib/mongoid/relations/proxy.rb +60 -31
  205. data/lib/mongoid/relations/referenced/in.rb +40 -15
  206. data/lib/mongoid/relations/referenced/many.rb +117 -132
  207. data/lib/mongoid/relations/referenced/many_to_many.rb +101 -46
  208. data/lib/mongoid/relations/referenced/one.rb +34 -13
  209. data/lib/mongoid/relations/reflections.rb +3 -3
  210. data/lib/mongoid/relations/synchronization.rb +19 -23
  211. data/lib/mongoid/relations/targets/enumerable.rb +86 -57
  212. data/lib/mongoid/reloading.rb +12 -14
  213. data/lib/mongoid/scoping.rb +329 -0
  214. data/lib/mongoid/serialization.rb +8 -27
  215. data/lib/mongoid/sessions.rb +359 -0
  216. data/lib/mongoid/sessions/factory.rb +106 -0
  217. data/lib/mongoid/sessions/mongo_uri.rb +93 -0
  218. data/lib/mongoid/sessions/validators.rb +2 -0
  219. data/lib/mongoid/sessions/validators/storage.rb +49 -0
  220. data/lib/mongoid/sharding.rb +6 -6
  221. data/lib/mongoid/state.rb +6 -7
  222. data/lib/mongoid/threaded.rb +167 -59
  223. data/lib/mongoid/threaded/lifecycle.rb +21 -22
  224. data/lib/mongoid/threaded/sessions.rb +0 -0
  225. data/lib/mongoid/timestamps.rb +1 -1
  226. data/lib/mongoid/timestamps/created.rb +8 -4
  227. data/lib/mongoid/timestamps/timeless.rb +6 -4
  228. data/lib/mongoid/timestamps/updated.rb +3 -3
  229. data/lib/mongoid/unit_of_work.rb +61 -0
  230. data/lib/mongoid/validations.rb +27 -19
  231. data/lib/mongoid/validations/associated.rb +2 -2
  232. data/lib/mongoid/validations/format.rb +2 -2
  233. data/lib/mongoid/validations/presence.rb +31 -5
  234. data/lib/mongoid/validations/uniqueness.rb +9 -12
  235. data/lib/mongoid/version.rb +2 -2
  236. data/lib/mongoid/versioning.rb +25 -26
  237. data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
  238. data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
  239. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +59 -19
  240. data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
  241. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
  242. data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
  243. data/lib/rails/generators/mongoid_generator.rb +5 -5
  244. data/lib/rails/mongoid.rb +69 -25
  245. metadata +110 -137
  246. checksums.yaml +0 -7
  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.rb +0 -120
  269. data/lib/mongoid/collections/master.rb +0 -45
  270. data/lib/mongoid/collections/operations.rb +0 -44
  271. data/lib/mongoid/config/database.rb +0 -181
  272. data/lib/mongoid/config/replset_database.rb +0 -80
  273. data/lib/mongoid/contexts.rb +0 -25
  274. data/lib/mongoid/contexts/enumerable.rb +0 -313
  275. data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
  276. data/lib/mongoid/contexts/mongo.rb +0 -487
  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 -110
  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 -77
  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.rb +0 -89
  343. data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
  344. data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
  345. data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
  346. data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
  347. data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
  348. data/lib/mongoid/relations/referenced/batch.rb +0 -73
  349. data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
  350. data/lib/mongoid/safety.rb +0 -105
  351. data/lib/mongoid/scope.rb +0 -31
@@ -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,84 +1,10 @@
1
1
  # encoding: utf-8
2
- require "mongoid/extensions/array/deep_copy"
3
- require "mongoid/extensions/array/deletion"
4
- require "mongoid/extensions/false_class/equality"
5
- require "mongoid/extensions/hash/deep_copy"
6
- require "mongoid/extensions/hash/criteria_helpers"
7
- require "mongoid/extensions/hash/scoping"
8
- require "mongoid/extensions/integer/checks"
9
- require "mongoid/extensions/nil/collectionization"
10
- require "mongoid/extensions/object/checks"
11
- require "mongoid/extensions/object/deep_copy"
12
- require "mongoid/extensions/object/reflections"
13
- require "mongoid/extensions/object/substitutable"
14
- require "mongoid/extensions/object/yoda"
15
- require "mongoid/extensions/proc/scoping"
16
- require "mongoid/extensions/string/checks"
17
- require "mongoid/extensions/string/conversions"
18
- require "mongoid/extensions/string/inflections"
19
- require "mongoid/extensions/symbol/checks"
20
- require "mongoid/extensions/symbol/inflections"
21
- require "mongoid/extensions/true_class/equality"
22
- require "mongoid/extensions/object_id/conversions"
23
-
24
- class Array #:nodoc
25
- include Mongoid::Extensions::Array::DeepCopy
26
- include Mongoid::Extensions::Array::Deletion
27
- end
28
-
29
- class Binary; end #:nodoc:
30
2
  unless defined?(Boolean)
31
3
  class Boolean; end
32
4
  end
33
5
 
34
- class FalseClass #:nodoc
35
- include Mongoid::Extensions::FalseClass::Equality
36
- end
37
-
38
- class Hash #:nodoc
39
- include Mongoid::Extensions::Hash::DeepCopy
40
- include Mongoid::Extensions::Hash::CriteriaHelpers
41
- include Mongoid::Extensions::Hash::Scoping
42
- end
43
-
44
- class Integer #:nodoc
45
- include Mongoid::Extensions::Integer::Checks
46
- end
47
-
48
- class NilClass #:nodoc
49
- include Mongoid::Extensions::Nil::Collectionization
50
- end
51
-
52
- class Object #:nodoc:
53
- include Mongoid::Extensions::Object::Checks
54
- include Mongoid::Extensions::Object::DeepCopy
55
- include Mongoid::Extensions::Object::Reflections
56
- include Mongoid::Extensions::Object::Substitutable
57
- include Mongoid::Extensions::Object::Yoda
58
- end
59
-
60
- class Proc #:nodoc:
61
- include Mongoid::Extensions::Proc::Scoping
62
- end
63
-
64
- class String #:nodoc
65
- include Mongoid::Extensions::String::Checks
66
- include Mongoid::Extensions::String::Conversions
67
- include Mongoid::Extensions::String::Inflections
68
- end
69
-
70
- class Symbol #:nodoc
71
- remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
72
- include Mongoid::Extensions::Symbol::Checks
73
- include Mongoid::Extensions::Symbol::Inflections
74
- end
75
-
76
- class TrueClass #:nodoc
77
- include Mongoid::Extensions::TrueClass::Equality
78
- end
79
-
80
- class BSON::ObjectId #:nodoc
81
- extend Mongoid::Extensions::ObjectId::Conversions
6
+ class BSON::ObjectId
7
+ undef :as_json
82
8
  def as_json(options = nil)
83
9
  to_s
84
10
  end
@@ -86,3 +12,29 @@ class BSON::ObjectId #:nodoc
86
12
  ActiveSupport::XmlMini.to_tag(options[:root], self.to_s, options)
87
13
  end
88
14
  end
15
+
16
+ class Symbol
17
+ remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
18
+ end
19
+
20
+ require "mongoid/extensions/array"
21
+ require "mongoid/extensions/big_decimal"
22
+ require "mongoid/extensions/boolean"
23
+ require "mongoid/extensions/date"
24
+ require "mongoid/extensions/date_time"
25
+ require "mongoid/extensions/false_class"
26
+ require "mongoid/extensions/float"
27
+ require "mongoid/extensions/hash"
28
+ require "mongoid/extensions/integer"
29
+ require "mongoid/extensions/module"
30
+ require "mongoid/extensions/nil_class"
31
+ require "mongoid/extensions/object"
32
+ require "mongoid/extensions/object_id"
33
+ require "mongoid/extensions/range"
34
+ require "mongoid/extensions/regexp"
35
+ require "mongoid/extensions/set"
36
+ require "mongoid/extensions/string"
37
+ require "mongoid/extensions/symbol"
38
+ require "mongoid/extensions/time"
39
+ require "mongoid/extensions/time_with_zone"
40
+ require "mongoid/extensions/true_class"
@@ -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)