mongoid 2.8.1 → 3.0.0.rc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +802 -58
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +2 -8
- data/lib/config/locales/en.yml +441 -51
- data/lib/mongoid.rb +24 -39
- data/lib/mongoid/atomic.rb +16 -33
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
- data/lib/mongoid/atomic/paths/root.rb +4 -5
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/callbacks.rb +90 -27
- data/lib/mongoid/collections/retry.rb +2 -3
- data/lib/mongoid/components.rb +11 -23
- data/lib/mongoid/config.rb +87 -233
- data/lib/mongoid/config/environment.rb +5 -6
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/contextual.rb +50 -0
- data/lib/mongoid/contextual/aggregable/memory.rb +98 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
- data/lib/mongoid/contextual/atomic.rb +179 -0
- data/lib/mongoid/contextual/command.rb +43 -0
- data/lib/mongoid/contextual/find_and_modify.rb +66 -0
- data/lib/mongoid/contextual/map_reduce.rb +273 -0
- data/lib/mongoid/contextual/memory.rb +383 -0
- data/lib/mongoid/contextual/mongo.rb +543 -0
- data/lib/mongoid/copyable.rb +3 -34
- data/lib/mongoid/criteria.rb +436 -250
- data/lib/mongoid/criterion/inspection.rb +14 -8
- data/lib/mongoid/criterion/scoping.rb +114 -44
- data/lib/mongoid/dirty.rb +152 -67
- data/lib/mongoid/document.rb +69 -50
- data/lib/mongoid/errors.rb +22 -1
- data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
- data/lib/mongoid/errors/callback.rb +5 -6
- data/lib/mongoid/errors/delete_restriction.rb +29 -0
- data/lib/mongoid/errors/document_not_found.rb +98 -17
- data/lib/mongoid/errors/eager_load.rb +3 -6
- data/lib/mongoid/errors/invalid_collection.rb +3 -3
- data/lib/mongoid/errors/invalid_config_option.rb +27 -0
- data/lib/mongoid/errors/invalid_database.rb +3 -3
- data/lib/mongoid/errors/invalid_field.rb +54 -8
- data/lib/mongoid/errors/invalid_field_option.rb +35 -0
- data/lib/mongoid/errors/invalid_find.rb +3 -3
- data/lib/mongoid/errors/invalid_index.rb +28 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -4
- data/lib/mongoid/errors/invalid_scope.rb +24 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
- data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
- data/lib/mongoid/errors/invalid_time.rb +3 -6
- data/lib/mongoid/errors/inverse_not_found.rb +29 -0
- data/lib/mongoid/errors/mixed_relations.rb +4 -9
- data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
- data/lib/mongoid/errors/mongoid_error.rb +54 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
- data/lib/mongoid/errors/no_default_session.rb +23 -0
- data/lib/mongoid/errors/no_environment.rb +3 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
- data/lib/mongoid/errors/no_parent.rb +24 -0
- data/lib/mongoid/errors/no_session_config.rb +22 -0
- data/lib/mongoid/errors/no_session_database.rb +27 -0
- data/lib/mongoid/errors/no_session_hosts.rb +27 -0
- data/lib/mongoid/errors/no_sessions_config.rb +20 -0
- data/lib/mongoid/errors/readonly_attribute.rb +25 -0
- data/lib/mongoid/errors/scope_overwrite.rb +4 -4
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
- data/lib/mongoid/errors/unknown_attribute.rb +25 -0
- data/lib/mongoid/errors/unsaved_document.rb +4 -8
- data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
- data/lib/mongoid/errors/unsupported_version.rb +4 -4
- data/lib/mongoid/errors/validations.rb +7 -6
- data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
- data/lib/mongoid/extensions.rb +28 -76
- data/lib/mongoid/extensions/array.rb +127 -0
- data/lib/mongoid/extensions/big_decimal.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +24 -0
- data/lib/mongoid/extensions/date.rb +70 -0
- data/lib/mongoid/extensions/date_time.rb +68 -0
- data/lib/mongoid/extensions/false_class.rb +26 -0
- data/lib/mongoid/extensions/float.rb +44 -0
- data/lib/mongoid/extensions/hash.rb +91 -0
- data/lib/mongoid/extensions/integer.rb +54 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +21 -0
- data/lib/mongoid/extensions/object.rb +188 -0
- data/lib/mongoid/extensions/object_id.rb +53 -0
- data/lib/mongoid/extensions/range.rb +55 -0
- data/lib/mongoid/extensions/regexp.rb +27 -0
- data/lib/mongoid/extensions/set.rb +55 -0
- data/lib/mongoid/extensions/string.rb +155 -0
- data/lib/mongoid/extensions/symbol.rb +54 -0
- data/lib/mongoid/extensions/time.rb +78 -0
- data/lib/mongoid/extensions/time_with_zone.rb +55 -0
- data/lib/mongoid/extensions/true_class.rb +26 -0
- data/lib/mongoid/factory.rb +1 -1
- data/lib/mongoid/fields.rb +129 -194
- data/lib/mongoid/fields/foreign_key.rb +134 -0
- data/lib/mongoid/fields/localized.rb +73 -0
- data/lib/mongoid/fields/standard.rb +268 -0
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields/validators/macro.rb +83 -0
- data/lib/mongoid/finders.rb +42 -43
- data/lib/mongoid/hierarchy.rb +25 -14
- data/lib/mongoid/identity_map.rb +31 -19
- data/lib/mongoid/indexes.rb +66 -15
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- data/lib/mongoid/inspection.rb +1 -1
- data/lib/mongoid/javascript.rb +1 -1
- data/lib/mongoid/json.rb +2 -2
- data/lib/mongoid/loggable.rb +69 -0
- data/lib/mongoid/matchers.rb +1 -1
- data/lib/mongoid/matchers/all.rb +7 -8
- data/lib/mongoid/matchers/and.rb +3 -3
- data/lib/mongoid/matchers/default.rb +6 -4
- data/lib/mongoid/matchers/exists.rb +2 -2
- data/lib/mongoid/matchers/gt.rb +2 -2
- data/lib/mongoid/matchers/gte.rb +2 -2
- data/lib/mongoid/matchers/in.rb +3 -7
- data/lib/mongoid/matchers/lt.rb +2 -2
- data/lib/mongoid/matchers/lte.rb +2 -2
- data/lib/mongoid/matchers/ne.rb +2 -2
- data/lib/mongoid/matchers/nin.rb +2 -2
- data/lib/mongoid/matchers/or.rb +2 -2
- data/lib/mongoid/matchers/size.rb +2 -2
- data/lib/mongoid/matchers/strategies.rb +3 -3
- data/lib/mongoid/multi_parameter_attributes.rb +8 -10
- data/lib/mongoid/nested_attributes.rb +17 -9
- data/lib/mongoid/observer.rb +1 -2
- data/lib/mongoid/paranoia.rb +13 -18
- data/lib/mongoid/persistence.rb +43 -39
- data/lib/mongoid/persistence/atomic.rb +2 -2
- data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
- data/lib/mongoid/persistence/atomic/bit.rb +5 -7
- data/lib/mongoid/persistence/atomic/inc.rb +5 -7
- data/lib/mongoid/persistence/atomic/operation.rb +45 -6
- data/lib/mongoid/persistence/atomic/pop.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
- data/lib/mongoid/persistence/atomic/push.rb +4 -10
- data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
- data/lib/mongoid/persistence/atomic/rename.rb +6 -7
- data/lib/mongoid/persistence/atomic/sets.rb +5 -7
- data/lib/mongoid/persistence/atomic/unset.rb +4 -5
- data/lib/mongoid/persistence/deletion.rb +2 -2
- data/lib/mongoid/persistence/insertion.rb +10 -16
- data/lib/mongoid/persistence/modification.rb +5 -9
- data/lib/mongoid/persistence/operations.rb +6 -19
- data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
- data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
- data/lib/mongoid/persistence/operations/insert.rb +4 -4
- data/lib/mongoid/persistence/operations/remove.rb +4 -4
- data/lib/mongoid/persistence/operations/update.rb +5 -5
- data/lib/mongoid/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations.rb +4 -6
- data/lib/mongoid/relations/accessors.rb +119 -19
- data/lib/mongoid/relations/auto_save.rb +59 -5
- data/lib/mongoid/relations/binding.rb +211 -2
- data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
- data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
- data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
- data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
- data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
- data/lib/mongoid/relations/builder.rb +3 -3
- data/lib/mongoid/relations/builders.rb +19 -16
- data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
- data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
- data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/many.rb +5 -5
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
- data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
- data/lib/mongoid/relations/cascading.rb +6 -4
- data/lib/mongoid/relations/cascading/delete.rb +3 -5
- data/lib/mongoid/relations/cascading/destroy.rb +3 -3
- data/lib/mongoid/relations/cascading/nullify.rb +3 -3
- data/lib/mongoid/relations/cascading/restrict.rb +37 -0
- data/lib/mongoid/relations/constraint.rb +4 -3
- data/lib/mongoid/relations/conversions.rb +5 -6
- data/lib/mongoid/relations/cyclic.rb +7 -7
- data/lib/mongoid/relations/embedded/batchable.rb +346 -0
- data/lib/mongoid/relations/embedded/in.rb +23 -12
- data/lib/mongoid/relations/embedded/many.rb +99 -161
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -61
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +200 -45
- data/lib/mongoid/relations/nested_builder.rb +3 -5
- data/lib/mongoid/relations/one.rb +2 -2
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/polymorphic.rb +9 -9
- data/lib/mongoid/relations/proxy.rb +60 -31
- data/lib/mongoid/relations/referenced/in.rb +40 -15
- data/lib/mongoid/relations/referenced/many.rb +117 -132
- data/lib/mongoid/relations/referenced/many_to_many.rb +101 -46
- data/lib/mongoid/relations/referenced/one.rb +34 -13
- data/lib/mongoid/relations/reflections.rb +3 -3
- data/lib/mongoid/relations/synchronization.rb +19 -23
- data/lib/mongoid/relations/targets/enumerable.rb +86 -57
- data/lib/mongoid/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +329 -0
- data/lib/mongoid/serialization.rb +8 -27
- data/lib/mongoid/sessions.rb +359 -0
- data/lib/mongoid/sessions/factory.rb +106 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded.rb +167 -59
- data/lib/mongoid/threaded/lifecycle.rb +21 -22
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/timestamps/created.rb +8 -4
- data/lib/mongoid/timestamps/timeless.rb +6 -4
- data/lib/mongoid/timestamps/updated.rb +3 -3
- data/lib/mongoid/unit_of_work.rb +61 -0
- data/lib/mongoid/validations.rb +27 -19
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +31 -5
- data/lib/mongoid/validations/uniqueness.rb +9 -12
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
- data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +59 -19
- data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
- data/lib/rails/generators/mongoid_generator.rb +5 -5
- data/lib/rails/mongoid.rb +69 -25
- metadata +110 -137
- checksums.yaml +0 -7
- data/lib/config/locales/bg.yml +0 -61
- data/lib/config/locales/de.yml +0 -61
- data/lib/config/locales/en-GB.yml +0 -64
- data/lib/config/locales/es.yml +0 -59
- data/lib/config/locales/fr.yml +0 -62
- data/lib/config/locales/hi.yml +0 -53
- data/lib/config/locales/hu.yml +0 -64
- data/lib/config/locales/id.yml +0 -62
- data/lib/config/locales/it.yml +0 -59
- data/lib/config/locales/ja.yml +0 -57
- data/lib/config/locales/kr.yml +0 -54
- data/lib/config/locales/nl.yml +0 -61
- data/lib/config/locales/pl.yml +0 -59
- data/lib/config/locales/pt-BR.yml +0 -60
- data/lib/config/locales/pt.yml +0 -60
- data/lib/config/locales/ro.yml +0 -66
- data/lib/config/locales/ru.yml +0 -61
- data/lib/config/locales/sv.yml +0 -60
- data/lib/config/locales/vi.yml +0 -62
- data/lib/config/locales/zh-CN.yml +0 -53
- data/lib/mongoid/collection.rb +0 -157
- data/lib/mongoid/collections.rb +0 -120
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/mongo.rb +0 -487
- data/lib/mongoid/criterion/builder.rb +0 -34
- data/lib/mongoid/criterion/complex.rb +0 -84
- data/lib/mongoid/criterion/creational.rb +0 -34
- data/lib/mongoid/criterion/exclusion.rb +0 -110
- data/lib/mongoid/criterion/inclusion.rb +0 -290
- data/lib/mongoid/criterion/optional.rb +0 -259
- data/lib/mongoid/criterion/selector.rb +0 -177
- data/lib/mongoid/cursor.rb +0 -88
- data/lib/mongoid/default_scope.rb +0 -36
- data/lib/mongoid/errors/invalid_type.rb +0 -25
- data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/array/deletion.rb +0 -29
- data/lib/mongoid/extensions/false_class/equality.rb +0 -26
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
- data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/hash/scoping.rb +0 -25
- data/lib/mongoid/extensions/integer/checks.rb +0 -23
- data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
- data/lib/mongoid/extensions/object/checks.rb +0 -29
- data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
- data/lib/mongoid/extensions/object/reflections.rb +0 -48
- data/lib/mongoid/extensions/object/substitutable.rb +0 -15
- data/lib/mongoid/extensions/object/yoda.rb +0 -44
- data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
- data/lib/mongoid/extensions/proc/scoping.rb +0 -25
- data/lib/mongoid/extensions/string/checks.rb +0 -36
- data/lib/mongoid/extensions/string/conversions.rb +0 -22
- data/lib/mongoid/extensions/string/inflections.rb +0 -118
- data/lib/mongoid/extensions/symbol/checks.rb +0 -23
- data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
- data/lib/mongoid/extensions/true_class/equality.rb +0 -26
- data/lib/mongoid/extras.rb +0 -31
- data/lib/mongoid/fields/internal/array.rb +0 -77
- data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
- data/lib/mongoid/fields/internal/bignum.rb +0 -10
- data/lib/mongoid/fields/internal/binary.rb +0 -11
- data/lib/mongoid/fields/internal/boolean.rb +0 -58
- data/lib/mongoid/fields/internal/date.rb +0 -51
- data/lib/mongoid/fields/internal/date_time.rb +0 -28
- data/lib/mongoid/fields/internal/false_class.rb +0 -10
- data/lib/mongoid/fields/internal/fixnum.rb +0 -10
- data/lib/mongoid/fields/internal/float.rb +0 -47
- data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
- data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
- data/lib/mongoid/fields/internal/hash.rb +0 -11
- data/lib/mongoid/fields/internal/integer.rb +0 -59
- data/lib/mongoid/fields/internal/localized.rb +0 -62
- data/lib/mongoid/fields/internal/nil_class.rb +0 -53
- data/lib/mongoid/fields/internal/object.rb +0 -11
- data/lib/mongoid/fields/internal/object_id.rb +0 -46
- data/lib/mongoid/fields/internal/range.rb +0 -61
- data/lib/mongoid/fields/internal/set.rb +0 -57
- data/lib/mongoid/fields/internal/string.rb +0 -42
- data/lib/mongoid/fields/internal/symbol.rb +0 -43
- data/lib/mongoid/fields/internal/time.rb +0 -23
- data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
- data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
- data/lib/mongoid/fields/internal/true_class.rb +0 -10
- data/lib/mongoid/fields/mappings.rb +0 -42
- data/lib/mongoid/fields/serializable.rb +0 -270
- data/lib/mongoid/identity.rb +0 -92
- data/lib/mongoid/keys.rb +0 -144
- data/lib/mongoid/logger.rb +0 -45
- data/lib/mongoid/multi_database.rb +0 -36
- data/lib/mongoid/named_scope.rb +0 -166
- data/lib/mongoid/relations/embedded/atomic.rb +0 -89
- data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
- data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
- data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
- data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
- data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
- data/lib/mongoid/relations/referenced/batch.rb +0 -73
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
@@ -1,63 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
module Fields #:nodoc:
|
4
|
-
module Internal #:nodoc:
|
5
|
-
|
6
|
-
# Defines the behaviour for big decimal fields.
|
7
|
-
class BigDecimal
|
8
|
-
include Serializable
|
9
|
-
|
10
|
-
# Deserialize this field from the type stored in MongoDB to the type
|
11
|
-
# defined on the model.
|
12
|
-
#
|
13
|
-
# @example Deserialize the field.
|
14
|
-
# field.deserialize(object)
|
15
|
-
#
|
16
|
-
# @param [ Object ] object The object to cast.
|
17
|
-
#
|
18
|
-
# @return [ BigDecimal ] The converted big decimal.
|
19
|
-
#
|
20
|
-
# @since 2.1.0
|
21
|
-
def deserialize(object)
|
22
|
-
return object unless object
|
23
|
-
begin
|
24
|
-
Float(object) unless object == 'NaN'
|
25
|
-
::BigDecimal.new(object)
|
26
|
-
rescue ArgumentError, TypeError
|
27
|
-
object
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# Special case to serialize the object.
|
32
|
-
#
|
33
|
-
# @example Convert to a selection.
|
34
|
-
# field.selection(object)
|
35
|
-
#
|
36
|
-
# @param [ Object ] The object to convert.
|
37
|
-
#
|
38
|
-
# @return [ Object ] The converted object.
|
39
|
-
#
|
40
|
-
# @since 2.4.0
|
41
|
-
def selection(object)
|
42
|
-
return object if object.is_a?(::Hash)
|
43
|
-
serialize(object)
|
44
|
-
end
|
45
|
-
|
46
|
-
# Serialize the object from the type defined in the model to a MongoDB
|
47
|
-
# compatible object to store.
|
48
|
-
#
|
49
|
-
# @example Serialize the field.
|
50
|
-
# field.serialize(object)
|
51
|
-
#
|
52
|
-
# @param [ Object ] object The object to cast.
|
53
|
-
#
|
54
|
-
# @return [ String ] The converted string.
|
55
|
-
#
|
56
|
-
# @since 2.1.0
|
57
|
-
def serialize(object)
|
58
|
-
object ? object.to_s : object
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
module Fields #:nodoc:
|
4
|
-
module Internal #:nodoc:
|
5
|
-
|
6
|
-
# Defines the behaviour for boolean fields.
|
7
|
-
class Boolean
|
8
|
-
include Serializable
|
9
|
-
|
10
|
-
MAPPINGS = {
|
11
|
-
true => true,
|
12
|
-
"true" => true,
|
13
|
-
"TRUE" => true,
|
14
|
-
"1" => true,
|
15
|
-
1 => true,
|
16
|
-
1.0 => true,
|
17
|
-
false => false,
|
18
|
-
"false" => false,
|
19
|
-
"FALSE" => false,
|
20
|
-
"0" => false,
|
21
|
-
0 => false,
|
22
|
-
0.0 => false
|
23
|
-
}
|
24
|
-
|
25
|
-
# Special case to serialize the object.
|
26
|
-
#
|
27
|
-
# @example Convert to a selection.
|
28
|
-
# field.selection(object)
|
29
|
-
#
|
30
|
-
# @param [ Object ] The object to convert.
|
31
|
-
#
|
32
|
-
# @return [ Object ] The converted object.
|
33
|
-
#
|
34
|
-
# @since 2.4.0
|
35
|
-
def selection(object)
|
36
|
-
return object if object.is_a?(::Hash)
|
37
|
-
serialize(object)
|
38
|
-
end
|
39
|
-
|
40
|
-
# Serialize the object from the type defined in the model to a MongoDB
|
41
|
-
# compatible object to store.
|
42
|
-
#
|
43
|
-
# @example Serialize the field.
|
44
|
-
# field.serialize(object)
|
45
|
-
#
|
46
|
-
# @param [ Object ] object The object to cast.
|
47
|
-
#
|
48
|
-
# @return [ true, false ] The converted boolean.
|
49
|
-
#
|
50
|
-
# @since 2.1.0
|
51
|
-
def serialize(object)
|
52
|
-
object = MAPPINGS[object]
|
53
|
-
object.nil? ? nil : object
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
module Fields #:nodoc:
|
4
|
-
module Internal #:nodoc:
|
5
|
-
|
6
|
-
# Defines the behaviour for date fields.
|
7
|
-
class Date
|
8
|
-
include Serializable
|
9
|
-
include Timekeeping
|
10
|
-
|
11
|
-
# Deserialize this field from the type stored in MongoDB to the type
|
12
|
-
# defined on the model.
|
13
|
-
#
|
14
|
-
# @example Deserialize the field.
|
15
|
-
# field.deserialize(object)
|
16
|
-
#
|
17
|
-
# @param [ Object ] object The object to cast.
|
18
|
-
#
|
19
|
-
# @return [ Date ] The converted date.
|
20
|
-
#
|
21
|
-
# @since 2.1.0
|
22
|
-
def deserialize(object)
|
23
|
-
return nil if object.blank?
|
24
|
-
if Mongoid::Config.use_utc?
|
25
|
-
object.to_date
|
26
|
-
else
|
27
|
-
::Date.new(object.year, object.month, object.day)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
protected
|
32
|
-
|
33
|
-
# Converts the date to a time to persist.
|
34
|
-
#
|
35
|
-
# @example Convert the date to a time.
|
36
|
-
# Date.convert_to_time(date)
|
37
|
-
#
|
38
|
-
# @param [ Date ] value The date to convert.
|
39
|
-
#
|
40
|
-
# @return [ Time ] The date converted.
|
41
|
-
#
|
42
|
-
# @since 2.1.0
|
43
|
-
def convert_to_time(value)
|
44
|
-
value = ::Date.parse(value) if value.is_a?(::String)
|
45
|
-
value = ::Date.civil(*value) if value.is_a?(::Array)
|
46
|
-
::Time.utc(value.year, value.month, value.day)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
module Fields #:nodoc:
|
4
|
-
module Internal #:nodoc:
|
5
|
-
|
6
|
-
# Defines the behaviour for date time fields.
|
7
|
-
class DateTime
|
8
|
-
include Serializable
|
9
|
-
include Timekeeping
|
10
|
-
|
11
|
-
# Deserialize this field from the type stored in MongoDB to the type
|
12
|
-
# defined on the model.
|
13
|
-
#
|
14
|
-
# @example Deserialize the field.
|
15
|
-
# field.deserialize(object)
|
16
|
-
#
|
17
|
-
# @param [ Object ] object The object to cast.
|
18
|
-
#
|
19
|
-
# @return [ DateTime ] The converted date time.
|
20
|
-
#
|
21
|
-
# @since 2.1.0
|
22
|
-
def deserialize(object)
|
23
|
-
super(object).try(:to_datetime)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
module Fields #:nodoc:
|
4
|
-
module Internal #:nodoc:
|
5
|
-
|
6
|
-
# Defines the behaviour for float fields.
|
7
|
-
class Float
|
8
|
-
include Serializable
|
9
|
-
|
10
|
-
# Special case to serialize the object.
|
11
|
-
#
|
12
|
-
# @example Convert to a selection.
|
13
|
-
# field.selection(object)
|
14
|
-
#
|
15
|
-
# @param [ Object ] The object to convert.
|
16
|
-
#
|
17
|
-
# @return [ Object ] The converted object.
|
18
|
-
#
|
19
|
-
# @since 2.4.0
|
20
|
-
def selection(object)
|
21
|
-
return object if object.is_a?(::Hash)
|
22
|
-
serialize(object)
|
23
|
-
end
|
24
|
-
|
25
|
-
# Serialize the object from the type defined in the model to a MongoDB
|
26
|
-
# compatible object to store.
|
27
|
-
#
|
28
|
-
# @example Serialize the field.
|
29
|
-
# field.serialize(object)
|
30
|
-
#
|
31
|
-
# @param [ Object ] object The object to cast.
|
32
|
-
#
|
33
|
-
# @return [ Float ] The converted float.
|
34
|
-
#
|
35
|
-
# @since 2.1.0
|
36
|
-
def serialize(object)
|
37
|
-
return nil if object.blank?
|
38
|
-
begin
|
39
|
-
Float(object)
|
40
|
-
rescue ArgumentError => e
|
41
|
-
object
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
module Fields #:nodoc:
|
4
|
-
module Internal #:nodoc:
|
5
|
-
module ForeignKeys #:nodoc:
|
6
|
-
|
7
|
-
# Defines the behaviour for array foreign key fields.
|
8
|
-
class Array
|
9
|
-
include Serializable
|
10
|
-
|
11
|
-
# Adds the atomic changes for this type of resizable field.
|
12
|
-
#
|
13
|
-
# @example Add the atomic changes.
|
14
|
-
# field.add_atomic_changes(doc, "key", {}, [], [])
|
15
|
-
#
|
16
|
-
# @todo: Durran: Refactor, big time.
|
17
|
-
#
|
18
|
-
# @param [ Document ] document The document to add to.
|
19
|
-
# @param [ String ] name The name of the field.
|
20
|
-
# @param [ String ] key The atomic location of the field.
|
21
|
-
# @param [ Hash ] mods The current modifications.
|
22
|
-
# @param [ Array ] new The new elements to add.
|
23
|
-
# @param [ Array ] old The old elements getting removed.
|
24
|
-
#
|
25
|
-
# @since 2.4.0
|
26
|
-
def add_atomic_changes(document, name, key, mods, new_elements, old_elements)
|
27
|
-
old = (old_elements || [])
|
28
|
-
new = (new_elements || [])
|
29
|
-
if new.length > old.length
|
30
|
-
if new.first(old.length) == old
|
31
|
-
document.atomic_array_add_to_sets[key] = new.drop(old.length)
|
32
|
-
else
|
33
|
-
mods[key] = document.attributes[name]
|
34
|
-
end
|
35
|
-
elsif new.length < old.length
|
36
|
-
pulls = old - new
|
37
|
-
if new == old - pulls
|
38
|
-
document.atomic_array_pulls[key] = pulls
|
39
|
-
else
|
40
|
-
mods[key] = document.attributes[name]
|
41
|
-
end
|
42
|
-
elsif new != old
|
43
|
-
mods[key] = document.attributes[name]
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# Is the field a BSON::ObjectId?
|
48
|
-
#
|
49
|
-
# @example Is the field a BSON::ObjectId?
|
50
|
-
# field.object_id_field?
|
51
|
-
#
|
52
|
-
# @return [ true, false ] If the field is a BSON::ObjectId.
|
53
|
-
#
|
54
|
-
# @since 2.2.0
|
55
|
-
def object_id_field?
|
56
|
-
@object_id_field ||=
|
57
|
-
metadata.polymorphic? ? true : metadata.klass.using_object_ids?
|
58
|
-
end
|
59
|
-
|
60
|
-
# Array fields are resizable.
|
61
|
-
#
|
62
|
-
# @example Is this field resizable?
|
63
|
-
# field.resizable?
|
64
|
-
#
|
65
|
-
# @return [ true ] Always true.
|
66
|
-
#
|
67
|
-
# @since 2.4.0
|
68
|
-
def resizable?; true; end
|
69
|
-
|
70
|
-
# Serialize the object from the type defined in the model to a MongoDB
|
71
|
-
# compatible object to store.
|
72
|
-
#
|
73
|
-
# @example Serialize the field.
|
74
|
-
# field.serialize(object)
|
75
|
-
#
|
76
|
-
# @param [ Object ] object The object to cast.
|
77
|
-
#
|
78
|
-
# @return [ Array ] The converted object.
|
79
|
-
#
|
80
|
-
# @since 2.1.0
|
81
|
-
def serialize(object)
|
82
|
-
object ? constraint.convert(object) : []
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid #:nodoc:
|
3
|
-
module Fields #:nodoc:
|
4
|
-
module Internal #:nodoc:
|
5
|
-
module ForeignKeys #:nodoc:
|
6
|
-
|
7
|
-
# Defines the behaviour for integer foreign key fields.
|
8
|
-
class Object
|
9
|
-
include Serializable
|
10
|
-
|
11
|
-
# Is the field a BSON::ObjectId?
|
12
|
-
#
|
13
|
-
# @example Is the field a BSON::ObjectId?
|
14
|
-
# field.object_id_field?
|
15
|
-
#
|
16
|
-
# @return [ true, false ] If the field is a BSON::ObjectId.
|
17
|
-
#
|
18
|
-
# @since 2.2.0
|
19
|
-
def object_id_field?
|
20
|
-
@object_id_field ||=
|
21
|
-
metadata.polymorphic? ? true : metadata.klass.using_object_ids?
|
22
|
-
end
|
23
|
-
|
24
|
-
# Serialize the object from the type defined in the model to a MongoDB
|
25
|
-
# compatible object to store.
|
26
|
-
#
|
27
|
-
# @example Serialize the field.
|
28
|
-
# field.serialize(object)
|
29
|
-
#
|
30
|
-
# @param [ Object ] object The object to cast.
|
31
|
-
#
|
32
|
-
# @return [ Array ] The converted object.
|
33
|
-
#
|
34
|
-
# @since 2.1.0
|
35
|
-
def serialize(object)
|
36
|
-
return nil if object.blank?
|
37
|
-
if object_id_field?
|
38
|
-
constraint.convert(object)
|
39
|
-
else
|
40
|
-
case object
|
41
|
-
when ::Array
|
42
|
-
object.replace(object.map { |arg| serialize(arg) })
|
43
|
-
when ::Hash
|
44
|
-
object.each_pair do |key, value|
|
45
|
-
object[key] = serialize(value)
|
46
|
-
end
|
47
|
-
else
|
48
|
-
metadata.klass.fields["_id"].serialize(object)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|