mongoid 2.4.10 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +949 -10
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +3 -17
- data/lib/config/locales/en.yml +455 -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 +70 -16
- 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 +106 -43
- data/lib/mongoid/components.rb +12 -23
- data/lib/mongoid/config/environment.rb +7 -4
- 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 +104 -225
- data/lib/mongoid/contextual/aggregable/memory.rb +109 -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 +68 -0
- data/lib/mongoid/contextual/map_reduce.rb +273 -0
- data/lib/mongoid/contextual/memory.rb +406 -0
- data/lib/mongoid/contextual/mongo.rb +662 -0
- data/lib/mongoid/contextual.rb +50 -0
- data/lib/mongoid/copyable.rb +7 -25
- data/lib/mongoid/criteria.rb +515 -245
- 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 +71 -52
- 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_metadata.rb +21 -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 +23 -1
- data/lib/mongoid/evolvable.rb +19 -0
- data/lib/mongoid/extensions/array.rb +164 -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 +73 -0
- data/lib/mongoid/extensions/false_class.rb +38 -0
- data/lib/mongoid/extensions/float.rb +56 -0
- data/lib/mongoid/extensions/hash.rb +123 -0
- data/lib/mongoid/extensions/integer.rb +66 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +21 -0
- data/lib/mongoid/extensions/object.rb +238 -0
- data/lib/mongoid/extensions/object_id.rb +54 -0
- data/lib/mongoid/extensions/range.rb +79 -0
- data/lib/mongoid/extensions/regexp.rb +27 -0
- data/lib/mongoid/extensions/set.rb +55 -0
- data/lib/mongoid/extensions/string.rb +181 -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 +38 -0
- data/lib/mongoid/extensions.rb +28 -76
- data/lib/mongoid/factory.rb +1 -1
- data/lib/mongoid/fields/foreign_key.rb +150 -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 +142 -208
- data/lib/mongoid/finders.rb +45 -50
- data/lib/mongoid/hierarchy.rb +44 -15
- data/lib/mongoid/identity_map.rb +49 -21
- 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/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 +9 -11
- data/lib/mongoid/nested_attributes.rb +17 -9
- data/lib/mongoid/observer.rb +1 -2
- data/lib/mongoid/paranoia.rb +10 -44
- 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/upsert.rb +28 -0
- data/lib/mongoid/persistence/operations.rb +22 -19
- data/lib/mongoid/persistence/upsertion.rb +30 -0
- data/lib/mongoid/persistence.rb +94 -39
- data/lib/mongoid/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations/accessors.rb +120 -20
- 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 +4 -4
- 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 +5 -5
- data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/many.rb +6 -6
- 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 +10 -7
- data/lib/mongoid/relations/constraint.rb +4 -3
- data/lib/mongoid/relations/conversions.rb +6 -7
- data/lib/mongoid/relations/cyclic.rb +7 -7
- data/lib/mongoid/relations/embedded/batchable.rb +347 -0
- data/lib/mongoid/relations/embedded/in.rb +23 -12
- data/lib/mongoid/relations/embedded/many.rb +100 -161
- 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 +277 -47
- data/lib/mongoid/relations/nested_builder.rb +4 -6
- 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 +62 -31
- data/lib/mongoid/relations/referenced/in.rb +40 -15
- data/lib/mongoid/relations/referenced/many.rb +162 -130
- data/lib/mongoid/relations/referenced/many_to_many.rb +104 -48
- 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 +22 -6
- data/lib/mongoid/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +312 -0
- data/lib/mongoid/serialization.rb +94 -42
- data/lib/mongoid/sessions/factory.rb +108 -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 +383 -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 +219 -59
- data/lib/mongoid/timestamps/created.rb +8 -4
- data/lib/mongoid/timestamps/timeless.rb +6 -4
- data/lib/mongoid/timestamps/updated.rb +4 -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 +11 -12
- 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 +37 -37
- 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 +65 -17
- 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 +73 -26
- metadata +103 -148
- 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/retry.rb +0 -59
- 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/javascript/functions.yml +0 -63
- data/lib/mongoid/javascript.rb +0 -20
- 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/hierarchy.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Hierarchy
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Hierarchy
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
6
6
|
included do
|
|
@@ -19,18 +19,29 @@ module Mongoid #:nodoc
|
|
|
19
19
|
#
|
|
20
20
|
# @return [ Array<Document> ] All child documents in the hierarchy.
|
|
21
21
|
def _children
|
|
22
|
-
@_children ||=
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
@_children ||= collect_children
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Collect all the children of this document.
|
|
26
|
+
#
|
|
27
|
+
# @example Collect all the children.
|
|
28
|
+
# document.collect_children
|
|
29
|
+
#
|
|
30
|
+
# @return [ Array<Document> ] The children.
|
|
31
|
+
#
|
|
32
|
+
# @since 2.4.0
|
|
33
|
+
def collect_children
|
|
34
|
+
children = []
|
|
35
|
+
embedded_relations.each_pair do |name, metadata|
|
|
36
|
+
without_autobuild do
|
|
37
|
+
child = send(name)
|
|
38
|
+
Array.wrap(child).each do |doc|
|
|
39
|
+
children.push(doc)
|
|
40
|
+
children.concat(doc._children) unless metadata.versioned?
|
|
41
|
+
end if child
|
|
33
42
|
end
|
|
43
|
+
end
|
|
44
|
+
children
|
|
34
45
|
end
|
|
35
46
|
|
|
36
47
|
# Determines if the document is a subclass of another document.
|
|
@@ -68,7 +79,7 @@ module Mongoid #:nodoc
|
|
|
68
79
|
#
|
|
69
80
|
# @since 2.0.0.beta.1
|
|
70
81
|
def remove_child(child)
|
|
71
|
-
name = child.
|
|
82
|
+
name = child.metadata_name
|
|
72
83
|
if child.embedded_one?
|
|
73
84
|
remove_ivar(name)
|
|
74
85
|
else
|
|
@@ -106,7 +117,7 @@ module Mongoid #:nodoc
|
|
|
106
117
|
object || self
|
|
107
118
|
end
|
|
108
119
|
|
|
109
|
-
module ClassMethods
|
|
120
|
+
module ClassMethods
|
|
110
121
|
|
|
111
122
|
# Determines if the document is a subclass of another document.
|
|
112
123
|
#
|
|
@@ -117,6 +128,24 @@ module Mongoid #:nodoc
|
|
|
117
128
|
def hereditary?
|
|
118
129
|
Mongoid::Document > superclass
|
|
119
130
|
end
|
|
131
|
+
|
|
132
|
+
# When inheriting, we want to copy the fields from the parent class and
|
|
133
|
+
# set the on the child to start, mimicking the behaviour of the old
|
|
134
|
+
# class_inheritable_accessor that was deprecated in Rails edge.
|
|
135
|
+
#
|
|
136
|
+
# @example Inherit from this class.
|
|
137
|
+
# Person.inherited(Doctor)
|
|
138
|
+
#
|
|
139
|
+
# @param [ Class ] subclass The inheriting class.
|
|
140
|
+
#
|
|
141
|
+
# @since 2.0.0.rc.6
|
|
142
|
+
def inherited(subclass)
|
|
143
|
+
super
|
|
144
|
+
subclass.fields = fields.dup
|
|
145
|
+
subclass.pre_processed_defaults = pre_processed_defaults.dup
|
|
146
|
+
subclass.post_processed_defaults = post_processed_defaults.dup
|
|
147
|
+
subclass.scopes = scopes.dup
|
|
148
|
+
end
|
|
120
149
|
end
|
|
121
150
|
end
|
|
122
151
|
end
|
data/lib/mongoid/identity_map.rb
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
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_for(klass)[selector] = {}
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
# Get a document from the identity map by its id.
|
|
@@ -31,8 +31,33 @@ module Mongoid #:nodoc:
|
|
|
31
31
|
#
|
|
32
32
|
# @since 2.1.0
|
|
33
33
|
def get(klass, identifier)
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
if Mongoid.using_identity_map? && klass
|
|
35
|
+
if identifier.is_a?(::Array)
|
|
36
|
+
documents = documents_for(klass)
|
|
37
|
+
identifier.map do |id|
|
|
38
|
+
documents[id] || (return nil)
|
|
39
|
+
end
|
|
40
|
+
else
|
|
41
|
+
documents_for(klass)[identifier]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Get many documents from the map via the selector
|
|
47
|
+
#
|
|
48
|
+
# @example Get the document from the map.
|
|
49
|
+
# map.get(Person, { post_id: post })
|
|
50
|
+
#
|
|
51
|
+
# @param [ Class ] klass The class of the document.
|
|
52
|
+
# @param [ Hash ] idenfier The selector.
|
|
53
|
+
#
|
|
54
|
+
# @return [ Array<Document> ] The matching documents.
|
|
55
|
+
#
|
|
56
|
+
# @since 3.0.0
|
|
57
|
+
def get_many(klass, identifier)
|
|
58
|
+
if Mongoid.using_identity_map? && klass
|
|
59
|
+
documents_for(klass)[identifier].try(:values)
|
|
60
|
+
end
|
|
36
61
|
end
|
|
37
62
|
|
|
38
63
|
# Remove the document from the identity map.
|
|
@@ -46,8 +71,9 @@ module Mongoid #:nodoc:
|
|
|
46
71
|
#
|
|
47
72
|
# @since 2.1.0
|
|
48
73
|
def remove(document)
|
|
49
|
-
|
|
50
|
-
|
|
74
|
+
if Mongoid.using_identity_map? && document && document.id
|
|
75
|
+
documents_for(document.class).delete(document.id)
|
|
76
|
+
end
|
|
51
77
|
end
|
|
52
78
|
|
|
53
79
|
# Puts a document in the identity map, accessed by it's id.
|
|
@@ -61,8 +87,9 @@ module Mongoid #:nodoc:
|
|
|
61
87
|
#
|
|
62
88
|
# @since 2.1.0
|
|
63
89
|
def set(document)
|
|
64
|
-
|
|
65
|
-
|
|
90
|
+
if Mongoid.using_identity_map? && document && document.id
|
|
91
|
+
documents_for(document.class)[document.id] = document
|
|
92
|
+
end
|
|
66
93
|
end
|
|
67
94
|
|
|
68
95
|
# Set a document in the identity map for the provided selector.
|
|
@@ -77,7 +104,7 @@ module Mongoid #:nodoc:
|
|
|
77
104
|
#
|
|
78
105
|
# @since 2.2.0
|
|
79
106
|
def set_many(document, selector)
|
|
80
|
-
(documents_for(document.class)[selector] ||= []
|
|
107
|
+
(documents_for(document.class)[selector] ||= {})[document.id] = document
|
|
81
108
|
end
|
|
82
109
|
|
|
83
110
|
# Set a document in the identity map for the provided selector.
|
|
@@ -92,7 +119,7 @@ module Mongoid #:nodoc:
|
|
|
92
119
|
#
|
|
93
120
|
# @since 2.2.0
|
|
94
121
|
def set_one(document, selector)
|
|
95
|
-
|
|
122
|
+
documents_for(document.class)[selector] = document
|
|
96
123
|
end
|
|
97
124
|
|
|
98
125
|
private
|
|
@@ -108,8 +135,9 @@ module Mongoid #:nodoc:
|
|
|
108
135
|
#
|
|
109
136
|
# @since 2.1.0
|
|
110
137
|
def documents_for(klass)
|
|
111
|
-
|
|
112
|
-
|
|
138
|
+
if klass
|
|
139
|
+
self[klass.collection_name] ||= {}
|
|
140
|
+
end
|
|
113
141
|
end
|
|
114
142
|
|
|
115
143
|
class << self
|
|
@@ -125,11 +153,11 @@ module Mongoid #:nodoc:
|
|
|
125
153
|
# IdentityMap.set(document)
|
|
126
154
|
#
|
|
127
155
|
# @since 2.1.0
|
|
128
|
-
delegate
|
|
156
|
+
delegate(*(
|
|
129
157
|
Hash.public_instance_methods(false) +
|
|
130
158
|
IdentityMap.public_instance_methods(false) <<
|
|
131
|
-
{ :
|
|
132
|
-
)
|
|
159
|
+
{ to: :"Mongoid::Threaded.identity_map" }
|
|
160
|
+
))
|
|
133
161
|
end
|
|
134
162
|
end
|
|
135
163
|
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, :max, :min ]
|
|
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/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