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
@@ -1,60 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module ObjectId #:nodoc:
5
-
6
- # Provides conversions to and from BSON::ObjectIds and Strings, Arrays,
7
- # and Hashes.
8
- module Conversions
9
-
10
- # Convert the supplied arguments to object ids based on the class
11
- # settings.
12
- #
13
- # @todo Durran: This method can be refactored.
14
- #
15
- # @example Convert a string to an object id
16
- # BSON::ObjectId.convert(Person, "4c52c439931a90ab29000003")
17
- #
18
- # @example Convert an array of strings to object ids.
19
- # BSON::ObjectId.convert(Person, [ "4c52c439931a90ab29000003" ])
20
- #
21
- # @example Convert a hash of id strings to object ids.
22
- # BSON::ObjectId.convert(Person, { :_id => "4c52c439931a90ab29000003" })
23
- #
24
- # @param [ Class ] klass The class to convert the ids for.
25
- # @param [ Object, Array, Hash ] object The object to convert.
26
- #
27
- # @raise BSON::InvalidObjectId If using object ids and passed bad
28
- # strings.
29
- #
30
- # @return [ BSON::ObjectId, Array, Hash ] The converted object ids.
31
- #
32
- # @since 2.0.0.rc.7
33
- def convert(klass, object, reject_blank = true)
34
- return object if object.is_a?(BSON::ObjectId) || !klass.using_object_ids?
35
- case object
36
- when ::String
37
- return nil if object.blank?
38
- if object.unconvertable_to_bson?
39
- object
40
- else
41
- BSON::ObjectId.legal?(object) ? BSON::ObjectId.from_string(object) : object
42
- end
43
- when ::Array
44
- object.delete_if { |arg| arg.blank? } if reject_blank
45
- object.replace(object.map { |arg| convert(klass, arg, reject_blank) })
46
- when ::Hash
47
- object.tap do |hash|
48
- hash.each_pair do |key, value|
49
- next unless klass.object_id_field?(key)
50
- hash[key] = convert(klass, value, reject_blank)
51
- end
52
- end
53
- else
54
- object
55
- end
56
- end
57
- end
58
- end
59
- end
60
- end
@@ -1,25 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Proc #:nodoc:
5
-
6
- # Adds functionality for criteria scoping/merging.
7
- module Scoping
8
-
9
- # Get the proc scoped for criteria merges.
10
- #
11
- # @example Get the hash.
12
- # proc.scoped
13
- #
14
- # @param [ Array ] args The arguments to delegate to the proc.
15
- #
16
- # @return [ Object ] The result of the proc call.
17
- #
18
- # @since 1.0.0
19
- def as_conditions(*args)
20
- call(*args).as_conditions
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,36 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module String #:nodoc:
5
-
6
- # This module has object checks in it.
7
- module Checks #:nodoc:
8
- attr_accessor :unconvertable_to_bson
9
-
10
- # Is the string a valid value for a Mongoid id?
11
- #
12
- # @example Is the string an id value?
13
- # "_id".mongoid_id?
14
- #
15
- # @return [ true, false ] If the string is id or _id.
16
- #
17
- # @since 2.3.1
18
- def mongoid_id?
19
- self =~ /^(|_)id$/
20
- end
21
-
22
- # Is the object not to be converted to bson on criteria creation?
23
- #
24
- # @example Is the object unconvertable?
25
- # object.unconvertable_to_bson?
26
- #
27
- # @return [ true, false ] If the object is unconvertable.
28
- #
29
- # @since 2.2.1
30
- def unconvertable_to_bson?
31
- !!@unconvertable_to_bson
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,22 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module String #:nodoc:
5
- module Conversions #:nodoc:
6
- extend ActiveSupport::Concern
7
-
8
- # Convert the string to an array with the string in it.
9
- #
10
- # @example Convert the string to an array.
11
- # "Testing".to_a
12
- #
13
- # @return [ Array ] An array with only the string in it.
14
- #
15
- # @since 1.0.0
16
- def to_a
17
- [ self ]
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,118 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module String #:nodoc:
5
-
6
- # This module contains convenience methods for string inflection and
7
- # conversion.
8
- module Inflections
9
-
10
- ActiveSupport::Inflector.inflections do |inflect|
11
- inflect.singular(/address$/, "address")
12
- inflect.singular("addresses", "address")
13
- inflect.irregular("canvas", "canvases")
14
- end
15
-
16
- # Represents how special characters will get converted when creating a
17
- # composite key that should be unique and part of a url.
18
- CHAR_CONV = {
19
- " " => "-",
20
- "!" => "-excl-",
21
- "\"" => "-dblquo-",
22
- "#" => "-hash-",
23
- "$" => "-dol-",
24
- "%" => "-perc-",
25
- "&" => "-and-",
26
- "'" => "-quo-",
27
- "(" => "-oparen-",
28
- ")" => "-cparen-",
29
- "*" => "-astx-",
30
- "+" => "-plus-",
31
- "," => "-comma-",
32
- "-" => "-",
33
- "." => "-period-",
34
- "/" => "-fwdslsh-",
35
- ":" => "-colon-",
36
- ";" => "-semicol-",
37
- "<" => "-lt-",
38
- "=" => "-eq-",
39
- ">" => "-gt-",
40
- "?" => "-ques-",
41
- "@" => "-at-",
42
- "[" => "-obrck-",
43
- "\\" => "-bckslsh-",
44
- "]" => "-clbrck-",
45
- "^" => "-carat-",
46
- "_" => "-undscr-",
47
- "`" => "-bcktick-",
48
- "{" => "-ocurly-",
49
- "|" => "-pipe-",
50
- "}" => "-clcurly-",
51
- "~" => "-tilde-"
52
- }
53
-
54
- REVERSALS = {
55
- "asc" => "desc",
56
- "ascending" => "descending",
57
- "desc" => "asc",
58
- "descending" => "ascending"
59
- }
60
-
61
- # Convert the string to a collection friendly name.
62
- #
63
- # @example Collectionize the string.
64
- # "namespace/model".collectionize
65
- #
66
- # @return [ String ] The string in collection friendly form.
67
- def collectionize
68
- tableize.gsub("/", "_")
69
- end
70
-
71
- # Convert this string to a key friendly string.
72
- #
73
- # @example Convert to key.
74
- # "testing".identify
75
- #
76
- # @return [ String ] The key friendly string.
77
- def identify
78
- if Mongoid.parameterize_keys
79
- key = ""
80
- each_char { |c| key += (CHAR_CONV[c] || c.downcase) }; key
81
- else
82
- self
83
- end
84
- end
85
-
86
- # Get the inverted sorting option.
87
- #
88
- # @example Get the inverted option.
89
- # "asc".invert
90
- #
91
- # @return [ String ] The string inverted.
92
- def invert
93
- REVERSALS[self]
94
- end
95
-
96
- # Get the string as a getter string.
97
- #
98
- # @example Get the reader/getter
99
- # "model=".reader
100
- #
101
- # @return [ String ] The string stripped of "=".
102
- def reader
103
- delete("=")
104
- end
105
-
106
- # Is this string a writer?
107
- #
108
- # @example Is the string a setter method?
109
- # "model=".writer?
110
- #
111
- # @return [ true, false ] If the string contains "=".
112
- def writer?
113
- include?("=")
114
- end
115
- end
116
- end
117
- end
118
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Symbol #:nodoc:
5
-
6
- # This module has object checks in it.
7
- module Checks #:nodoc:
8
-
9
- # Is the symbol a valid value for a Mongoid id?
10
- #
11
- # @example Is the string an id value?
12
- # :_id.mongoid_id?
13
- #
14
- # @return [ true, false ] If the symbol is :id or :_id.
15
- #
16
- # @since 2.3.1
17
- def mongoid_id?
18
- to_s =~ /^(|_)id$/
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,67 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Symbol #:nodoc:
5
-
6
- # This module contains convenience methods for symbol inflection and
7
- # conversion.
8
- module Inflections
9
-
10
- REVERSALS = {
11
- :asc => :desc,
12
- :ascending => :descending,
13
- :desc => :asc,
14
- :descending => :ascending
15
- }
16
-
17
- # Get the inverted sorting option.
18
- #
19
- # @example Get the inverted option.
20
- # :asc.invert
21
- #
22
- # @return [ String ] The string inverted.
23
- def invert
24
- REVERSALS[self]
25
- end
26
-
27
- # Define all the necessary methods on symbol to support Mongoid's
28
- # complex criterion.
29
- #
30
- # @example A greater than criterion.
31
- # :field.gt => 5
32
- #
33
- # @return [ Criterion::Complex ] The criterion.
34
- #
35
- # @since 1.0.0
36
- [
37
- "all",
38
- "asc",
39
- "ascending",
40
- "desc",
41
- "descending",
42
- "exists",
43
- "gt",
44
- "gte",
45
- "in",
46
- "lt",
47
- "lte",
48
- "mod",
49
- "ne",
50
- "near",
51
- "not",
52
- "nin",
53
- "size",
54
- "within",
55
- ["matches","elemMatch"] ].each do |oper|
56
- m, oper = oper
57
- oper = m unless oper
58
- class_eval <<-OPERATORS
59
- def #{m}
60
- Criterion::Complex.new(:key => self, :operator => "#{oper}")
61
- end
62
- OPERATORS
63
- end
64
- end
65
- end
66
- end
67
- end
@@ -1,26 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module TrueClass #:nodoc:
5
-
6
- # Adds equality hooks for true values.
7
- module Equality
8
-
9
- # Is the passed value a boolean?
10
- #
11
- # @example Is the value a boolean type?
12
- # true.is_a?(Boolean)
13
- #
14
- # @param [ Class ] other The class to check.
15
- #
16
- # @return [ true, false ] If the other is a boolean.
17
- #
18
- # @since 1.0.0
19
- def is_a?(other)
20
- return true if other.name == "Boolean"
21
- super(other)
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,31 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
-
4
- # Adds support for caching queries at the class level.
5
- module Extras
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- class_attribute :cached
10
- self.cached = false
11
- end
12
-
13
- module ClassMethods #:nodoc
14
-
15
- # Sets caching on for this class. This class level configuration will
16
- # default all queries to cache the results of the first iteration over
17
- # the cursor into an internal array. This should only be used for queries
18
- # that return a small number of results or have small documents, as after
19
- # the first iteration the entire results will be stored in memory.
20
- #
21
- # @example Cache all reads for the class.
22
- # class Person
23
- # include Mongoid::Document
24
- # cache
25
- # end
26
- def cache
27
- self.cached = true
28
- end
29
- end
30
- end
31
- end
@@ -1,77 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
-
6
- # Defines the behaviour for array fields.
7
- class Array
8
- include Serializable
9
-
10
- # Adds the atomic changes for this type of resizable field.
11
- #
12
- # @example Add the atomic changes.
13
- # field.add_atomic_changes(doc, "key", {}, [], [])
14
- #
15
- # @param [ Document ] document The document to add to.
16
- # @param [ String ] name The name of the field.
17
- # @param [ String ] key The atomic location of the field.
18
- # @param [ Hash ] mods The current modifications.
19
- # @param [ Array ] new The new elements to add.
20
- # @param [ Array ] old The old elements getting removed.
21
- #
22
- # @since 2.4.0
23
- def add_atomic_changes(document, name, key, mods, new, old)
24
- mods[key] = new
25
- end
26
-
27
- # Array fields are resizable.
28
- #
29
- # @example Is this field resizable?
30
- # field.resizable?
31
- #
32
- # @return [ true ] Always true.
33
- #
34
- # @since 2.4.0
35
- def resizable?; true; end
36
-
37
- # Serialize the object from the type defined in the model to a MongoDB
38
- # compatible object to store.
39
- #
40
- # @example Serialize the field.
41
- # field.serialize(object)
42
- #
43
- # @param [ Object ] object The object to cast.
44
- #
45
- # @return [ Array ] The converted object.
46
- #
47
- # @since 2.1.0
48
- def serialize(object)
49
- raise_or_return(object)
50
- end
51
-
52
- protected
53
-
54
- # If the value is not an array or nil we will raise an error,
55
- # otherwise return the value.
56
- #
57
- # @example Raise or return the value.
58
- # field.raise_or_return([])
59
- #
60
- # @param [ Object ] value The value to check.a
61
- #
62
- # @raise [ InvalidType ] If not passed an array.
63
- #
64
- # @return [ Array ] The array.
65
- #
66
- # @since 2.1.0
67
- def raise_or_return(value)
68
- return nil if value.nil? || value == ""
69
- unless value.is_a?(::Array)
70
- raise Mongoid::Errors::InvalidType.new(::Array, value)
71
- end
72
- value
73
- end
74
- end
75
- end
76
- end
77
- end