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
data/lib/mongoid.rb
CHANGED
@@ -22,13 +22,18 @@
|
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
23
|
require "delegate"
|
24
24
|
require "time"
|
25
|
+
require "set"
|
26
|
+
|
25
27
|
require "active_support/core_ext"
|
26
28
|
require 'active_support/json'
|
27
29
|
require "active_support/inflector"
|
28
|
-
require "active_support/lazy_load_hooks"
|
29
30
|
require "active_support/time_with_zone"
|
30
31
|
require "active_model"
|
31
|
-
|
32
|
+
|
33
|
+
require "origin"
|
34
|
+
require "moped"
|
35
|
+
BSON = Moped::BSON
|
36
|
+
|
32
37
|
require "mongoid/extensions"
|
33
38
|
require "mongoid/errors"
|
34
39
|
require "mongoid/threaded"
|
@@ -36,42 +41,34 @@ require "mongoid/relations"
|
|
36
41
|
require "mongoid/atomic"
|
37
42
|
require "mongoid/attributes"
|
38
43
|
require "mongoid/callbacks"
|
39
|
-
require "mongoid/collection"
|
40
|
-
require "mongoid/collections"
|
41
44
|
require "mongoid/config"
|
42
|
-
require "mongoid/
|
45
|
+
require "mongoid/contextual"
|
43
46
|
require "mongoid/copyable"
|
44
47
|
require "mongoid/criteria"
|
45
|
-
require "mongoid/cursor"
|
46
|
-
require "mongoid/default_scope"
|
47
48
|
require "mongoid/dirty"
|
48
|
-
require "mongoid/extras"
|
49
49
|
require "mongoid/factory"
|
50
50
|
require "mongoid/fields"
|
51
51
|
require "mongoid/finders"
|
52
52
|
require "mongoid/hierarchy"
|
53
|
-
require "mongoid/identity"
|
54
53
|
require "mongoid/identity_map"
|
55
54
|
require "mongoid/indexes"
|
56
55
|
require "mongoid/inspection"
|
57
56
|
require "mongoid/javascript"
|
58
57
|
require "mongoid/json"
|
59
|
-
require "mongoid/
|
60
|
-
require "mongoid/logger"
|
58
|
+
require "mongoid/loggable"
|
61
59
|
require "mongoid/matchers"
|
62
60
|
require "mongoid/multi_parameter_attributes"
|
63
|
-
require "mongoid/multi_database"
|
64
|
-
require "mongoid/named_scope"
|
65
61
|
require "mongoid/nested_attributes"
|
66
62
|
require "mongoid/observer"
|
67
63
|
require "mongoid/persistence"
|
68
64
|
require "mongoid/reloading"
|
69
|
-
require "mongoid/
|
70
|
-
require "mongoid/scope"
|
65
|
+
require "mongoid/scoping"
|
71
66
|
require "mongoid/serialization"
|
67
|
+
require "mongoid/sessions"
|
72
68
|
require "mongoid/sharding"
|
73
69
|
require "mongoid/state"
|
74
70
|
require "mongoid/timestamps"
|
71
|
+
require "mongoid/unit_of_work"
|
75
72
|
require "mongoid/validations"
|
76
73
|
require "mongoid/version"
|
77
74
|
require "mongoid/versioning"
|
@@ -94,7 +91,9 @@ end
|
|
94
91
|
# add english load path by default
|
95
92
|
I18n.load_path << File.join(File.dirname(__FILE__), "config", "locales", "en.yml")
|
96
93
|
|
97
|
-
module Mongoid
|
94
|
+
module Mongoid
|
95
|
+
extend Loggable
|
96
|
+
extend UnitOfWork
|
98
97
|
extend self
|
99
98
|
|
100
99
|
MONGODB_VERSION = "2.0.0"
|
@@ -103,10 +102,8 @@ module Mongoid #:nodoc
|
|
103
102
|
#
|
104
103
|
# @example Set up configuration options.
|
105
104
|
# Mongoid.configure do |config|
|
106
|
-
# name = "mongoid_test"
|
107
|
-
# host = "localhost"
|
108
105
|
# config.allow_dynamic_fields = false
|
109
|
-
# config.
|
106
|
+
# config.use(name: "mongoid_test", host: "localhost", port: 27017)
|
110
107
|
# end
|
111
108
|
#
|
112
109
|
# @return [ Config ] The configuration obejct.
|
@@ -115,25 +112,13 @@ module Mongoid #:nodoc
|
|
115
112
|
def configure
|
116
113
|
block_given? ? yield(Config) : Config
|
117
114
|
end
|
118
|
-
alias :config :configure
|
119
115
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
# end
|
127
|
-
#
|
128
|
-
# @return [ Object ] The result of the block.
|
129
|
-
#
|
130
|
-
# @since 2.1.0
|
131
|
-
def unit_of_work
|
132
|
-
begin
|
133
|
-
yield if block_given?
|
134
|
-
ensure
|
135
|
-
IdentityMap.clear
|
136
|
-
end
|
116
|
+
def default_session
|
117
|
+
Sessions.default
|
118
|
+
end
|
119
|
+
|
120
|
+
def session(name)
|
121
|
+
Sessions.with_name(name)
|
137
122
|
end
|
138
123
|
|
139
124
|
# Take all the public instance methods from the Config singleton and allow
|
@@ -143,7 +128,7 @@ module Mongoid #:nodoc
|
|
143
128
|
# Mongoid.database = Mongo::Connection.new.db("test")
|
144
129
|
#
|
145
130
|
# @since 1.0.0
|
146
|
-
delegate
|
131
|
+
delegate(*(Config.public_instance_methods(false) +
|
147
132
|
ActiveModel::Observing::ClassMethods.public_instance_methods(false) <<
|
148
|
-
{ :
|
133
|
+
{ to: Config }))
|
149
134
|
end
|
data/lib/mongoid/atomic.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
require "mongoid/atomic/modifiers"
|
3
3
|
require "mongoid/atomic/paths"
|
4
4
|
|
5
|
-
module Mongoid
|
5
|
+
module Mongoid
|
6
6
|
|
7
7
|
# This module contains the logic for supporting atomic operations against the
|
8
8
|
# database.
|
@@ -99,12 +99,12 @@ module Mongoid #:nodoc:
|
|
99
99
|
#
|
100
100
|
# @since 2.1.0
|
101
101
|
def atomic_updates
|
102
|
-
Modifiers.new
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
end
|
102
|
+
mods = Modifiers.new
|
103
|
+
generate_atomic_updates(mods, self)
|
104
|
+
_children.each do |child|
|
105
|
+
generate_atomic_updates(mods, child)
|
107
106
|
end
|
107
|
+
mods
|
108
108
|
end
|
109
109
|
alias :_updates :atomic_updates
|
110
110
|
|
@@ -151,6 +151,16 @@ module Mongoid #:nodoc:
|
|
151
151
|
atomic_paths.position
|
152
152
|
end
|
153
153
|
|
154
|
+
# Returns path of the attribute for modification
|
155
|
+
#
|
156
|
+
# @example Get path of the attribute
|
157
|
+
# address.atomic_attribute_name(:city)
|
158
|
+
#
|
159
|
+
# @return [ String ] The path to the document attribute in the database
|
160
|
+
def atomic_attribute_name(name)
|
161
|
+
embedded? ? "#{atomic_position}.#{name}" : name
|
162
|
+
end
|
163
|
+
|
154
164
|
# Get all the attributes that need to be pulled.
|
155
165
|
#
|
156
166
|
# @example Get the pulls.
|
@@ -252,9 +262,6 @@ module Mongoid #:nodoc:
|
|
252
262
|
# @example Get the atomic paths.
|
253
263
|
# document.atomic_paths
|
254
264
|
#
|
255
|
-
# @todo: Durran: Should probably raise error for embedded docs w/o
|
256
|
-
# metadata.
|
257
|
-
#
|
258
265
|
# @return [ Object ] The associated path.
|
259
266
|
#
|
260
267
|
# @since 2.1.0
|
@@ -281,29 +288,5 @@ module Mongoid #:nodoc:
|
|
281
288
|
mods.add_to_set(doc.atomic_array_add_to_sets)
|
282
289
|
mods.pull_all(doc.atomic_array_pulls)
|
283
290
|
end
|
284
|
-
|
285
|
-
|
286
|
-
# Get the atomic updates for a touch operation. Should only include the
|
287
|
-
# updated_at field and the optional extra field.
|
288
|
-
#
|
289
|
-
# @api private
|
290
|
-
#
|
291
|
-
# @example Get the touch atomic updates.
|
292
|
-
# document.touch_atomic_updates
|
293
|
-
#
|
294
|
-
# @param [ Symbol ] field The optional field.
|
295
|
-
#
|
296
|
-
# @return [ Hash ] The atomic updates.
|
297
|
-
#
|
298
|
-
# @since 2.6.0
|
299
|
-
def touch_atomic_updates(field = nil)
|
300
|
-
updates = atomic_updates
|
301
|
-
return {} unless atomic_updates.has_key?("$set")
|
302
|
-
touches = {}
|
303
|
-
updates["$set"].each_pair do |key, value|
|
304
|
-
touches.merge!({ key => value }) if key =~ /updated_at|#{field}/
|
305
|
-
end
|
306
|
-
{ "$set" => touches }
|
307
|
-
end
|
308
291
|
end
|
309
292
|
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
require "mongoid/atomic/paths/embedded/one"
|
3
3
|
require "mongoid/atomic/paths/embedded/many"
|
4
4
|
|
5
|
-
module Mongoid
|
6
|
-
module Atomic
|
7
|
-
module Paths
|
5
|
+
module Mongoid
|
6
|
+
module Atomic
|
7
|
+
module Paths
|
8
8
|
|
9
9
|
# Common functionality between the two different embedded paths.
|
10
10
|
module Embedded
|
@@ -34,8 +34,7 @@ module Mongoid #:nodoc:
|
|
34
34
|
# @since 2.1.0
|
35
35
|
def selector
|
36
36
|
parent.atomic_selector.
|
37
|
-
merge!({ "#{path}._id" => document.
|
38
|
-
merge!(document.shard_key_selector)
|
37
|
+
merge!({ "#{path}._id" => document._id }).merge!(document.shard_key_selector)
|
39
38
|
end
|
40
39
|
end
|
41
40
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Atomic
|
4
|
-
module Paths
|
5
|
-
module Embedded
|
2
|
+
module Mongoid
|
3
|
+
module Atomic
|
4
|
+
module Paths
|
5
|
+
module Embedded
|
6
6
|
|
7
7
|
# This class encapsulates behaviour for locating and updating
|
8
8
|
# documents that are defined as an embedded 1-n.
|
@@ -34,8 +34,8 @@ module Mongoid #:nodoc:
|
|
34
34
|
# @since 2.1.0
|
35
35
|
def position
|
36
36
|
pos = parent.atomic_position
|
37
|
-
locator = document.
|
38
|
-
"#{pos}#{"." unless pos.blank?}#{document.metadata.
|
37
|
+
locator = document.new_record? ? "" : ".#{document._index}"
|
38
|
+
"#{pos}#{"." unless pos.blank?}#{document.metadata.store_as}#{locator}"
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Atomic
|
4
|
-
module Paths
|
5
|
-
module Embedded
|
2
|
+
module Mongoid
|
3
|
+
module Atomic
|
4
|
+
module Paths
|
5
|
+
module Embedded
|
6
6
|
|
7
7
|
# This class encapsulates behaviour for locating and updating
|
8
8
|
# documents that are defined as an embedded 1-1.
|
@@ -34,7 +34,7 @@ module Mongoid #:nodoc:
|
|
34
34
|
# @since 2.1.0
|
35
35
|
def position
|
36
36
|
pos = parent.atomic_position
|
37
|
-
"#{pos}#{"." unless pos.blank?}#{document.metadata.
|
37
|
+
"#{pos}#{"." unless pos.blank?}#{document.metadata.store_as}"
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Atomic
|
4
|
-
module Paths
|
2
|
+
module Mongoid
|
3
|
+
module Atomic
|
4
|
+
module Paths
|
5
5
|
|
6
6
|
# This class encapsulates behaviour for locating and updating root
|
7
7
|
# documents atomically.
|
@@ -31,8 +31,7 @@ module Mongoid #:nodoc:
|
|
31
31
|
#
|
32
32
|
# @since 2.1.0
|
33
33
|
def selector
|
34
|
-
{ "_id" => document.
|
35
|
-
merge!(document.shard_key_selector)
|
34
|
+
{ "_id" => document._id }.merge!(document.shard_key_selector)
|
36
35
|
end
|
37
36
|
end
|
38
37
|
end
|
data/lib/mongoid/attributes.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "mongoid/attributes/processing"
|
3
|
+
require "mongoid/attributes/readonly"
|
3
4
|
|
4
|
-
module Mongoid
|
5
|
+
module Mongoid
|
5
6
|
|
6
7
|
# This module contains the logic for handling the internal attributes hash,
|
7
8
|
# and how to get and set values.
|
8
9
|
module Attributes
|
9
10
|
extend ActiveSupport::Concern
|
10
11
|
include Processing
|
12
|
+
include Readonly
|
11
13
|
|
12
14
|
attr_reader :attributes
|
13
15
|
alias :raw_attributes :attributes
|
@@ -24,9 +26,22 @@ module Mongoid #:nodoc:
|
|
24
26
|
# @since 1.0.0
|
25
27
|
def attribute_present?(name)
|
26
28
|
attribute = read_attribute(name)
|
27
|
-
!
|
29
|
+
!attribute.blank? || attribute == false
|
30
|
+
end
|
31
|
+
|
32
|
+
# Does the document have the provided attribute?
|
33
|
+
#
|
34
|
+
# @example Does the document have the attribute?
|
35
|
+
# model.has_attribute?(:name)
|
36
|
+
#
|
37
|
+
# @param [ String, Symbol ] name The name of the attribute.
|
38
|
+
#
|
39
|
+
# @return [ true, false ] If the key is present in the attributes.
|
40
|
+
#
|
41
|
+
# @since 3.0.0
|
42
|
+
def has_attribute?(name)
|
43
|
+
attributes.has_key?(name.to_s)
|
28
44
|
end
|
29
|
-
alias :has_attribute? :attribute_present?
|
30
45
|
|
31
46
|
# Read a value from the document attributes. If the value does not exist
|
32
47
|
# it will return nil.
|
@@ -55,11 +70,18 @@ module Mongoid #:nodoc:
|
|
55
70
|
#
|
56
71
|
# @param [ String, Symbol ] name The name of the attribute to remove.
|
57
72
|
#
|
73
|
+
# @raise [ Errors::ReadonlyAttribute ] If the field cannot be removed due
|
74
|
+
# to being flagged as reaodnly.
|
75
|
+
#
|
58
76
|
# @since 1.0.0
|
59
77
|
def remove_attribute(name)
|
78
|
+
access = name.to_s
|
79
|
+
unless attribute_writable?(name)
|
80
|
+
raise Errors::ReadonlyAttribute.new(name, :nil)
|
81
|
+
end
|
60
82
|
_assigning do
|
61
|
-
access = name.to_s
|
62
83
|
attribute_will_change!(access)
|
84
|
+
atomic_unsets.push(atomic_attribute_name(access))
|
63
85
|
attributes.delete(access)
|
64
86
|
end
|
65
87
|
end
|
@@ -74,11 +96,12 @@ module Mongoid #:nodoc:
|
|
74
96
|
# @return [ true, false ] True if it does, false if not.
|
75
97
|
#
|
76
98
|
# @since 1.0.0
|
77
|
-
def respond_to?(
|
78
|
-
(
|
99
|
+
def respond_to?(name, include_private = false)
|
100
|
+
super || (
|
101
|
+
Mongoid.allow_dynamic_fields &&
|
79
102
|
attributes &&
|
80
|
-
attributes.has_key?(
|
81
|
-
)
|
103
|
+
attributes.has_key?(name.to_s.reader)
|
104
|
+
)
|
82
105
|
end
|
83
106
|
|
84
107
|
# Write a single attribute to the document attribute hash. This will
|
@@ -96,18 +119,20 @@ module Mongoid #:nodoc:
|
|
96
119
|
#
|
97
120
|
# @since 1.0.0
|
98
121
|
def write_attribute(name, value)
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
122
|
+
access = name.to_s
|
123
|
+
if attribute_writable?(access)
|
124
|
+
_assigning do
|
125
|
+
localized = fields[access].try(:localized?)
|
126
|
+
typed_value = typed_value_for(access, value)
|
127
|
+
unless attributes[access] == typed_value || attribute_changed?(access)
|
104
128
|
attribute_will_change!(access)
|
105
129
|
end
|
106
130
|
if localized
|
107
|
-
(attributes[access] ||= {}).merge!(
|
131
|
+
(attributes[access] ||= {}).merge!(typed_value)
|
108
132
|
else
|
109
|
-
attributes[access] =
|
133
|
+
attributes[access] = typed_value
|
110
134
|
end
|
135
|
+
typed_value
|
111
136
|
end
|
112
137
|
end
|
113
138
|
end
|
@@ -130,9 +155,7 @@ module Mongoid #:nodoc:
|
|
130
155
|
# @since 2.2.1
|
131
156
|
def assign_attributes(attrs = nil, options = {})
|
132
157
|
_assigning do
|
133
|
-
|
134
|
-
document.identify if new? && id.blank?
|
135
|
-
end
|
158
|
+
process_attributes(attrs, options[:as] || :default, !options[:without_protection])
|
136
159
|
end
|
137
160
|
end
|
138
161
|
|
@@ -151,11 +174,47 @@ module Mongoid #:nodoc:
|
|
151
174
|
#
|
152
175
|
# @since 1.0.0
|
153
176
|
def write_attributes(attrs = nil, guard_protected_attributes = true)
|
154
|
-
assign_attributes(attrs, :
|
177
|
+
assign_attributes(attrs, without_protection: !guard_protected_attributes)
|
155
178
|
end
|
156
179
|
alias :attributes= :write_attributes
|
157
180
|
|
158
|
-
|
181
|
+
private
|
182
|
+
|
183
|
+
# Define a reader method for a dynamic attribute.
|
184
|
+
#
|
185
|
+
# @api private
|
186
|
+
#
|
187
|
+
# @example Define a reader method.
|
188
|
+
# model.define_dynamic_reader(:field)
|
189
|
+
#
|
190
|
+
# @param [ String ] name The name of the field.
|
191
|
+
#
|
192
|
+
# @since 3.0.0
|
193
|
+
def define_dynamic_reader(name)
|
194
|
+
class_eval <<-READER
|
195
|
+
def #{name}
|
196
|
+
read_attribute(#{name.inspect})
|
197
|
+
end
|
198
|
+
READER
|
199
|
+
end
|
200
|
+
|
201
|
+
# Define a writer method for a dynamic attribute.
|
202
|
+
#
|
203
|
+
# @api private
|
204
|
+
#
|
205
|
+
# @example Define a writer method.
|
206
|
+
# model.define_dynamic_writer(:field)
|
207
|
+
#
|
208
|
+
# @param [ String ] name The name of the field.
|
209
|
+
#
|
210
|
+
# @since 3.0.0
|
211
|
+
def define_dynamic_writer(name)
|
212
|
+
class_eval <<-WRITER
|
213
|
+
def #{name}=(value)
|
214
|
+
write_attribute(#{name.inspect}, value)
|
215
|
+
end
|
216
|
+
WRITER
|
217
|
+
end
|
159
218
|
|
160
219
|
# Used for allowing accessor methods for dynamic attributes.
|
161
220
|
#
|
@@ -165,9 +224,13 @@ module Mongoid #:nodoc:
|
|
165
224
|
attr = name.to_s
|
166
225
|
return super unless attributes.has_key?(attr.reader)
|
167
226
|
if attr.writer?
|
168
|
-
|
227
|
+
getter = attr.reader
|
228
|
+
define_dynamic_writer(getter)
|
229
|
+
write_attribute(getter, args.first)
|
169
230
|
else
|
170
|
-
|
231
|
+
getter = attr.reader
|
232
|
+
define_dynamic_reader(getter)
|
233
|
+
read_attribute(getter)
|
171
234
|
end
|
172
235
|
end
|
173
236
|
|
@@ -183,10 +246,10 @@ module Mongoid #:nodoc:
|
|
183
246
|
#
|
184
247
|
# @since 1.0.0
|
185
248
|
def typed_value_for(key, value)
|
186
|
-
fields.has_key?(key) ? fields[key].
|
249
|
+
fields.has_key?(key) ? fields[key].mongoize(value) : value
|
187
250
|
end
|
188
251
|
|
189
|
-
module ClassMethods
|
252
|
+
module ClassMethods
|
190
253
|
|
191
254
|
# Alias the provided name to the original field. This will provide an
|
192
255
|
# aliased getter, setter, existance check, and all dirty attribute
|
@@ -205,14 +268,14 @@ module Mongoid #:nodoc:
|
|
205
268
|
# @since 2.3.0
|
206
269
|
def alias_attribute(name, original)
|
207
270
|
class_eval <<-RUBY
|
208
|
-
alias
|
209
|
-
alias
|
210
|
-
alias
|
211
|
-
alias
|
212
|
-
alias
|
213
|
-
alias
|
214
|
-
alias
|
215
|
-
alias
|
271
|
+
alias #{name} #{original}
|
272
|
+
alias #{name}= #{original}=
|
273
|
+
alias #{name}? #{original}?
|
274
|
+
alias #{name}_change #{original}_change
|
275
|
+
alias #{name}_changed? #{original}_changed?
|
276
|
+
alias reset_#{name}! reset_#{original}!
|
277
|
+
alias #{name}_was #{original}_was
|
278
|
+
alias #{name}_will_change! #{original}_will_change!
|
216
279
|
RUBY
|
217
280
|
end
|
218
281
|
end
|