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
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
aggregate:
|
|
2
|
-
"function(obj, prev) {
|
|
3
|
-
prev.count++;
|
|
4
|
-
}"
|
|
5
|
-
|
|
6
|
-
group:
|
|
7
|
-
"function(obj, prev) {
|
|
8
|
-
prev.group.push(obj);
|
|
9
|
-
}"
|
|
10
|
-
|
|
11
|
-
max:
|
|
12
|
-
"function(obj, prev) {
|
|
13
|
-
if (obj.[field] && prev.max == 'start') {
|
|
14
|
-
prev.max = obj.[field];
|
|
15
|
-
}
|
|
16
|
-
if (obj.[field] && prev.max < obj.[field]) {
|
|
17
|
-
prev.max = obj.[field];
|
|
18
|
-
}
|
|
19
|
-
}"
|
|
20
|
-
|
|
21
|
-
max_finalize:
|
|
22
|
-
"function(obj) {
|
|
23
|
-
if (obj.max == 'start' || isNaN(obj.max)) {
|
|
24
|
-
obj.max = 0;
|
|
25
|
-
}
|
|
26
|
-
return obj;
|
|
27
|
-
}"
|
|
28
|
-
|
|
29
|
-
min:
|
|
30
|
-
"function(obj, prev) {
|
|
31
|
-
if (obj.[field] && prev.min == 'start') {
|
|
32
|
-
prev.min = obj.[field];
|
|
33
|
-
}
|
|
34
|
-
if (obj.[field] && prev.min > obj.[field]) {
|
|
35
|
-
prev.min = obj.[field];
|
|
36
|
-
}
|
|
37
|
-
}"
|
|
38
|
-
|
|
39
|
-
min_finalize:
|
|
40
|
-
"function(obj) {
|
|
41
|
-
if (obj.min == 'start' || isNaN(obj.min)) {
|
|
42
|
-
obj.min = 0;
|
|
43
|
-
}
|
|
44
|
-
return obj;
|
|
45
|
-
}"
|
|
46
|
-
|
|
47
|
-
sum:
|
|
48
|
-
"function(obj, prev) {
|
|
49
|
-
if (prev.sum == 'start') {
|
|
50
|
-
prev.sum = 0;
|
|
51
|
-
}
|
|
52
|
-
if (obj.[field]) {
|
|
53
|
-
prev.sum += obj.[field];
|
|
54
|
-
}
|
|
55
|
-
}"
|
|
56
|
-
|
|
57
|
-
sum_finalize:
|
|
58
|
-
"function(obj) {
|
|
59
|
-
if (obj.sum == 'start' || isNaN(obj.sum)) {
|
|
60
|
-
obj.sum = 0;
|
|
61
|
-
}
|
|
62
|
-
return obj;
|
|
63
|
-
}"
|
data/lib/mongoid/javascript.rb
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
class Javascript
|
|
4
|
-
# Constant for the file that defines all the js functions.
|
|
5
|
-
FUNCTIONS = File.join(File.dirname(__FILE__), "javascript", "functions.yml")
|
|
6
|
-
|
|
7
|
-
# Load the javascript functions and define a class method for each one,
|
|
8
|
-
# that memoizes the value.
|
|
9
|
-
#
|
|
10
|
-
# @example Get the function.
|
|
11
|
-
# Mongoid::Javascript.aggregate
|
|
12
|
-
YAML.load(File.read(FUNCTIONS)).each_pair do |key, function|
|
|
13
|
-
(class << self; self; end).class_eval <<-EOT
|
|
14
|
-
def #{key}
|
|
15
|
-
@#{key} ||= "#{function}"
|
|
16
|
-
end
|
|
17
|
-
EOT
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
data/lib/mongoid/keys.rb
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
|
|
4
|
-
# This module defines the behaviour for overriding the default ids on
|
|
5
|
-
# documents.
|
|
6
|
-
module Keys
|
|
7
|
-
extend ActiveSupport::Concern
|
|
8
|
-
|
|
9
|
-
attr_reader :identifier
|
|
10
|
-
|
|
11
|
-
included do
|
|
12
|
-
cattr_accessor :primary_key, :using_object_ids, :key_formatter
|
|
13
|
-
self.using_object_ids = true
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# Get the document's primary key.
|
|
17
|
-
#
|
|
18
|
-
# @note Refactored from using delegate for class load performance.
|
|
19
|
-
#
|
|
20
|
-
# @example Get the primary key.
|
|
21
|
-
# model.primary_key
|
|
22
|
-
#
|
|
23
|
-
# @return [ Array ] The primary key
|
|
24
|
-
def primary_key
|
|
25
|
-
self.class.primary_key
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Is the document using object ids?
|
|
29
|
-
#
|
|
30
|
-
# @note Refactored from using delegate for class load performance.
|
|
31
|
-
#
|
|
32
|
-
# @example Is the document using object ids?
|
|
33
|
-
# model.using_object_ids?
|
|
34
|
-
#
|
|
35
|
-
# @return [ true, false ] Using object ids.
|
|
36
|
-
def using_object_ids?
|
|
37
|
-
self.class.using_object_ids?
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
private
|
|
41
|
-
|
|
42
|
-
# Determines if any field that the document id is composed of has changed.
|
|
43
|
-
#
|
|
44
|
-
# @example Has any key field changed?
|
|
45
|
-
# document.key_field_changed?
|
|
46
|
-
#
|
|
47
|
-
# @return [ true, false ] Has a key field changed?
|
|
48
|
-
#
|
|
49
|
-
# @since 2.0.0
|
|
50
|
-
def key_field_changed?
|
|
51
|
-
primary_key.any? { |field| changed.include?(field.to_s) }
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Sits around a save when composite keys are in play to handle the id magic
|
|
55
|
-
# if a key field has changed.
|
|
56
|
-
#
|
|
57
|
-
# @example Set the composite key.
|
|
58
|
-
# document.set_composite_key
|
|
59
|
-
#
|
|
60
|
-
# @param [ Proc ] block The block this surrounds.
|
|
61
|
-
#
|
|
62
|
-
# @since 2.0.0
|
|
63
|
-
def set_composite_key(&block)
|
|
64
|
-
if persisted? && key_field_changed?
|
|
65
|
-
swap_composite_keys(&block)
|
|
66
|
-
else
|
|
67
|
-
identify and block.call
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
# Swap out the composite key only after the document has been saved.
|
|
72
|
-
#
|
|
73
|
-
# @example Swap out the keys.
|
|
74
|
-
# document.swap_composite_keys
|
|
75
|
-
#
|
|
76
|
-
# @param [ Proc ] block The save block getting called.
|
|
77
|
-
#
|
|
78
|
-
# @since 2.0.0
|
|
79
|
-
def swap_composite_keys(&block)
|
|
80
|
-
@identifier, new_id = id.dup, identify
|
|
81
|
-
block.call
|
|
82
|
-
@identifier = nil
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
module ClassMethods #:nodoc:
|
|
86
|
-
|
|
87
|
-
# Used for telling Mongoid on a per model basis whether to override the
|
|
88
|
-
# default +BSON::ObjectId+ and use a different type. This will be
|
|
89
|
-
# expanded in the future for requiring a PkFactory if the type is not a
|
|
90
|
-
# +BSON::ObjectId+ or +String+.
|
|
91
|
-
#
|
|
92
|
-
# @example Change the documents key type.
|
|
93
|
-
# class Person
|
|
94
|
-
# include Mongoid::Document
|
|
95
|
-
# identity :type => String
|
|
96
|
-
# end
|
|
97
|
-
#
|
|
98
|
-
# @param [ Hash ] options The options.
|
|
99
|
-
#
|
|
100
|
-
# @option options [ Class ] :type The type of the id.
|
|
101
|
-
#
|
|
102
|
-
# @since 2.0.0.beta.1
|
|
103
|
-
def identity(options = {})
|
|
104
|
-
type = options[:type]
|
|
105
|
-
replace_field("_id", type)
|
|
106
|
-
self.using_object_ids = (type == BSON::ObjectId)
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# Defines the field that will be used for the id of this +Document+. This
|
|
110
|
-
# set the id of this +Document+ before save to a parameterized version of
|
|
111
|
-
# the field that was supplied. This is good for use for readable URLS in
|
|
112
|
-
# web applications.
|
|
113
|
-
#
|
|
114
|
-
# @example Create a composite id.
|
|
115
|
-
# class Person
|
|
116
|
-
# include Mongoid::Document
|
|
117
|
-
# key :first_name, :last_name
|
|
118
|
-
# end
|
|
119
|
-
#
|
|
120
|
-
# @param [ Array<Symbol> ] The fields the key is composed of.
|
|
121
|
-
#
|
|
122
|
-
# @since 1.0.0
|
|
123
|
-
def key(*fields)
|
|
124
|
-
self.primary_key = fields
|
|
125
|
-
self.key_formatter = block_given? ? Proc.new : nil
|
|
126
|
-
identity(:type => String)
|
|
127
|
-
set_callback(:save, :around, :set_composite_key)
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
# Convenience method for determining if we are using +BSON::ObjectIds+ as
|
|
131
|
-
# our id.
|
|
132
|
-
#
|
|
133
|
-
# @example Does this class use object ids?
|
|
134
|
-
# person.using_object_ids?
|
|
135
|
-
#
|
|
136
|
-
# @return [ true, false ] If the class uses BSON::ObjectIds for the id.
|
|
137
|
-
#
|
|
138
|
-
# @since 1.0.0
|
|
139
|
-
def using_object_ids?
|
|
140
|
-
using_object_ids
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
end
|
|
144
|
-
end
|
data/lib/mongoid/logger.rb
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
|
|
4
|
-
# The Mongoid logger which wraps some other ruby compliant logger class.
|
|
5
|
-
class Logger
|
|
6
|
-
|
|
7
|
-
delegate \
|
|
8
|
-
:info,
|
|
9
|
-
:debug,
|
|
10
|
-
:error,
|
|
11
|
-
:fatal,
|
|
12
|
-
:level,
|
|
13
|
-
:unknown, :to => :logger, :allow_nil => true
|
|
14
|
-
|
|
15
|
-
# Emit a warning log message.
|
|
16
|
-
#
|
|
17
|
-
# @example Log a warning.
|
|
18
|
-
# logger.warn("Danger")
|
|
19
|
-
#
|
|
20
|
-
# @param [ String ] message The warning message.
|
|
21
|
-
def warn(message)
|
|
22
|
-
logger.warn(message) if logger && logger.respond_to?(:warn)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Get the mongoid logger.
|
|
26
|
-
#
|
|
27
|
-
# @example Get the global logger.
|
|
28
|
-
# logger.logger
|
|
29
|
-
#
|
|
30
|
-
# @return [ Logger ] The logger.
|
|
31
|
-
def logger
|
|
32
|
-
Mongoid.logger
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Inspect the logger.
|
|
36
|
-
#
|
|
37
|
-
# @example Inspect the logger.
|
|
38
|
-
# logger.inspect
|
|
39
|
-
#
|
|
40
|
-
# @return [ String ] The logger, inspected.
|
|
41
|
-
def inspect
|
|
42
|
-
"#<Mongoid::Logger:0x#{object_id.to_s(16)} @logger=#{logger.inspect}>"
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
|
|
4
|
-
# Adds multiple database support to documents.
|
|
5
|
-
module MultiDatabase
|
|
6
|
-
extend ActiveSupport::Concern
|
|
7
|
-
|
|
8
|
-
module ClassMethods #:nodoc:
|
|
9
|
-
|
|
10
|
-
# Gets the database from the class.
|
|
11
|
-
#
|
|
12
|
-
# @example Get the database.
|
|
13
|
-
# Model.database
|
|
14
|
-
#
|
|
15
|
-
# @return [ Mongo::DB ] The database.
|
|
16
|
-
def database; @database end
|
|
17
|
-
|
|
18
|
-
# Set the database name.
|
|
19
|
-
#
|
|
20
|
-
# @example Set the database name.
|
|
21
|
-
# Model.set_database(:testing)
|
|
22
|
-
#
|
|
23
|
-
# @param [ Symbol ] name The database name.
|
|
24
|
-
#
|
|
25
|
-
# @return [ String ] The database name.
|
|
26
|
-
def set_database(name)
|
|
27
|
-
@database = name.to_s
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def inherited(subclass)
|
|
31
|
-
super
|
|
32
|
-
subclass.set_database(database.dup) if database
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
data/lib/mongoid/named_scope.rb
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
|
|
4
|
-
# This module contains the named scoping behaviour.
|
|
5
|
-
module NamedScope
|
|
6
|
-
extend ActiveSupport::Concern
|
|
7
|
-
|
|
8
|
-
included do
|
|
9
|
-
class_attribute :scopes
|
|
10
|
-
self.scopes = {}
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
module ClassMethods #:nodoc:
|
|
14
|
-
|
|
15
|
-
# Gets either the last scope on the stack or creates a new criteria.
|
|
16
|
-
#
|
|
17
|
-
# @example Get the last or new.
|
|
18
|
-
# Person.scoping(true)
|
|
19
|
-
#
|
|
20
|
-
# @param [ true, false ] embedded Is this scope for an embedded doc?
|
|
21
|
-
# @param [ true, false ] scoped Are we applying default scoping?
|
|
22
|
-
#
|
|
23
|
-
# @return [ Criteria ] The last scope or a new one.
|
|
24
|
-
#
|
|
25
|
-
# @since 2.0.0
|
|
26
|
-
def criteria(embedded = false, scoped = true)
|
|
27
|
-
(scope_stack.last || Criteria.new(self, embedded)).tap do |crit|
|
|
28
|
-
return crit.apply_default_scope if scoped
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Creates a named_scope for the +Document+, similar to ActiveRecord's
|
|
33
|
-
# named_scopes. +NamedScopes+ are proxied +Criteria+ objects that can be
|
|
34
|
-
# chained.
|
|
35
|
-
#
|
|
36
|
-
# @example Create named scopes.
|
|
37
|
-
#
|
|
38
|
-
# class Person
|
|
39
|
-
# include Mongoid::Document
|
|
40
|
-
# field :active, :type => Boolean
|
|
41
|
-
# field :count, :type => Integer
|
|
42
|
-
#
|
|
43
|
-
# scope :active, :where => { :active => true }
|
|
44
|
-
# scope :count_gt_one, :where => { :count.gt => 1 }
|
|
45
|
-
# scope :at_least_count, lambda { |count| { :where => { :count.gt => count } } }
|
|
46
|
-
# end
|
|
47
|
-
#
|
|
48
|
-
# @param [ Symbol ] name The name of the scope.
|
|
49
|
-
# @param [ Hash, Criteria ] conditions The conditions of the scope.
|
|
50
|
-
#
|
|
51
|
-
# @since 1.0.0
|
|
52
|
-
def scope(name, conditions = {}, &block)
|
|
53
|
-
name = name.to_sym
|
|
54
|
-
valid_scope_name?(name)
|
|
55
|
-
scopes[name] = Scope.new(conditions, &block)
|
|
56
|
-
(class << self; self; end).class_eval <<-EOT
|
|
57
|
-
def #{name}(*args)
|
|
58
|
-
scope = scopes[:#{name}]
|
|
59
|
-
conditions = scope.conditions.as_conditions(*args)
|
|
60
|
-
scope.extend(criteria.fuse(conditions))
|
|
61
|
-
end
|
|
62
|
-
EOT
|
|
63
|
-
end
|
|
64
|
-
alias :named_scope :scope
|
|
65
|
-
|
|
66
|
-
# Get a criteria object for the class, scoped to the default if defined.
|
|
67
|
-
#
|
|
68
|
-
# @example Get a scoped criteria.
|
|
69
|
-
# Person.scoped
|
|
70
|
-
#
|
|
71
|
-
# @param [ true, false ] embedded Is the criteria for embedded docs?
|
|
72
|
-
#
|
|
73
|
-
# @return [ Criteria ] The scoped criteria.
|
|
74
|
-
#
|
|
75
|
-
# @since 2.0.0
|
|
76
|
-
def scoped(embedded = false)
|
|
77
|
-
criteria(embedded).scoped
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# Initializes and returns the current scope stack.
|
|
81
|
-
#
|
|
82
|
-
# @example Get the scope stack.
|
|
83
|
-
# Person.scope_stack
|
|
84
|
-
#
|
|
85
|
-
# @return [ Array<Criteria> ] The scope stack.
|
|
86
|
-
#
|
|
87
|
-
# @since 1.0.0
|
|
88
|
-
def scope_stack
|
|
89
|
-
Threaded.scope_stack[object_id] ||= []
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# Get a criteria object for the class, ignoring default scoping.
|
|
93
|
-
#
|
|
94
|
-
# @example Get an unscoped criteria.
|
|
95
|
-
# Person.scoped
|
|
96
|
-
#
|
|
97
|
-
# @param [ true, false ] embedded Is the criteria for embedded docs?
|
|
98
|
-
#
|
|
99
|
-
# @return [ Criteria ] The unscoped criteria.
|
|
100
|
-
#
|
|
101
|
-
# @since 2.0.0
|
|
102
|
-
def unscoped(embedded = false)
|
|
103
|
-
criteria(embedded).unscoped
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Pushes the provided criteria onto the scope stack, and removes it after the
|
|
107
|
-
# provided block is yielded.
|
|
108
|
-
#
|
|
109
|
-
# @example Yield to the criteria.
|
|
110
|
-
# Person.with_scope(criteria)
|
|
111
|
-
#
|
|
112
|
-
# @param [ Criteria ] criteria The criteria to apply.
|
|
113
|
-
#
|
|
114
|
-
# @return [ Criteria ] The yielded criteria.
|
|
115
|
-
#
|
|
116
|
-
# @since 1.0.0
|
|
117
|
-
def with_scope(criteria)
|
|
118
|
-
scope_stack = self.scope_stack
|
|
119
|
-
scope_stack << criteria
|
|
120
|
-
begin
|
|
121
|
-
yield criteria
|
|
122
|
-
ensure
|
|
123
|
-
scope_stack.pop
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
# When inheriting, we want to copy the scopes from the parent class and
|
|
128
|
-
# set the on the child to start, mimicking the behaviour of the old
|
|
129
|
-
# class_inheritable_accessor that was deprecated in Rails edge.
|
|
130
|
-
#
|
|
131
|
-
# @example Inherit from this class.
|
|
132
|
-
# Person.inherited(Doctor)
|
|
133
|
-
#
|
|
134
|
-
# @param [ Class ] subclass The inheriting class.
|
|
135
|
-
#
|
|
136
|
-
# @since 2.0.0.rc.6
|
|
137
|
-
def inherited(subclass)
|
|
138
|
-
super
|
|
139
|
-
subclass.scopes = scopes.dup
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
protected
|
|
143
|
-
|
|
144
|
-
# Warns or raises exception if overriding another scope or method.
|
|
145
|
-
#
|
|
146
|
-
# @example Warn or raise error if name exists.
|
|
147
|
-
# Model.valid_scope_name?("test")
|
|
148
|
-
#
|
|
149
|
-
# @param [ String, Symbol ] name The name of the scope.
|
|
150
|
-
def valid_scope_name?(name)
|
|
151
|
-
if scopes[name] || respond_to?(name, true)
|
|
152
|
-
if Mongoid.scope_overwrite_exception
|
|
153
|
-
raise Errors::ScopeOverwrite.new(self.name,name)
|
|
154
|
-
else
|
|
155
|
-
if Mongoid.logger
|
|
156
|
-
Mongoid.logger.warn(
|
|
157
|
-
"Creating scope :#{name}. " +
|
|
158
|
-
"Overwriting existing method #{self.name}.#{name}."
|
|
159
|
-
)
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
end
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Relations #:nodoc:
|
|
4
|
-
module Embedded #:nodoc:
|
|
5
|
-
module Atomic #:nodoc:
|
|
6
|
-
|
|
7
|
-
class Operation
|
|
8
|
-
attr_accessor :documents, :options, :path, :selector
|
|
9
|
-
|
|
10
|
-
# Consumes an execution that was supposed to hit the database, but is
|
|
11
|
-
# now being deferred to later in favor of a single update.
|
|
12
|
-
#
|
|
13
|
-
# @example Consume the operation.
|
|
14
|
-
# set.consume(
|
|
15
|
-
# { "_id" => BSON::ObjectId.new },
|
|
16
|
-
# { "$push" => { "addresses" => { "_id" => "street" } } },
|
|
17
|
-
# { :multi => false, :safe => true }
|
|
18
|
-
# )
|
|
19
|
-
#
|
|
20
|
-
# @param [ Hash ] selector The document selector.
|
|
21
|
-
# @param [ Hash ] operations The ops to set in the db.
|
|
22
|
-
# @param [ Hash ] options The persistence options.
|
|
23
|
-
#
|
|
24
|
-
# @option options [ true, false ] :multi Persist multiple at once.
|
|
25
|
-
# @option options [ true, false ] :safe Persist in safe mode.
|
|
26
|
-
#
|
|
27
|
-
# @since 2.0.0
|
|
28
|
-
def consume(selector, operations, options = {})
|
|
29
|
-
@consumed, @selector, @options = true, selector, options
|
|
30
|
-
@documents ||= []
|
|
31
|
-
parse(operations)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Has this operation consumed any executions?
|
|
35
|
-
#
|
|
36
|
-
# @example Is this consumed?
|
|
37
|
-
# unset.consumed?
|
|
38
|
-
#
|
|
39
|
-
# @return [ true, false ] If the operation has consumed anything.
|
|
40
|
-
#
|
|
41
|
-
# @since 2.0.0
|
|
42
|
-
def consumed?
|
|
43
|
-
!!@consumed
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Execute the $pushAll operation on the collection.
|
|
47
|
-
#
|
|
48
|
-
# @example Execute the operation.
|
|
49
|
-
# unset.execute(collection)
|
|
50
|
-
#
|
|
51
|
-
# @param [ Collection ] collection The root collection.
|
|
52
|
-
#
|
|
53
|
-
# @since 2.0.0
|
|
54
|
-
def execute(collection)
|
|
55
|
-
if collection && consumed?
|
|
56
|
-
collection.update(selector, operations, options)
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Relations #:nodoc:
|
|
4
|
-
module Embedded #:nodoc:
|
|
5
|
-
module Atomic #:nodoc:
|
|
6
|
-
|
|
7
|
-
class Pull < Operation
|
|
8
|
-
|
|
9
|
-
# Get the merged operations for the single atomic set.
|
|
10
|
-
#
|
|
11
|
-
# @example Get the operations
|
|
12
|
-
# set.operations
|
|
13
|
-
#
|
|
14
|
-
# @return [ Hash ] The pull operations.
|
|
15
|
-
#
|
|
16
|
-
# @since 2.0.0
|
|
17
|
-
def operations
|
|
18
|
-
{ "$pull" =>
|
|
19
|
-
{ path =>
|
|
20
|
-
{ "_id" =>
|
|
21
|
-
{ "$in" => documents.map { |doc| doc["_id"] } }
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
# Parses the incoming operations to get the documents to set.
|
|
30
|
-
#
|
|
31
|
-
# @example Parse the operations.
|
|
32
|
-
# set.parse(
|
|
33
|
-
# { "$pull" => { "addresses" => { "_id" => "street" } } }
|
|
34
|
-
# )
|
|
35
|
-
#
|
|
36
|
-
# @param [ Hash ] operations The ops to parse.
|
|
37
|
-
#
|
|
38
|
-
# @since 2.0.0
|
|
39
|
-
def parse(operations)
|
|
40
|
-
modifier = operations.keys.first
|
|
41
|
-
extract(modifier, operations[modifier])
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Extract a document from the operation.
|
|
45
|
-
#
|
|
46
|
-
# @example Extract the document.
|
|
47
|
-
# set.extract({ "$pull" => [{ "_id" => "street" }] })
|
|
48
|
-
#
|
|
49
|
-
# @param [ Hash ] operation The op to extract from.
|
|
50
|
-
#
|
|
51
|
-
# @since 2.0.0
|
|
52
|
-
def extract(modifier, operations)
|
|
53
|
-
@path = operations.keys.first
|
|
54
|
-
case modifier
|
|
55
|
-
when "$pull"
|
|
56
|
-
documents.push(operations[path])
|
|
57
|
-
when "$pullAll"
|
|
58
|
-
documents.concat(operations[path])
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid #:nodoc:
|
|
3
|
-
module Relations #:nodoc:
|
|
4
|
-
module Embedded #:nodoc:
|
|
5
|
-
module Atomic #:nodoc:
|
|
6
|
-
|
|
7
|
-
class PushAll < Operation
|
|
8
|
-
|
|
9
|
-
# Get the merged operations for the single atomic set.
|
|
10
|
-
#
|
|
11
|
-
# @example Get the operations
|
|
12
|
-
# set.operations
|
|
13
|
-
#
|
|
14
|
-
# @return [ Hash ] The set operations.
|
|
15
|
-
#
|
|
16
|
-
# @since 2.0.0
|
|
17
|
-
def operations
|
|
18
|
-
{ "$pushAll" => { path => documents } }
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
private
|
|
22
|
-
|
|
23
|
-
# Parses the incoming operations to get the documents to set.
|
|
24
|
-
#
|
|
25
|
-
# @example Parse the operations.
|
|
26
|
-
# set.parse(
|
|
27
|
-
# { "$push" => { "addresses" => { "_id" => "street" } } }
|
|
28
|
-
# )
|
|
29
|
-
#
|
|
30
|
-
# @param [ Hash ] operations The ops to parse.
|
|
31
|
-
#
|
|
32
|
-
# @since 2.0.0
|
|
33
|
-
def parse(operations)
|
|
34
|
-
modifier = operations.keys.first
|
|
35
|
-
extract(modifier, operations[modifier])
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Extract a document from the operation.
|
|
39
|
-
#
|
|
40
|
-
# @example Extract the document.
|
|
41
|
-
# set.extract({ "$pushAll" => [{ "_id" => "street" }] })
|
|
42
|
-
#
|
|
43
|
-
# @param [ Hash ] operation The op to extract from.
|
|
44
|
-
#
|
|
45
|
-
# @since 2.0.0
|
|
46
|
-
def extract(modifier, operations)
|
|
47
|
-
@path = operations.keys.first
|
|
48
|
-
case modifier
|
|
49
|
-
when "$push"
|
|
50
|
-
documents.push(operations[path])
|
|
51
|
-
when "$pushAll"
|
|
52
|
-
documents.concat(operations[path])
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|