mongoid 2.8.1 → 3.0.0.rc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +802 -58
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +2 -8
- data/lib/config/locales/en.yml +441 -51
- data/lib/mongoid.rb +24 -39
- data/lib/mongoid/atomic.rb +16 -33
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- 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/root.rb +4 -5
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/callbacks.rb +90 -27
- data/lib/mongoid/collections/retry.rb +2 -3
- data/lib/mongoid/components.rb +11 -23
- data/lib/mongoid/config.rb +87 -233
- data/lib/mongoid/config/environment.rb +5 -6
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/contextual.rb +50 -0
- 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/copyable.rb +3 -34
- data/lib/mongoid/criteria.rb +436 -250
- 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 +69 -50
- data/lib/mongoid/errors.rb +22 -1
- 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/extensions.rb +28 -76
- 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/factory.rb +1 -1
- data/lib/mongoid/fields.rb +129 -194
- 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.rb +2 -0
- data/lib/mongoid/fields/validators/macro.rb +83 -0
- 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.rb +66 -15
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- 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.rb +1 -1
- 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/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.rb +43 -39
- data/lib/mongoid/persistence/atomic.rb +2 -2
- 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/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.rb +6 -19
- 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/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations.rb +4 -6
- 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.rb +19 -16
- 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/cascading.rb +6 -4
- 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/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 -161
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -61
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +200 -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 +117 -132
- 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/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +329 -0
- data/lib/mongoid/serialization.rb +8 -27
- data/lib/mongoid/sessions.rb +359 -0
- data/lib/mongoid/sessions/factory.rb +106 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded.rb +167 -59
- data/lib/mongoid/threaded/lifecycle.rb +21 -22
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/timestamps.rb +1 -1
- 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/unit_of_work.rb +61 -0
- data/lib/mongoid/validations.rb +27 -19
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +31 -5
- data/lib/mongoid/validations/uniqueness.rb +9 -12
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- 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 +110 -137
- checksums.yaml +0 -7
- 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.rb +0 -120
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/mongo.rb +0 -487
- 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 -110
- 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 -77
- 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.rb +0 -89
- 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/referenced/batch.rb +0 -73
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Atomic
|
5
5
|
|
6
6
|
# This class provides the ability to perform an explicit $pop
|
7
7
|
# modification on a specific field.
|
@@ -21,10 +21,8 @@ module Mongoid #:nodoc:
|
|
21
21
|
if document[field]
|
22
22
|
values = document.send(field)
|
23
23
|
value > 0 ? values.pop : values.shift
|
24
|
-
|
25
|
-
|
26
|
-
document.remove_change(field) if document.persisted?
|
27
|
-
end
|
24
|
+
execute("$pop")
|
25
|
+
values
|
28
26
|
end
|
29
27
|
end
|
30
28
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Atomic
|
5
5
|
|
6
6
|
# This class provides the ability to perform an explicit $pull
|
7
7
|
# modification on a specific field.
|
@@ -21,10 +21,8 @@ module Mongoid #:nodoc:
|
|
21
21
|
if document[field]
|
22
22
|
values = document.send(field)
|
23
23
|
values.delete(value)
|
24
|
-
|
25
|
-
|
26
|
-
document.remove_change(field) if document.persisted?
|
27
|
-
end
|
24
|
+
execute("$pull")
|
25
|
+
values
|
28
26
|
end
|
29
27
|
end
|
30
28
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Atomic
|
5
5
|
|
6
6
|
# This class provides the ability to perform an explicit $pullAll
|
7
7
|
# modification on a specific field.
|
@@ -21,10 +21,8 @@ module Mongoid #:nodoc:
|
|
21
21
|
if document[field]
|
22
22
|
values = document.send(field)
|
23
23
|
values.delete_if { |val| value.include?(val) }
|
24
|
-
|
25
|
-
|
26
|
-
document.remove_change(field) if document.persisted?
|
27
|
-
end
|
24
|
+
execute("$pullAll")
|
25
|
+
values
|
28
26
|
end
|
29
27
|
end
|
30
28
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Atomic
|
5
5
|
|
6
6
|
# This class provides the ability to perform an explicit $push modification
|
7
7
|
# on a specific field.
|
@@ -17,13 +17,7 @@ module Mongoid #:nodoc:
|
|
17
17
|
#
|
18
18
|
# @since 2.0.0
|
19
19
|
def persist
|
20
|
-
|
21
|
-
document[field] = [] unless document[field]
|
22
|
-
document.send(field).push(value).tap do |value|
|
23
|
-
collection.update(document.atomic_selector, operation("$push"), options)
|
24
|
-
document.remove_change(field)
|
25
|
-
end
|
26
|
-
end
|
20
|
+
append_with("$push")
|
27
21
|
end
|
28
22
|
end
|
29
23
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Atomic
|
5
5
|
|
6
6
|
# This class provides the ability to perform an explicit $pushAll modification
|
7
7
|
# on a specific field.
|
@@ -17,13 +17,7 @@ module Mongoid #:nodoc:
|
|
17
17
|
#
|
18
18
|
# @since 2.1.0
|
19
19
|
def persist
|
20
|
-
|
21
|
-
document[field] = [] unless document[field]
|
22
|
-
document.send(field).concat(value).tap do |value|
|
23
|
-
collection.update(document.atomic_selector, operation("$pushAll"), options)
|
24
|
-
document.remove_change(field)
|
25
|
-
end
|
26
|
-
end
|
20
|
+
append_with("$pushAll")
|
27
21
|
end
|
28
22
|
end
|
29
23
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Atomic
|
5
5
|
|
6
6
|
# Performs an atomic rename operation.
|
7
7
|
class Rename
|
@@ -19,10 +19,9 @@ module Mongoid #:nodoc:
|
|
19
19
|
prepare do
|
20
20
|
@value = value.to_s
|
21
21
|
document[value] = document.attributes.delete(field)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
22
|
+
execute("$rename")
|
23
|
+
document.remove_change(value)
|
24
|
+
document[value]
|
26
25
|
end
|
27
26
|
end
|
28
27
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Atomic
|
5
5
|
|
6
6
|
# This class provides atomic $set behaviour.
|
7
7
|
class Sets
|
@@ -18,10 +18,8 @@ module Mongoid #:nodoc:
|
|
18
18
|
def persist
|
19
19
|
prepare do
|
20
20
|
document[field] = value
|
21
|
-
|
22
|
-
|
23
|
-
document.remove_change(field)
|
24
|
-
end
|
21
|
+
execute("$set")
|
22
|
+
document[field]
|
25
23
|
end
|
26
24
|
end
|
27
25
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Atomic
|
5
5
|
|
6
6
|
# Performs atomic $unset operations.
|
7
7
|
class Unset
|
@@ -18,8 +18,7 @@ module Mongoid #:nodoc:
|
|
18
18
|
def persist
|
19
19
|
prepare do
|
20
20
|
document.attributes.delete(field)
|
21
|
-
|
22
|
-
document.remove_change(value)
|
21
|
+
execute("$unset")
|
23
22
|
end
|
24
23
|
end
|
25
24
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
4
|
|
5
5
|
# Contains common logic for insertion operations.
|
6
6
|
module Insertion
|
@@ -19,23 +19,17 @@ module Mongoid #:nodoc:
|
|
19
19
|
#
|
20
20
|
# @since 2.1.0
|
21
21
|
def prepare(&block)
|
22
|
-
document.
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
true
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
unless result == false
|
33
|
-
doc.reset_persisted_children
|
34
|
-
doc.move_changes
|
35
|
-
Threaded.clear_options!
|
22
|
+
unless validating? && document.invalid?(:create)
|
23
|
+
result = document.run_callbacks(:save) do
|
24
|
+
document.run_callbacks(:create) do
|
25
|
+
yield(document)
|
26
|
+
document.new_record = false
|
27
|
+
true
|
36
28
|
end
|
37
29
|
end
|
30
|
+
document.post_persist unless result == false
|
38
31
|
end
|
32
|
+
document
|
39
33
|
end
|
40
34
|
end
|
41
35
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
4
|
|
5
5
|
# Contains common logic for modification operations.
|
6
6
|
module Modification
|
@@ -20,17 +20,13 @@ module Mongoid #:nodoc:
|
|
20
20
|
# @since 2.1.0
|
21
21
|
def prepare(&block)
|
22
22
|
return false if validating? && document.invalid?(:update)
|
23
|
-
document.run_callbacks(:save) do
|
23
|
+
result = document.run_callbacks(:save) do
|
24
24
|
document.run_callbacks(:update) do
|
25
25
|
yield(document); true
|
26
26
|
end
|
27
|
-
end.tap do |result|
|
28
|
-
unless result == false
|
29
|
-
document.reset_persisted_children
|
30
|
-
document.move_changes
|
31
|
-
Threaded.clear_options!
|
32
|
-
end
|
33
27
|
end
|
28
|
+
document.post_persist unless result == false
|
29
|
+
result
|
34
30
|
end
|
35
31
|
end
|
36
32
|
end
|
@@ -5,14 +5,14 @@ require "mongoid/persistence/operations/update"
|
|
5
5
|
require "mongoid/persistence/operations/embedded/insert"
|
6
6
|
require "mongoid/persistence/operations/embedded/remove"
|
7
7
|
|
8
|
-
module Mongoid
|
9
|
-
module Persistence
|
8
|
+
module Mongoid
|
9
|
+
module Persistence
|
10
10
|
|
11
11
|
# Persistence operations include this module to get basic functionality
|
12
12
|
# on initialization.
|
13
13
|
module Operations
|
14
14
|
|
15
|
-
attr_reader :conflicts, :document
|
15
|
+
attr_reader :conflicts, :document, :options
|
16
16
|
|
17
17
|
# Get the collection we should be persisting to.
|
18
18
|
#
|
@@ -80,19 +80,6 @@ module Mongoid #:nodoc:
|
|
80
80
|
@notifying_parent ||= !@options.delete(:suppress)
|
81
81
|
end
|
82
82
|
|
83
|
-
# Get all the options that will be sent to the database. Right now this
|
84
|
-
# is only safe mode opts.
|
85
|
-
#
|
86
|
-
# @example Get the options hash.
|
87
|
-
# operation.options
|
88
|
-
#
|
89
|
-
# @return [ Hash ] The options for the database.
|
90
|
-
#
|
91
|
-
# @since 2.1.0
|
92
|
-
def options
|
93
|
-
Safety.merge_safety_options(@options)
|
94
|
-
end
|
95
|
-
|
96
83
|
# Get the parent of the provided document.
|
97
84
|
#
|
98
85
|
# @example Get the parent.
|
@@ -154,9 +141,9 @@ module Mongoid #:nodoc:
|
|
154
141
|
#
|
155
142
|
# @since 2.1.0
|
156
143
|
def init_updates
|
157
|
-
document.atomic_updates
|
158
|
-
|
159
|
-
|
144
|
+
updates = document.atomic_updates
|
145
|
+
@conflicts = updates.delete(:conflicts) || {}
|
146
|
+
updates
|
160
147
|
end
|
161
148
|
|
162
149
|
class << self
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Operations
|
5
|
-
module Embedded
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Operations
|
5
|
+
module Embedded
|
6
6
|
|
7
7
|
# Insert is a persistence command responsible for taking a document that
|
8
8
|
# has not been saved to the database and saving it. This specific class
|
@@ -28,10 +28,11 @@ module Mongoid #:nodoc:
|
|
28
28
|
# @return [ Document ] The document to be inserted.
|
29
29
|
def persist
|
30
30
|
prepare do
|
31
|
-
|
31
|
+
raise Errors::NoParent.new(document.class.name) unless parent
|
32
|
+
if parent.new_record?
|
32
33
|
parent.insert
|
33
34
|
else
|
34
|
-
collection.
|
35
|
+
collection.find(parent.atomic_selector).update(inserts)
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Operations
|
5
|
-
module Embedded
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Operations
|
5
|
+
module Embedded
|
6
6
|
|
7
7
|
# Remove is a persistence command responsible for deleting a document from
|
8
8
|
# the database.
|
@@ -29,7 +29,7 @@ module Mongoid #:nodoc:
|
|
29
29
|
prepare do |doc|
|
30
30
|
parent.remove_child(doc) if notifying_parent?
|
31
31
|
if parent.persisted?
|
32
|
-
collection.
|
32
|
+
collection.find(parent.atomic_selector).update(deletes)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Operations
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Operations
|
5
5
|
|
6
6
|
# Insert is a persistence command responsible for taking a document that
|
7
7
|
# has not been saved to the database and saving it.
|
@@ -24,7 +24,7 @@ module Mongoid #:nodoc:
|
|
24
24
|
# @return [ Document ] The document to be inserted.
|
25
25
|
def persist
|
26
26
|
prepare do |doc|
|
27
|
-
collection.insert(doc.as_document
|
27
|
+
collection.insert(doc.as_document)
|
28
28
|
IdentityMap.set(doc)
|
29
29
|
end
|
30
30
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Operations
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Operations
|
5
5
|
|
6
6
|
# Remove is a persistence command responsible for deleting a document from
|
7
7
|
# the database.
|
@@ -24,7 +24,7 @@ module Mongoid #:nodoc:
|
|
24
24
|
# @return [ true ] Always true.
|
25
25
|
def persist
|
26
26
|
prepare do |doc|
|
27
|
-
collection.
|
27
|
+
collection.find({ _id: doc.id }).remove
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Operations
|
2
|
+
module Mongoid
|
3
|
+
module Persistence
|
4
|
+
module Operations
|
5
5
|
|
6
6
|
# Update is a persistence command responsible for taking a document that
|
7
7
|
# has already been saved to the database and saving it, depending on
|
@@ -42,9 +42,9 @@ module Mongoid #:nodoc:
|
|
42
42
|
def persist
|
43
43
|
prepare do
|
44
44
|
unless updates.empty?
|
45
|
-
collection.update(
|
45
|
+
collection.find(selector).update(updates)
|
46
46
|
conflicts.each_pair do |key, value|
|
47
|
-
collection.update(
|
47
|
+
collection.find(selector).update({ key => value })
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
data/lib/mongoid/railtie.rb
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require "singleton"
|
3
2
|
require "mongoid"
|
4
3
|
require "mongoid/config"
|
5
4
|
require "mongoid/railties/document"
|
6
5
|
require "rails"
|
7
6
|
require "rails/mongoid"
|
8
7
|
|
9
|
-
module Rails
|
10
|
-
module Mongoid
|
11
|
-
class Railtie < Rails::Railtie
|
8
|
+
module Rails
|
9
|
+
module Mongoid
|
10
|
+
class Railtie < Rails::Railtie
|
12
11
|
|
13
12
|
# Determine which generator to use. app_generators was introduced after
|
14
13
|
# 3.0.0.
|
@@ -23,7 +22,7 @@ module Rails #:nodoc:
|
|
23
22
|
config.respond_to?(:app_generators) ? :app_generators : :generators
|
24
23
|
end
|
25
24
|
|
26
|
-
#
|
25
|
+
# Mapping of rescued exceptions to HTTP responses
|
27
26
|
#
|
28
27
|
# @example
|
29
28
|
# railtie.rescue_responses
|
@@ -38,7 +37,7 @@ module Rails #:nodoc:
|
|
38
37
|
}
|
39
38
|
end
|
40
39
|
|
41
|
-
config.send(generator).orm :mongoid, :
|
40
|
+
config.send(generator).orm :mongoid, migration: false
|
42
41
|
|
43
42
|
if config.action_dispatch.rescue_responses
|
44
43
|
config.action_dispatch.rescue_responses.merge!(rescue_responses)
|
@@ -73,15 +72,22 @@ module Rails #:nodoc:
|
|
73
72
|
# # - host: localhost
|
74
73
|
# # port: 27019
|
75
74
|
# allow_dynamic_fields: false
|
76
|
-
# parameterize_keys: false
|
77
75
|
# persist_in_safe_mode: false
|
78
76
|
#
|
79
77
|
initializer "setup database" do
|
80
78
|
config_file = Rails.root.join("config", "mongoid.yml")
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
::Mongoid
|
79
|
+
if config_file.file?
|
80
|
+
begin
|
81
|
+
::Mongoid.load!(config_file)
|
82
|
+
rescue ::Mongoid::Errors::NoSessionsConfig => e
|
83
|
+
handle_configuration_error(e)
|
84
|
+
rescue ::Mongoid::Errors::NoDefaultSession => e
|
85
|
+
handle_configuration_error(e)
|
86
|
+
rescue ::Mongoid::Errors::NoSessionDatabase => e
|
87
|
+
handle_configuration_error(e)
|
88
|
+
rescue ::Mongoid::Errors::NoSessionHosts => e
|
89
|
+
handle_configuration_error(e)
|
90
|
+
end
|
85
91
|
end
|
86
92
|
end
|
87
93
|
|
@@ -139,6 +145,15 @@ module Rails #:nodoc:
|
|
139
145
|
end
|
140
146
|
end
|
141
147
|
end
|
148
|
+
|
149
|
+
# Rails runs all initializers first before getting into any generator
|
150
|
+
# code, so we have no way in the intitializer to know if we are
|
151
|
+
# generating a mongoid.yml. So instead of failing, we catch all the
|
152
|
+
# errors and print them out.
|
153
|
+
def handle_configuration_error(e)
|
154
|
+
puts "There is a configuration error with the current mongoid.yml."
|
155
|
+
puts e.message
|
156
|
+
end
|
142
157
|
end
|
143
158
|
end
|
144
159
|
end
|