mongoid 2.4.10 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. data/CHANGELOG.md +949 -10
  2. data/LICENSE +1 -1
  3. data/README.md +10 -11
  4. data/Rakefile +3 -17
  5. data/lib/config/locales/en.yml +455 -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 +70 -16
  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 +106 -43
  16. data/lib/mongoid/components.rb +12 -23
  17. data/lib/mongoid/config/environment.rb +7 -4
  18. data/lib/mongoid/config/inflections.rb +6 -0
  19. data/lib/mongoid/config/options.rb +1 -1
  20. data/lib/mongoid/config/validators/option.rb +25 -0
  21. data/lib/mongoid/config/validators/session.rb +140 -0
  22. data/lib/mongoid/config/validators.rb +3 -0
  23. data/lib/mongoid/config.rb +104 -225
  24. data/lib/mongoid/contextual/aggregable/memory.rb +109 -0
  25. data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
  26. data/lib/mongoid/contextual/atomic.rb +179 -0
  27. data/lib/mongoid/contextual/command.rb +43 -0
  28. data/lib/mongoid/contextual/find_and_modify.rb +68 -0
  29. data/lib/mongoid/contextual/map_reduce.rb +273 -0
  30. data/lib/mongoid/contextual/memory.rb +406 -0
  31. data/lib/mongoid/contextual/mongo.rb +662 -0
  32. data/lib/mongoid/contextual.rb +50 -0
  33. data/lib/mongoid/copyable.rb +7 -25
  34. data/lib/mongoid/criteria.rb +515 -245
  35. data/lib/mongoid/criterion/inspection.rb +14 -8
  36. data/lib/mongoid/criterion/scoping.rb +114 -44
  37. data/lib/mongoid/dirty.rb +152 -67
  38. data/lib/mongoid/document.rb +71 -52
  39. data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
  40. data/lib/mongoid/errors/callback.rb +5 -6
  41. data/lib/mongoid/errors/delete_restriction.rb +29 -0
  42. data/lib/mongoid/errors/document_not_found.rb +98 -17
  43. data/lib/mongoid/errors/eager_load.rb +3 -6
  44. data/lib/mongoid/errors/invalid_collection.rb +3 -3
  45. data/lib/mongoid/errors/invalid_config_option.rb +27 -0
  46. data/lib/mongoid/errors/invalid_database.rb +3 -3
  47. data/lib/mongoid/errors/invalid_field.rb +54 -8
  48. data/lib/mongoid/errors/invalid_field_option.rb +35 -0
  49. data/lib/mongoid/errors/invalid_find.rb +3 -3
  50. data/lib/mongoid/errors/invalid_index.rb +28 -0
  51. data/lib/mongoid/errors/invalid_options.rb +4 -4
  52. data/lib/mongoid/errors/invalid_scope.rb +24 -0
  53. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
  54. data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
  55. data/lib/mongoid/errors/invalid_time.rb +3 -6
  56. data/lib/mongoid/errors/inverse_not_found.rb +29 -0
  57. data/lib/mongoid/errors/mixed_relations.rb +4 -9
  58. data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
  59. data/lib/mongoid/errors/mongoid_error.rb +54 -3
  60. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
  61. data/lib/mongoid/errors/no_default_session.rb +23 -0
  62. data/lib/mongoid/errors/no_environment.rb +3 -3
  63. data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
  64. data/lib/mongoid/errors/no_metadata.rb +21 -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 +23 -1
  80. data/lib/mongoid/evolvable.rb +19 -0
  81. data/lib/mongoid/extensions/array.rb +164 -0
  82. data/lib/mongoid/extensions/big_decimal.rb +42 -0
  83. data/lib/mongoid/extensions/boolean.rb +24 -0
  84. data/lib/mongoid/extensions/date.rb +70 -0
  85. data/lib/mongoid/extensions/date_time.rb +73 -0
  86. data/lib/mongoid/extensions/false_class.rb +38 -0
  87. data/lib/mongoid/extensions/float.rb +56 -0
  88. data/lib/mongoid/extensions/hash.rb +123 -0
  89. data/lib/mongoid/extensions/integer.rb +66 -0
  90. data/lib/mongoid/extensions/module.rb +28 -0
  91. data/lib/mongoid/extensions/nil_class.rb +21 -0
  92. data/lib/mongoid/extensions/object.rb +238 -0
  93. data/lib/mongoid/extensions/object_id.rb +54 -0
  94. data/lib/mongoid/extensions/range.rb +79 -0
  95. data/lib/mongoid/extensions/regexp.rb +27 -0
  96. data/lib/mongoid/extensions/set.rb +55 -0
  97. data/lib/mongoid/extensions/string.rb +181 -0
  98. data/lib/mongoid/extensions/symbol.rb +54 -0
  99. data/lib/mongoid/extensions/time.rb +78 -0
  100. data/lib/mongoid/extensions/time_with_zone.rb +55 -0
  101. data/lib/mongoid/extensions/true_class.rb +38 -0
  102. data/lib/mongoid/extensions.rb +28 -76
  103. data/lib/mongoid/factory.rb +1 -1
  104. data/lib/mongoid/fields/foreign_key.rb +150 -0
  105. data/lib/mongoid/fields/localized.rb +73 -0
  106. data/lib/mongoid/fields/standard.rb +268 -0
  107. data/lib/mongoid/fields/validators/macro.rb +83 -0
  108. data/lib/mongoid/fields/validators.rb +2 -0
  109. data/lib/mongoid/fields.rb +142 -208
  110. data/lib/mongoid/finders.rb +45 -50
  111. data/lib/mongoid/hierarchy.rb +44 -15
  112. data/lib/mongoid/identity_map.rb +49 -21
  113. data/lib/mongoid/indexes/validators/options.rb +80 -0
  114. data/lib/mongoid/indexes.rb +66 -15
  115. data/lib/mongoid/inspection.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 +9 -11
  134. data/lib/mongoid/nested_attributes.rb +17 -9
  135. data/lib/mongoid/observer.rb +1 -2
  136. data/lib/mongoid/paranoia.rb +10 -44
  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/upsert.rb +28 -0
  159. data/lib/mongoid/persistence/operations.rb +22 -19
  160. data/lib/mongoid/persistence/upsertion.rb +30 -0
  161. data/lib/mongoid/persistence.rb +94 -39
  162. data/lib/mongoid/railtie.rb +26 -11
  163. data/lib/mongoid/railties/database.rake +22 -108
  164. data/lib/mongoid/relations/accessors.rb +120 -20
  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 +4 -4
  175. data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
  176. data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
  177. data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
  178. data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
  179. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -5
  180. data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
  181. data/lib/mongoid/relations/builders/referenced/many.rb +6 -6
  182. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
  183. data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
  184. data/lib/mongoid/relations/builders.rb +19 -16
  185. data/lib/mongoid/relations/cascading/delete.rb +3 -5
  186. data/lib/mongoid/relations/cascading/destroy.rb +3 -3
  187. data/lib/mongoid/relations/cascading/nullify.rb +3 -3
  188. data/lib/mongoid/relations/cascading/restrict.rb +37 -0
  189. data/lib/mongoid/relations/cascading.rb +10 -7
  190. data/lib/mongoid/relations/constraint.rb +4 -3
  191. data/lib/mongoid/relations/conversions.rb +6 -7
  192. data/lib/mongoid/relations/cyclic.rb +7 -7
  193. data/lib/mongoid/relations/embedded/batchable.rb +347 -0
  194. data/lib/mongoid/relations/embedded/in.rb +23 -12
  195. data/lib/mongoid/relations/embedded/many.rb +100 -161
  196. data/lib/mongoid/relations/embedded/one.rb +25 -14
  197. data/lib/mongoid/relations/macros.rb +105 -60
  198. data/lib/mongoid/relations/many.rb +93 -14
  199. data/lib/mongoid/relations/metadata.rb +277 -47
  200. data/lib/mongoid/relations/nested_builder.rb +4 -6
  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 +62 -31
  205. data/lib/mongoid/relations/referenced/in.rb +40 -15
  206. data/lib/mongoid/relations/referenced/many.rb +162 -130
  207. data/lib/mongoid/relations/referenced/many_to_many.rb +104 -48
  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/relations/touchable.rb +32 -0
  213. data/lib/mongoid/relations.rb +22 -6
  214. data/lib/mongoid/reloading.rb +12 -14
  215. data/lib/mongoid/scoping.rb +312 -0
  216. data/lib/mongoid/serialization.rb +94 -42
  217. data/lib/mongoid/sessions/factory.rb +108 -0
  218. data/lib/mongoid/sessions/mongo_uri.rb +93 -0
  219. data/lib/mongoid/sessions/validators/storage.rb +49 -0
  220. data/lib/mongoid/sessions/validators.rb +2 -0
  221. data/lib/mongoid/sessions.rb +383 -0
  222. data/lib/mongoid/sharding.rb +6 -6
  223. data/lib/mongoid/state.rb +6 -7
  224. data/lib/mongoid/threaded/lifecycle.rb +21 -21
  225. data/lib/mongoid/threaded/sessions.rb +0 -0
  226. data/lib/mongoid/threaded.rb +219 -59
  227. data/lib/mongoid/timestamps/created.rb +8 -4
  228. data/lib/mongoid/timestamps/timeless.rb +6 -4
  229. data/lib/mongoid/timestamps/updated.rb +4 -3
  230. data/lib/mongoid/timestamps.rb +1 -1
  231. data/lib/mongoid/unit_of_work.rb +61 -0
  232. data/lib/mongoid/validations/associated.rb +2 -2
  233. data/lib/mongoid/validations/format.rb +2 -2
  234. data/lib/mongoid/validations/presence.rb +34 -4
  235. data/lib/mongoid/validations/uniqueness.rb +11 -12
  236. data/lib/mongoid/validations.rb +28 -20
  237. data/lib/mongoid/version.rb +2 -2
  238. data/lib/mongoid/versioning.rb +25 -26
  239. data/lib/mongoid.rb +37 -37
  240. data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
  241. data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
  242. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +65 -17
  243. data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
  244. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
  245. data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
  246. data/lib/rails/generators/mongoid_generator.rb +5 -5
  247. data/lib/rails/mongoid.rb +73 -26
  248. metadata +103 -148
  249. data/lib/config/locales/bg.yml +0 -61
  250. data/lib/config/locales/de.yml +0 -61
  251. data/lib/config/locales/en-GB.yml +0 -64
  252. data/lib/config/locales/es.yml +0 -59
  253. data/lib/config/locales/fr.yml +0 -62
  254. data/lib/config/locales/hi.yml +0 -53
  255. data/lib/config/locales/hu.yml +0 -64
  256. data/lib/config/locales/id.yml +0 -62
  257. data/lib/config/locales/it.yml +0 -59
  258. data/lib/config/locales/ja.yml +0 -57
  259. data/lib/config/locales/kr.yml +0 -54
  260. data/lib/config/locales/nl.yml +0 -61
  261. data/lib/config/locales/pl.yml +0 -59
  262. data/lib/config/locales/pt-BR.yml +0 -60
  263. data/lib/config/locales/pt.yml +0 -60
  264. data/lib/config/locales/ro.yml +0 -66
  265. data/lib/config/locales/ru.yml +0 -61
  266. data/lib/config/locales/sv.yml +0 -60
  267. data/lib/config/locales/vi.yml +0 -62
  268. data/lib/config/locales/zh-CN.yml +0 -53
  269. data/lib/mongoid/collection.rb +0 -157
  270. data/lib/mongoid/collections/master.rb +0 -45
  271. data/lib/mongoid/collections/operations.rb +0 -44
  272. data/lib/mongoid/collections/retry.rb +0 -59
  273. data/lib/mongoid/collections.rb +0 -120
  274. data/lib/mongoid/config/database.rb +0 -181
  275. data/lib/mongoid/config/replset_database.rb +0 -80
  276. data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
  277. data/lib/mongoid/contexts/enumerable.rb +0 -313
  278. data/lib/mongoid/contexts/mongo.rb +0 -487
  279. data/lib/mongoid/contexts.rb +0 -25
  280. data/lib/mongoid/criterion/builder.rb +0 -34
  281. data/lib/mongoid/criterion/complex.rb +0 -84
  282. data/lib/mongoid/criterion/creational.rb +0 -34
  283. data/lib/mongoid/criterion/exclusion.rb +0 -108
  284. data/lib/mongoid/criterion/inclusion.rb +0 -290
  285. data/lib/mongoid/criterion/optional.rb +0 -259
  286. data/lib/mongoid/criterion/selector.rb +0 -177
  287. data/lib/mongoid/cursor.rb +0 -88
  288. data/lib/mongoid/default_scope.rb +0 -36
  289. data/lib/mongoid/errors/invalid_type.rb +0 -25
  290. data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
  291. data/lib/mongoid/extensions/array/deletion.rb +0 -29
  292. data/lib/mongoid/extensions/false_class/equality.rb +0 -26
  293. data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
  294. data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
  295. data/lib/mongoid/extensions/hash/scoping.rb +0 -25
  296. data/lib/mongoid/extensions/integer/checks.rb +0 -23
  297. data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
  298. data/lib/mongoid/extensions/object/checks.rb +0 -29
  299. data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
  300. data/lib/mongoid/extensions/object/reflections.rb +0 -48
  301. data/lib/mongoid/extensions/object/substitutable.rb +0 -15
  302. data/lib/mongoid/extensions/object/yoda.rb +0 -44
  303. data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
  304. data/lib/mongoid/extensions/proc/scoping.rb +0 -25
  305. data/lib/mongoid/extensions/string/checks.rb +0 -36
  306. data/lib/mongoid/extensions/string/conversions.rb +0 -22
  307. data/lib/mongoid/extensions/string/inflections.rb +0 -118
  308. data/lib/mongoid/extensions/symbol/checks.rb +0 -23
  309. data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
  310. data/lib/mongoid/extensions/true_class/equality.rb +0 -26
  311. data/lib/mongoid/extras.rb +0 -31
  312. data/lib/mongoid/fields/internal/array.rb +0 -76
  313. data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
  314. data/lib/mongoid/fields/internal/bignum.rb +0 -10
  315. data/lib/mongoid/fields/internal/binary.rb +0 -11
  316. data/lib/mongoid/fields/internal/boolean.rb +0 -58
  317. data/lib/mongoid/fields/internal/date.rb +0 -51
  318. data/lib/mongoid/fields/internal/date_time.rb +0 -28
  319. data/lib/mongoid/fields/internal/false_class.rb +0 -10
  320. data/lib/mongoid/fields/internal/fixnum.rb +0 -10
  321. data/lib/mongoid/fields/internal/float.rb +0 -47
  322. data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
  323. data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
  324. data/lib/mongoid/fields/internal/hash.rb +0 -11
  325. data/lib/mongoid/fields/internal/integer.rb +0 -59
  326. data/lib/mongoid/fields/internal/localized.rb +0 -62
  327. data/lib/mongoid/fields/internal/nil_class.rb +0 -53
  328. data/lib/mongoid/fields/internal/object.rb +0 -11
  329. data/lib/mongoid/fields/internal/object_id.rb +0 -46
  330. data/lib/mongoid/fields/internal/range.rb +0 -61
  331. data/lib/mongoid/fields/internal/set.rb +0 -57
  332. data/lib/mongoid/fields/internal/string.rb +0 -42
  333. data/lib/mongoid/fields/internal/symbol.rb +0 -43
  334. data/lib/mongoid/fields/internal/time.rb +0 -23
  335. data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
  336. data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
  337. data/lib/mongoid/fields/internal/true_class.rb +0 -10
  338. data/lib/mongoid/fields/mappings.rb +0 -42
  339. data/lib/mongoid/fields/serializable.rb +0 -270
  340. data/lib/mongoid/identity.rb +0 -92
  341. data/lib/mongoid/javascript/functions.yml +0 -63
  342. data/lib/mongoid/javascript.rb +0 -20
  343. data/lib/mongoid/keys.rb +0 -144
  344. data/lib/mongoid/logger.rb +0 -45
  345. data/lib/mongoid/multi_database.rb +0 -36
  346. data/lib/mongoid/named_scope.rb +0 -166
  347. data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
  348. data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
  349. data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
  350. data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
  351. data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
  352. data/lib/mongoid/relations/embedded/atomic.rb +0 -89
  353. data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
  354. data/lib/mongoid/relations/referenced/batch.rb +0 -73
  355. data/lib/mongoid/safety.rb +0 -105
  356. data/lib/mongoid/scope.rb +0 -31
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Set
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
+ # set.mongoize
11
+ #
12
+ # @return [ Hash ] The object mongoized.
13
+ #
14
+ # @since 3.0.0
15
+ def mongoize
16
+ ::Set.mongoize(self)
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
+ # Set.demongoize({ "min" => 1, "max" => 5 })
25
+ #
26
+ # @param [ Hash ] object The object to demongoize.
27
+ #
28
+ # @return [ Set ] The set.
29
+ #
30
+ # @since 3.0.0
31
+ def demongoize(object)
32
+ ::Set.new(object)
33
+ end
34
+
35
+ # Turn the object from the ruby type we deal with to a Mongo friendly
36
+ # type.
37
+ #
38
+ # @example Mongoize the object.
39
+ # Set.mongoize(1..3)
40
+ #
41
+ # @param [ Set ] object The object to mongoize.
42
+ #
43
+ # @return [ Hash ] The object mongoized.
44
+ #
45
+ # @since 3.0.0
46
+ def mongoize(object)
47
+ object.to_a
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ ::Set.__send__(:include, Mongoid::Extensions::Set)
55
+ ::Set.__send__(:extend, Mongoid::Extensions::Set::ClassMethods)
@@ -0,0 +1,181 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module String
5
+
6
+ # @attribute [rw] unconvertable_to_bson If the document is unconvetable.
7
+ attr_accessor :unconvertable_to_bson
8
+
9
+ # Evolve the string into an object id if possible.
10
+ #
11
+ # @example Evolve the string.
12
+ # "test".__evolve_object_id__
13
+ #
14
+ # @return [ String, Moped::BSON::ObjectId ] The evolved string.
15
+ #
16
+ # @since 3.0.0
17
+ def __evolve_object_id__
18
+ convert_to_object_id
19
+ end
20
+
21
+ # Mongoize the string into an object id if possible.
22
+ #
23
+ # @example Evolve the string.
24
+ # "test".__mongoize_object_id__
25
+ #
26
+ # @return [ String, Moped::BSON::ObjectId, nil ] The mongoized string.
27
+ #
28
+ # @since 3.0.0
29
+ def __mongoize_object_id__
30
+ convert_to_object_id unless blank?
31
+ end
32
+
33
+ # Mongoize the string for storage.
34
+ #
35
+ # @example Mongoize the string.
36
+ # "2012-01-01".__mongoize_time__
37
+ #
38
+ # @return [ Time ] The time.
39
+ #
40
+ # @since 3.0.0
41
+ def __mongoize_time__
42
+ ::Time.configured.parse(self)
43
+ end
44
+
45
+ # Convert the string to a collection friendly name.
46
+ #
47
+ # @example Collectionize the string.
48
+ # "namespace/model".collectionize
49
+ #
50
+ # @return [ String ] The string in collection friendly form.
51
+ #
52
+ # @since 1.0.0
53
+ def collectionize
54
+ tableize.gsub("/", "_")
55
+ end
56
+
57
+ # Is the string a valid value for a Mongoid id?
58
+ #
59
+ # @example Is the string an id value?
60
+ # "_id".mongoid_id?
61
+ #
62
+ # @return [ true, false ] If the string is id or _id.
63
+ #
64
+ # @since 2.3.1
65
+ def mongoid_id?
66
+ self =~ /\A(|_)id$/
67
+ end
68
+
69
+ # Is the string a number?
70
+ #
71
+ # @example Is the string a number.
72
+ # "1234.23".numeric?
73
+ #
74
+ # @return [ true, false ] If the string is a number.
75
+ #
76
+ # @since 3.0.0
77
+ def numeric?
78
+ true if Float(self) rescue false
79
+ end
80
+
81
+ # Get the string as a getter string.
82
+ #
83
+ # @example Get the reader/getter
84
+ # "model=".reader
85
+ #
86
+ # @return [ String ] The string stripped of "=".
87
+ #
88
+ # @since 1.0.0
89
+ def reader
90
+ delete("=")
91
+ end
92
+
93
+ # Convert the string to an array with the string in it.
94
+ #
95
+ # @example Convert the string to an array.
96
+ # "Testing".to_a
97
+ #
98
+ # @return [ Array ] An array with only the string in it.
99
+ #
100
+ # @since 1.0.0
101
+ def to_a
102
+ [ self ]
103
+ end
104
+
105
+ # Is this string a writer?
106
+ #
107
+ # @example Is the string a setter method?
108
+ # "model=".writer?
109
+ #
110
+ # @return [ true, false ] If the string contains "=".
111
+ #
112
+ # @since 1.0.0
113
+ def writer?
114
+ include?("=")
115
+ end
116
+
117
+ # Is the object not to be converted to bson on criteria creation?
118
+ #
119
+ # @example Is the object unconvertable?
120
+ # object.unconvertable_to_bson?
121
+ #
122
+ # @return [ true, false ] If the object is unconvertable.
123
+ #
124
+ # @since 2.2.1
125
+ def unconvertable_to_bson?
126
+ @unconvertable_to_bson ||= false
127
+ end
128
+
129
+ private
130
+
131
+ # If the string is a legal object id, convert it.
132
+ #
133
+ # @api private
134
+ #
135
+ # @example Convert to the object id.
136
+ # string.convert_to_object_id
137
+ #
138
+ # @return [ String, Moped::BSON::ObjectId ] The string or the id.
139
+ #
140
+ # @since 3.0.0
141
+ def convert_to_object_id
142
+ Moped::BSON::ObjectId.legal?(self) ? Moped::BSON::ObjectId.from_string(self) : self
143
+ end
144
+
145
+ module ClassMethods
146
+
147
+ # Convert the object from it's mongo friendly ruby type to this type.
148
+ #
149
+ # @example Demongoize the object.
150
+ # String.demongoize(object)
151
+ #
152
+ # @param [ Object ] object The object to demongoize.
153
+ #
154
+ # @return [ String ] The object.
155
+ #
156
+ # @since 3.0.0
157
+ def demongoize(object)
158
+ object.try(:to_s)
159
+ end
160
+
161
+ # Turn the object from the ruby type we deal with to a Mongo friendly
162
+ # type.
163
+ #
164
+ # @example Mongoize the object.
165
+ # String.mongoize("123.11")
166
+ #
167
+ # @param [ Object ] object The object to mongoize.
168
+ #
169
+ # @return [ String ] The object mongoized.
170
+ #
171
+ # @since 3.0.0
172
+ def mongoize(object)
173
+ demongoize(object)
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
179
+
180
+ ::String.__send__(:include, Mongoid::Extensions::String)
181
+ ::String.__send__(:extend, Mongoid::Extensions::String::ClassMethods)
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Symbol
5
+
6
+ # Is the symbol a valid value for a Mongoid id?
7
+ #
8
+ # @example Is the string an id value?
9
+ # :_id.mongoid_id?
10
+ #
11
+ # @return [ true, false ] If the symbol is :id or :_id.
12
+ #
13
+ # @since 2.3.1
14
+ def mongoid_id?
15
+ to_s.mongoid_id?
16
+ end
17
+
18
+ module ClassMethods
19
+
20
+ # Convert the object from it's mongo friendly ruby type to this type.
21
+ #
22
+ # @example Demongoize the object.
23
+ # Symbol.demongoize(object)
24
+ #
25
+ # @param [ Object ] object The object to demongoize.
26
+ #
27
+ # @return [ Symbol ] The object.
28
+ #
29
+ # @since 3.0.0
30
+ def demongoize(object)
31
+ object.try(:to_sym)
32
+ end
33
+
34
+ # Turn the object from the ruby type we deal with to a Mongo friendly
35
+ # type.
36
+ #
37
+ # @example Mongoize the object.
38
+ # Symbol.mongoize("123.11")
39
+ #
40
+ # @param [ Object ] object The object to mongoize.
41
+ #
42
+ # @return [ Symbol ] The object mongoized.
43
+ #
44
+ # @since 3.0.0
45
+ def mongoize(object)
46
+ demongoize(object)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ ::Symbol.__send__(:include, Mongoid::Extensions::Symbol)
54
+ ::Symbol.__send__(:extend, Mongoid::Extensions::Symbol::ClassMethods)
@@ -0,0 +1,78 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Time
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
+ # time.mongoize
11
+ #
12
+ # @return [ Time ] The object mongoized.
13
+ #
14
+ # @since 3.0.0
15
+ def mongoize
16
+ ::Time.mongoize(self)
17
+ end
18
+
19
+ module ClassMethods
20
+
21
+ # Get the configured time to use when converting - either the time zone
22
+ # or the time.
23
+ #
24
+ # @example Get the configured time.
25
+ # ::Time.configured
26
+ #
27
+ # @retun [ Time ] The configured time.
28
+ #
29
+ # @since 3.0.0
30
+ def configured
31
+ Mongoid.use_activesupport_time_zone? ? (::Time.zone || ::Time) : ::Time
32
+ end
33
+
34
+ # Convert the object from it's mongo friendly ruby type to this type.
35
+ #
36
+ # @example Demongoize the object.
37
+ # Time.demongoize(object)
38
+ #
39
+ # @param [ Time ] object The time from Mongo.
40
+ #
41
+ # @return [ Time ] The object as a date.
42
+ #
43
+ # @since 3.0.0
44
+ def demongoize(object)
45
+ return nil if object.blank?
46
+ object = object.getlocal unless Mongoid::Config.use_utc?
47
+ if Mongoid::Config.use_activesupport_time_zone?
48
+ object = object.in_time_zone(Mongoid.time_zone)
49
+ end
50
+ object
51
+ end
52
+
53
+ # Turn the object from the ruby type we deal with to a Mongo friendly
54
+ # type.
55
+ #
56
+ # @example Mongoize the object.
57
+ # Time.mongoize("2012-1-1")
58
+ #
59
+ # @param [ Object ] object The object to mongoize.
60
+ #
61
+ # @return [ Time ] The object mongoized.
62
+ #
63
+ # @since 3.0.0
64
+ def mongoize(object)
65
+ return nil if object.blank?
66
+ begin
67
+ ::Time.at(object.__mongoize_time__.to_f).utc
68
+ rescue ArgumentError
69
+ raise Errors::InvalidTime.new(object)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ ::Time.__send__(:include, Mongoid::Extensions::Time)
78
+ ::Time.__send__(:extend, Mongoid::Extensions::Time::ClassMethods)
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module TimeWithZone
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
+ # date_time.mongoize
11
+ #
12
+ # @return [ Time ] The object mongoized.
13
+ #
14
+ # @since 3.0.0
15
+ def mongoize
16
+ ::ActiveSupport::TimeWithZone.mongoize(self)
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
+ # TimeWithZone.demongoize(object)
25
+ #
26
+ # @param [ Time ] object The time from Mongo.
27
+ #
28
+ # @return [ TimeWithZone ] The object as a date.
29
+ #
30
+ # @since 3.0.0
31
+ def demongoize(object)
32
+ ::Time.demongoize(object).in_time_zone
33
+ end
34
+
35
+ # Turn the object from the ruby type we deal with to a Mongo friendly
36
+ # type.
37
+ #
38
+ # @example Mongoize the object.
39
+ # TimeWithZone.mongoize("2012-1-1")
40
+ #
41
+ # @param [ Object ] object The object to convert.
42
+ #
43
+ # @return [ Time ] The object mongoized.
44
+ #
45
+ # @since 3.0.0
46
+ def mongoize(object)
47
+ ::Time.mongoize(object)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ ::ActiveSupport::TimeWithZone.__send__(:include, Mongoid::Extensions::TimeWithZone)
55
+ ::ActiveSupport::TimeWithZone.__send__(:extend, Mongoid::Extensions::TimeWithZone::ClassMethods)
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module TrueClass
5
+
6
+ # Get the value of the object as a mongo friendy sort value.
7
+ #
8
+ # @example Get the object as sort criteria.
9
+ # object.__sortable__
10
+ #
11
+ # @return [ Integer ] 1.
12
+ #
13
+ # @since 3.0.0
14
+ def __sortable__
15
+ 1
16
+ end
17
+
18
+ # Is the passed value a boolean?
19
+ #
20
+ # @example Is the value a boolean type?
21
+ # true.is_a?(Boolean)
22
+ #
23
+ # @param [ Class ] other The class to check.
24
+ #
25
+ # @return [ true, false ] If the other is a boolean.
26
+ #
27
+ # @since 1.0.0
28
+ def is_a?(other)
29
+ if other == ::Boolean || other.class == ::Boolean
30
+ return true
31
+ end
32
+ super(other)
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ ::TrueClass.__send__(:include, Mongoid::Extensions::TrueClass)
@@ -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 Moped::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"
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
2
+ module Mongoid
3
3
 
4
4
  # Instantiates documents that came from the database.
5
5
  module Factory