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,53 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module ObjectId
5
+
6
+ # Evolve the object id.
7
+ #
8
+ # @example Evolve the object id.
9
+ # object_id.__evolve_object_id__
10
+ #
11
+ # @return [ Moped::BSON::ObjectId ] self.
12
+ #
13
+ # @since 3.0.0
14
+ def __evolve_object_id__
15
+ self
16
+ end
17
+
18
+ module ClassMethods
19
+
20
+ # Evolve the object into a mongo-friendly value to query with.
21
+ #
22
+ # @example Evolve the object.
23
+ # ObjectId.evolve(id)
24
+ #
25
+ # @param [ Object ] object The object to evolve.
26
+ #
27
+ # @return [ Moped::BSON::ObjectId ] The object id.
28
+ #
29
+ # @since 3.0.0
30
+ def evolve(object)
31
+ object.__evolve_object_id__
32
+ end
33
+
34
+ # Convert the object into a mongo-friendly value to store.
35
+ #
36
+ # @example Convert the object.
37
+ # ObjectId.mongoize(id)
38
+ #
39
+ # @param [ Object ] object The object to convert.
40
+ #
41
+ # @return [ Moped::BSON::ObjectId ] The object id.
42
+ #
43
+ # @since 3.0.0
44
+ def mongoize(object)
45
+ evolve(object)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ Moped::BSON::ObjectId.__send__(:include, Mongoid::Extensions::ObjectId)
53
+ Moped::BSON::ObjectId.__send__(:extend, Mongoid::Extensions::ObjectId::ClassMethods)
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Range
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
+ # range.mongoize
11
+ #
12
+ # @return [ Hash ] The object mongoized.
13
+ #
14
+ # @since 3.0.0
15
+ def mongoize
16
+ ::Range.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
+ # Range.demongoize({ "min" => 1, "max" => 5 })
25
+ #
26
+ # @param [ Hash ] object The object to demongoize.
27
+ #
28
+ # @return [ Range ] The range.
29
+ #
30
+ # @since 3.0.0
31
+ def demongoize(object)
32
+ object.nil? ? nil : ::Range.new(object["min"], object["max"])
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
+ # Range.mongoize(1..3)
40
+ #
41
+ # @param [ Range ] object The object to mongoize.
42
+ #
43
+ # @return [ Hash ] The object mongoized.
44
+ #
45
+ # @since 3.0.0
46
+ def mongoize(object)
47
+ object.nil? ? nil : { "min" => object.first, "max" => object.last }
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ ::Range.__send__(:include, Mongoid::Extensions::Range)
55
+ ::Range.__send__(:extend, Mongoid::Extensions::Range::ClassMethods)
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Regexp
5
+
6
+ module ClassMethods
7
+
8
+ # Turn the object from the ruby type we deal with to a Mongo friendly
9
+ # type.
10
+ #
11
+ # @example Mongoize the object.
12
+ # Regexp.mongoize(/^[abc]/)
13
+ #
14
+ # @param [ Regexp, String ] object The object to mongoize.
15
+ #
16
+ # @return [ Regexp ] The object mongoized.
17
+ #
18
+ # @since 3.0.0
19
+ def mongoize(object)
20
+ ::Regexp.new(object)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ ::Regexp.__send__(:extend, Mongoid::Extensions::Regexp::ClassMethods)
@@ -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,155 @@
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, nil ] The evolved string.
15
+ #
16
+ # @since 3.0.0
17
+ def __evolve_object_id__
18
+ unless blank?
19
+ BSON::ObjectId.legal?(self) ? BSON::ObjectId.from_string(self) : self
20
+ end
21
+ end
22
+
23
+ # Mongoize the string for storage.
24
+ #
25
+ # @example Mongoize the string.
26
+ # "2012-01-01".__mongoize_time__
27
+ #
28
+ # @return [ Time ] The time.
29
+ #
30
+ # @since 3.0.0
31
+ def __mongoize_time__
32
+ ::Time.configured.parse(self)
33
+ end
34
+
35
+ # Convert the string to a collection friendly name.
36
+ #
37
+ # @example Collectionize the string.
38
+ # "namespace/model".collectionize
39
+ #
40
+ # @return [ String ] The string in collection friendly form.
41
+ #
42
+ # @since 1.0.0
43
+ def collectionize
44
+ tableize.gsub("/", "_")
45
+ end
46
+
47
+ # Is the string a valid value for a Mongoid id?
48
+ #
49
+ # @example Is the string an id value?
50
+ # "_id".mongoid_id?
51
+ #
52
+ # @return [ true, false ] If the string is id or _id.
53
+ #
54
+ # @since 2.3.1
55
+ def mongoid_id?
56
+ self =~ /^(|_)id$/
57
+ end
58
+
59
+ # Is the string a number?
60
+ #
61
+ # @example Is the string a number.
62
+ # "1234.23".numeric?
63
+ #
64
+ # @return [ true, false ] If the string is a number.
65
+ #
66
+ # @since 3.0.0
67
+ def numeric?
68
+ true if Float(self) rescue false
69
+ end
70
+
71
+ # Get the string as a getter string.
72
+ #
73
+ # @example Get the reader/getter
74
+ # "model=".reader
75
+ #
76
+ # @return [ String ] The string stripped of "=".
77
+ #
78
+ # @since 1.0.0
79
+ def reader
80
+ delete("=")
81
+ end
82
+
83
+ # Convert the string to an array with the string in it.
84
+ #
85
+ # @example Convert the string to an array.
86
+ # "Testing".to_a
87
+ #
88
+ # @return [ Array ] An array with only the string in it.
89
+ #
90
+ # @since 1.0.0
91
+ def to_a
92
+ [ self ]
93
+ end
94
+
95
+ # Is this string a writer?
96
+ #
97
+ # @example Is the string a setter method?
98
+ # "model=".writer?
99
+ #
100
+ # @return [ true, false ] If the string contains "=".
101
+ #
102
+ # @since 1.0.0
103
+ def writer?
104
+ include?("=")
105
+ end
106
+
107
+ # Is the object not to be converted to bson on criteria creation?
108
+ #
109
+ # @example Is the object unconvertable?
110
+ # object.unconvertable_to_bson?
111
+ #
112
+ # @return [ true, false ] If the object is unconvertable.
113
+ #
114
+ # @since 2.2.1
115
+ def unconvertable_to_bson?
116
+ @unconvertable_to_bson ||= false
117
+ end
118
+
119
+ module ClassMethods
120
+
121
+ # Convert the object from it's mongo friendly ruby type to this type.
122
+ #
123
+ # @example Demongoize the object.
124
+ # String.demongoize(object)
125
+ #
126
+ # @param [ Object ] object The object to demongoize.
127
+ #
128
+ # @return [ String ] The object.
129
+ #
130
+ # @since 3.0.0
131
+ def demongoize(object)
132
+ object.try(:to_s)
133
+ end
134
+
135
+ # Turn the object from the ruby type we deal with to a Mongo friendly
136
+ # type.
137
+ #
138
+ # @example Mongoize the object.
139
+ # String.mongoize("123.11")
140
+ #
141
+ # @param [ Object ] object The object to mongoize.
142
+ #
143
+ # @return [ String ] The object mongoized.
144
+ #
145
+ # @since 3.0.0
146
+ def mongoize(object)
147
+ demongoize(object)
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end
153
+
154
+ ::String.__send__(:include, Mongoid::Extensions::String)
155
+ ::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)