mongoid 2.4.9 → 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 +869 -8
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +2 -17
- data/lib/config/locales/en.yml +441 -51
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- data/lib/mongoid/atomic/paths/root.rb +4 -5
- data/lib/mongoid/atomic.rb +16 -6
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/callbacks.rb +100 -42
- data/lib/mongoid/collections/retry.rb +2 -3
- data/lib/mongoid/components.rb +10 -22
- data/lib/mongoid/config/environment.rb +4 -3
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config.rb +87 -233
- 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/contextual.rb +50 -0
- data/lib/mongoid/copyable.rb +2 -2
- data/lib/mongoid/criteria.rb +436 -248
- 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 +68 -49
- 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/errors.rb +22 -1
- 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/extensions.rb +28 -76
- data/lib/mongoid/factory.rb +4 -4
- 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/macro.rb +83 -0
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields.rb +129 -194
- data/lib/mongoid/finders.rb +42 -43
- data/lib/mongoid/hierarchy.rb +25 -14
- data/lib/mongoid/identity_map.rb +39 -12
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- data/lib/mongoid/indexes.rb +66 -15
- data/lib/mongoid/inspection.rb +1 -1
- data/lib/mongoid/javascript.rb +1 -1
- data/lib/mongoid/json.rb +2 -2
- data/lib/mongoid/loggable.rb +69 -0
- data/lib/mongoid/matchers/all.rb +7 -8
- data/lib/mongoid/matchers/and.rb +3 -3
- data/lib/mongoid/matchers/default.rb +6 -4
- data/lib/mongoid/matchers/exists.rb +2 -2
- data/lib/mongoid/matchers/gt.rb +2 -2
- data/lib/mongoid/matchers/gte.rb +2 -2
- data/lib/mongoid/matchers/in.rb +3 -7
- data/lib/mongoid/matchers/lt.rb +2 -2
- data/lib/mongoid/matchers/lte.rb +2 -2
- data/lib/mongoid/matchers/ne.rb +2 -2
- data/lib/mongoid/matchers/nin.rb +2 -2
- data/lib/mongoid/matchers/or.rb +2 -2
- data/lib/mongoid/matchers/size.rb +2 -2
- data/lib/mongoid/matchers/strategies.rb +3 -3
- data/lib/mongoid/matchers.rb +1 -1
- data/lib/mongoid/multi_parameter_attributes.rb +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/atomic/add_to_set.rb +5 -9
- data/lib/mongoid/persistence/atomic/bit.rb +5 -7
- data/lib/mongoid/persistence/atomic/inc.rb +5 -7
- data/lib/mongoid/persistence/atomic/operation.rb +45 -6
- data/lib/mongoid/persistence/atomic/pop.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
- data/lib/mongoid/persistence/atomic/push.rb +4 -10
- data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
- data/lib/mongoid/persistence/atomic/rename.rb +6 -7
- data/lib/mongoid/persistence/atomic/sets.rb +5 -7
- data/lib/mongoid/persistence/atomic/unset.rb +4 -5
- data/lib/mongoid/persistence/atomic.rb +2 -2
- data/lib/mongoid/persistence/deletion.rb +2 -2
- data/lib/mongoid/persistence/insertion.rb +10 -16
- data/lib/mongoid/persistence/modification.rb +5 -9
- data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
- data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
- data/lib/mongoid/persistence/operations/insert.rb +4 -4
- data/lib/mongoid/persistence/operations/remove.rb +4 -4
- data/lib/mongoid/persistence/operations/update.rb +5 -5
- data/lib/mongoid/persistence/operations.rb +6 -19
- data/lib/mongoid/persistence.rb +64 -27
- data/lib/mongoid/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- 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/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/builders.rb +19 -16
- data/lib/mongoid/relations/cascading/delete.rb +12 -4
- data/lib/mongoid/relations/cascading/destroy.rb +3 -3
- data/lib/mongoid/relations/cascading/nullify.rb +3 -3
- data/lib/mongoid/relations/cascading/restrict.rb +37 -0
- data/lib/mongoid/relations/cascading.rb +6 -4
- 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 -148
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -60
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +231 -45
- data/lib/mongoid/relations/nested_builder.rb +3 -5
- data/lib/mongoid/relations/one.rb +14 -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 +116 -122
- 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/relations/touchable.rb +32 -0
- data/lib/mongoid/relations.rb +6 -6
- data/lib/mongoid/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +329 -0
- data/lib/mongoid/serialization.rb +13 -30
- data/lib/mongoid/sessions/factory.rb +106 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions.rb +359 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded/lifecycle.rb +21 -21
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/threaded.rb +167 -59
- 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/timestamps.rb +1 -1
- data/lib/mongoid/unit_of_work.rb +61 -0
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +34 -4
- data/lib/mongoid/validations/uniqueness.rb +103 -25
- data/lib/mongoid/validations.rb +62 -20
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- data/lib/mongoid.rb +24 -39
- 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 +93 -155
- data/lib/config/locales/bg.yml +0 -61
- data/lib/config/locales/de.yml +0 -61
- data/lib/config/locales/en-GB.yml +0 -64
- data/lib/config/locales/es.yml +0 -59
- data/lib/config/locales/fr.yml +0 -62
- data/lib/config/locales/hi.yml +0 -53
- data/lib/config/locales/hu.yml +0 -64
- data/lib/config/locales/id.yml +0 -62
- data/lib/config/locales/it.yml +0 -59
- data/lib/config/locales/ja.yml +0 -57
- data/lib/config/locales/kr.yml +0 -54
- data/lib/config/locales/nl.yml +0 -61
- data/lib/config/locales/pl.yml +0 -59
- data/lib/config/locales/pt-BR.yml +0 -60
- data/lib/config/locales/pt.yml +0 -60
- data/lib/config/locales/ro.yml +0 -66
- data/lib/config/locales/ru.yml +0 -61
- data/lib/config/locales/sv.yml +0 -60
- data/lib/config/locales/vi.yml +0 -62
- data/lib/config/locales/zh-CN.yml +0 -53
- data/lib/mongoid/collection.rb +0 -157
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/collections.rb +0 -120
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/mongo.rb +0 -485
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/criterion/builder.rb +0 -34
- data/lib/mongoid/criterion/complex.rb +0 -84
- data/lib/mongoid/criterion/creational.rb +0 -34
- data/lib/mongoid/criterion/exclusion.rb +0 -108
- data/lib/mongoid/criterion/inclusion.rb +0 -290
- data/lib/mongoid/criterion/optional.rb +0 -259
- data/lib/mongoid/criterion/selector.rb +0 -177
- data/lib/mongoid/cursor.rb +0 -88
- data/lib/mongoid/default_scope.rb +0 -36
- data/lib/mongoid/errors/invalid_type.rb +0 -25
- data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/array/deletion.rb +0 -29
- data/lib/mongoid/extensions/false_class/equality.rb +0 -26
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
- data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/hash/scoping.rb +0 -25
- data/lib/mongoid/extensions/integer/checks.rb +0 -23
- data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
- data/lib/mongoid/extensions/object/checks.rb +0 -29
- data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
- data/lib/mongoid/extensions/object/reflections.rb +0 -48
- data/lib/mongoid/extensions/object/substitutable.rb +0 -15
- data/lib/mongoid/extensions/object/yoda.rb +0 -44
- data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
- data/lib/mongoid/extensions/proc/scoping.rb +0 -25
- data/lib/mongoid/extensions/string/checks.rb +0 -36
- data/lib/mongoid/extensions/string/conversions.rb +0 -22
- data/lib/mongoid/extensions/string/inflections.rb +0 -118
- data/lib/mongoid/extensions/symbol/checks.rb +0 -23
- data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
- data/lib/mongoid/extensions/true_class/equality.rb +0 -26
- data/lib/mongoid/extras.rb +0 -31
- data/lib/mongoid/fields/internal/array.rb +0 -76
- data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
- data/lib/mongoid/fields/internal/bignum.rb +0 -10
- data/lib/mongoid/fields/internal/binary.rb +0 -11
- data/lib/mongoid/fields/internal/boolean.rb +0 -58
- data/lib/mongoid/fields/internal/date.rb +0 -51
- data/lib/mongoid/fields/internal/date_time.rb +0 -28
- data/lib/mongoid/fields/internal/false_class.rb +0 -10
- data/lib/mongoid/fields/internal/fixnum.rb +0 -10
- data/lib/mongoid/fields/internal/float.rb +0 -47
- data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
- data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
- data/lib/mongoid/fields/internal/hash.rb +0 -11
- data/lib/mongoid/fields/internal/integer.rb +0 -59
- data/lib/mongoid/fields/internal/localized.rb +0 -62
- data/lib/mongoid/fields/internal/nil_class.rb +0 -53
- data/lib/mongoid/fields/internal/object.rb +0 -11
- data/lib/mongoid/fields/internal/object_id.rb +0 -46
- data/lib/mongoid/fields/internal/range.rb +0 -61
- data/lib/mongoid/fields/internal/set.rb +0 -57
- data/lib/mongoid/fields/internal/string.rb +0 -42
- data/lib/mongoid/fields/internal/symbol.rb +0 -43
- data/lib/mongoid/fields/internal/time.rb +0 -23
- data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
- data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
- data/lib/mongoid/fields/internal/true_class.rb +0 -10
- data/lib/mongoid/fields/mappings.rb +0 -42
- data/lib/mongoid/fields/serializable.rb +0 -270
- data/lib/mongoid/identity.rb +0 -92
- data/lib/mongoid/keys.rb +0 -144
- data/lib/mongoid/logger.rb +0 -45
- data/lib/mongoid/multi_database.rb +0 -31
- data/lib/mongoid/named_scope.rb +0 -166
- data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
- data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
- data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
- data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
- data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
- data/lib/mongoid/relations/embedded/atomic.rb +0 -89
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/relations/referenced/batch.rb +0 -73
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Errors
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
4
|
|
|
5
5
|
# Raised when attempting to call create or create! through a
|
|
6
6
|
# references_many when the parent document has not been saved. This
|
|
7
7
|
# prevents the child from getting presisted and immediately being orphaned.
|
|
8
8
|
class UnsavedDocument < MongoidError
|
|
9
|
-
|
|
10
|
-
attr_reader :base, :document
|
|
11
|
-
|
|
12
9
|
def initialize(base, document)
|
|
13
|
-
@base, @document = base, document
|
|
14
10
|
super(
|
|
15
|
-
|
|
11
|
+
compose_message(
|
|
16
12
|
"unsaved_document",
|
|
17
|
-
{ :
|
|
13
|
+
{ base: base.class.name, document: document.class.name }
|
|
18
14
|
)
|
|
19
15
|
)
|
|
20
16
|
end
|
|
@@ -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/errors.rb
CHANGED
|
@@ -1,19 +1,40 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require "mongoid/errors/mongoid_error"
|
|
3
|
+
require "mongoid/errors/ambiguous_relationship"
|
|
3
4
|
require "mongoid/errors/callback"
|
|
4
5
|
require "mongoid/errors/document_not_found"
|
|
5
6
|
require "mongoid/errors/eager_load"
|
|
6
7
|
require "mongoid/errors/invalid_collection"
|
|
8
|
+
require "mongoid/errors/invalid_config_option"
|
|
7
9
|
require "mongoid/errors/invalid_database"
|
|
8
10
|
require "mongoid/errors/invalid_field"
|
|
11
|
+
require "mongoid/errors/invalid_field_option"
|
|
9
12
|
require "mongoid/errors/invalid_find"
|
|
13
|
+
require "mongoid/errors/invalid_index"
|
|
10
14
|
require "mongoid/errors/invalid_options"
|
|
15
|
+
require "mongoid/errors/invalid_scope"
|
|
16
|
+
require "mongoid/errors/invalid_set_polymorphic_relation"
|
|
17
|
+
require "mongoid/errors/invalid_storage_options"
|
|
11
18
|
require "mongoid/errors/invalid_time"
|
|
12
|
-
require "mongoid/errors/
|
|
19
|
+
require "mongoid/errors/inverse_not_found"
|
|
13
20
|
require "mongoid/errors/mixed_relations"
|
|
21
|
+
require "mongoid/errors/mixed_session_configuration"
|
|
22
|
+
require "mongoid/errors/nested_attributes_metadata_not_found"
|
|
23
|
+
require "mongoid/errors/no_default_session"
|
|
14
24
|
require "mongoid/errors/no_environment"
|
|
25
|
+
require "mongoid/errors/no_map_reduce_output"
|
|
26
|
+
require "mongoid/errors/no_parent"
|
|
27
|
+
require "mongoid/errors/no_session_config"
|
|
28
|
+
require "mongoid/errors/no_sessions_config"
|
|
29
|
+
require "mongoid/errors/no_session_database"
|
|
30
|
+
require "mongoid/errors/no_session_hosts"
|
|
31
|
+
require "mongoid/errors/readonly_attribute"
|
|
15
32
|
require "mongoid/errors/scope_overwrite"
|
|
16
33
|
require "mongoid/errors/too_many_nested_attribute_records"
|
|
34
|
+
require "mongoid/errors/unknown_attribute"
|
|
17
35
|
require "mongoid/errors/unsaved_document"
|
|
36
|
+
require "mongoid/errors/unsupported_javascript"
|
|
18
37
|
require "mongoid/errors/unsupported_version"
|
|
19
38
|
require "mongoid/errors/validations"
|
|
39
|
+
require "mongoid/errors/versioning_not_on_root"
|
|
40
|
+
require "mongoid/errors/delete_restriction"
|
|
@@ -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)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module DateTime
|
|
5
|
+
|
|
6
|
+
# Mongoize the date time into a time.
|
|
7
|
+
#
|
|
8
|
+
# @example Mongoize the date time.
|
|
9
|
+
# date_time.__mongoize_time__
|
|
10
|
+
#
|
|
11
|
+
# @return [ Time ] The mongoized time.
|
|
12
|
+
#
|
|
13
|
+
# @since 3.0.0
|
|
14
|
+
def __mongoize_time__
|
|
15
|
+
return self if utc? && Mongoid.use_utc?
|
|
16
|
+
::Time.configured.local(year, month, day, hour, min, sec)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
20
|
+
# type.
|
|
21
|
+
#
|
|
22
|
+
# @example Mongoize the object.
|
|
23
|
+
# date_time.mongoize
|
|
24
|
+
#
|
|
25
|
+
# @return [ Time ] The object mongoized.
|
|
26
|
+
#
|
|
27
|
+
# @since 3.0.0
|
|
28
|
+
def mongoize
|
|
29
|
+
::DateTime.mongoize(self)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
module ClassMethods
|
|
33
|
+
|
|
34
|
+
# Convert the object from it's mongo friendly ruby type to this type.
|
|
35
|
+
#
|
|
36
|
+
# @example Demongoize the object.
|
|
37
|
+
# DateTime.demongoize(object)
|
|
38
|
+
#
|
|
39
|
+
# @param [ Time ] object The time from Mongo.
|
|
40
|
+
#
|
|
41
|
+
# @return [ DateTime ] The object as a date.
|
|
42
|
+
#
|
|
43
|
+
# @since 3.0.0
|
|
44
|
+
def demongoize(object)
|
|
45
|
+
::Time.demongoize(object).try(:to_datetime)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
49
|
+
# type.
|
|
50
|
+
#
|
|
51
|
+
# @example Mongoize the object.
|
|
52
|
+
# DateTime.mongoize("2012-1-1")
|
|
53
|
+
#
|
|
54
|
+
# @param [ Object ] object The object to convert.
|
|
55
|
+
#
|
|
56
|
+
# @return [ Time ] The object mongoized.
|
|
57
|
+
#
|
|
58
|
+
# @since 3.0.0
|
|
59
|
+
def mongoize(object)
|
|
60
|
+
::Time.mongoize(object)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
::DateTime.__send__(:include, Mongoid::Extensions::DateTime)
|
|
68
|
+
::DateTime.__send__(:extend, Mongoid::Extensions::DateTime::ClassMethods)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module FalseClass
|
|
5
|
+
|
|
6
|
+
# Is the passed value a boolean?
|
|
7
|
+
#
|
|
8
|
+
# @example Is the value a boolean type?
|
|
9
|
+
# false.is_a?(Boolean)
|
|
10
|
+
#
|
|
11
|
+
# @param [ Class ] other The class to check.
|
|
12
|
+
#
|
|
13
|
+
# @return [ true, false ] If the other is a boolean.
|
|
14
|
+
#
|
|
15
|
+
# @since 1.0.0
|
|
16
|
+
def is_a?(other)
|
|
17
|
+
if other == ::Boolean || other.class == ::Boolean
|
|
18
|
+
return true
|
|
19
|
+
end
|
|
20
|
+
super(other)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
::FalseClass.__send__(:include, Mongoid::Extensions::FalseClass)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module Float
|
|
5
|
+
|
|
6
|
+
# Convert the float into a time.
|
|
7
|
+
#
|
|
8
|
+
# @example Convert the float into a time.
|
|
9
|
+
# 1335532685.117847.__mongoize_time__
|
|
10
|
+
#
|
|
11
|
+
# @return [ Time ] The float as a time.
|
|
12
|
+
#
|
|
13
|
+
# @since 3.0.0
|
|
14
|
+
def __mongoize_time__
|
|
15
|
+
::Time.at(self)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
module ClassMethods
|
|
19
|
+
|
|
20
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
21
|
+
# type.
|
|
22
|
+
#
|
|
23
|
+
# @example Mongoize the object.
|
|
24
|
+
# Float.mongoize("123.11")
|
|
25
|
+
#
|
|
26
|
+
# @param [ Object ] object The object to mongoize.
|
|
27
|
+
#
|
|
28
|
+
# @return [ String ] The object mongoized.
|
|
29
|
+
#
|
|
30
|
+
# @since 3.0.0
|
|
31
|
+
def mongoize(object)
|
|
32
|
+
unless object.blank?
|
|
33
|
+
__numeric__(object) rescue 0.0
|
|
34
|
+
else
|
|
35
|
+
nil
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
::Float.__send__(:include, Mongoid::Extensions::Float)
|
|
44
|
+
::Float.__send__(:extend, Mongoid::Extensions::Float::ClassMethods)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module Hash
|
|
5
|
+
|
|
6
|
+
# Evolves each value in the hash to an object id if it is convertable.
|
|
7
|
+
#
|
|
8
|
+
# @example Convert the hash values.
|
|
9
|
+
# { field: id }.__evolve_object_id__
|
|
10
|
+
#
|
|
11
|
+
# @return [ Hash ] The converted hash.
|
|
12
|
+
#
|
|
13
|
+
# @since 3.0.0
|
|
14
|
+
def __evolve_object_id__
|
|
15
|
+
update_values(&:__evolve_object_id__)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Get the id attribute from this hash, whether it's prefixed with an
|
|
19
|
+
# underscore or is a symbol.
|
|
20
|
+
#
|
|
21
|
+
# @example Extract the id.
|
|
22
|
+
# { :_id => 1 }.extract_id
|
|
23
|
+
#
|
|
24
|
+
# @return [ Object ] The value of the id.
|
|
25
|
+
#
|
|
26
|
+
# @since 2.3.2
|
|
27
|
+
def extract_id
|
|
28
|
+
self["id"] || self["_id"] || self[:id] || self[:_id]
|
|
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 [ Hash ] The object.
|
|
38
|
+
#
|
|
39
|
+
# @since 3.0.0
|
|
40
|
+
def mongoize
|
|
41
|
+
::Hash.mongoize(self)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Can the size of this object change?
|
|
45
|
+
#
|
|
46
|
+
# @example Is the hash resizable?
|
|
47
|
+
# {}.resizable?
|
|
48
|
+
#
|
|
49
|
+
# @return [ true ] true.
|
|
50
|
+
#
|
|
51
|
+
# @since 3.0.0
|
|
52
|
+
def resizable?
|
|
53
|
+
true
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
module ClassMethods
|
|
57
|
+
|
|
58
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
59
|
+
# type.
|
|
60
|
+
#
|
|
61
|
+
# @example Mongoize the object.
|
|
62
|
+
# Hash.mongoize([ 1, 2, 3 ])
|
|
63
|
+
#
|
|
64
|
+
# @param [ Object ] object The object to mongoize.
|
|
65
|
+
#
|
|
66
|
+
# @return [ Hash ] The object mongoized.
|
|
67
|
+
#
|
|
68
|
+
# @since 3.0.0
|
|
69
|
+
def mongoize(object)
|
|
70
|
+
return if object.nil?
|
|
71
|
+
evolve(object).update_values { |value| value.mongoize }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Can the size of this object change?
|
|
75
|
+
#
|
|
76
|
+
# @example Is the hash resizable?
|
|
77
|
+
# {}.resizable?
|
|
78
|
+
#
|
|
79
|
+
# @return [ true ] true.
|
|
80
|
+
#
|
|
81
|
+
# @since 3.0.0
|
|
82
|
+
def resizable?
|
|
83
|
+
true
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
::Hash.__send__(:include, Mongoid::Extensions::Hash)
|
|
91
|
+
::Hash.__send__(:extend, Mongoid::Extensions::Hash::ClassMethods)
|