mongoid 7.6.0 → 8.0.1
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +2 -0
- data/README.md +3 -3
- data/Rakefile +21 -85
- data/lib/config/locales/en.yml +46 -30
- data/lib/mongoid/association/accessors.rb +32 -3
- data/lib/mongoid/association/bindable.rb +48 -0
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +28 -5
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +40 -18
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
- data/lib/mongoid/association/macros.rb +2 -1
- data/lib/mongoid/association/many.rb +5 -0
- data/lib/mongoid/association/nested/many.rb +2 -1
- data/lib/mongoid/association/proxy.rb +12 -0
- data/lib/mongoid/association/referenced/auto_save.rb +3 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -18
- data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
- data/lib/mongoid/association/referenced/syncable.rb +2 -2
- data/lib/mongoid/association/relatable.rb +38 -4
- data/lib/mongoid/attributes/processing.rb +9 -2
- data/lib/mongoid/attributes.rb +30 -27
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +37 -2
- data/lib/mongoid/clients/options.rb +4 -0
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/config.rb +15 -11
- data/lib/mongoid/contextual/aggregable/memory.rb +23 -15
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +55 -28
- data/lib/mongoid/contextual/mongo.rb +173 -287
- data/lib/mongoid/contextual/none.rb +33 -15
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/includable.rb +24 -20
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -15
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -16
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/optional.rb +3 -9
- data/lib/mongoid/criteria/queryable/options.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +2 -24
- data/lib/mongoid/criteria/queryable/selector.rb +90 -5
- data/lib/mongoid/criteria/queryable/smash.rb +39 -6
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +11 -6
- data/lib/mongoid/criteria.rb +1 -28
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +88 -33
- data/lib/mongoid/equality.rb +4 -4
- data/lib/mongoid/errors/document_not_found.rb +6 -2
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +5 -1
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors.rb +2 -2
- data/lib/mongoid/extensions/array.rb +8 -6
- data/lib/mongoid/extensions/big_decimal.rb +29 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/float.rb +4 -5
- data/lib/mongoid/extensions/hash.rb +12 -5
- data/lib/mongoid/extensions/integer.rb +4 -5
- data/lib/mongoid/extensions/object.rb +2 -0
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +2 -13
- data/lib/mongoid/extensions/symbol.rb +3 -14
- data/lib/mongoid/extensions/time.rb +27 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +42 -7
- data/lib/mongoid/fields/foreign_key.rb +7 -0
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +49 -7
- data/lib/mongoid/findable.rb +21 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +4 -1
- data/lib/mongoid/interceptable.rb +69 -9
- data/lib/mongoid/persistable/creatable.rb +14 -5
- data/lib/mongoid/persistable/updatable.rb +12 -5
- data/lib/mongoid/persistence_context.rb +8 -42
- data/lib/mongoid/query_cache.rb +6 -258
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +7 -3
- data/lib/mongoid/scopable.rb +9 -11
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/shardable.rb +11 -35
- data/lib/mongoid/stateful.rb +27 -1
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +1 -0
- data/lib/mongoid/validatable/uniqueness.rb +2 -1
- data/lib/mongoid/version.rb +1 -5
- data/lib/mongoid/warnings.rb +3 -4
- data/lib/mongoid.rb +1 -0
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -12
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +95 -1
- data/spec/integration/callbacks_spec.rb +226 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -15
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +198 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +62 -13
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +14 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +480 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +2 -2
- data/spec/mongoid/config_spec.rb +52 -15
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +521 -14
- data/spec/mongoid/contextual/mongo_spec.rb +566 -426
- data/spec/mongoid/contextual/none_spec.rb +11 -19
- data/spec/mongoid/copyable_spec.rb +451 -2
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
- data/spec/mongoid/criteria/queryable/selector_spec.rb +16 -77
- data/spec/mongoid/criteria/queryable/storable_spec.rb +0 -72
- data/spec/mongoid/criteria_spec.rb +469 -1201
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +48 -76
- data/spec/mongoid/extensions/hash_spec.rb +30 -0
- data/spec/mongoid/extensions/integer_spec.rb +45 -66
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields_spec.rb +321 -50
- data/spec/mongoid/findable_spec.rb +64 -29
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +16 -19
- data/spec/mongoid/interceptable_spec.rb +584 -5
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +24 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +1 -156
- data/spec/mongoid/reloadable_spec.rb +35 -2
- data/spec/mongoid/scopable_spec.rb +36 -34
- data/spec/mongoid/serializable_spec.rb +14 -7
- data/spec/mongoid/shardable_models.rb +0 -14
- data/spec/mongoid/shardable_spec.rb +61 -153
- data/spec/mongoid/stateful_spec.rb +28 -0
- data/spec/mongoid/timestamps_spec.rb +390 -0
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +116 -0
- data/spec/mongoid/touchable_spec_models.rb +12 -8
- data/spec/mongoid/traversable_spec.rb +4 -11
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +1 -7
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/docker_runner.rb +1 -8
- data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
- data/spec/shared/lib/mrss/lite_constraints.rb +2 -10
- data/spec/shared/lib/mrss/server_version_registry.rb +24 -17
- data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
- data/spec/shared/lib/mrss/utils.rb +6 -28
- data/spec/shared/share/Dockerfile.erb +107 -33
- data/spec/shared/shlib/distro.sh +0 -10
- data/spec/shared/shlib/server.sh +33 -64
- data/spec/shared/shlib/set_env.sh +71 -12
- data/spec/support/constraints.rb +24 -0
- data/spec/support/expectations.rb +17 -20
- data/spec/support/macros.rb +30 -0
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +3 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +1 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +0 -0
- metadata +695 -641
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
- data/spec/shared/CANDIDATE.md +0 -28
- data/spec/shared/lib/mrss/release/candidate.rb +0 -281
- data/spec/shared/lib/mrss/release/product_data.rb +0 -144
- data/spec/shared/lib/tasks/candidate.rake +0 -64
data/lib/mongoid/errors.rb
CHANGED
|
@@ -6,7 +6,6 @@ require "mongoid/errors/callback"
|
|
|
6
6
|
require "mongoid/errors/criteria_argument_required"
|
|
7
7
|
require "mongoid/errors/document_not_destroyed"
|
|
8
8
|
require "mongoid/errors/document_not_found"
|
|
9
|
-
require "mongoid/errors/eager_load"
|
|
10
9
|
require "mongoid/errors/empty_config_file"
|
|
11
10
|
require "mongoid/errors/in_memory_collation_not_supported"
|
|
12
11
|
require "mongoid/errors/invalid_collection"
|
|
@@ -15,6 +14,7 @@ require "mongoid/errors/invalid_config_option"
|
|
|
15
14
|
require "mongoid/errors/invalid_dependent_strategy"
|
|
16
15
|
require "mongoid/errors/invalid_field"
|
|
17
16
|
require "mongoid/errors/invalid_field_option"
|
|
17
|
+
require "mongoid/errors/invalid_field_type"
|
|
18
18
|
require "mongoid/errors/invalid_find"
|
|
19
19
|
require "mongoid/errors/invalid_includes"
|
|
20
20
|
require "mongoid/errors/invalid_index"
|
|
@@ -24,6 +24,7 @@ require "mongoid/errors/invalid_persistence_option"
|
|
|
24
24
|
require "mongoid/errors/invalid_query"
|
|
25
25
|
# Must be after invalid_query.
|
|
26
26
|
require "mongoid/errors/invalid_discriminator_key_target"
|
|
27
|
+
require "mongoid/errors/invalid_dot_dollar_assignment"
|
|
27
28
|
require "mongoid/errors/invalid_elem_match_operator"
|
|
28
29
|
require "mongoid/errors/invalid_estimated_count_criteria"
|
|
29
30
|
require "mongoid/errors/invalid_expression_operator"
|
|
@@ -36,7 +37,6 @@ require "mongoid/errors/invalid_set_polymorphic_relation"
|
|
|
36
37
|
require "mongoid/errors/invalid_storage_options"
|
|
37
38
|
require "mongoid/errors/invalid_storage_parent"
|
|
38
39
|
require "mongoid/errors/invalid_time"
|
|
39
|
-
require "mongoid/errors/invalid_value"
|
|
40
40
|
require "mongoid/errors/inverse_not_found"
|
|
41
41
|
require "mongoid/errors/mixed_relations"
|
|
42
42
|
require "mongoid/errors/mixed_client_configuration"
|
|
@@ -87,7 +87,7 @@ module Mongoid
|
|
|
87
87
|
# @example Mongoize the object.
|
|
88
88
|
# object.mongoize
|
|
89
89
|
#
|
|
90
|
-
# @return [ Array ] The object.
|
|
90
|
+
# @return [ Array | nil ] The object or nil.
|
|
91
91
|
def mongoize
|
|
92
92
|
::Array.mongoize(self)
|
|
93
93
|
end
|
|
@@ -144,12 +144,12 @@ module Mongoid
|
|
|
144
144
|
#
|
|
145
145
|
# @param [ Object ] object The object to mongoize.
|
|
146
146
|
#
|
|
147
|
-
# @return [ Array ] The object mongoized.
|
|
147
|
+
# @return [ Array | nil ] The object mongoized or nil.
|
|
148
148
|
def mongoize(object)
|
|
149
|
-
if object.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
149
|
+
return if object.nil?
|
|
150
|
+
case object
|
|
151
|
+
when ::Array, ::Set
|
|
152
|
+
object.map(&:mongoize)
|
|
153
153
|
end
|
|
154
154
|
end
|
|
155
155
|
|
|
@@ -169,3 +169,5 @@ end
|
|
|
169
169
|
|
|
170
170
|
::Array.__send__(:include, Mongoid::Extensions::Array)
|
|
171
171
|
::Array.extend(Mongoid::Extensions::Array::ClassMethods)
|
|
172
|
+
|
|
173
|
+
::Mongoid.deprecate(Array, :blank_criteria)
|
|
@@ -20,9 +20,9 @@ module Mongoid
|
|
|
20
20
|
# @example Mongoize the object.
|
|
21
21
|
# object.mongoize
|
|
22
22
|
#
|
|
23
|
-
# @return [
|
|
23
|
+
# @return [ String | BSON::Decimal128 | nil ] The object or nil.
|
|
24
24
|
def mongoize
|
|
25
|
-
|
|
25
|
+
::BigDecimal.mongoize(self)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
# Is the BigDecimal a number?
|
|
@@ -39,26 +39,45 @@ module Mongoid
|
|
|
39
39
|
|
|
40
40
|
# Convert the object from its mongo friendly ruby type to this type.
|
|
41
41
|
#
|
|
42
|
-
# @example Demongoize the object.
|
|
43
|
-
# Object.demongoize(object)
|
|
44
|
-
#
|
|
45
42
|
# @param [ Object ] object The object to demongoize.
|
|
46
43
|
#
|
|
47
|
-
# @return [ BigDecimal
|
|
44
|
+
# @return [ BigDecimal | nil ] A BigDecimal derived from the object or nil.
|
|
48
45
|
def demongoize(object)
|
|
49
|
-
|
|
46
|
+
return if object.blank?
|
|
47
|
+
if object.is_a?(BSON::Decimal128)
|
|
48
|
+
object.to_big_decimal
|
|
49
|
+
elsif object.numeric?
|
|
50
|
+
BigDecimal(object.to_s)
|
|
51
|
+
elsif object.numeric?
|
|
52
|
+
object.to_d
|
|
53
|
+
end
|
|
50
54
|
end
|
|
51
55
|
|
|
52
|
-
# Mongoize an object of any type to how it's stored in the db
|
|
56
|
+
# Mongoize an object of any type to how it's stored in the db.
|
|
53
57
|
#
|
|
54
58
|
# @example Mongoize the object.
|
|
55
59
|
# BigDecimal.mongoize(123)
|
|
56
60
|
#
|
|
57
61
|
# @param [ Object ] object The object to Mongoize
|
|
58
62
|
#
|
|
59
|
-
# @return [ String
|
|
63
|
+
# @return [ String | BSON::Decimal128 | nil ] A String or Decimal128
|
|
64
|
+
# representing the object or nil. String if Mongoid.map_big_decimal_to_decimal128
|
|
65
|
+
# is false, BSON::Decimal128 otherwise.
|
|
60
66
|
def mongoize(object)
|
|
61
|
-
|
|
67
|
+
return if object.blank?
|
|
68
|
+
if Mongoid.map_big_decimal_to_decimal128
|
|
69
|
+
if object.is_a?(BSON::Decimal128)
|
|
70
|
+
object
|
|
71
|
+
elsif object.is_a?(BigDecimal)
|
|
72
|
+
BSON::Decimal128.new(object)
|
|
73
|
+
elsif object.numeric?
|
|
74
|
+
BSON::Decimal128.new(object.to_s)
|
|
75
|
+
end
|
|
76
|
+
else
|
|
77
|
+
if object.is_a?(BSON::Decimal128) || object.numeric?
|
|
78
|
+
object.to_s
|
|
79
|
+
end
|
|
80
|
+
end
|
|
62
81
|
end
|
|
63
82
|
end
|
|
64
83
|
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongoid
|
|
4
|
+
module Extensions
|
|
5
|
+
module Binary
|
|
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
|
+
# object.mongoize
|
|
12
|
+
#
|
|
13
|
+
# @return [ BSON::Binary | nil ] The object.
|
|
14
|
+
def mongoize
|
|
15
|
+
BSON::Binary.mongoize(self)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
module ClassMethods
|
|
19
|
+
|
|
20
|
+
# Mongoize an object of any type to how it's stored in the db.
|
|
21
|
+
#
|
|
22
|
+
# @example Mongoize the object.
|
|
23
|
+
# BigDecimal.mongoize(123)
|
|
24
|
+
#
|
|
25
|
+
# @param [ Object ] object The object to Mongoize
|
|
26
|
+
#
|
|
27
|
+
# @return [ BSON::Binary | nil ] A Binary representing the object or nil.
|
|
28
|
+
def mongoize(object)
|
|
29
|
+
return if object.nil?
|
|
30
|
+
case object
|
|
31
|
+
when BSON::Binary then object
|
|
32
|
+
when String, Symbol then BSON::Binary.new(object.to_s)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
alias :demongoize :mongoize
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
BSON::Binary.__send__(:include, Mongoid::Extensions::Binary)
|
|
42
|
+
BSON::Binary.extend(Mongoid::Extensions::Binary::ClassMethods)
|
|
@@ -11,10 +11,16 @@ module Mongoid
|
|
|
11
11
|
# @example Mongoize the object.
|
|
12
12
|
# Boolean.mongoize("123.11")
|
|
13
13
|
#
|
|
14
|
-
# @return [
|
|
14
|
+
# @return [ true | false | nil ] The object mongoized or nil.
|
|
15
15
|
def mongoize(object)
|
|
16
|
-
|
|
16
|
+
return if object.nil?
|
|
17
|
+
if object.to_s =~ (/\A(true|t|yes|y|on|1|1.0)\z/i)
|
|
18
|
+
true
|
|
19
|
+
elsif object.to_s =~ (/\A(false|f|no|n|off|0|0.0)\z/i)
|
|
20
|
+
false
|
|
21
|
+
end
|
|
17
22
|
end
|
|
23
|
+
alias :demongoize :mongoize
|
|
18
24
|
end
|
|
19
25
|
end
|
|
20
26
|
end
|
|
@@ -4,12 +4,6 @@ module Mongoid
|
|
|
4
4
|
module Extensions
|
|
5
5
|
module Date
|
|
6
6
|
|
|
7
|
-
# Constant for epoch - used when passing invalid times.
|
|
8
|
-
#
|
|
9
|
-
# @deprecated No longer used as a return value from #mongoize passed
|
|
10
|
-
# an invalid date string.
|
|
11
|
-
EPOCH = ::Date.new(1970, 1, 1)
|
|
12
|
-
|
|
13
7
|
# Convert the date into a time.
|
|
14
8
|
#
|
|
15
9
|
# @example Convert the date to a time.
|
|
@@ -43,9 +37,20 @@ module Mongoid
|
|
|
43
37
|
#
|
|
44
38
|
# @param [ Time ] object The time from Mongo.
|
|
45
39
|
#
|
|
46
|
-
# @return [ Date ] The object as a date.
|
|
40
|
+
# @return [ Date | nil ] The object as a date or nil.
|
|
47
41
|
def demongoize(object)
|
|
48
|
-
|
|
42
|
+
return if object.nil?
|
|
43
|
+
if object.is_a?(String)
|
|
44
|
+
object = begin
|
|
45
|
+
object.__mongoize_time__
|
|
46
|
+
rescue ArgumentError
|
|
47
|
+
nil
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
if object.acts_like?(:time) || object.acts_like?(:date)
|
|
52
|
+
::Date.new(object.year, object.month, object.day)
|
|
53
|
+
end
|
|
49
54
|
end
|
|
50
55
|
|
|
51
56
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
@@ -56,20 +61,21 @@ module Mongoid
|
|
|
56
61
|
#
|
|
57
62
|
# @param [ Object ] object The object to mongoize.
|
|
58
63
|
#
|
|
59
|
-
# @return [ Time ] The object mongoized.
|
|
64
|
+
# @return [ Time | nil ] The object mongoized or nil.
|
|
60
65
|
def mongoize(object)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
end
|
|
69
|
-
::Time.utc(time.year, time.month, time.day)
|
|
70
|
-
rescue ArgumentError
|
|
71
|
-
nil
|
|
66
|
+
return if object.blank?
|
|
67
|
+
begin
|
|
68
|
+
if object.is_a?(String)
|
|
69
|
+
# https://jira.mongodb.org/browse/MONGOID-4460
|
|
70
|
+
time = ::Time.parse(object)
|
|
71
|
+
else
|
|
72
|
+
time = object.__mongoize_time__
|
|
72
73
|
end
|
|
74
|
+
rescue ArgumentError
|
|
75
|
+
nil
|
|
76
|
+
end
|
|
77
|
+
if time.acts_like?(:time)
|
|
78
|
+
::Time.utc(time.year, time.month, time.day)
|
|
73
79
|
end
|
|
74
80
|
end
|
|
75
81
|
end
|
|
@@ -39,7 +39,7 @@ module Mongoid
|
|
|
39
39
|
#
|
|
40
40
|
# @param [ Time ] object The time from Mongo.
|
|
41
41
|
#
|
|
42
|
-
# @return [ DateTime ] The object as a
|
|
42
|
+
# @return [ DateTime | nil ] The object as a datetime or nil.
|
|
43
43
|
def demongoize(object)
|
|
44
44
|
::Time.demongoize(object).try(:to_datetime)
|
|
45
45
|
end
|
|
@@ -34,12 +34,11 @@ module Mongoid
|
|
|
34
34
|
#
|
|
35
35
|
# @param [ Object ] object The object to mongoize.
|
|
36
36
|
#
|
|
37
|
-
# @return [
|
|
37
|
+
# @return [ Float | nil ] The object mongoized or nil.
|
|
38
38
|
def mongoize(object)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
nil
|
|
39
|
+
return if object.blank?
|
|
40
|
+
if object.numeric?
|
|
41
|
+
object.to_f
|
|
43
42
|
end
|
|
44
43
|
end
|
|
45
44
|
alias :demongoize :mongoize
|
|
@@ -11,7 +11,7 @@ module Mongoid
|
|
|
11
11
|
#
|
|
12
12
|
# @return [ Hash ] The converted hash.
|
|
13
13
|
def __evolve_object_id__
|
|
14
|
-
|
|
14
|
+
transform_values!(&:__evolve_object_id__)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
# Mongoizes each value in the hash to an object id if it is convertable.
|
|
@@ -24,7 +24,7 @@ module Mongoid
|
|
|
24
24
|
if id = self['$oid']
|
|
25
25
|
BSON::ObjectId.from_string(id)
|
|
26
26
|
else
|
|
27
|
-
|
|
27
|
+
transform_values!(&:__mongoize_object_id__)
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
@@ -148,7 +148,7 @@ module Mongoid
|
|
|
148
148
|
# @example Mongoize the object.
|
|
149
149
|
# object.mongoize
|
|
150
150
|
#
|
|
151
|
-
# @return [ Hash ] The object.
|
|
151
|
+
# @return [ Hash | nil ] The object mongoized or nil.
|
|
152
152
|
def mongoize
|
|
153
153
|
::Hash.mongoize(self)
|
|
154
154
|
end
|
|
@@ -217,10 +217,15 @@ module Mongoid
|
|
|
217
217
|
#
|
|
218
218
|
# @param [ Object ] object The object to mongoize.
|
|
219
219
|
#
|
|
220
|
-
# @return [ Hash ] The object mongoized.
|
|
220
|
+
# @return [ Hash | nil ] The object mongoized or nil.
|
|
221
221
|
def mongoize(object)
|
|
222
222
|
return if object.nil?
|
|
223
|
-
|
|
223
|
+
if object.is_a?(Hash)
|
|
224
|
+
# Need to use transform_values! which maintains the BSON::Document
|
|
225
|
+
# instead of transform_values which always returns a hash. To do this,
|
|
226
|
+
# we first need to dup the hash.
|
|
227
|
+
object.dup.transform_values!(&:mongoize)
|
|
228
|
+
end
|
|
224
229
|
end
|
|
225
230
|
|
|
226
231
|
# Can the size of this object change?
|
|
@@ -239,3 +244,5 @@ end
|
|
|
239
244
|
|
|
240
245
|
::Hash.__send__(:include, Mongoid::Extensions::Hash)
|
|
241
246
|
::Hash.extend(Mongoid::Extensions::Hash::ClassMethods)
|
|
247
|
+
|
|
248
|
+
::Mongoid.deprecate(Hash, :blank_criteria)
|
|
@@ -42,12 +42,11 @@ module Mongoid
|
|
|
42
42
|
# @example Mongoize the object.
|
|
43
43
|
# BigDecimal.mongoize("123.11")
|
|
44
44
|
#
|
|
45
|
-
# @return [
|
|
45
|
+
# @return [ Integer | nil ] The object mongoized or nil.
|
|
46
46
|
def mongoize(object)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
nil
|
|
47
|
+
return if object.blank?
|
|
48
|
+
if object.numeric?
|
|
49
|
+
object.to_i
|
|
51
50
|
end
|
|
52
51
|
end
|
|
53
52
|
alias :demongoize :mongoize
|
|
@@ -20,7 +20,7 @@ module Mongoid
|
|
|
20
20
|
# @example Mongoize the object.
|
|
21
21
|
# range.mongoize
|
|
22
22
|
#
|
|
23
|
-
# @return [ Hash ] The object mongoized.
|
|
23
|
+
# @return [ Hash | nil ] The object mongoized or nil.
|
|
24
24
|
def mongoize
|
|
25
25
|
::Range.mongoize(self)
|
|
26
26
|
end
|
|
@@ -44,9 +44,23 @@ module Mongoid
|
|
|
44
44
|
#
|
|
45
45
|
# @param [ Hash ] object The object to demongoize.
|
|
46
46
|
#
|
|
47
|
-
# @return [ Range ] The range.
|
|
47
|
+
# @return [ Range | nil ] The range, or nil if object cannot be represented as range.
|
|
48
|
+
#
|
|
49
|
+
# @note Ruby 2.6 and lower do not support endless ranges that Ruby 2.7+ support.
|
|
48
50
|
def demongoize(object)
|
|
49
|
-
object.nil?
|
|
51
|
+
return if object.nil?
|
|
52
|
+
if object.is_a?(Hash)
|
|
53
|
+
hash = object.slice('min', 'max', 'exclude_end', :min, :max, :exclude_end)
|
|
54
|
+
unless hash.blank?
|
|
55
|
+
begin
|
|
56
|
+
::Range.new(hash["min"] || hash[:min],
|
|
57
|
+
hash["max"] || hash[:max],
|
|
58
|
+
hash["exclude_end"] || hash[:exclude_end])
|
|
59
|
+
rescue ArgumentError # can be removed when Ruby version >= 2.7
|
|
60
|
+
nil
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
50
64
|
end
|
|
51
65
|
|
|
52
66
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
@@ -55,16 +69,33 @@ module Mongoid
|
|
|
55
69
|
# @example Mongoize the object.
|
|
56
70
|
# Range.mongoize(1..3)
|
|
57
71
|
#
|
|
58
|
-
# @param [
|
|
72
|
+
# @param [ Object ] object The object to mongoize.
|
|
59
73
|
#
|
|
60
|
-
# @return [ Hash ] The object mongoized.
|
|
74
|
+
# @return [ Hash | nil ] The object mongoized or nil.
|
|
61
75
|
def mongoize(object)
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
76
|
+
return if object.nil?
|
|
77
|
+
case object
|
|
78
|
+
when Hash then __mongoize_hash__(object)
|
|
79
|
+
when Range then __mongoize_range__(object)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
private
|
|
84
|
+
|
|
85
|
+
def __mongoize_hash__(object)
|
|
86
|
+
hash = object.stringify_keys
|
|
87
|
+
hash.slice!('min', 'max', 'exclude_end')
|
|
88
|
+
hash.compact!
|
|
89
|
+
hash.transform_values!(&:mongoize)
|
|
90
|
+
hash.blank? ? nil : hash
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def __mongoize_range__(object)
|
|
94
|
+
hash = {}
|
|
95
|
+
hash['min'] = object.begin.mongoize if object.begin
|
|
96
|
+
hash['max'] = object.end.mongoize if object.end
|
|
66
97
|
if object.respond_to?(:exclude_end?) && object.exclude_end?
|
|
67
|
-
hash
|
|
98
|
+
hash['exclude_end'] = true
|
|
68
99
|
end
|
|
69
100
|
hash
|
|
70
101
|
end
|
|
@@ -12,13 +12,20 @@ module Mongoid
|
|
|
12
12
|
# @example Mongoize the object.
|
|
13
13
|
# Regexp.mongoize(/\A[abc]/)
|
|
14
14
|
#
|
|
15
|
-
# @param [
|
|
15
|
+
# @param [ Object ] object The object to mongoize.
|
|
16
16
|
#
|
|
17
|
-
# @return [ Regexp ] The object mongoized.
|
|
17
|
+
# @return [ Regexp | nil ] The object mongoized or nil.
|
|
18
18
|
def mongoize(object)
|
|
19
|
-
return
|
|
20
|
-
|
|
19
|
+
return if object.nil?
|
|
20
|
+
case object
|
|
21
|
+
when String then ::Regexp.new(object)
|
|
22
|
+
when ::Regexp then object
|
|
23
|
+
when BSON::Regexp::Raw then object.compile
|
|
24
|
+
end
|
|
25
|
+
rescue RegexpError
|
|
26
|
+
nil
|
|
21
27
|
end
|
|
28
|
+
alias :demongoize :mongoize
|
|
22
29
|
end
|
|
23
30
|
end
|
|
24
31
|
end
|
|
@@ -10,7 +10,7 @@ module Mongoid
|
|
|
10
10
|
# @example Mongoize the object.
|
|
11
11
|
# set.mongoize
|
|
12
12
|
#
|
|
13
|
-
# @return [ Array ] The object mongoized.
|
|
13
|
+
# @return [ Array | nil ] The object mongoized or nil.
|
|
14
14
|
def mongoize
|
|
15
15
|
::Set.mongoize(self)
|
|
16
16
|
end
|
|
@@ -26,7 +26,10 @@ module Mongoid
|
|
|
26
26
|
#
|
|
27
27
|
# @return [ Set ] The set.
|
|
28
28
|
def demongoize(object)
|
|
29
|
-
|
|
29
|
+
case object
|
|
30
|
+
when ::Set then object
|
|
31
|
+
when ::Array then ::Set.new(object)
|
|
32
|
+
end
|
|
30
33
|
end
|
|
31
34
|
|
|
32
35
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
@@ -37,9 +40,13 @@ module Mongoid
|
|
|
37
40
|
#
|
|
38
41
|
# @param [ Set ] object The object to mongoize.
|
|
39
42
|
#
|
|
40
|
-
# @return [ Array ] The object mongoized.
|
|
43
|
+
# @return [ Array | nil ] The object mongoized or nil.
|
|
41
44
|
def mongoize(object)
|
|
42
|
-
object.
|
|
45
|
+
return if object.nil?
|
|
46
|
+
case object
|
|
47
|
+
when ::Set then ::Array.mongoize(object.to_a).uniq
|
|
48
|
+
when ::Array then ::Array.mongoize(object).uniq
|
|
49
|
+
end
|
|
43
50
|
end
|
|
44
51
|
end
|
|
45
52
|
end
|
|
@@ -149,18 +149,6 @@ module Mongoid
|
|
|
149
149
|
|
|
150
150
|
module ClassMethods
|
|
151
151
|
|
|
152
|
-
# Convert the object from its mongo friendly ruby type to this type.
|
|
153
|
-
#
|
|
154
|
-
# @example Demongoize the object.
|
|
155
|
-
# String.demongoize(object)
|
|
156
|
-
#
|
|
157
|
-
# @param [ Object ] object The object to demongoize.
|
|
158
|
-
#
|
|
159
|
-
# @return [ String ] The object.
|
|
160
|
-
def demongoize(object)
|
|
161
|
-
object.try(:to_s)
|
|
162
|
-
end
|
|
163
|
-
|
|
164
152
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
165
153
|
# type.
|
|
166
154
|
#
|
|
@@ -171,8 +159,9 @@ module Mongoid
|
|
|
171
159
|
#
|
|
172
160
|
# @return [ String ] The object mongoized.
|
|
173
161
|
def mongoize(object)
|
|
174
|
-
|
|
162
|
+
object.try(:to_s)
|
|
175
163
|
end
|
|
164
|
+
alias :demongoize :mongoize
|
|
176
165
|
end
|
|
177
166
|
end
|
|
178
167
|
end
|
|
@@ -16,18 +16,6 @@ module Mongoid
|
|
|
16
16
|
|
|
17
17
|
module ClassMethods
|
|
18
18
|
|
|
19
|
-
# Convert the object from its mongo friendly ruby type to this type.
|
|
20
|
-
#
|
|
21
|
-
# @example Demongoize the object.
|
|
22
|
-
# Symbol.demongoize(object)
|
|
23
|
-
#
|
|
24
|
-
# @param [ Object ] object The object to demongoize.
|
|
25
|
-
#
|
|
26
|
-
# @return [ Symbol ] The object.
|
|
27
|
-
def demongoize(object)
|
|
28
|
-
object.try(:to_sym)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
19
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
32
20
|
# type.
|
|
33
21
|
#
|
|
@@ -36,10 +24,11 @@ module Mongoid
|
|
|
36
24
|
#
|
|
37
25
|
# @param [ Object ] object The object to mongoize.
|
|
38
26
|
#
|
|
39
|
-
# @return [ Symbol ] The object mongoized.
|
|
27
|
+
# @return [ Symbol | nil ] The object mongoized or nil.
|
|
40
28
|
def mongoize(object)
|
|
41
|
-
|
|
29
|
+
object.try(:to_sym)
|
|
42
30
|
end
|
|
31
|
+
alias :demongoize :mongoize
|
|
43
32
|
end
|
|
44
33
|
end
|
|
45
34
|
end
|
|
@@ -14,19 +14,13 @@ module Mongoid
|
|
|
14
14
|
self
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
# Constant for epoch - used when passing invalid times.
|
|
18
|
-
#
|
|
19
|
-
# @deprecated No longer used as a return value from #mongoize passed
|
|
20
|
-
# an invalid time string.
|
|
21
|
-
EPOCH = ::Time.utc(1970, 1, 1, 0, 0, 0)
|
|
22
|
-
|
|
23
17
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
24
18
|
# type.
|
|
25
19
|
#
|
|
26
20
|
# @example Mongoize the object.
|
|
27
21
|
# time.mongoize
|
|
28
22
|
#
|
|
29
|
-
# @return [ Time ] The object mongoized.
|
|
23
|
+
# @return [ Time | nil ] The object mongoized or nil.
|
|
30
24
|
def mongoize
|
|
31
25
|
::Time.mongoize(self)
|
|
32
26
|
end
|
|
@@ -51,14 +45,28 @@ module Mongoid
|
|
|
51
45
|
#
|
|
52
46
|
# @param [ Time ] object The time from Mongo.
|
|
53
47
|
#
|
|
54
|
-
# @return [ Time ] The object as a
|
|
48
|
+
# @return [ Time | nil ] The object as a time.
|
|
55
49
|
def demongoize(object)
|
|
56
|
-
return
|
|
57
|
-
|
|
50
|
+
return if object.blank?
|
|
51
|
+
time = if object.acts_like?(:time)
|
|
52
|
+
Mongoid::Config.use_utc? ? object : object.getlocal
|
|
53
|
+
elsif object.acts_like?(:date)
|
|
54
|
+
::Date.demongoize(object).to_time
|
|
55
|
+
elsif object.is_a?(String)
|
|
56
|
+
begin
|
|
57
|
+
object.__mongoize_time__
|
|
58
|
+
rescue ArgumentError
|
|
59
|
+
nil
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
return if time.nil?
|
|
64
|
+
|
|
58
65
|
if Mongoid::Config.use_activesupport_time_zone?
|
|
59
|
-
|
|
66
|
+
time.in_time_zone(Mongoid.time_zone)
|
|
67
|
+
else
|
|
68
|
+
time
|
|
60
69
|
end
|
|
61
|
-
object
|
|
62
70
|
end
|
|
63
71
|
|
|
64
72
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
@@ -69,11 +77,16 @@ module Mongoid
|
|
|
69
77
|
#
|
|
70
78
|
# @param [ Object ] object The object to mongoize.
|
|
71
79
|
#
|
|
72
|
-
# @return [ Time ] The object mongoized.
|
|
80
|
+
# @return [ Time | nil ] The object mongoized or nil.
|
|
73
81
|
def mongoize(object)
|
|
74
|
-
return
|
|
82
|
+
return if object.blank?
|
|
75
83
|
begin
|
|
76
84
|
time = object.__mongoize_time__
|
|
85
|
+
rescue ArgumentError
|
|
86
|
+
return
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
if time.acts_like?(:time)
|
|
77
90
|
if object.respond_to?(:sec_fraction)
|
|
78
91
|
::Time.at(time.to_i, object.sec_fraction * 10**6).utc
|
|
79
92
|
elsif time.respond_to?(:subsec)
|
|
@@ -81,8 +94,6 @@ module Mongoid
|
|
|
81
94
|
else
|
|
82
95
|
::Time.at(time.to_i, time.usec).utc
|
|
83
96
|
end
|
|
84
|
-
rescue ArgumentError
|
|
85
|
-
nil
|
|
86
97
|
end
|
|
87
98
|
end
|
|
88
99
|
end
|
|
@@ -49,8 +49,7 @@ module Mongoid
|
|
|
49
49
|
#
|
|
50
50
|
# @return [ TimeWithZone ] The object as a date.
|
|
51
51
|
def demongoize(object)
|
|
52
|
-
|
|
53
|
-
::Time.demongoize(object).in_time_zone
|
|
52
|
+
::Time.demongoize(object).try(:in_time_zone)
|
|
54
53
|
end
|
|
55
54
|
|
|
56
55
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
data/lib/mongoid/extensions.rb
CHANGED