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
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
# Raised when Javascript criteria selector is passed for embedded document.
|
6
|
+
class UnsupportedJavascript < MongoidError
|
7
|
+
|
8
|
+
# Create the new error caused by using Javascript in embedded document criteria selector.
|
9
|
+
#
|
10
|
+
# @example Create the error.
|
11
|
+
# UnsupportedJavascriptSelector.new(Album, "this.name == '101'")
|
12
|
+
#
|
13
|
+
# @param [ Class ] klass The embedded document class.
|
14
|
+
# @param [ String ] javascript The javascript expression.
|
15
|
+
#
|
16
|
+
# @since 3.0.0
|
17
|
+
def initialize(klass, javascript)
|
18
|
+
super(
|
19
|
+
compose_message(
|
20
|
+
"unsupported_javascript",
|
21
|
+
{ klass: klass, javascript: javascript }
|
22
|
+
)
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Errors
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
4
4
|
|
5
5
|
# Raised when the database version is not supported by Mongoid.
|
6
6
|
#
|
@@ -9,9 +9,9 @@ module Mongoid #:nodoc
|
|
9
9
|
class UnsupportedVersion < MongoidError
|
10
10
|
def initialize(version)
|
11
11
|
super(
|
12
|
-
|
12
|
+
compose_message(
|
13
13
|
"unsupported_version",
|
14
|
-
{ :
|
14
|
+
{ version: version, mongo_version: Mongoid::MONGODB_VERSION }
|
15
15
|
)
|
16
16
|
)
|
17
17
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Errors
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
4
4
|
|
5
5
|
# Raised when a persistence method ending in ! fails validation. The message
|
6
6
|
# will contain the full error messages from the +Document+ in question.
|
@@ -8,13 +8,14 @@ module Mongoid #:nodoc
|
|
8
8
|
# @example Create the error.
|
9
9
|
# Validations.new(person.errors)
|
10
10
|
class Validations < MongoidError
|
11
|
-
attr_reader :document
|
12
11
|
def initialize(document)
|
13
|
-
@document = document
|
14
12
|
super(
|
15
|
-
|
13
|
+
compose_message(
|
16
14
|
"validations",
|
17
|
-
{
|
15
|
+
{
|
16
|
+
document: document.class,
|
17
|
+
errors: document.errors.full_messages.join(", ")
|
18
|
+
}
|
18
19
|
)
|
19
20
|
)
|
20
21
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
# This error is raised when attempting to version an embedded document.
|
6
|
+
class VersioningNotOnRoot < MongoidError
|
7
|
+
|
8
|
+
# Create the new error.
|
9
|
+
#
|
10
|
+
# @example Create the new error.
|
11
|
+
# VersioningNotOnRoot.new(Address)
|
12
|
+
#
|
13
|
+
# @param [ Class ] klass The embedded class.
|
14
|
+
#
|
15
|
+
# @since 3.0.0
|
16
|
+
def initialize(klass)
|
17
|
+
super(
|
18
|
+
compose_message("versioning_not_on_root", { klass: klass })
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/mongoid/extensions.rb
CHANGED
@@ -1,84 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require "mongoid/extensions/array/deep_copy"
|
3
|
-
require "mongoid/extensions/array/deletion"
|
4
|
-
require "mongoid/extensions/false_class/equality"
|
5
|
-
require "mongoid/extensions/hash/deep_copy"
|
6
|
-
require "mongoid/extensions/hash/criteria_helpers"
|
7
|
-
require "mongoid/extensions/hash/scoping"
|
8
|
-
require "mongoid/extensions/integer/checks"
|
9
|
-
require "mongoid/extensions/nil/collectionization"
|
10
|
-
require "mongoid/extensions/object/checks"
|
11
|
-
require "mongoid/extensions/object/deep_copy"
|
12
|
-
require "mongoid/extensions/object/reflections"
|
13
|
-
require "mongoid/extensions/object/substitutable"
|
14
|
-
require "mongoid/extensions/object/yoda"
|
15
|
-
require "mongoid/extensions/proc/scoping"
|
16
|
-
require "mongoid/extensions/string/checks"
|
17
|
-
require "mongoid/extensions/string/conversions"
|
18
|
-
require "mongoid/extensions/string/inflections"
|
19
|
-
require "mongoid/extensions/symbol/checks"
|
20
|
-
require "mongoid/extensions/symbol/inflections"
|
21
|
-
require "mongoid/extensions/true_class/equality"
|
22
|
-
require "mongoid/extensions/object_id/conversions"
|
23
|
-
|
24
|
-
class Array #:nodoc
|
25
|
-
include Mongoid::Extensions::Array::DeepCopy
|
26
|
-
include Mongoid::Extensions::Array::Deletion
|
27
|
-
end
|
28
|
-
|
29
|
-
class Binary; end #:nodoc:
|
30
2
|
unless defined?(Boolean)
|
31
3
|
class Boolean; end
|
32
4
|
end
|
33
5
|
|
34
|
-
class
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
class Hash #:nodoc
|
39
|
-
include Mongoid::Extensions::Hash::DeepCopy
|
40
|
-
include Mongoid::Extensions::Hash::CriteriaHelpers
|
41
|
-
include Mongoid::Extensions::Hash::Scoping
|
42
|
-
end
|
43
|
-
|
44
|
-
class Integer #:nodoc
|
45
|
-
include Mongoid::Extensions::Integer::Checks
|
46
|
-
end
|
47
|
-
|
48
|
-
class NilClass #:nodoc
|
49
|
-
include Mongoid::Extensions::Nil::Collectionization
|
50
|
-
end
|
51
|
-
|
52
|
-
class Object #:nodoc:
|
53
|
-
include Mongoid::Extensions::Object::Checks
|
54
|
-
include Mongoid::Extensions::Object::DeepCopy
|
55
|
-
include Mongoid::Extensions::Object::Reflections
|
56
|
-
include Mongoid::Extensions::Object::Substitutable
|
57
|
-
include Mongoid::Extensions::Object::Yoda
|
58
|
-
end
|
59
|
-
|
60
|
-
class Proc #:nodoc:
|
61
|
-
include Mongoid::Extensions::Proc::Scoping
|
62
|
-
end
|
63
|
-
|
64
|
-
class String #:nodoc
|
65
|
-
include Mongoid::Extensions::String::Checks
|
66
|
-
include Mongoid::Extensions::String::Conversions
|
67
|
-
include Mongoid::Extensions::String::Inflections
|
68
|
-
end
|
69
|
-
|
70
|
-
class Symbol #:nodoc
|
71
|
-
remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
|
72
|
-
include Mongoid::Extensions::Symbol::Checks
|
73
|
-
include Mongoid::Extensions::Symbol::Inflections
|
74
|
-
end
|
75
|
-
|
76
|
-
class TrueClass #:nodoc
|
77
|
-
include Mongoid::Extensions::TrueClass::Equality
|
78
|
-
end
|
79
|
-
|
80
|
-
class BSON::ObjectId #:nodoc
|
81
|
-
extend Mongoid::Extensions::ObjectId::Conversions
|
6
|
+
class BSON::ObjectId
|
7
|
+
undef :as_json
|
82
8
|
def as_json(options = nil)
|
83
9
|
to_s
|
84
10
|
end
|
@@ -86,3 +12,29 @@ class BSON::ObjectId #:nodoc
|
|
86
12
|
ActiveSupport::XmlMini.to_tag(options[:root], self.to_s, options)
|
87
13
|
end
|
88
14
|
end
|
15
|
+
|
16
|
+
class Symbol
|
17
|
+
remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
|
18
|
+
end
|
19
|
+
|
20
|
+
require "mongoid/extensions/array"
|
21
|
+
require "mongoid/extensions/big_decimal"
|
22
|
+
require "mongoid/extensions/boolean"
|
23
|
+
require "mongoid/extensions/date"
|
24
|
+
require "mongoid/extensions/date_time"
|
25
|
+
require "mongoid/extensions/false_class"
|
26
|
+
require "mongoid/extensions/float"
|
27
|
+
require "mongoid/extensions/hash"
|
28
|
+
require "mongoid/extensions/integer"
|
29
|
+
require "mongoid/extensions/module"
|
30
|
+
require "mongoid/extensions/nil_class"
|
31
|
+
require "mongoid/extensions/object"
|
32
|
+
require "mongoid/extensions/object_id"
|
33
|
+
require "mongoid/extensions/range"
|
34
|
+
require "mongoid/extensions/regexp"
|
35
|
+
require "mongoid/extensions/set"
|
36
|
+
require "mongoid/extensions/string"
|
37
|
+
require "mongoid/extensions/symbol"
|
38
|
+
require "mongoid/extensions/time"
|
39
|
+
require "mongoid/extensions/time_with_zone"
|
40
|
+
require "mongoid/extensions/true_class"
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Extensions
|
4
|
+
module Array
|
5
|
+
|
6
|
+
# Evolve the array into an array of object ids.
|
7
|
+
#
|
8
|
+
# @example Evolve the array to object ids.
|
9
|
+
# [ id ].__evolve_object_id__
|
10
|
+
#
|
11
|
+
# @return [ Array<Moped::BSON::ObjectId> ] The converted array.
|
12
|
+
#
|
13
|
+
# @since 3.0.0
|
14
|
+
def __evolve_object_id__
|
15
|
+
map!(&:__evolve_object_id__).compact!
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
19
|
+
# Converts the array for storing as a time.
|
20
|
+
#
|
21
|
+
# @example Convert the array to a time.
|
22
|
+
# [ 2010, 1, 1 ].__mongoize_time__
|
23
|
+
#
|
24
|
+
# @return [ Time ] The time.
|
25
|
+
#
|
26
|
+
# @since 3.0.0
|
27
|
+
def __mongoize_time__
|
28
|
+
::Time.configured.local(*self)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
32
|
+
# type.
|
33
|
+
#
|
34
|
+
# @example Mongoize the object.
|
35
|
+
# object.mongoize
|
36
|
+
#
|
37
|
+
# @return [ Array ] The object.
|
38
|
+
#
|
39
|
+
# @since 3.0.0
|
40
|
+
def mongoize
|
41
|
+
::Array.mongoize(self)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Delete the first object in the array that is equal to the supplied
|
45
|
+
# object and return it. This is much faster than performing a standard
|
46
|
+
# delete for large arrays ince it attempt to delete multiple in the
|
47
|
+
# other.
|
48
|
+
#
|
49
|
+
# @example Delete the first object.
|
50
|
+
# [ "1", "2", "1" ].delete_one("1")
|
51
|
+
#
|
52
|
+
# @param [ Object ] object The object to delete.
|
53
|
+
#
|
54
|
+
# @return [ Object ] The deleted object.
|
55
|
+
#
|
56
|
+
# @since 2.1.0
|
57
|
+
def delete_one(object)
|
58
|
+
position = index(object)
|
59
|
+
position ? delete_at(position) : nil
|
60
|
+
end
|
61
|
+
|
62
|
+
# Is the object's size changable?
|
63
|
+
#
|
64
|
+
# @example Is the object resizable?
|
65
|
+
# object.resizable?
|
66
|
+
#
|
67
|
+
# @return [ true ] true.
|
68
|
+
#
|
69
|
+
# @since 3.0.0
|
70
|
+
def resizable?
|
71
|
+
true
|
72
|
+
end
|
73
|
+
|
74
|
+
module ClassMethods
|
75
|
+
|
76
|
+
# Convert the provided object to a propery array of foreign keys.
|
77
|
+
#
|
78
|
+
# @example Mongoize the object.
|
79
|
+
# Array.__mongoize_fk__(constraint, object)
|
80
|
+
#
|
81
|
+
# @param [ Constraint ] constraint The metadata constraint.
|
82
|
+
# @param [ Object ] object The object to convert.
|
83
|
+
#
|
84
|
+
# @return [ Array ] The array of ids.
|
85
|
+
#
|
86
|
+
# @since 3.0.0
|
87
|
+
def __mongoize_fk__(constraint, object)
|
88
|
+
if object.resizable?
|
89
|
+
object.blank? ? object : constraint.convert(object)
|
90
|
+
else
|
91
|
+
object.blank? ? [] : constraint.convert(Array(object))
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
96
|
+
# type.
|
97
|
+
#
|
98
|
+
# @example Mongoize the object.
|
99
|
+
# Array.mongoize([ 1, 2, 3 ])
|
100
|
+
#
|
101
|
+
# @param [ Object ] object The object to mongoize.
|
102
|
+
#
|
103
|
+
# @return [ Array ] The object mongoized.
|
104
|
+
#
|
105
|
+
# @since 3.0.0
|
106
|
+
def mongoize(object)
|
107
|
+
evolve(object)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Is the object's size changable?
|
111
|
+
#
|
112
|
+
# @example Is the object resizable?
|
113
|
+
# Array.resizable?
|
114
|
+
#
|
115
|
+
# @return [ true ] true.
|
116
|
+
#
|
117
|
+
# @since 3.0.0
|
118
|
+
def resizable?
|
119
|
+
true
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
::Array.__send__(:include, Mongoid::Extensions::Array)
|
127
|
+
::Array.__send__(:extend, Mongoid::Extensions::Array::ClassMethods)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Extensions
|
4
|
+
module BigDecimal
|
5
|
+
|
6
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
7
|
+
# type.
|
8
|
+
#
|
9
|
+
# @example Mongoize the object.
|
10
|
+
# object.mongoize
|
11
|
+
#
|
12
|
+
# @return [ Object ] The object.
|
13
|
+
#
|
14
|
+
# @since 3.0.0
|
15
|
+
def mongoize
|
16
|
+
to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
module ClassMethods
|
20
|
+
|
21
|
+
# Convert the object from it's mongo friendly ruby type to this type.
|
22
|
+
#
|
23
|
+
# @example Demongoize the object.
|
24
|
+
# Object.demongoize(object)
|
25
|
+
#
|
26
|
+
# @param [ Object ] object The object to demongoize.
|
27
|
+
#
|
28
|
+
# @return [ Object ] The object.
|
29
|
+
#
|
30
|
+
# @since 3.0.0
|
31
|
+
def demongoize(object)
|
32
|
+
if object
|
33
|
+
object.numeric? ? ::BigDecimal.new(object) : object
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
::BigDecimal.__send__(:include, Mongoid::Extensions::BigDecimal)
|
42
|
+
::BigDecimal.__send__(:extend, Mongoid::Extensions::BigDecimal::ClassMethods)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Extensions
|
4
|
+
module Boolean
|
5
|
+
module ClassMethods
|
6
|
+
|
7
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
8
|
+
# type.
|
9
|
+
#
|
10
|
+
# @example Mongoize the object.
|
11
|
+
# Boolean.mongoize("123.11")
|
12
|
+
#
|
13
|
+
# @return [ String ] The object mongoized.
|
14
|
+
#
|
15
|
+
# @since 3.0.0
|
16
|
+
def mongoize(object)
|
17
|
+
evolve(object)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
::Boolean.__send__(:extend, Mongoid::Extensions::Boolean::ClassMethods)
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Extensions
|
4
|
+
module Date
|
5
|
+
|
6
|
+
# Convert the date into a time.
|
7
|
+
#
|
8
|
+
# @example Convert the date to a time.
|
9
|
+
# date.__mongoize_time__
|
10
|
+
#
|
11
|
+
# @return [ Time ] The converted time.
|
12
|
+
#
|
13
|
+
# @since 3.0.0
|
14
|
+
def __mongoize_time__
|
15
|
+
::Time.configured.local(year, month, day)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
19
|
+
# type.
|
20
|
+
#
|
21
|
+
# @example Mongoize the object.
|
22
|
+
# date.mongoize
|
23
|
+
#
|
24
|
+
# @return [ Time ] The object mongoized.
|
25
|
+
#
|
26
|
+
# @since 3.0.0
|
27
|
+
def mongoize
|
28
|
+
::Date.mongoize(self)
|
29
|
+
end
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
|
33
|
+
# Convert the object from it's mongo friendly ruby type to this type.
|
34
|
+
#
|
35
|
+
# @example Demongoize the object.
|
36
|
+
# Date.demongoize(object)
|
37
|
+
#
|
38
|
+
# @param [ Time ] object The time from Mongo.
|
39
|
+
#
|
40
|
+
# @return [ Date ] The object as a date.
|
41
|
+
#
|
42
|
+
# @since 3.0.0
|
43
|
+
def demongoize(object)
|
44
|
+
::Date.new(object.year, object.month, object.day) if object
|
45
|
+
end
|
46
|
+
|
47
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
48
|
+
# type.
|
49
|
+
#
|
50
|
+
# @example Mongoize the object.
|
51
|
+
# Date.mongoize("2012-1-1")
|
52
|
+
#
|
53
|
+
# @param [ Object ] object The object to mongoize.
|
54
|
+
#
|
55
|
+
# @return [ Time ] The object mongoized.
|
56
|
+
#
|
57
|
+
# @since 3.0.0
|
58
|
+
def mongoize(object)
|
59
|
+
unless object.blank?
|
60
|
+
time = object.__mongoize_time__
|
61
|
+
::Time.utc(time.year, time.month, time.day)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
::Date.__send__(:include, Mongoid::Extensions::Date)
|
70
|
+
::Date.__send__(:extend, Mongoid::Extensions::Date::ClassMethods)
|