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
data/lib/mongoid/identity_map.rb
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
|
|
4
4
|
# Defines behaviour for the identity map in Mongoid.
|
|
5
5
|
class IdentityMap < Hash
|
|
6
6
|
|
|
7
|
-
# Clear the
|
|
7
|
+
# Clear out the loaded documents for the provided selector.
|
|
8
8
|
#
|
|
9
|
-
# @example Clear the
|
|
10
|
-
#
|
|
9
|
+
# @example Clear out the documents.
|
|
10
|
+
# map.clear_many(Post, { person_id: person.id })
|
|
11
11
|
#
|
|
12
|
-
# @param [ Class ] klass The
|
|
13
|
-
# @param [ Hash ] selector The selector
|
|
12
|
+
# @param [ Class ] klass The class of the relation.
|
|
13
|
+
# @param [ Hash ] selector The selector.
|
|
14
14
|
#
|
|
15
|
-
# @return [ Array
|
|
15
|
+
# @return [ Array ] An empty array.
|
|
16
16
|
#
|
|
17
17
|
# @since 2.4.10
|
|
18
18
|
def clear_many(klass, selector)
|
|
19
|
-
|
|
19
|
+
documents = documents_for(klass)[selector]
|
|
20
|
+
documents.clear if documents
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
# Get a document from the identity map by its id.
|
|
@@ -31,8 +32,16 @@ module Mongoid #:nodoc:
|
|
|
31
32
|
#
|
|
32
33
|
# @since 2.1.0
|
|
33
34
|
def get(klass, identifier)
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
if Mongoid.using_identity_map? && klass
|
|
36
|
+
if identifier.is_a?(::Array)
|
|
37
|
+
documents = documents_for(klass)
|
|
38
|
+
identifier.map do |id|
|
|
39
|
+
documents[id] || (return nil)
|
|
40
|
+
end
|
|
41
|
+
else
|
|
42
|
+
documents_for(klass)[identifier]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
36
45
|
end
|
|
37
46
|
|
|
38
47
|
# Remove the document from the identity map.
|
|
@@ -46,8 +55,9 @@ module Mongoid #:nodoc:
|
|
|
46
55
|
#
|
|
47
56
|
# @since 2.1.0
|
|
48
57
|
def remove(document)
|
|
49
|
-
|
|
50
|
-
|
|
58
|
+
if Mongoid.using_identity_map? && document && document.id
|
|
59
|
+
documents_for(document.class).delete(document.id)
|
|
60
|
+
end
|
|
51
61
|
end
|
|
52
62
|
|
|
53
63
|
# Puts a document in the identity map, accessed by it's id.
|
|
@@ -61,8 +71,9 @@ module Mongoid #:nodoc:
|
|
|
61
71
|
#
|
|
62
72
|
# @since 2.1.0
|
|
63
73
|
def set(document)
|
|
64
|
-
|
|
65
|
-
|
|
74
|
+
if Mongoid.using_identity_map? && document && document.id
|
|
75
|
+
documents_for(document.class)[document.id] = document
|
|
76
|
+
end
|
|
66
77
|
end
|
|
67
78
|
|
|
68
79
|
# Set a document in the identity map for the provided selector.
|
|
@@ -108,8 +119,9 @@ module Mongoid #:nodoc:
|
|
|
108
119
|
#
|
|
109
120
|
# @since 2.1.0
|
|
110
121
|
def documents_for(klass)
|
|
111
|
-
|
|
112
|
-
|
|
122
|
+
if klass
|
|
123
|
+
self[klass.collection_name] ||= {}
|
|
124
|
+
end
|
|
113
125
|
end
|
|
114
126
|
|
|
115
127
|
class << self
|
|
@@ -125,11 +137,11 @@ module Mongoid #:nodoc:
|
|
|
125
137
|
# IdentityMap.set(document)
|
|
126
138
|
#
|
|
127
139
|
# @since 2.1.0
|
|
128
|
-
delegate
|
|
140
|
+
delegate(*(
|
|
129
141
|
Hash.public_instance_methods(false) +
|
|
130
142
|
IdentityMap.public_instance_methods(false) <<
|
|
131
|
-
{ :
|
|
132
|
-
)
|
|
143
|
+
{ to: :"Mongoid::Threaded.identity_map" }
|
|
144
|
+
))
|
|
133
145
|
end
|
|
134
146
|
end
|
|
135
147
|
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Indexes
|
|
4
|
+
module Validators
|
|
5
|
+
|
|
6
|
+
# Validates the options passed to the index macro.
|
|
7
|
+
module Options
|
|
8
|
+
extend self
|
|
9
|
+
|
|
10
|
+
VALID_OPTIONS = [ :background, :drop_dups, :name, :sparse, :unique ]
|
|
11
|
+
VALID_TYPES = [ 1, -1, "2d" ]
|
|
12
|
+
|
|
13
|
+
# Validate the index specification.
|
|
14
|
+
#
|
|
15
|
+
# @example Validate the index spec.
|
|
16
|
+
# Options.validate(Band, name: 1)
|
|
17
|
+
#
|
|
18
|
+
# @param [ Class ] klass The model class.
|
|
19
|
+
# @param [ Hash ] spec The index specification.
|
|
20
|
+
# @param [ Hash ] options The index options.
|
|
21
|
+
#
|
|
22
|
+
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
23
|
+
#
|
|
24
|
+
# @since 3.0.0
|
|
25
|
+
def validate(klass, spec, options)
|
|
26
|
+
validate_spec(klass, spec, options)
|
|
27
|
+
validate_options(klass, spec, options)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
# Validates the options of the index spec.
|
|
33
|
+
#
|
|
34
|
+
# @api private
|
|
35
|
+
#
|
|
36
|
+
# @example Validate the options.
|
|
37
|
+
# Options.validate_options(Band, name: 1)
|
|
38
|
+
#
|
|
39
|
+
# @param [ Class ] klass The model class.
|
|
40
|
+
# @param [ Hash ] spec The index specification.
|
|
41
|
+
# @param [ Hash ] options The index options.
|
|
42
|
+
#
|
|
43
|
+
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
44
|
+
#
|
|
45
|
+
# @since 3.0.0
|
|
46
|
+
def validate_options(klass, spec, options)
|
|
47
|
+
options.each_pair do |name, value|
|
|
48
|
+
unless VALID_OPTIONS.include?(name)
|
|
49
|
+
raise Errors::InvalidIndex.new(klass, spec, options)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Validates the index spec.
|
|
55
|
+
#
|
|
56
|
+
# @api private
|
|
57
|
+
#
|
|
58
|
+
# @example Validate the spec.
|
|
59
|
+
# Options.validate_spec(Band, name: 1)
|
|
60
|
+
#
|
|
61
|
+
# @param [ Class ] klass The model class.
|
|
62
|
+
# @param [ Hash ] spec The index specification.
|
|
63
|
+
# @param [ Hash ] options The index options.
|
|
64
|
+
#
|
|
65
|
+
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
66
|
+
#
|
|
67
|
+
# @since 3.0.0
|
|
68
|
+
def validate_spec(klass, spec, options)
|
|
69
|
+
raise Errors::InvalidIndex.new(klass, spec, options) if !spec.is_a?(::Hash)
|
|
70
|
+
spec.each_pair do |name, value|
|
|
71
|
+
next if name == :options
|
|
72
|
+
unless VALID_TYPES.include?(value)
|
|
73
|
+
raise Errors::InvalidIndex.new(klass, spec, options)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
data/lib/mongoid/indexes.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
require "mongoid/indexes/validators/options"
|
|
3
|
+
|
|
4
|
+
module Mongoid
|
|
5
|
+
module Indexes
|
|
4
6
|
extend ActiveSupport::Concern
|
|
5
7
|
|
|
6
8
|
included do
|
|
@@ -8,18 +10,37 @@ module Mongoid #:nodoc
|
|
|
8
10
|
self.index_options = {}
|
|
9
11
|
end
|
|
10
12
|
|
|
11
|
-
module ClassMethods
|
|
13
|
+
module ClassMethods
|
|
12
14
|
|
|
13
15
|
# Send the actual index creation comments to the MongoDB driver
|
|
14
16
|
#
|
|
15
17
|
# @example Create the indexes for the class.
|
|
16
18
|
# Person.create_indexes
|
|
19
|
+
#
|
|
20
|
+
# @return [ true ] If the operation succeeded.
|
|
21
|
+
#
|
|
22
|
+
# @since 1.0.0
|
|
17
23
|
def create_indexes
|
|
18
24
|
return unless index_options
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
index_options.each_pair do |spec, options|
|
|
26
|
+
collection.indexes.create(spec, options)
|
|
27
|
+
end and true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Send the actual index removal comments to the MongoDB driver,
|
|
31
|
+
# but lets _id untouched.
|
|
32
|
+
#
|
|
33
|
+
# @example Remove the indexes for the class.
|
|
34
|
+
# Person.remove_indexes
|
|
35
|
+
#
|
|
36
|
+
# @return [ true ] If the operation succeeded.
|
|
37
|
+
#
|
|
38
|
+
# @since 3.0.0
|
|
39
|
+
def remove_indexes
|
|
40
|
+
collection.indexes.each do |spec|
|
|
41
|
+
next if spec["name"] == "_id_"
|
|
42
|
+
collection.indexes.drop(spec["key"])
|
|
43
|
+
end and true
|
|
23
44
|
end
|
|
24
45
|
|
|
25
46
|
# Add the default indexes to the root document if they do not already
|
|
@@ -27,11 +48,15 @@ module Mongoid #:nodoc
|
|
|
27
48
|
#
|
|
28
49
|
# @example Add Mongoid internal indexes.
|
|
29
50
|
# Person.add_indexes
|
|
51
|
+
#
|
|
52
|
+
# @return [ true ] If the operation succeeded.
|
|
53
|
+
#
|
|
54
|
+
# @since 1.0.0
|
|
30
55
|
def add_indexes
|
|
31
|
-
if hereditary? && !index_options[:
|
|
32
|
-
|
|
56
|
+
if hereditary? && !index_options[{ _type: 1 }]
|
|
57
|
+
index({ _type: 1 }, { unique: false, background: true })
|
|
33
58
|
end
|
|
34
|
-
|
|
59
|
+
true
|
|
35
60
|
end
|
|
36
61
|
|
|
37
62
|
# Adds an index on the field specified. Options can be :unique => true or
|
|
@@ -40,14 +65,40 @@ module Mongoid #:nodoc
|
|
|
40
65
|
# @example Create a basic index.
|
|
41
66
|
# class Person
|
|
42
67
|
# include Mongoid::Document
|
|
43
|
-
# field :name, :
|
|
44
|
-
|
|
68
|
+
# field :name, type: String
|
|
69
|
+
|
|
70
|
+
# index({ name: 1 }, { background: true })
|
|
71
|
+
# end
|
|
45
72
|
#
|
|
46
73
|
# @param [ Symbol ] name The name of the field.
|
|
47
74
|
# @param [ Hash ] options The index options.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
75
|
+
#
|
|
76
|
+
# @return [ Hash ] The index options.
|
|
77
|
+
#
|
|
78
|
+
# @since 1.0.0
|
|
79
|
+
def index(spec, options = nil)
|
|
80
|
+
Validators::Options.validate(self, spec, options || {})
|
|
81
|
+
index_options[spec] = normalize_index_options(options)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
private
|
|
85
|
+
|
|
86
|
+
# Normalize the index options, if any are provided.
|
|
87
|
+
#
|
|
88
|
+
# @api private
|
|
89
|
+
#
|
|
90
|
+
# @example Normalize the index options.
|
|
91
|
+
# Model.normalize_index_options(drop_dups: true)
|
|
92
|
+
#
|
|
93
|
+
# @param [ Hash ] options The index options.
|
|
94
|
+
#
|
|
95
|
+
# @return [ Hash ] The normalized options.
|
|
96
|
+
#
|
|
97
|
+
# @since 3.0.0
|
|
98
|
+
def normalize_index_options(options)
|
|
99
|
+
opts = options || {}
|
|
100
|
+
opts[:dropDups] = opts.delete(:drop_dups) if opts.has_key?(:drop_dups)
|
|
101
|
+
opts
|
|
51
102
|
end
|
|
52
103
|
end
|
|
53
104
|
end
|
data/lib/mongoid/inspection.rb
CHANGED
data/lib/mongoid/javascript.rb
CHANGED
data/lib/mongoid/json.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
# This module is for hooking in to +ActiveModel+s serialization to let
|
|
4
4
|
# configuring the ability to include the root in JSON happen from the Mongoid
|
|
5
5
|
# config.
|
|
@@ -10,7 +10,7 @@ module Mongoid #:nodoc:
|
|
|
10
10
|
# similar to +ActiveRecord+.
|
|
11
11
|
included do
|
|
12
12
|
undef_method :include_root_in_json
|
|
13
|
-
delegate :include_root_in_json, :
|
|
13
|
+
delegate :include_root_in_json, to: ::Mongoid
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
|
|
4
|
+
# Contains logging behaviour.
|
|
5
|
+
module Loggable
|
|
6
|
+
|
|
7
|
+
# Get the logger.
|
|
8
|
+
#
|
|
9
|
+
# @note Will try to grab Rails' logger first before creating a new logger
|
|
10
|
+
# with stdout.
|
|
11
|
+
#
|
|
12
|
+
# @example Get the logger.
|
|
13
|
+
# Loggable.logger
|
|
14
|
+
#
|
|
15
|
+
# @return [ Logger ] The logger.
|
|
16
|
+
#
|
|
17
|
+
# @since 3.0.0
|
|
18
|
+
def logger
|
|
19
|
+
return @logger if defined?(@logger)
|
|
20
|
+
@logger = rails_logger || default_logger
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Set the logger.
|
|
24
|
+
#
|
|
25
|
+
# @example Set the logger.
|
|
26
|
+
# Loggable.logger = Logger.new($stdout)
|
|
27
|
+
#
|
|
28
|
+
# @param [ Logger ] The logger to set.
|
|
29
|
+
#
|
|
30
|
+
# @return [ Logger ] The new logger.
|
|
31
|
+
#
|
|
32
|
+
# @since 3.0.0
|
|
33
|
+
def logger=(logger)
|
|
34
|
+
@logger = logger
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
# Gets the default Mongoid logger - stdout.
|
|
40
|
+
#
|
|
41
|
+
# @api private
|
|
42
|
+
#
|
|
43
|
+
# @example Get the default logger.
|
|
44
|
+
# Loggable.default_logger
|
|
45
|
+
#
|
|
46
|
+
# @return [ Logger ] The default logger.
|
|
47
|
+
#
|
|
48
|
+
# @since 3.0.0
|
|
49
|
+
def default_logger
|
|
50
|
+
logger = Logger.new($stdout)
|
|
51
|
+
logger.level = Logger::INFO
|
|
52
|
+
logger
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Get the Rails logger if it's defined.
|
|
56
|
+
#
|
|
57
|
+
# @api private
|
|
58
|
+
#
|
|
59
|
+
# @example Get Rails' logger.
|
|
60
|
+
# Loggable.rails_logger
|
|
61
|
+
#
|
|
62
|
+
# @return [ Logger ] The Rails logger.
|
|
63
|
+
#
|
|
64
|
+
# @since 3.0.0
|
|
65
|
+
def rails_logger
|
|
66
|
+
defined?(::Rails) && ::Rails.respond_to?(:logger) && ::Rails.logger
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
data/lib/mongoid/matchers/all.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Matchers
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matchers
|
|
4
4
|
|
|
5
5
|
# Checks that all values match.
|
|
6
6
|
class All < Default
|
|
@@ -14,13 +14,12 @@ module Mongoid #:nodoc:
|
|
|
14
14
|
#
|
|
15
15
|
# @return [ true, false ] If the values match.
|
|
16
16
|
def matches?(value)
|
|
17
|
+
first = first(value)
|
|
18
|
+
return false if first.is_a?(Array) && first.empty?
|
|
19
|
+
|
|
17
20
|
attribute_array = Array.wrap(@attribute)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
attribute_array.any? { |_attribute| _attribute =~ e }
|
|
21
|
-
else
|
|
22
|
-
attribute_array.include?(e)
|
|
23
|
-
end
|
|
21
|
+
first.all? do |e|
|
|
22
|
+
attribute_array.any? { |_attribute| e === _attribute }
|
|
24
23
|
end
|
|
25
24
|
end
|
|
26
25
|
end
|
data/lib/mongoid/matchers/and.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Matchers
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matchers
|
|
4
4
|
|
|
5
5
|
# Defines behavior for handling $or expressions in embedded documents.
|
|
6
6
|
class And < Default
|
|
@@ -8,7 +8,7 @@ module Mongoid #:nodoc:
|
|
|
8
8
|
# Does the supplied query match the attribute?
|
|
9
9
|
#
|
|
10
10
|
# @example Does this match?
|
|
11
|
-
# matcher.matches?(
|
|
11
|
+
# matcher.matches?([ { field => value } ])
|
|
12
12
|
#
|
|
13
13
|
# @param [ Array ] conditions The or expression.
|
|
14
14
|
#
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Matchers
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matchers
|
|
4
4
|
|
|
5
5
|
# Contains all the default behavior for checking for matching documents
|
|
6
6
|
# given MongoDB expressions.
|
|
@@ -32,7 +32,7 @@ module Mongoid #:nodoc:
|
|
|
32
32
|
#
|
|
33
33
|
# @since 1.0.0
|
|
34
34
|
def matches?(value)
|
|
35
|
-
attribute.is_a?(Array) && !value.is_a?(Array) ? attribute.
|
|
35
|
+
attribute.is_a?(Array) && !value.is_a?(Array) ? attribute.any? { |_attribute| value === _attribute } : value === attribute
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
protected
|
|
@@ -63,7 +63,9 @@ module Mongoid #:nodoc:
|
|
|
63
63
|
#
|
|
64
64
|
# @since 1.0.0
|
|
65
65
|
def determine(value, operator)
|
|
66
|
-
attribute
|
|
66
|
+
attribute.__array__.any? {|attr|
|
|
67
|
+
attr ? attr.send(operator, first(value)) : false
|
|
68
|
+
}
|
|
67
69
|
end
|
|
68
70
|
end
|
|
69
71
|
end
|
data/lib/mongoid/matchers/gt.rb
CHANGED
data/lib/mongoid/matchers/gte.rb
CHANGED
data/lib/mongoid/matchers/in.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Matchers
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matchers
|
|
4
4
|
|
|
5
5
|
# Performs matching for any value in an array.
|
|
6
6
|
class In < Default
|
|
@@ -16,11 +16,7 @@ module Mongoid #:nodoc:
|
|
|
16
16
|
def matches?(value)
|
|
17
17
|
attribute_array = Array.wrap(@attribute)
|
|
18
18
|
value.values.first.any? do |e|
|
|
19
|
-
|
|
20
|
-
attribute_array.any? { |_attribute| _attribute =~ e }
|
|
21
|
-
else
|
|
22
|
-
attribute_array.include?(e)
|
|
23
|
-
end
|
|
19
|
+
attribute_array.any? { |_attribute| e === _attribute }
|
|
24
20
|
end
|
|
25
21
|
end
|
|
26
22
|
end
|
data/lib/mongoid/matchers/lt.rb
CHANGED
data/lib/mongoid/matchers/lte.rb
CHANGED
data/lib/mongoid/matchers/ne.rb
CHANGED
data/lib/mongoid/matchers/nin.rb
CHANGED
data/lib/mongoid/matchers/or.rb
CHANGED
|
@@ -13,8 +13,8 @@ require "mongoid/matchers/nin"
|
|
|
13
13
|
require "mongoid/matchers/or"
|
|
14
14
|
require "mongoid/matchers/size"
|
|
15
15
|
|
|
16
|
-
module Mongoid
|
|
17
|
-
module Matchers
|
|
16
|
+
module Mongoid
|
|
17
|
+
module Matchers
|
|
18
18
|
|
|
19
19
|
# This module is responsible for returning the correct matcher given a
|
|
20
20
|
# MongoDB query expression.
|
|
@@ -81,7 +81,7 @@ module Mongoid #:nodoc:
|
|
|
81
81
|
# @since 2.2.1
|
|
82
82
|
def extract_attribute(document, key)
|
|
83
83
|
if (key_string = key.to_s) =~ /.+\..+/
|
|
84
|
-
key_string.split('.').inject(document.
|
|
84
|
+
key_string.split('.').inject(document.as_document) do |_attribs, _key|
|
|
85
85
|
if _attribs.is_a?(::Array)
|
|
86
86
|
_attribs.map { |doc| doc.try(:[], _key) }
|
|
87
87
|
else
|