mongoid 2.4.10 → 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.
- data/CHANGELOG.md +843 -9
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +2 -17
- data/lib/config/locales/en.yml +441 -51
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- data/lib/mongoid/atomic/paths/root.rb +4 -5
- data/lib/mongoid/atomic.rb +16 -9
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/callbacks.rb +100 -42
- data/lib/mongoid/collections/retry.rb +2 -3
- data/lib/mongoid/components.rb +10 -22
- data/lib/mongoid/config/environment.rb +4 -3
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config.rb +87 -233
- data/lib/mongoid/contextual/aggregable/memory.rb +98 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
- data/lib/mongoid/contextual/atomic.rb +179 -0
- data/lib/mongoid/contextual/command.rb +43 -0
- data/lib/mongoid/contextual/find_and_modify.rb +66 -0
- data/lib/mongoid/contextual/map_reduce.rb +273 -0
- data/lib/mongoid/contextual/memory.rb +383 -0
- data/lib/mongoid/contextual/mongo.rb +543 -0
- data/lib/mongoid/contextual.rb +50 -0
- data/lib/mongoid/copyable.rb +2 -2
- data/lib/mongoid/criteria.rb +436 -248
- data/lib/mongoid/criterion/inspection.rb +14 -8
- data/lib/mongoid/criterion/scoping.rb +114 -44
- data/lib/mongoid/dirty.rb +152 -67
- data/lib/mongoid/document.rb +68 -49
- data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
- data/lib/mongoid/errors/callback.rb +5 -6
- data/lib/mongoid/errors/delete_restriction.rb +29 -0
- data/lib/mongoid/errors/document_not_found.rb +98 -17
- data/lib/mongoid/errors/eager_load.rb +3 -6
- data/lib/mongoid/errors/invalid_collection.rb +3 -3
- data/lib/mongoid/errors/invalid_config_option.rb +27 -0
- data/lib/mongoid/errors/invalid_database.rb +3 -3
- data/lib/mongoid/errors/invalid_field.rb +54 -8
- data/lib/mongoid/errors/invalid_field_option.rb +35 -0
- data/lib/mongoid/errors/invalid_find.rb +3 -3
- data/lib/mongoid/errors/invalid_index.rb +28 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -4
- data/lib/mongoid/errors/invalid_scope.rb +24 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
- data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
- data/lib/mongoid/errors/invalid_time.rb +3 -6
- data/lib/mongoid/errors/inverse_not_found.rb +29 -0
- data/lib/mongoid/errors/mixed_relations.rb +4 -9
- data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
- data/lib/mongoid/errors/mongoid_error.rb +54 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
- data/lib/mongoid/errors/no_default_session.rb +23 -0
- data/lib/mongoid/errors/no_environment.rb +3 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
- data/lib/mongoid/errors/no_parent.rb +24 -0
- data/lib/mongoid/errors/no_session_config.rb +22 -0
- data/lib/mongoid/errors/no_session_database.rb +27 -0
- data/lib/mongoid/errors/no_session_hosts.rb +27 -0
- data/lib/mongoid/errors/no_sessions_config.rb +20 -0
- data/lib/mongoid/errors/readonly_attribute.rb +25 -0
- data/lib/mongoid/errors/scope_overwrite.rb +4 -4
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
- data/lib/mongoid/errors/unknown_attribute.rb +25 -0
- data/lib/mongoid/errors/unsaved_document.rb +4 -8
- data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
- data/lib/mongoid/errors/unsupported_version.rb +4 -4
- data/lib/mongoid/errors/validations.rb +7 -6
- data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
- data/lib/mongoid/errors.rb +22 -1
- data/lib/mongoid/extensions/array.rb +127 -0
- data/lib/mongoid/extensions/big_decimal.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +24 -0
- data/lib/mongoid/extensions/date.rb +70 -0
- data/lib/mongoid/extensions/date_time.rb +68 -0
- data/lib/mongoid/extensions/false_class.rb +26 -0
- data/lib/mongoid/extensions/float.rb +44 -0
- data/lib/mongoid/extensions/hash.rb +91 -0
- data/lib/mongoid/extensions/integer.rb +54 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +21 -0
- data/lib/mongoid/extensions/object.rb +188 -0
- data/lib/mongoid/extensions/object_id.rb +53 -0
- data/lib/mongoid/extensions/range.rb +55 -0
- data/lib/mongoid/extensions/regexp.rb +27 -0
- data/lib/mongoid/extensions/set.rb +55 -0
- data/lib/mongoid/extensions/string.rb +155 -0
- data/lib/mongoid/extensions/symbol.rb +54 -0
- data/lib/mongoid/extensions/time.rb +78 -0
- data/lib/mongoid/extensions/time_with_zone.rb +55 -0
- data/lib/mongoid/extensions/true_class.rb +26 -0
- data/lib/mongoid/extensions.rb +28 -76
- data/lib/mongoid/factory.rb +1 -1
- data/lib/mongoid/fields/foreign_key.rb +134 -0
- data/lib/mongoid/fields/localized.rb +73 -0
- data/lib/mongoid/fields/standard.rb +268 -0
- data/lib/mongoid/fields/validators/macro.rb +83 -0
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields.rb +129 -194
- data/lib/mongoid/finders.rb +42 -43
- data/lib/mongoid/hierarchy.rb +25 -14
- data/lib/mongoid/identity_map.rb +31 -19
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- data/lib/mongoid/indexes.rb +66 -15
- data/lib/mongoid/inspection.rb +1 -1
- data/lib/mongoid/javascript.rb +1 -1
- data/lib/mongoid/json.rb +2 -2
- data/lib/mongoid/loggable.rb +69 -0
- data/lib/mongoid/matchers/all.rb +7 -8
- data/lib/mongoid/matchers/and.rb +3 -3
- data/lib/mongoid/matchers/default.rb +6 -4
- data/lib/mongoid/matchers/exists.rb +2 -2
- data/lib/mongoid/matchers/gt.rb +2 -2
- data/lib/mongoid/matchers/gte.rb +2 -2
- data/lib/mongoid/matchers/in.rb +3 -7
- data/lib/mongoid/matchers/lt.rb +2 -2
- data/lib/mongoid/matchers/lte.rb +2 -2
- data/lib/mongoid/matchers/ne.rb +2 -2
- data/lib/mongoid/matchers/nin.rb +2 -2
- data/lib/mongoid/matchers/or.rb +2 -2
- data/lib/mongoid/matchers/size.rb +2 -2
- data/lib/mongoid/matchers/strategies.rb +3 -3
- data/lib/mongoid/matchers.rb +1 -1
- data/lib/mongoid/multi_parameter_attributes.rb +8 -10
- data/lib/mongoid/nested_attributes.rb +17 -9
- data/lib/mongoid/observer.rb +1 -2
- data/lib/mongoid/paranoia.rb +13 -18
- data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
- data/lib/mongoid/persistence/atomic/bit.rb +5 -7
- data/lib/mongoid/persistence/atomic/inc.rb +5 -7
- data/lib/mongoid/persistence/atomic/operation.rb +45 -6
- data/lib/mongoid/persistence/atomic/pop.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
- data/lib/mongoid/persistence/atomic/push.rb +4 -10
- data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
- data/lib/mongoid/persistence/atomic/rename.rb +6 -7
- data/lib/mongoid/persistence/atomic/sets.rb +5 -7
- data/lib/mongoid/persistence/atomic/unset.rb +4 -5
- data/lib/mongoid/persistence/atomic.rb +2 -2
- data/lib/mongoid/persistence/deletion.rb +2 -2
- data/lib/mongoid/persistence/insertion.rb +10 -16
- data/lib/mongoid/persistence/modification.rb +5 -9
- data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
- data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
- data/lib/mongoid/persistence/operations/insert.rb +4 -4
- data/lib/mongoid/persistence/operations/remove.rb +4 -4
- data/lib/mongoid/persistence/operations/update.rb +5 -5
- data/lib/mongoid/persistence/operations.rb +6 -19
- data/lib/mongoid/persistence.rb +64 -27
- data/lib/mongoid/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations/accessors.rb +119 -19
- data/lib/mongoid/relations/auto_save.rb +59 -5
- data/lib/mongoid/relations/binding.rb +211 -2
- data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
- data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
- data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
- data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
- data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
- data/lib/mongoid/relations/builder.rb +3 -3
- data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
- data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
- data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/many.rb +5 -5
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
- data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
- data/lib/mongoid/relations/builders.rb +19 -16
- data/lib/mongoid/relations/cascading/delete.rb +3 -5
- data/lib/mongoid/relations/cascading/destroy.rb +3 -3
- data/lib/mongoid/relations/cascading/nullify.rb +3 -3
- data/lib/mongoid/relations/cascading/restrict.rb +37 -0
- data/lib/mongoid/relations/cascading.rb +6 -4
- data/lib/mongoid/relations/constraint.rb +4 -3
- data/lib/mongoid/relations/conversions.rb +5 -6
- data/lib/mongoid/relations/cyclic.rb +7 -7
- data/lib/mongoid/relations/embedded/batchable.rb +346 -0
- data/lib/mongoid/relations/embedded/in.rb +23 -12
- data/lib/mongoid/relations/embedded/many.rb +99 -160
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -60
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +231 -45
- data/lib/mongoid/relations/nested_builder.rb +3 -5
- data/lib/mongoid/relations/one.rb +2 -2
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/polymorphic.rb +9 -9
- data/lib/mongoid/relations/proxy.rb +60 -31
- data/lib/mongoid/relations/referenced/in.rb +40 -15
- data/lib/mongoid/relations/referenced/many.rb +116 -128
- data/lib/mongoid/relations/referenced/many_to_many.rb +101 -46
- data/lib/mongoid/relations/referenced/one.rb +34 -13
- data/lib/mongoid/relations/reflections.rb +3 -3
- data/lib/mongoid/relations/synchronization.rb +19 -23
- data/lib/mongoid/relations/targets/enumerable.rb +86 -57
- data/lib/mongoid/relations/touchable.rb +32 -0
- data/lib/mongoid/relations.rb +6 -6
- data/lib/mongoid/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +329 -0
- data/lib/mongoid/serialization.rb +13 -30
- data/lib/mongoid/sessions/factory.rb +106 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions.rb +359 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded/lifecycle.rb +21 -21
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/threaded.rb +167 -59
- data/lib/mongoid/timestamps/created.rb +8 -4
- data/lib/mongoid/timestamps/timeless.rb +6 -4
- data/lib/mongoid/timestamps/updated.rb +3 -3
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/unit_of_work.rb +61 -0
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +34 -4
- data/lib/mongoid/validations/uniqueness.rb +8 -10
- data/lib/mongoid/validations.rb +28 -20
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- data/lib/mongoid.rb +24 -39
- data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
- data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +59 -19
- data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
- data/lib/rails/generators/mongoid_generator.rb +5 -5
- data/lib/rails/mongoid.rb +69 -25
- metadata +92 -154
- data/lib/config/locales/bg.yml +0 -61
- data/lib/config/locales/de.yml +0 -61
- data/lib/config/locales/en-GB.yml +0 -64
- data/lib/config/locales/es.yml +0 -59
- data/lib/config/locales/fr.yml +0 -62
- data/lib/config/locales/hi.yml +0 -53
- data/lib/config/locales/hu.yml +0 -64
- data/lib/config/locales/id.yml +0 -62
- data/lib/config/locales/it.yml +0 -59
- data/lib/config/locales/ja.yml +0 -57
- data/lib/config/locales/kr.yml +0 -54
- data/lib/config/locales/nl.yml +0 -61
- data/lib/config/locales/pl.yml +0 -59
- data/lib/config/locales/pt-BR.yml +0 -60
- data/lib/config/locales/pt.yml +0 -60
- data/lib/config/locales/ro.yml +0 -66
- data/lib/config/locales/ru.yml +0 -61
- data/lib/config/locales/sv.yml +0 -60
- data/lib/config/locales/vi.yml +0 -62
- data/lib/config/locales/zh-CN.yml +0 -53
- data/lib/mongoid/collection.rb +0 -157
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/collections.rb +0 -120
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/mongo.rb +0 -487
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/criterion/builder.rb +0 -34
- data/lib/mongoid/criterion/complex.rb +0 -84
- data/lib/mongoid/criterion/creational.rb +0 -34
- data/lib/mongoid/criterion/exclusion.rb +0 -108
- data/lib/mongoid/criterion/inclusion.rb +0 -290
- data/lib/mongoid/criterion/optional.rb +0 -259
- data/lib/mongoid/criterion/selector.rb +0 -177
- data/lib/mongoid/cursor.rb +0 -88
- data/lib/mongoid/default_scope.rb +0 -36
- data/lib/mongoid/errors/invalid_type.rb +0 -25
- data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/array/deletion.rb +0 -29
- data/lib/mongoid/extensions/false_class/equality.rb +0 -26
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
- data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/hash/scoping.rb +0 -25
- data/lib/mongoid/extensions/integer/checks.rb +0 -23
- data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
- data/lib/mongoid/extensions/object/checks.rb +0 -29
- data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
- data/lib/mongoid/extensions/object/reflections.rb +0 -48
- data/lib/mongoid/extensions/object/substitutable.rb +0 -15
- data/lib/mongoid/extensions/object/yoda.rb +0 -44
- data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
- data/lib/mongoid/extensions/proc/scoping.rb +0 -25
- data/lib/mongoid/extensions/string/checks.rb +0 -36
- data/lib/mongoid/extensions/string/conversions.rb +0 -22
- data/lib/mongoid/extensions/string/inflections.rb +0 -118
- data/lib/mongoid/extensions/symbol/checks.rb +0 -23
- data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
- data/lib/mongoid/extensions/true_class/equality.rb +0 -26
- data/lib/mongoid/extras.rb +0 -31
- data/lib/mongoid/fields/internal/array.rb +0 -76
- data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
- data/lib/mongoid/fields/internal/bignum.rb +0 -10
- data/lib/mongoid/fields/internal/binary.rb +0 -11
- data/lib/mongoid/fields/internal/boolean.rb +0 -58
- data/lib/mongoid/fields/internal/date.rb +0 -51
- data/lib/mongoid/fields/internal/date_time.rb +0 -28
- data/lib/mongoid/fields/internal/false_class.rb +0 -10
- data/lib/mongoid/fields/internal/fixnum.rb +0 -10
- data/lib/mongoid/fields/internal/float.rb +0 -47
- data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
- data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
- data/lib/mongoid/fields/internal/hash.rb +0 -11
- data/lib/mongoid/fields/internal/integer.rb +0 -59
- data/lib/mongoid/fields/internal/localized.rb +0 -62
- data/lib/mongoid/fields/internal/nil_class.rb +0 -53
- data/lib/mongoid/fields/internal/object.rb +0 -11
- data/lib/mongoid/fields/internal/object_id.rb +0 -46
- data/lib/mongoid/fields/internal/range.rb +0 -61
- data/lib/mongoid/fields/internal/set.rb +0 -57
- data/lib/mongoid/fields/internal/string.rb +0 -42
- data/lib/mongoid/fields/internal/symbol.rb +0 -43
- data/lib/mongoid/fields/internal/time.rb +0 -23
- data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
- data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
- data/lib/mongoid/fields/internal/true_class.rb +0 -10
- data/lib/mongoid/fields/mappings.rb +0 -42
- data/lib/mongoid/fields/serializable.rb +0 -270
- data/lib/mongoid/identity.rb +0 -92
- data/lib/mongoid/keys.rb +0 -144
- data/lib/mongoid/logger.rb +0 -45
- data/lib/mongoid/multi_database.rb +0 -36
- data/lib/mongoid/named_scope.rb +0 -166
- data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
- data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
- data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
- data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
- data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
- data/lib/mongoid/relations/embedded/atomic.rb +0 -89
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/relations/referenced/batch.rb +0 -73
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
require "mongoid/relations/embedded/atomic/operation"
|
|
3
|
-
require "mongoid/relations/embedded/atomic/pull"
|
|
4
|
-
require "mongoid/relations/embedded/atomic/push_all"
|
|
5
|
-
require "mongoid/relations/embedded/atomic/set"
|
|
6
|
-
require "mongoid/relations/embedded/atomic/unset"
|
|
7
|
-
|
|
8
|
-
module Mongoid #:nodoc:
|
|
9
|
-
module Relations #:nodoc:
|
|
10
|
-
module Embedded #:nodoc:
|
|
11
|
-
|
|
12
|
-
# This module provides the ability for calls to be declared atomic.
|
|
13
|
-
module Atomic
|
|
14
|
-
|
|
15
|
-
MODIFIERS = {
|
|
16
|
-
:$pull => Pull,
|
|
17
|
-
:$pushAll => PushAll,
|
|
18
|
-
:$set => Set,
|
|
19
|
-
:$unset => Unset
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
private
|
|
23
|
-
|
|
24
|
-
# Executes a block of commands in an atomic fashion. Mongoid will
|
|
25
|
-
# intercept all database upserts while in this block and combine them
|
|
26
|
-
# into a single database call. When the block concludes the atomic
|
|
27
|
-
# update will occur.
|
|
28
|
-
#
|
|
29
|
-
# Since the collection is accessed through the class it would not be
|
|
30
|
-
# thread safe to give it state so we access the atomic updater via the
|
|
31
|
-
# current thread.
|
|
32
|
-
#
|
|
33
|
-
# @note This operation is not safe when attemping to do illegal updates
|
|
34
|
-
# for different objects or collections, since the updator is not
|
|
35
|
-
# scoped on the thread. This is meant for Mongoid internal use only
|
|
36
|
-
# to keep existing design clean.
|
|
37
|
-
#
|
|
38
|
-
# @example Atomically $set multiple saves.
|
|
39
|
-
# atomically(:$set) do
|
|
40
|
-
# address_one.save!
|
|
41
|
-
# address_two.save!
|
|
42
|
-
# end
|
|
43
|
-
#
|
|
44
|
-
# @example Atomically $pushAll multiple new docs.
|
|
45
|
-
# atomically(:$pushAll) do
|
|
46
|
-
# person.addresses.push([ address_one, address_two ])
|
|
47
|
-
# end
|
|
48
|
-
#
|
|
49
|
-
# @todo Durran: Move executions to thread local stack.
|
|
50
|
-
#
|
|
51
|
-
# @param [ Symbol ] modifier The atomic modifier to perform.
|
|
52
|
-
# @param [ Proc ] block The block to execute.
|
|
53
|
-
#
|
|
54
|
-
# @return [ Object ] The result of the operation.
|
|
55
|
-
#
|
|
56
|
-
# @since 2.0.0
|
|
57
|
-
def atomically(modifier, &block)
|
|
58
|
-
updater = Threaded.update_consumer(collection_name) ||
|
|
59
|
-
Threaded.set_update_consumer(collection_name, MODIFIERS[modifier].new)
|
|
60
|
-
count_executions do
|
|
61
|
-
block.call if block
|
|
62
|
-
end.tap do
|
|
63
|
-
if @executions.zero?
|
|
64
|
-
Threaded.set_update_consumer(collection_name, nil)
|
|
65
|
-
updater.execute(collection)
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# Execute the block, incrementing the executions before the call and
|
|
71
|
-
# decrementing them after in order to be able to nest blocks within
|
|
72
|
-
# each other.
|
|
73
|
-
#
|
|
74
|
-
# @example Execute and increment.
|
|
75
|
-
# execute { block.call }
|
|
76
|
-
#
|
|
77
|
-
# @param [ Proc ] block The block to call.
|
|
78
|
-
#
|
|
79
|
-
# @since 2.0.0
|
|
80
|
-
def count_executions(&block)
|
|
81
|
-
@executions ||= 0 and @executions += 1
|
|
82
|
-
block.call.tap do
|
|
83
|
-
@executions -=1
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Relations #:nodoc:
|
|
4
|
-
module Referenced #:nodoc:
|
|
5
|
-
module Batch #:nodoc:
|
|
6
|
-
|
|
7
|
-
# Handles all the batch insert collection.
|
|
8
|
-
class Insert
|
|
9
|
-
attr_accessor :documents, :options
|
|
10
|
-
|
|
11
|
-
# Consumes an execution that was supposed to hit the database, but is
|
|
12
|
-
# now being deferred to later in favor of a single batch insert.
|
|
13
|
-
#
|
|
14
|
-
# @example Consume the operation.
|
|
15
|
-
# set.consume({ "field" => "value" }, { :safe => true })
|
|
16
|
-
#
|
|
17
|
-
# @param [ Hash ] document The document to collect.
|
|
18
|
-
# @param [ Hash ] options The persistence options.
|
|
19
|
-
#
|
|
20
|
-
# @option options [ true, false ] :safe Persist in safe mode.
|
|
21
|
-
#
|
|
22
|
-
# @since 2.0.2, batch-relational-insert
|
|
23
|
-
def consume(document, options = {})
|
|
24
|
-
@consumed, @options = true, options
|
|
25
|
-
(@documents ||= []).push(document)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Has this operation consumed any executions?
|
|
29
|
-
#
|
|
30
|
-
# @example Is this consumed?
|
|
31
|
-
# insert.consumed?
|
|
32
|
-
#
|
|
33
|
-
# @return [ true, false ] If the operation has consumed anything.
|
|
34
|
-
#
|
|
35
|
-
# @since 2.0.2, batch-relational-insert
|
|
36
|
-
def consumed?
|
|
37
|
-
!!@consumed
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Execute the batch insert operation on the collection.
|
|
41
|
-
#
|
|
42
|
-
# @example Execute the operation.
|
|
43
|
-
# insert.execute(collection)
|
|
44
|
-
#
|
|
45
|
-
# @param [ Collection ] collection The root collection.
|
|
46
|
-
#
|
|
47
|
-
# @since 2.0.2, batch-relational-insert
|
|
48
|
-
def execute(collection)
|
|
49
|
-
if collection && consumed?
|
|
50
|
-
collection.insert(documents, options)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
require "mongoid/relations/referenced/batch/insert"
|
|
3
|
-
|
|
4
|
-
module Mongoid #:nodoc:
|
|
5
|
-
module Relations #:nodoc:
|
|
6
|
-
module Referenced #:nodoc:
|
|
7
|
-
|
|
8
|
-
# This module provides the ability for single insert calls to be batch
|
|
9
|
-
# inserted.
|
|
10
|
-
module Batch
|
|
11
|
-
|
|
12
|
-
private
|
|
13
|
-
|
|
14
|
-
# Executes a number of save calls in a single batch. Mongoid will
|
|
15
|
-
# intercept all database inserts while in this block and combine them
|
|
16
|
-
# into a single database call. When the block concludes the batch
|
|
17
|
-
# insert will occur.
|
|
18
|
-
#
|
|
19
|
-
# Since the collection is accessed through the class it would not be
|
|
20
|
-
# thread safe to give it state so we access the atomic updater via the
|
|
21
|
-
# current thread.
|
|
22
|
-
#
|
|
23
|
-
# @note This operation is not safe when attemping to do illegal updates
|
|
24
|
-
# for different objects or collections, since the updator is not
|
|
25
|
-
# scoped on the thread. This is meant for Mongoid internal use only
|
|
26
|
-
# to keep existing design clean.
|
|
27
|
-
#
|
|
28
|
-
# @example Batch update multiple appends.
|
|
29
|
-
# batched do
|
|
30
|
-
# person.posts << [ post_one, post_two, post_three ]
|
|
31
|
-
# end
|
|
32
|
-
#
|
|
33
|
-
# @todo Durran: Move executions to thread local stack.
|
|
34
|
-
#
|
|
35
|
-
# @param [ Proc ] block The block to execute.
|
|
36
|
-
#
|
|
37
|
-
# @return [ Object ] The result of the operation.
|
|
38
|
-
#
|
|
39
|
-
# @since 2.0.2, batch-relational-insert
|
|
40
|
-
def batched(&block)
|
|
41
|
-
name = collection.name
|
|
42
|
-
inserter = Threaded.insert(name) || Threaded.set_insert(name, Insert.new)
|
|
43
|
-
count_executions(&block)
|
|
44
|
-
ensure
|
|
45
|
-
if @executions.zero?
|
|
46
|
-
Threaded.set_insert(name, nil)
|
|
47
|
-
inserter.execute(collection)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# Execute the block, incrementing the executions before the call and
|
|
52
|
-
# decrementing them after in order to be able to nest blocks within
|
|
53
|
-
# each other.
|
|
54
|
-
#
|
|
55
|
-
# @todo Durran: Combine common code with embedded atomics.
|
|
56
|
-
#
|
|
57
|
-
# @example Execute and increment.
|
|
58
|
-
# execute { block.call }
|
|
59
|
-
#
|
|
60
|
-
# @param [ Proc ] block The block to call.
|
|
61
|
-
#
|
|
62
|
-
# @since 2.0.2, batch-relational-insert
|
|
63
|
-
def count_executions
|
|
64
|
-
@executions ||= 0
|
|
65
|
-
@executions += 1
|
|
66
|
-
yield
|
|
67
|
-
ensure
|
|
68
|
-
@executions -=1
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
data/lib/mongoid/safety.rb
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
|
|
4
|
-
# The +Safety+ module is used to provide a DSL to execute database operations
|
|
5
|
-
# in safe mode on a per query basis, either from the +Document+ class level
|
|
6
|
-
# or instance level.
|
|
7
|
-
module Safety
|
|
8
|
-
extend ActiveSupport::Concern
|
|
9
|
-
|
|
10
|
-
# Execute the following instance-level persistence operation in safe mode.
|
|
11
|
-
#
|
|
12
|
-
# @example Upsert in safe mode.
|
|
13
|
-
# person.safely.upsert
|
|
14
|
-
#
|
|
15
|
-
# @example Destroy in safe mode with w and fsync options.
|
|
16
|
-
# person.safely(:w => 2, :fsync => true).destroy
|
|
17
|
-
#
|
|
18
|
-
# @param [ Hash ] options The safe mode options.
|
|
19
|
-
#
|
|
20
|
-
# @option options [ Integer ] :w The number of nodes to write to.
|
|
21
|
-
# @option options [ Integer ] :wtimeout Time to wait for return from all
|
|
22
|
-
# nodes.
|
|
23
|
-
# @option options [ true, false ] :fsync Should a fsync occur.
|
|
24
|
-
#
|
|
25
|
-
# @return [ Proxy ] The safety proxy.
|
|
26
|
-
def safely(safety = true)
|
|
27
|
-
tap { Threaded.safety_options = safety }
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# Execute the following instance-level persistence operation without safe mode.
|
|
31
|
-
# Allows per-request overriding of safe mode when the persist_in_safe_mode
|
|
32
|
-
# config option is turned on.
|
|
33
|
-
#
|
|
34
|
-
# @example Upsert in safe mode.
|
|
35
|
-
# person.unsafely.upsert
|
|
36
|
-
#
|
|
37
|
-
# @return [ Proxy ] The safety proxy.
|
|
38
|
-
def unsafely
|
|
39
|
-
tap { Threaded.safety_options = false }
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
class << self
|
|
43
|
-
|
|
44
|
-
# Static class method of easily getting the desired safe mode options
|
|
45
|
-
# from anywhere in the framework.
|
|
46
|
-
#
|
|
47
|
-
# @example Get the options with safe mode included.
|
|
48
|
-
# Safety.merge_safety_options({ :safe => false })
|
|
49
|
-
#
|
|
50
|
-
# @param [ Hash ] options The persistence options.
|
|
51
|
-
#
|
|
52
|
-
# @return [ Hash ] The options hash.
|
|
53
|
-
#
|
|
54
|
-
# @since 2.1.0
|
|
55
|
-
def merge_safety_options(options = {})
|
|
56
|
-
options ||= {}
|
|
57
|
-
return options if options[:safe]
|
|
58
|
-
|
|
59
|
-
unless Threaded.safety_options.nil?
|
|
60
|
-
safety = Threaded.safety_options
|
|
61
|
-
else
|
|
62
|
-
safety = Mongoid.persist_in_safe_mode
|
|
63
|
-
end
|
|
64
|
-
options.merge!({ :safe => safety })
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
module ClassMethods #:nodoc:
|
|
69
|
-
|
|
70
|
-
# Execute the following class-level persistence operation in safe mode.
|
|
71
|
-
#
|
|
72
|
-
# @example Create in safe mode.
|
|
73
|
-
# Person.safely.create(:name => "John")
|
|
74
|
-
#
|
|
75
|
-
# @example Delete all in safe mode with options.
|
|
76
|
-
# Person.safely(:w => 2, :fsync => true).delete_all
|
|
77
|
-
#
|
|
78
|
-
# @param [ Hash ] options The safe mode options.
|
|
79
|
-
#
|
|
80
|
-
# @option options [ Integer ] :w The number of nodes to write to.
|
|
81
|
-
# @option options [ Integer ] :wtimeout Time to wait for return from all
|
|
82
|
-
# nodes.
|
|
83
|
-
# @option options [ true, false ] :fsync Should a fsync occur.
|
|
84
|
-
#
|
|
85
|
-
# @return [ Proxy ] The safety proxy.
|
|
86
|
-
def safely(safety = true)
|
|
87
|
-
tap { Threaded.safety_options = safety }
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# Execute the following class-level persistence operation without safe mode.
|
|
91
|
-
# Allows per-request overriding of safe mode when the persist_in_safe_mode
|
|
92
|
-
# config option is turned on.
|
|
93
|
-
#
|
|
94
|
-
# @example Upsert in safe mode.
|
|
95
|
-
# Person.unsafely.create(:name => "John")
|
|
96
|
-
#
|
|
97
|
-
# @return [ Proxy ] The safety proxy.
|
|
98
|
-
#
|
|
99
|
-
# @since 2.3.0
|
|
100
|
-
def unsafely
|
|
101
|
-
tap { Threaded.safety_options = false }
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
data/lib/mongoid/scope.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
# This module handles behaviour for defining scopes on classes.
|
|
4
|
-
class Scope
|
|
5
|
-
attr_reader :conditions, :extensions
|
|
6
|
-
|
|
7
|
-
# Create the new +Scope+. If a block is passed in, this Scope will store
|
|
8
|
-
# the block for future calls to #extend.
|
|
9
|
-
#
|
|
10
|
-
# @example Create a new scope.
|
|
11
|
-
# Scope.new(:title => "Sir")
|
|
12
|
-
#
|
|
13
|
-
# @param [ Hash ] conditions The scoping limitations.
|
|
14
|
-
def initialize(conditions = {}, &block)
|
|
15
|
-
@conditions = conditions
|
|
16
|
-
@extensions = Module.new(&block) if block_given?
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# Extend a supplied criteria.
|
|
20
|
-
#
|
|
21
|
-
# @example Extend the criteria.
|
|
22
|
-
# scope.extend(criteria)
|
|
23
|
-
#
|
|
24
|
-
# @param [ Criteria } criteria A mongoid criteria to extend.
|
|
25
|
-
#
|
|
26
|
-
# @return [ Criteria ] The new criteria object.
|
|
27
|
-
def extend(criteria)
|
|
28
|
-
extensions ? criteria.extend(extensions) : criteria
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|